Re: [PATCH 1/2] platform/x86: asus-wmi: Simplify tablet-mode-switch probing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
>  	}
>  




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux