diff mbox

[v2,1/2] platform/x86: asus-wmi: export function for evaluating WMI methods

Message ID 20180522205542.11991-1-drake@endlessm.com (mailing list archive)
State Superseded, archived
Delegated to: Andy Shevchenko
Headers show

Commit Message

Daniel Drake May 22, 2018, 8:55 p.m. UTC
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.

Signed-off-by: Daniel Drake <drake@endlessm.com>
---
 drivers/platform/x86/asus-wmi.c | 88 ++-----------------------------
 include/linux/asus-wmi.h        | 92 +++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 85 deletions(-)
 create mode 100644 include/linux/asus-wmi.h

Comments

Andy Shevchenko May 31, 2018, 10:40 a.m. UTC | #1
On Tue, May 22, 2018 at 11:55 PM, Daniel Drake <drake@endlessm.com> 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.
>

I'm fine with this as long as Darren and Benjamin agree on the approach.

Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>

One nitpick below.

> Signed-off-by: Daniel Drake <drake@endlessm.com>
> ---
>  drivers/platform/x86/asus-wmi.c | 88 ++-----------------------------
>  include/linux/asus-wmi.h        | 92 +++++++++++++++++++++++++++++++++
>  2 files changed, 95 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 a32c5c00e0e7..1264e8cf472b 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>

Move this to be before dmi.h.

>  #include <acpi/video.h>

>
>  #include "asus-wmi.h"
> @@ -68,89 +69,6 @@ MODULE_LICENSE("GPL");
>  #define NOTIFY_KBD_BRTUP               0xc4
>  #define NOTIFY_KBD_BRTDWN              0xc5
>
> -/* 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
> @@ -291,8 +209,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,
> @@ -328,6 +245,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..a2ab0e2dba3d
> --- /dev/null
> +++ b/include/linux/asus-wmi.h
> @@ -0,0 +1,92 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __LINUX_ASUS_WMI_H
> +#define __LINUX_ASUS_WMI_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
> +
> +int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
> +
> +#endif
> --
> 2.17.0
>
Jiri Kosina June 11, 2018, 12:05 p.m. UTC | #2
On Thu, 31 May 2018, Andy Shevchenko wrote:

> On Tue, May 22, 2018 at 11:55 PM, Daniel Drake <drake@endlessm.com> 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.
> >
> 
> I'm fine with this as long as Darren and Benjamin agree on the approach.
> 
> Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> 
> One nitpick below.

So I'll take both patches (this one with your ack) through hid.git, ok?

Thanks,
Andy Shevchenko June 11, 2018, 1:25 p.m. UTC | #3
On Mon, Jun 11, 2018 at 3:05 PM, Jiri Kosina <jikos@kernel.org> wrote:
> On Thu, 31 May 2018, Andy Shevchenko wrote:
>
>> On Tue, May 22, 2018 at 11:55 PM, Daniel Drake <drake@endlessm.com> 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.
>> >
>>
>> I'm fine with this as long as Darren and Benjamin agree on the approach.
>>
>> Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
>>
>> One nitpick below.
>
> So I'll take both patches (this one with your ack) through hid.git, ok?

As far as you are okay with new dependency to the HID driver
(Personally I don't think it's a good idea, which I commented and
proposed a better approach, i.e. #ifdef in header around exported
function and properly prepared Kconfig dependency line in HID section)
diff mbox

Patch

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index a32c5c00e0e7..1264e8cf472b 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"
@@ -68,89 +69,6 @@  MODULE_LICENSE("GPL");
 #define NOTIFY_KBD_BRTUP		0xc4
 #define NOTIFY_KBD_BRTDWN		0xc5
 
-/* 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
@@ -291,8 +209,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,
@@ -328,6 +245,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..a2ab0e2dba3d
--- /dev/null
+++ b/include/linux/asus-wmi.h
@@ -0,0 +1,92 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __LINUX_ASUS_WMI_H
+#define __LINUX_ASUS_WMI_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
+
+int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
+
+#endif