On Wednesday 25 September 2019 18:06:40 Andy Shevchenko wrote: > On Wed, Sep 25, 2019 at 12:48 PM Pacien TRAN-GIRARD > <pacien.trangirard@xxxxxxxxxx> wrote: > > > > This patch adds a quirk disabling keyboard backlight support for the > > Dell Inspiron 1012 and 1018. > > > > Those models wrongly report supporting keyboard backlight control > > features (through SMBIOS tokens) even though they're not equipped with > > a backlit keyboard. This led to broken controls being exposed > > through sysfs by this driver which froze the system when used. > > > > Pali, are you okay with this one? So the real problem is that kbd backlight is not broken, but rather laptop is without backlight keyboard? I thought that just API was broken and keyboard backlight needs to be configured somehow else (via dedicated buttons, etc...). If yes, then I guess that check for quirk should be in kbd_init() function which do detection if keyboard backlight is present or not. And better name for quirk could be "kbd_led_not_present"... > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=107651 > > Signed-off-by: Pacien TRAN-GIRARD <pacien.trangirard@xxxxxxxxxx> > > --- > > drivers/platform/x86/dell-laptop.c | 26 ++++++++++++++++++++++++++ > > 1 file changed, 26 insertions(+) > > > > diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c > > index d27be2836bc2..ffe5abbdadda 100644 > > --- a/drivers/platform/x86/dell-laptop.c > > +++ b/drivers/platform/x86/dell-laptop.c > > @@ -33,6 +33,7 @@ > > > > struct quirk_entry { > > bool touchpad_led; > > + bool kbd_broken_backlight; > > bool kbd_led_levels_off_1; > > bool kbd_missing_ac_tag; > > > > @@ -73,6 +74,10 @@ static struct quirk_entry quirk_dell_latitude_e6410 = { > > .kbd_led_levels_off_1 = true, > > }; > > > > +static struct quirk_entry quirk_dell_inspiron_1012 = { > > + .kbd_broken_backlight = true, > > +}; > > + > > static struct platform_driver platform_driver = { > > .driver = { > > .name = "dell-laptop", > > @@ -310,6 +315,24 @@ static const struct dmi_system_id dell_quirks[] __initconst = { > > }, > > .driver_data = &quirk_dell_latitude_e6410, > > }, > > + { > > + .callback = dmi_matched, > > + .ident = "Dell Inspiron 1012", > > + .matches = { > > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > > + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1012"), > > + }, > > + .driver_data = &quirk_dell_inspiron_1012, > > + }, > > + { > > + .callback = dmi_matched, > > + .ident = "Dell Inspiron 1018", > > + .matches = { > > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > > + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1018"), > > + }, > > + .driver_data = &quirk_dell_inspiron_1012, > > + }, > > { } > > }; > > > > @@ -2040,6 +2063,9 @@ static int __init kbd_led_init(struct device *dev) > > { > > int ret; > > > > + if (quirks && quirks->kbd_broken_backlight) > > + return -ENODEV; > > + > > kbd_init(); > > if (!kbd_led_present) > > return -ENODEV; > > -- > > 2.19.2 > > > -- Pali Rohár pali.rohar@xxxxxxxxx