Hi, On 8/24/22 17:11, Hans de Goede wrote: > The 3 different tablet-mode-switch initialization paths repeat a lot > of the same code. Add a helper function for this. > > This also makes the error-handling for the kbd_dock_devid case consistent > with the other 2 cases. > > Cc: Luke D. Jones <luke@xxxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> I've added these 2 patches to my review-hans (soon to be for-next) branch now. Regards, Hans > --- > drivers/platform/x86/asus-wmi.c | 55 +++++++++++++-------------------- > 1 file changed, 22 insertions(+), 33 deletions(-) > > diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c > index 5352055848d0..d71daa024752 100644 > --- a/drivers/platform/x86/asus-wmi.c > +++ b/drivers/platform/x86/asus-wmi.c > @@ -484,13 +484,28 @@ static bool asus_wmi_dev_is_present(struct asus_wmi *asus, u32 dev_id) > } > > /* Input **********************************************************************/ > +static void asus_wmi_tablet_sw_init(struct asus_wmi *asus, u32 dev_id, int event_code) > +{ > + struct device *dev = &asus->platform_device->dev; > + int result; > + > + result = asus_wmi_get_devstate_simple(asus, dev_id); > + if (result < 0) > + asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch; > + if (result >= 0) { > + input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); > + input_report_switch(asus->inputdev, SW_TABLET_MODE, result); > + } else if (result == -ENODEV) { > + dev_err(dev, "This device has tablet-mode-switch quirk but got ENODEV checking it. This is a bug."); > + } else { > + dev_err(dev, "Error checking for tablet-mode-switch: %d\n", result); > + } > +} > > static int asus_wmi_input_init(struct asus_wmi *asus) > { > - struct device *dev; > - int err, result; > - > - dev = &asus->platform_device->dev; > + struct device *dev = &asus->platform_device->dev; > + int err; > > asus->inputdev = input_allocate_device(); > if (!asus->inputdev) > @@ -510,39 +525,13 @@ static int asus_wmi_input_init(struct asus_wmi *asus) > case asus_wmi_no_tablet_switch: > break; > case asus_wmi_kbd_dock_devid: > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_KBD_DOCK); > - if (result >= 0) { > - input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); > - input_report_switch(asus->inputdev, SW_TABLET_MODE, !result); > - } else if (result != -ENODEV) { > - dev_err(dev, "Error checking for keyboard-dock: %d\n", result); > - } > + asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_KBD_DOCK, NOTIFY_KBD_DOCK_CHANGE); > break; > case asus_wmi_lid_flip_devid: > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_LID_FLIP); > - if (result < 0) > - asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch; > - if (result >= 0) { > - input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); > - input_report_switch(asus->inputdev, SW_TABLET_MODE, result); > - } else if (result == -ENODEV) { > - dev_err(dev, "This device has lid_flip quirk but got ENODEV checking it. This is a bug."); > - } else { > - dev_err(dev, "Error checking for lid-flip: %d\n", result); > - } > + asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_LID_FLIP, NOTIFY_LID_FLIP); > break; > case asus_wmi_lid_flip_rog_devid: > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_LID_FLIP_ROG); > - if (result < 0) > - asus->driver->quirks->tablet_switch_mode = asus_wmi_no_tablet_switch; > - if (result >= 0) { > - input_set_capability(asus->inputdev, EV_SW, SW_TABLET_MODE); > - input_report_switch(asus->inputdev, SW_TABLET_MODE, result); > - } else if (result == -ENODEV) { > - dev_err(dev, "This device has lid-flip-rog quirk but got ENODEV checking it. This is a bug."); > - } else { > - dev_err(dev, "Error checking for lid-flip: %d\n", result); > - } > + asus_wmi_tablet_sw_init(asus, ASUS_WMI_DEVID_LID_FLIP_ROG, NOTIFY_LID_FLIP_ROG); > break; > } >