aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorentin Chary <corentincj@iksaif.net>2011-02-26 04:20:40 -0500
committerMatthew Garrett <mjg@redhat.com>2011-03-28 06:07:23 -0400
commitb229ece9911cc0b2415d3ffd55d7b2a28d30b614 (patch)
tree50035849ba40776b9040304649867108644f84e8
parentef343491db1770a3af5010ba007167c348cdbe1a (diff)
asus-nb-wmi: Asus Notebooks WMI Driver
Introduce a new driver for Asus Notebooks shipped with a WMI device instead of the old ACPI device. The WMI device is almost the same as the one present in Eee PC, but the event guid and the keymap are different. The keymap comes from asus-laptop module. On Asus notebooks, when you call the WMI device, you always need a 64bit buffer, even if you only want to get the state of a device (tested on a G73). Signed-off-by: Corentin Chary <corentincj@iksaif.net> Signed-off-by: Matthew Garrett <mjg@redhat.com>
-rw-r--r--MAINTAINERS30
-rw-r--r--drivers/platform/x86/Kconfig16
-rw-r--r--drivers/platform/x86/Makefile1
-rw-r--r--drivers/platform/x86/asus-nb-wmi.c98
4 files changed, 117 insertions, 28 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 8aa1cacddbcc..6b4b9cdec370 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1157,14 +1157,14 @@ S: Maintained
1157F: Documentation/hwmon/asc7621 1157F: Documentation/hwmon/asc7621
1158F: drivers/hwmon/asc7621.c 1158F: drivers/hwmon/asc7621.c
1159 1159
1160ASUS ACPI EXTRAS DRIVER 1160ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
1161M: Corentin Chary <corentincj@iksaif.net> 1161M: Corentin Chary <corentincj@iksaif.net>
1162M: Karol Kozimor <sziwan@users.sourceforge.net>
1163L: acpi4asus-user@lists.sourceforge.net 1162L: acpi4asus-user@lists.sourceforge.net
1164L: platform-driver-x86@vger.kernel.org 1163L: platform-driver-x86@vger.kernel.org
1165W: http://acpi4asus.sf.net 1164W: http://acpi4asus.sf.net
1166S: Maintained 1165S: Maintained
1167F: drivers/platform/x86/asus_acpi.c 1166F: drivers/platform/x86/asus*.c
1167F: drivers/platform/x86/eeepc*.c
1168 1168
1169ASUS ASB100 HARDWARE MONITOR DRIVER 1169ASUS ASB100 HARDWARE MONITOR DRIVER
1170M: "Mark M. Hoffman" <mhoffman@lightlink.com> 1170M: "Mark M. Hoffman" <mhoffman@lightlink.com>
@@ -1172,14 +1172,6 @@ L: lm-sensors@lm-sensors.org
1172S: Maintained 1172S: Maintained
1173F: drivers/hwmon/asb100.c 1173F: drivers/hwmon/asb100.c
1174 1174
1175ASUS LAPTOP EXTRAS DRIVER
1176M: Corentin Chary <corentincj@iksaif.net>
1177L: acpi4asus-user@lists.sourceforge.net
1178L: platform-driver-x86@vger.kernel.org
1179W: http://acpi4asus.sf.net
1180S: Maintained
1181F: drivers/platform/x86/asus-laptop.c
1182
1183ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API 1175ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
1184M: Dan Williams <dan.j.williams@intel.com> 1176M: Dan Williams <dan.j.williams@intel.com>
1185W: http://sourceforge.net/projects/xscaleiop 1177W: http://sourceforge.net/projects/xscaleiop
@@ -2414,22 +2406,6 @@ T: git git://git.alsa-project.org/alsa-kernel.git
2414S: Maintained 2406S: Maintained
2415F: sound/usb/misc/ua101.c 2407F: sound/usb/misc/ua101.c
2416 2408
2417EEEPC LAPTOP EXTRAS DRIVER
2418M: Corentin Chary <corentincj@iksaif.net>
2419L: acpi4asus-user@lists.sourceforge.net
2420L: platform-driver-x86@vger.kernel.org
2421W: http://acpi4asus.sf.net
2422S: Maintained
2423F: drivers/platform/x86/eeepc-laptop.c
2424
2425EEEPC WMI EXTRAS DRIVER
2426M: Corentin Chary <corentincj@iksaif.net>
2427L: acpi4asus-user@lists.sourceforge.net
2428L: platform-driver-x86@vger.kernel.org
2429W: http://acpi4asus.sf.net
2430S: Maintained
2431F: drivers/platform/x86/eeepc-wmi.c
2432
2433EFIFB FRAMEBUFFER DRIVER 2409EFIFB FRAMEBUFFER DRIVER
2434L: linux-fbdev@vger.kernel.org 2410L: linux-fbdev@vger.kernel.org
2435M: Peter Jones <pjones@redhat.com> 2411M: Peter Jones <pjones@redhat.com>
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 7fde7ba01ab0..45f4d63c7939 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -465,11 +465,25 @@ config ASUS_WMI
465 select LEDS_CLASS 465 select LEDS_CLASS
466 select NEW_LEDS 466 select NEW_LEDS
467 ---help--- 467 ---help---
468 Say Y here if you have a WMI aware Asus laptop (like Eee PCs). 468 Say Y here if you have a WMI aware Asus laptop (like Eee PCs or new
469 Asus Notebooks).
469 470
470 To compile this driver as a module, choose M here: the module will 471 To compile this driver as a module, choose M here: the module will
471 be called asus-wmi. 472 be called asus-wmi.
472 473
474config ASUS_NB_WMI
475 tristate "Asus Notebook WMI Driver (EXPERIMENTAL)"
476 depends on ASUS_WMI
477 ---help---
478 This is a driver for newer Asus notebooks. It adds extra features
479 like wireless radio and bluetooth control, leds, hotkeys, backlight...
480
481 For more informations, see
482 <file:Documentation/ABI/testing/sysfs-platform-asus-wmi>
483
484 If you have an ACPI-WMI compatible Asus Notebook, say Y or M
485 here.
486
473config EEEPC_WMI 487config EEEPC_WMI
474 tristate "Eee PC WMI Driver (EXPERIMENTAL)" 488 tristate "Eee PC WMI Driver (EXPERIMENTAL)"
475 depends on ASUS_WMI 489 depends on ASUS_WMI
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index f9c83f48c922..0f7b23c0714b 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -4,6 +4,7 @@
4# 4#
5obj-$(CONFIG_ASUS_LAPTOP) += asus-laptop.o 5obj-$(CONFIG_ASUS_LAPTOP) += asus-laptop.o
6obj-$(CONFIG_ASUS_WMI) += asus-wmi.o 6obj-$(CONFIG_ASUS_WMI) += asus-wmi.o
7obj-$(CONFIG_ASUS_NB_WMI) += asus-nb-wmi.o
7obj-$(CONFIG_EEEPC_LAPTOP) += eeepc-laptop.o 8obj-$(CONFIG_EEEPC_LAPTOP) += eeepc-laptop.o
8obj-$(CONFIG_EEEPC_WMI) += eeepc-wmi.o 9obj-$(CONFIG_EEEPC_WMI) += eeepc-wmi.o
9obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o 10obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o
diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c
new file mode 100644
index 000000000000..0580d99b0798
--- /dev/null
+++ b/drivers/platform/x86/asus-nb-wmi.c
@@ -0,0 +1,98 @@
1/*
2 * Asus Notebooks WMI hotkey driver
3 *
4 * Copyright(C) 2010 Corentin Chary <corentin.chary@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
22
23#include <linux/kernel.h>
24#include <linux/module.h>
25#include <linux/init.h>
26#include <linux/input.h>
27#include <linux/input/sparse-keymap.h>
28
29#include "asus-wmi.h"
30
31#define ASUS_NB_WMI_FILE "asus-nb-wmi"
32
33MODULE_AUTHOR("Corentin Chary <corentincj@iksaif.net>");
34MODULE_DESCRIPTION("Asus Notebooks WMI Hotkey Driver");
35MODULE_LICENSE("GPL");
36
37#define ASUS_NB_WMI_EVENT_GUID "0B3CBB35-E3C2-45ED-91C2-4C5A6D195D1C"
38
39MODULE_ALIAS("wmi:"ASUS_NB_WMI_EVENT_GUID);
40
41static const struct key_entry asus_nb_wmi_keymap[] = {
42 { KE_KEY, 0x30, { KEY_VOLUMEUP } },
43 { KE_KEY, 0x31, { KEY_VOLUMEDOWN } },
44 { KE_KEY, 0x32, { KEY_MUTE } },
45 { KE_KEY, 0x33, { KEY_DISPLAYTOGGLE } }, /* LCD on */
46 { KE_KEY, 0x34, { KEY_DISPLAY_OFF } }, /* LCD off */
47 { KE_KEY, 0x40, { KEY_PREVIOUSSONG } },
48 { KE_KEY, 0x41, { KEY_NEXTSONG } },
49 { KE_KEY, 0x43, { KEY_STOPCD } },
50 { KE_KEY, 0x45, { KEY_PLAYPAUSE } },
51 { KE_KEY, 0x4c, { KEY_MEDIA } },
52 { KE_KEY, 0x50, { KEY_EMAIL } },
53 { KE_KEY, 0x51, { KEY_WWW } },
54 { KE_KEY, 0x55, { KEY_CALC } },
55 { KE_KEY, 0x5C, { KEY_F15 } }, /* Power Gear key */
56 { KE_KEY, 0x5D, { KEY_WLAN } },
57 { KE_KEY, 0x5E, { KEY_WLAN } },
58 { KE_KEY, 0x5F, { KEY_WLAN } },
59 { KE_KEY, 0x60, { KEY_SWITCHVIDEOMODE } },
60 { KE_KEY, 0x61, { KEY_SWITCHVIDEOMODE } },
61 { KE_KEY, 0x62, { KEY_SWITCHVIDEOMODE } },
62 { KE_KEY, 0x63, { KEY_SWITCHVIDEOMODE } },
63 { KE_KEY, 0x6B, { KEY_TOUCHPAD_TOGGLE } },
64 { KE_KEY, 0x7E, { KEY_BLUETOOTH } },
65 { KE_KEY, 0x7D, { KEY_BLUETOOTH } },
66 { KE_KEY, 0x82, { KEY_CAMERA } },
67 { KE_KEY, 0x88, { KEY_RFKILL } },
68 { KE_KEY, 0x8A, { KEY_PROG1 } },
69 { KE_KEY, 0x95, { KEY_MEDIA } },
70 { KE_KEY, 0x99, { KEY_PHONE } },
71 { KE_KEY, 0xb5, { KEY_CALC } },
72 { KE_KEY, 0xc4, { KEY_KBDILLUMUP } },
73 { KE_KEY, 0xc5, { KEY_KBDILLUMDOWN } },
74 { KE_END, 0},
75};
76
77static struct asus_wmi_driver asus_nb_wmi_driver = {
78 .name = ASUS_NB_WMI_FILE,
79 .owner = THIS_MODULE,
80 .event_guid = ASUS_NB_WMI_EVENT_GUID,
81 .keymap = asus_nb_wmi_keymap,
82 .input_name = "Asus WMI hotkeys",
83 .input_phys = ASUS_NB_WMI_FILE "/input0",
84};
85
86
87static int __init asus_nb_wmi_init(void)
88{
89 return asus_wmi_register_driver(&asus_nb_wmi_driver);
90}
91
92static void __exit asus_nb_wmi_exit(void)
93{
94 asus_wmi_unregister_driver(&asus_nb_wmi_driver);
95}
96
97module_init(asus_nb_wmi_init);
98module_exit(asus_nb_wmi_exit);