On 9/5/25 3:09 AM, Sebastian Reichel wrote: > Introduce EC driver for the ThinkPad T14s Gen6 Snapdragon, which is in > theory compatible with ThinkPad ACPI. On Linux the system is booted with > device tree, which is not supported by the ThinkPad ACPI driver > (drivers/platform/x86/lenovo/thinkpad_acpi.c). Also most of the hardware > compatibility is handled via ACPI tables, which are obviously not used > when booting via device tree. Thus adding DT compatibility to the > existing driver is not worth it as there is almost no code sharing. > > The driver currently exposes features, which are not available > via other means: > > * Extra Keys > * System LEDs > * Keyboard Backlight Control > > The driver has been developed by reading the ACPI DSDT. There > are some more features around thermal control, which are not > yet supported by the driver. > > The speaker mute and mic mute LEDs need some additional changes > in the ALSA UCM to be set automatically. > > Tested-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> # on Thinkpad T14S OLED > Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> > Signed-off-by: Sebastian Reichel <sre@xxxxxxxxxx> > --- [...] > +#define THINKPAD_T14S_EC_CMD_ECRD 0x02 > +#define THINKPAD_T14S_EC_CMD_ECWR 0x03 > +#define THINKPAD_T14S_EC_CMD_EVT 0xf0 T14S_EC_ is already a good prefix, imo [...] > +static enum led_brightness thinkpad_t14s_audio_led_get(struct thinkpad_t14s_ec *ec, > + u8 led_bit) > +{ > + unsigned int val; > + int ret; > + > + ret = regmap_read(ec->regmap, THINKPAD_T14S_EC_REG_AUD, &val); > + if (ret < 0) > + return ret; > + > + return !!(val && led_bit) ? LED_ON : LED_OFF; && already returns a boolean but I think you meant to use & here > +} > + > +static enum led_brightness thinkpad_t14s_audio_led_set(struct thinkpad_t14s_ec *ec, > + u8 led_bit, > + enum led_brightness brightness) > +{ > + u8 val = brightness ? led_bit : 0; > + > + return regmap_update_bits(ec->regmap, THINKPAD_T14S_EC_REG_AUD, led_bit, val); regmap_assign_bits() > +static int thinkpad_t14s_input_probe(struct thinkpad_t14s_ec *ec) > +{ > + int ret; > + > + ec->inputdev = devm_input_allocate_device(ec->dev); > + if (!ec->inputdev) > + return -ENOMEM; > + > + ec->inputdev->name = "ThinkPad Extra Buttons"; > + ec->inputdev->phys = "thinkpad/input0"; > + ec->inputdev->id.bustype = BUS_HOST; > + ec->inputdev->dev.parent = ec->dev; > + > + ret = sparse_keymap_setup(ec->inputdev, thinkpad_t14s_keymap, NULL); > + if (ret) > + return ret; > + > + ret = input_register_device(ec->inputdev); > + if (ret < 0) > + return ret; > + > + return 0; You can return input_register_device() directly Konrad