Re: [PATCH] platform/x86: wmi: change notification handler type

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

 



Hi,

On 10/15/21 21:13, Mikalai Ramanovich wrote:
> Since AML code on some Xiaomi laptops notifies the WMI hotkey with
> 0x20 event, we need ACPI_ALL_NOTIFY here to be able to handle it.
> 
> Signed-off-by: Mikalai Ramanovich <nikolay.romanovich.00@xxxxxxxxx>

Hmm, this is a rather unusual change and I'm worried that it may have
some bad side-effects.

Can you provide the model-number and an acpidump for the laptop where
you need this ? And maybe also point out which bit (which lines after
disassembling) of the DSDT needs this ?

ATM I'm thinking that it might be best to do something like this:

static u32 acpi_wmi_get_handler_type(void)
{
	if (dmi_name_in_vendors("XIAOMI"))
		return ACPI_ALL_NOTIFY;
	else
		return ACPI_DEVICE_NOTIFY;
}

	status = acpi_install_notify_handler(acpi_device->handle,
					     acpi_wmi_get_handler_type(),
					     acpi_wmi_notify_handler,
					     NULL);

(and the same for the remove)

So that we limit this behavior to the Xiaomi case.

Note you may need to change the capitalization of XIAOMI to match
the value used in /sys/class/dmi/id/sys_vendor

Regards,

Hans



> ---
>  drivers/platform/x86/wmi.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index e6997be206f1..c34341f4da76 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -1352,7 +1352,7 @@ static int acpi_wmi_remove(struct platform_device *device)
>  {
>  	struct acpi_device *acpi_device = ACPI_COMPANION(&device->dev);
>  
> -	acpi_remove_notify_handler(acpi_device->handle, ACPI_DEVICE_NOTIFY,
> +	acpi_remove_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY,
>  				   acpi_wmi_notify_handler);
>  	acpi_remove_address_space_handler(acpi_device->handle,
>  				ACPI_ADR_SPACE_EC, &acpi_wmi_ec_space_handler);
> @@ -1385,7 +1385,7 @@ static int acpi_wmi_probe(struct platform_device *device)
>  	}
>  
>  	status = acpi_install_notify_handler(acpi_device->handle,
> -					     ACPI_DEVICE_NOTIFY,
> +					     ACPI_ALL_NOTIFY,
>  					     acpi_wmi_notify_handler,
>  					     NULL);
>  	if (ACPI_FAILURE(status)) {
> @@ -1414,7 +1414,7 @@ static int acpi_wmi_probe(struct platform_device *device)
>  	device_unregister(wmi_bus_dev);
>  
>  err_remove_notify_handler:
> -	acpi_remove_notify_handler(acpi_device->handle, ACPI_DEVICE_NOTIFY,
> +	acpi_remove_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY,
>  				   acpi_wmi_notify_handler);
>  
>  err_remove_ec_handler:
> 




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

  Powered by Linux