[Acked] [PATCH] hp-wmi: detect "2009 BIOS or later" flag by WMI 0x0d for wireless cmd
Andy Whitcroft
apw at canonical.com
Wed Dec 4 12:46:49 UTC 2013
On Tue, Dec 03, 2013 at 08:25:22PM +0800, Alex Hung wrote:
> Some HP BIOS has dummy WMI 0x05 cmd and it causes wireless set cmd to fail.
> This patch fixes the problem by detecting "2009 BIOS or later" flag which
> determines whether WMI 0x1b is supported and is used to replace WMI 0x05.
>
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
> drivers/platform/x86/hp-wmi.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
> index 1c86fa0..8ba8956 100644
> --- a/drivers/platform/x86/hp-wmi.c
> +++ b/drivers/platform/x86/hp-wmi.c
> @@ -54,6 +54,7 @@ MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
> #define HPWMI_HARDWARE_QUERY 0x4
> #define HPWMI_WIRELESS_QUERY 0x5
> #define HPWMI_HOTKEY_QUERY 0xc
> +#define HPWMI_FEATURE_QUERY 0xd
> #define HPWMI_WIRELESS2_QUERY 0x1b
> #define HPWMI_POSTCODEERROR_QUERY 0x2a
>
> @@ -292,6 +293,17 @@ static int hp_wmi_tablet_state(void)
> return (state & 0x4) ? 1 : 0;
> }
>
> +static int hp_wmi_bios_2009_later(void)
> +{
> + int state = 0;
> + int ret = hp_wmi_perform_query(HPWMI_FEATURE_QUERY, 0, &state,
> + sizeof(state), sizeof(state));
> + if (ret)
> + return ret;
> +
> + return (state & 0x10) ? 1 : 0;
> +}
> +
> static int hp_wmi_set_block(void *data, bool blocked)
> {
> enum hp_wmi_radio r = (enum hp_wmi_radio) data;
> @@ -871,7 +883,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
> gps_rfkill = NULL;
> rfkill2_count = 0;
>
> - if (hp_wmi_rfkill_setup(device))
> + if (hp_wmi_bios_2009_later() || hp_wmi_rfkill_setup(device))
> hp_wmi_rfkill2_setup(device);
>
> err = device_create_file(&device->dev, &dev_attr_display);
So this seems to be h/w specific and presumably very testable. I also
assume this is based on upstream BIOS recommendations:
Acked-by: Andy Whitcroft <apw at canonical.com>
-apw
More information about the kernel-team
mailing list