Re: [PATCH] platform/x86: intel: hid: Always call BTNL ACPI method

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

 



Hi,

On 7/15/23 20:15, Hans de Goede wrote:
> On a HP Elite Dragonfly G2 the 0xcc and 0xcd events for SW_TABLET_MODE
> are only send after the BTNL ACPI method has been called.
> 
> Likely more devices need this, so make the BTNL ACPI method unconditional
> instead of only doing it on devices with a 5 button array.
> 
> Note this also makes the intel_button_array_enable() call in probe()
> unconditional, that function does its own priv->array check. This makes
> the intel_button_array_enable() call in probe() consistent with the calls
> done on suspend/resume which also rely on the priv->array check inside
> the function.
> 
> Reported-by: Maxim Mikityanskiy <maxtram95@xxxxxxxxx>
> Closes: https://lore.kernel.org/platform-driver-x86/20230712175023.31651-1-maxtram95@xxxxxxxxx/
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>

I've added this to the pdx86/fixes branch now.

Regards,

Hans

> ---
>  drivers/platform/x86/intel/hid.c | 21 +++++++++------------
>  1 file changed, 9 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/platform/x86/intel/hid.c b/drivers/platform/x86/intel/hid.c
> index 5632bd3c534a..641f2797406e 100644
> --- a/drivers/platform/x86/intel/hid.c
> +++ b/drivers/platform/x86/intel/hid.c
> @@ -620,7 +620,7 @@ static bool button_array_present(struct platform_device *device)
>  static int intel_hid_probe(struct platform_device *device)
>  {
>  	acpi_handle handle = ACPI_HANDLE(&device->dev);
> -	unsigned long long mode;
> +	unsigned long long mode, dummy;
>  	struct intel_hid_priv *priv;
>  	acpi_status status;
>  	int err;
> @@ -692,18 +692,15 @@ static int intel_hid_probe(struct platform_device *device)
>  	if (err)
>  		goto err_remove_notify;
>  
> -	if (priv->array) {
> -		unsigned long long dummy;
> +	intel_button_array_enable(&device->dev, true);
>  
> -		intel_button_array_enable(&device->dev, true);
> -
> -		/* Call button load method to enable HID power button */
> -		if (!intel_hid_evaluate_method(handle, INTEL_HID_DSM_BTNL_FN,
> -					       &dummy)) {
> -			dev_warn(&device->dev,
> -				 "failed to enable HID power button\n");
> -		}
> -	}
> +	/*
> +	 * Call button load method to enable HID power button
> +	 * Always do this since it activates events on some devices without
> +	 * a button array too.
> +	 */
> +	if (!intel_hid_evaluate_method(handle, INTEL_HID_DSM_BTNL_FN, &dummy))
> +		dev_warn(&device->dev, "failed to enable HID power button\n");
>  
>  	device_init_wakeup(&device->dev, true);
>  	/*




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

  Powered by Linux