diff mbox series

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

Message ID 20181009064056.17478-1-drake@endlessm.com (mailing list archive)
State New, archived
Headers show
Series [v3,1/2] platform/x86: asus-wmi: export function for evaluating WMI methods | expand

Commit Message

Daniel Drake Oct. 9, 2018, 6:40 a.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>
---

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

Comments

Andy Shevchenko Oct. 29, 2018, 2:22 p.m. UTC | #1
On Tue, Oct 9, 2018 at 9:41 AM 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.
>

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@endlessm.com>
> ---
>
> 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
>
Andy Shevchenko Oct. 30, 2018, 9:56 a.m. UTC | #2
On Mon, Oct 29, 2018 at 4:22 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
> On Tue, Oct 9, 2018 at 9:41 AM 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.
> >
>
> 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.

Daniel, I would like to push this forward, but I didn't hear from you.
If any objections to my amendments, please let me know as soon as possible!
Andy Shevchenko Oct. 30, 2018, 10:26 a.m. UTC | #3
On Tue, Oct 30, 2018 at 11:56 AM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
>
> On Mon, Oct 29, 2018 at 4:22 PM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> > On Tue, Oct 9, 2018 at 9:41 AM 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.
> > >
> >
> > 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.
>
> Daniel, I would like to push this forward, but I didn't hear from you.
> If any objections to my amendments, please let me know as soon as possible!

Oops, infradead is not responding.
For your convenience I attached the series here
Andy Shevchenko Oct. 30, 2018, 1:14 p.m. UTC | #4
On Tue, Oct 30, 2018 at 12:26 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
> On Tue, Oct 30, 2018 at 11:56 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> > On Mon, Oct 29, 2018 at 4:22 PM Andy Shevchenko
> > <andy.shevchenko@gmail.com> wrote:

> > > However, I have 4 Fixup patches on top of it, please review and let me
> > > know if you are okay with it.
> >
> > Daniel, I would like to push this forward, but I didn't hear from you.
> > If any objections to my amendments, please let me know as soon as possible!
>
> Oops, infradead is not responding.
> For your convenience I attached the series here

And I completely forgot that we have a mirror on GH
https://github.com/dvhart/linux-pdx86
Daniel Drake Oct. 31, 2018, 4:38 a.m. UTC | #5
On Tue, Oct 30, 2018 at 6:27 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
> > Daniel, I would like to push this forward, but I didn't hear from you.
> > If any objections to my amendments, please let me know as soon as possible!
>
> Oops, infradead is not responding.
> For your convenience I attached the series here

Yes, I was waiting for infradead to appear again.

Your changes look fine, thanks!

Daniel
diff mbox series

Patch

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