Re: [PATCH v3 1/2] platform/x86: asus-wmi: export function for evaluating WMI methods

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

 



On Tue, Oct 9, 2018 at 9:41 AM Daniel Drake <drake@xxxxxxxxxxxx> wrote:
>
> Export asus_wmi_evaluate_method() and related headers for use by other
> drivers.
>
> hid-asus is going to use this to avoid advertising that it has a keyboard
> backlight when the keyboard backlight is controlled via WMI.
>

Thanks for this version. Sorry I didn't answer earlier.

I have pushed it to my review and testing queue, thanks!

However, I have 4 Fixup patches on top of it, please review and let me
know if you are okay with it.

> Signed-off-by: Daniel Drake <drake@xxxxxxxxxxxx>
> ---
>
> Notes:
>     v2: instead of copying asus-wmi code into hid-asus, split it out like this
>
>     v3: add stub function for when asus-wmi is not built
>
>  drivers/platform/x86/asus-wmi.c |  88 +---------------------------
>  include/linux/asus-wmi.h        | 100 ++++++++++++++++++++++++++++++++
>  2 files changed, 103 insertions(+), 85 deletions(-)
>  create mode 100644 include/linux/asus-wmi.h
>
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 2d6e272315a8..9c0752527e1d 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -47,6 +47,7 @@
>  #include <linux/thermal.h>
>  #include <linux/acpi.h>
>  #include <linux/dmi.h>
> +#include <linux/asus-wmi.h>
>  #include <acpi/video.h>
>
>  #include "asus-wmi.h"
> @@ -69,89 +70,6 @@ MODULE_LICENSE("GPL");
>  #define NOTIFY_KBD_BRTDWN              0xc5
>  #define NOTIFY_KBD_BRTTOGGLE           0xc7
>
> -/* WMI Methods */
> -#define ASUS_WMI_METHODID_SPEC         0x43455053 /* BIOS SPECification */
> -#define ASUS_WMI_METHODID_SFBD         0x44424653 /* Set First Boot Device */
> -#define ASUS_WMI_METHODID_GLCD         0x44434C47 /* Get LCD status */
> -#define ASUS_WMI_METHODID_GPID         0x44495047 /* Get Panel ID?? (Resol) */
> -#define ASUS_WMI_METHODID_QMOD         0x444F4D51 /* Quiet MODe */
> -#define ASUS_WMI_METHODID_SPLV         0x4C425053 /* Set Panel Light Value */
> -#define ASUS_WMI_METHODID_AGFN         0x4E464741 /* FaN? */
> -#define ASUS_WMI_METHODID_SFUN         0x4E554653 /* FUNCtionalities */
> -#define ASUS_WMI_METHODID_SDSP         0x50534453 /* Set DiSPlay output */
> -#define ASUS_WMI_METHODID_GDSP         0x50534447 /* Get DiSPlay output */
> -#define ASUS_WMI_METHODID_DEVP         0x50564544 /* DEVice Policy */
> -#define ASUS_WMI_METHODID_OSVR         0x5256534F /* OS VeRsion */
> -#define ASUS_WMI_METHODID_DSTS         0x53544344 /* Device STatuS */
> -#define ASUS_WMI_METHODID_DSTS2                0x53545344 /* Device STatuS #2*/
> -#define ASUS_WMI_METHODID_BSTS         0x53545342 /* Bios STatuS ? */
> -#define ASUS_WMI_METHODID_DEVS         0x53564544 /* DEVice Set */
> -#define ASUS_WMI_METHODID_CFVS         0x53564643 /* CPU Frequency Volt Set */
> -#define ASUS_WMI_METHODID_KBFT         0x5446424B /* KeyBoard FilTer */
> -#define ASUS_WMI_METHODID_INIT         0x54494E49 /* INITialize */
> -#define ASUS_WMI_METHODID_HKEY         0x59454B48 /* Hot KEY ?? */
> -
> -#define ASUS_WMI_UNSUPPORTED_METHOD    0xFFFFFFFE
> -
> -/* Wireless */
> -#define ASUS_WMI_DEVID_HW_SWITCH       0x00010001
> -#define ASUS_WMI_DEVID_WIRELESS_LED    0x00010002
> -#define ASUS_WMI_DEVID_CWAP            0x00010003
> -#define ASUS_WMI_DEVID_WLAN            0x00010011
> -#define ASUS_WMI_DEVID_WLAN_LED                0x00010012
> -#define ASUS_WMI_DEVID_BLUETOOTH       0x00010013
> -#define ASUS_WMI_DEVID_GPS             0x00010015
> -#define ASUS_WMI_DEVID_WIMAX           0x00010017
> -#define ASUS_WMI_DEVID_WWAN3G          0x00010019
> -#define ASUS_WMI_DEVID_UWB             0x00010021
> -
> -/* Leds */
> -/* 0x000200XX and 0x000400XX */
> -#define ASUS_WMI_DEVID_LED1            0x00020011
> -#define ASUS_WMI_DEVID_LED2            0x00020012
> -#define ASUS_WMI_DEVID_LED3            0x00020013
> -#define ASUS_WMI_DEVID_LED4            0x00020014
> -#define ASUS_WMI_DEVID_LED5            0x00020015
> -#define ASUS_WMI_DEVID_LED6            0x00020016
> -
> -/* Backlight and Brightness */
> -#define ASUS_WMI_DEVID_ALS_ENABLE      0x00050001 /* Ambient Light Sensor */
> -#define ASUS_WMI_DEVID_BACKLIGHT       0x00050011
> -#define ASUS_WMI_DEVID_BRIGHTNESS      0x00050012
> -#define ASUS_WMI_DEVID_KBD_BACKLIGHT   0x00050021
> -#define ASUS_WMI_DEVID_LIGHT_SENSOR    0x00050022 /* ?? */
> -#define ASUS_WMI_DEVID_LIGHTBAR                0x00050025
> -
> -/* Misc */
> -#define ASUS_WMI_DEVID_CAMERA          0x00060013
> -
> -/* Storage */
> -#define ASUS_WMI_DEVID_CARDREADER      0x00080013
> -
> -/* Input */
> -#define ASUS_WMI_DEVID_TOUCHPAD                0x00100011
> -#define ASUS_WMI_DEVID_TOUCHPAD_LED    0x00100012
> -
> -/* Fan, Thermal */
> -#define ASUS_WMI_DEVID_THERMAL_CTRL    0x00110011
> -#define ASUS_WMI_DEVID_FAN_CTRL                0x00110012
> -
> -/* Power */
> -#define ASUS_WMI_DEVID_PROCESSOR_STATE 0x00120012
> -
> -/* Deep S3 / Resume on LID open */
> -#define ASUS_WMI_DEVID_LID_RESUME      0x00120031
> -
> -/* DSTS masks */
> -#define ASUS_WMI_DSTS_STATUS_BIT       0x00000001
> -#define ASUS_WMI_DSTS_UNKNOWN_BIT      0x00000002
> -#define ASUS_WMI_DSTS_PRESENCE_BIT     0x00010000
> -#define ASUS_WMI_DSTS_USER_BIT         0x00020000
> -#define ASUS_WMI_DSTS_BIOS_BIT         0x00040000
> -#define ASUS_WMI_DSTS_BRIGHTNESS_MASK  0x000000FF
> -#define ASUS_WMI_DSTS_MAX_BRIGTH_MASK  0x0000FF00
> -#define ASUS_WMI_DSTS_LIGHTBAR_MASK    0x0000000F
> -
>  #define ASUS_FAN_DESC                  "cpu_fan"
>  #define ASUS_FAN_MFUN                  0x13
>  #define ASUS_FAN_SFUN_READ             0x06
> @@ -302,8 +220,7 @@ static void asus_wmi_input_exit(struct asus_wmi *asus)
>         asus->inputdev = NULL;
>  }
>
> -static int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
> -                                   u32 *retval)
> +int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval)
>  {
>         struct bios_args args = {
>                 .arg0 = arg0,
> @@ -339,6 +256,7 @@ static int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
>
>         return 0;
>  }
> +EXPORT_SYMBOL_GPL(asus_wmi_evaluate_method);
>
>  static int asus_wmi_evaluate_method_agfn(const struct acpi_buffer args)
>  {
> diff --git a/include/linux/asus-wmi.h b/include/linux/asus-wmi.h
> new file mode 100644
> index 000000000000..d8f4cc256aa3
> --- /dev/null
> +++ b/include/linux/asus-wmi.h
> @@ -0,0 +1,100 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __LINUX_ASUS_WMI_H
> +#define __LINUX_ASUS_WMI_H
> +
> +#include <linux/errno.h>
> +#include <linux/types.h>
> +
> +/* WMI Methods */
> +#define ASUS_WMI_METHODID_SPEC         0x43455053 /* BIOS SPECification */
> +#define ASUS_WMI_METHODID_SFBD         0x44424653 /* Set First Boot Device */
> +#define ASUS_WMI_METHODID_GLCD         0x44434C47 /* Get LCD status */
> +#define ASUS_WMI_METHODID_GPID         0x44495047 /* Get Panel ID?? (Resol) */
> +#define ASUS_WMI_METHODID_QMOD         0x444F4D51 /* Quiet MODe */
> +#define ASUS_WMI_METHODID_SPLV         0x4C425053 /* Set Panel Light Value */
> +#define ASUS_WMI_METHODID_AGFN         0x4E464741 /* FaN? */
> +#define ASUS_WMI_METHODID_SFUN         0x4E554653 /* FUNCtionalities */
> +#define ASUS_WMI_METHODID_SDSP         0x50534453 /* Set DiSPlay output */
> +#define ASUS_WMI_METHODID_GDSP         0x50534447 /* Get DiSPlay output */
> +#define ASUS_WMI_METHODID_DEVP         0x50564544 /* DEVice Policy */
> +#define ASUS_WMI_METHODID_OSVR         0x5256534F /* OS VeRsion */
> +#define ASUS_WMI_METHODID_DSTS         0x53544344 /* Device STatuS */
> +#define ASUS_WMI_METHODID_DSTS2                0x53545344 /* Device STatuS #2*/
> +#define ASUS_WMI_METHODID_BSTS         0x53545342 /* Bios STatuS ? */
> +#define ASUS_WMI_METHODID_DEVS         0x53564544 /* DEVice Set */
> +#define ASUS_WMI_METHODID_CFVS         0x53564643 /* CPU Frequency Volt Set */
> +#define ASUS_WMI_METHODID_KBFT         0x5446424B /* KeyBoard FilTer */
> +#define ASUS_WMI_METHODID_INIT         0x54494E49 /* INITialize */
> +#define ASUS_WMI_METHODID_HKEY         0x59454B48 /* Hot KEY ?? */
> +
> +#define ASUS_WMI_UNSUPPORTED_METHOD    0xFFFFFFFE
> +
> +/* Wireless */
> +#define ASUS_WMI_DEVID_HW_SWITCH       0x00010001
> +#define ASUS_WMI_DEVID_WIRELESS_LED    0x00010002
> +#define ASUS_WMI_DEVID_CWAP            0x00010003
> +#define ASUS_WMI_DEVID_WLAN            0x00010011
> +#define ASUS_WMI_DEVID_WLAN_LED                0x00010012
> +#define ASUS_WMI_DEVID_BLUETOOTH       0x00010013
> +#define ASUS_WMI_DEVID_GPS             0x00010015
> +#define ASUS_WMI_DEVID_WIMAX           0x00010017
> +#define ASUS_WMI_DEVID_WWAN3G          0x00010019
> +#define ASUS_WMI_DEVID_UWB             0x00010021
> +
> +/* Leds */
> +/* 0x000200XX and 0x000400XX */
> +#define ASUS_WMI_DEVID_LED1            0x00020011
> +#define ASUS_WMI_DEVID_LED2            0x00020012
> +#define ASUS_WMI_DEVID_LED3            0x00020013
> +#define ASUS_WMI_DEVID_LED4            0x00020014
> +#define ASUS_WMI_DEVID_LED5            0x00020015
> +#define ASUS_WMI_DEVID_LED6            0x00020016
> +
> +/* Backlight and Brightness */
> +#define ASUS_WMI_DEVID_ALS_ENABLE      0x00050001 /* Ambient Light Sensor */
> +#define ASUS_WMI_DEVID_BACKLIGHT       0x00050011
> +#define ASUS_WMI_DEVID_BRIGHTNESS      0x00050012
> +#define ASUS_WMI_DEVID_KBD_BACKLIGHT   0x00050021
> +#define ASUS_WMI_DEVID_LIGHT_SENSOR    0x00050022 /* ?? */
> +#define ASUS_WMI_DEVID_LIGHTBAR                0x00050025
> +
> +/* Misc */
> +#define ASUS_WMI_DEVID_CAMERA          0x00060013
> +
> +/* Storage */
> +#define ASUS_WMI_DEVID_CARDREADER      0x00080013
> +
> +/* Input */
> +#define ASUS_WMI_DEVID_TOUCHPAD                0x00100011
> +#define ASUS_WMI_DEVID_TOUCHPAD_LED    0x00100012
> +
> +/* Fan, Thermal */
> +#define ASUS_WMI_DEVID_THERMAL_CTRL    0x00110011
> +#define ASUS_WMI_DEVID_FAN_CTRL                0x00110012
> +
> +/* Power */
> +#define ASUS_WMI_DEVID_PROCESSOR_STATE 0x00120012
> +
> +/* Deep S3 / Resume on LID open */
> +#define ASUS_WMI_DEVID_LID_RESUME      0x00120031
> +
> +/* DSTS masks */
> +#define ASUS_WMI_DSTS_STATUS_BIT       0x00000001
> +#define ASUS_WMI_DSTS_UNKNOWN_BIT      0x00000002
> +#define ASUS_WMI_DSTS_PRESENCE_BIT     0x00010000
> +#define ASUS_WMI_DSTS_USER_BIT         0x00020000
> +#define ASUS_WMI_DSTS_BIOS_BIT         0x00040000
> +#define ASUS_WMI_DSTS_BRIGHTNESS_MASK  0x000000FF
> +#define ASUS_WMI_DSTS_MAX_BRIGTH_MASK  0x0000FF00
> +#define ASUS_WMI_DSTS_LIGHTBAR_MASK    0x0000000F
> +
> +#if defined(CONFIG_ASUS_WMI) || defined(CONFIG_ASUS_WMI_MODULE)
> +int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
> +#else
> +static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
> +                                          u32 *retval)
> +{
> +       return -ENODEV;
> +}
> +#endif
> +#endif
> --
> 2.17.1
>


-- 
With Best Regards,
Andy Shevchenko



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

  Powered by Linux