aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/asus-laptop.c108
1 files changed, 63 insertions, 45 deletions
diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
index 5b912cc5cbee..b39d2bb3e75b 100644
--- a/drivers/platform/x86/asus-laptop.c
+++ b/drivers/platform/x86/asus-laptop.c
@@ -77,16 +77,16 @@
77 * Flags for hotk status 77 * Flags for hotk status
78 * WL_ON and BT_ON are also used for wireless_status() 78 * WL_ON and BT_ON are also used for wireless_status()
79 */ 79 */
80#define WL_ON 0x01 //internal Wifi 80#define WL_ON 0x01 /* internal Wifi */
81#define BT_ON 0x02 //internal Bluetooth 81#define BT_ON 0x02 /* internal Bluetooth */
82#define MLED_ON 0x04 //mail LED 82#define MLED_ON 0x04 /* mail LED */
83#define TLED_ON 0x08 //touchpad LED 83#define TLED_ON 0x08 /* touchpad LED */
84#define RLED_ON 0x10 //Record LED 84#define RLED_ON 0x10 /* Record LED */
85#define PLED_ON 0x20 //Phone LED 85#define PLED_ON 0x20 /* Phone LED */
86#define GLED_ON 0x40 //Gaming LED 86#define GLED_ON 0x40 /* Gaming LED */
87#define LCD_ON 0x80 //LCD backlight 87#define LCD_ON 0x80 /* LCD backlight */
88#define GPS_ON 0x100 //GPS 88#define GPS_ON 0x100 /* GPS */
89#define KEY_ON 0x200 //Keyboard backlight 89#define KEY_ON 0x200 /* Keyboard backlight */
90 90
91#define ASUS_LOG ASUS_HOTK_FILE ": " 91#define ASUS_LOG ASUS_HOTK_FILE ": "
92#define ASUS_ERR KERN_ERR ASUS_LOG 92#define ASUS_ERR KERN_ERR ASUS_LOG
@@ -99,7 +99,8 @@ MODULE_AUTHOR("Julien Lerouge, Karol Kozimor, Corentin Chary");
99MODULE_DESCRIPTION(ASUS_HOTK_NAME); 99MODULE_DESCRIPTION(ASUS_HOTK_NAME);
100MODULE_LICENSE("GPL"); 100MODULE_LICENSE("GPL");
101 101
102/* WAPF defines the behavior of the Fn+Fx wlan key 102/*
103 * WAPF defines the behavior of the Fn+Fx wlan key
103 * The significance of values is yet to be found, but 104 * The significance of values is yet to be found, but
104 * most of the time: 105 * most of the time:
105 * 0x0 will do nothing 106 * 0x0 will do nothing
@@ -126,7 +127,8 @@ ASUS_HANDLE(gled_set, ASUS_HOTK_PREFIX "GLED"); /* G1, G2 (probably) */
126/* LEDD */ 127/* LEDD */
127ASUS_HANDLE(ledd_set, ASUS_HOTK_PREFIX "SLCM"); 128ASUS_HANDLE(ledd_set, ASUS_HOTK_PREFIX "SLCM");
128 129
129/* Bluetooth and WLAN 130/*
131 * Bluetooth and WLAN
130 * WLED and BLED are not handled like other XLED, because in some dsdt 132 * WLED and BLED are not handled like other XLED, because in some dsdt
131 * they also control the WLAN/Bluetooth device. 133 * they also control the WLAN/Bluetooth device.
132 */ 134 */
@@ -150,22 +152,32 @@ ASUS_HANDLE(lcd_switch, "\\_SB.PCI0.SBRG.EC0._Q10", /* All new models */
150 152
151/* Display */ 153/* Display */
152ASUS_HANDLE(display_set, ASUS_HOTK_PREFIX "SDSP"); 154ASUS_HANDLE(display_set, ASUS_HOTK_PREFIX "SDSP");
153ASUS_HANDLE(display_get, "\\_SB.PCI0.P0P1.VGA.GETD", /* A6B, A6K A6R A7D F3JM L4R M6R A3G 155ASUS_HANDLE(display_get,
154 M6A M6V VX-1 V6J V6V W3Z */ 156 /* A6B, A6K A6R A7D F3JM L4R M6R A3G M6A M6V VX-1 V6J V6V W3Z */
155 "\\_SB.PCI0.P0P2.VGA.GETD", /* A3E A4K, A4D A4L A6J A7J A8J Z71V M9V 157 "\\_SB.PCI0.P0P1.VGA.GETD",
156 S5A M5A z33A W1Jc W2V G1 */ 158 /* A3E A4K, A4D A4L A6J A7J A8J Z71V M9V S5A M5A z33A W1Jc W2V G1 */
157 "\\_SB.PCI0.P0P3.VGA.GETD", /* A6V A6Q */ 159 "\\_SB.PCI0.P0P2.VGA.GETD",
158 "\\_SB.PCI0.P0PA.VGA.GETD", /* A6T, A6M */ 160 /* A6V A6Q */
159 "\\_SB.PCI0.PCI1.VGAC.NMAP", /* L3C */ 161 "\\_SB.PCI0.P0P3.VGA.GETD",
160 "\\_SB.PCI0.VGA.GETD", /* Z96F */ 162 /* A6T, A6M */
161 "\\ACTD", /* A2D */ 163 "\\_SB.PCI0.P0PA.VGA.GETD",
162 "\\ADVG", /* A4G Z71A W1N W5A W5F M2N M3N M5N M6N S1N S5N */ 164 /* L3C */
163 "\\DNXT", /* P30 */ 165 "\\_SB.PCI0.PCI1.VGAC.NMAP",
164 "\\INFB", /* A2H D1 L2D L3D L3H L2E L5D L5C M1A M2E L4L W3V */ 166 /* Z96F */
165 "\\SSTE"); /* A3F A6F A3N A3L M6N W3N W6A */ 167 "\\_SB.PCI0.VGA.GETD",
166 168 /* A2D */
167ASUS_HANDLE(ls_switch, ASUS_HOTK_PREFIX "ALSC"); /* Z71A Z71V */ 169 "\\ACTD",
168ASUS_HANDLE(ls_level, ASUS_HOTK_PREFIX "ALSL"); /* Z71A Z71V */ 170 /* A4G Z71A W1N W5A W5F M2N M3N M5N M6N S1N S5N */
171 "\\ADVG",
172 /* P30 */
173 "\\DNXT",
174 /* A2H D1 L2D L3D L3H L2E L5D L5C M1A M2E L4L W3V */
175 "\\INFB",
176 /* A3F A6F A3N A3L M6N W3N W6A */
177 "\\SSTE");
178
179ASUS_HANDLE(ls_switch, ASUS_HOTK_PREFIX "ALSC"); /* Z71A Z71V */
180ASUS_HANDLE(ls_level, ASUS_HOTK_PREFIX "ALSL"); /* Z71A Z71V */
169 181
170/* GPS */ 182/* GPS */
171/* R2H use different handle for GPS on/off */ 183/* R2H use different handle for GPS on/off */
@@ -182,14 +194,14 @@ ASUS_HANDLE(kled_get, ASUS_HOTK_PREFIX "GLKB");
182 * about the hotk device 194 * about the hotk device
183 */ 195 */
184struct asus_hotk { 196struct asus_hotk {
185 char *name; //laptop name 197 char *name; /* laptop name */
186 struct acpi_device *device; //the device we are in 198 struct acpi_device *device; /* the device we are in */
187 acpi_handle handle; //the handle of the hotk device 199 acpi_handle handle; /* the handle of the hotk device */
188 char status; //status of the hotk, for LEDs, ... 200 char status; /* status of the hotk, for LEDs, ... */
189 u32 ledd_status; //status of the LED display 201 u32 ledd_status; /* status of the LED display */
190 u8 light_level; //light sensor level 202 u8 light_level; /* light sensor level */
191 u8 light_switch; //light sensor switch value 203 u8 light_switch; /* light sensor switch value */
192 u16 event_count[128]; //count for each event TODO make this better 204 u16 event_count[128]; /* count for each event TODO make this better */
193 struct input_dev *inputdev; 205 struct input_dev *inputdev;
194 u16 *keycode_map; 206 u16 *keycode_map;
195}; 207};
@@ -242,10 +254,12 @@ static struct backlight_ops asusbl_ops = {
242 .update_status = update_bl_status, 254 .update_status = update_bl_status,
243}; 255};
244 256
245/* These functions actually update the LED's, and are called from a 257/*
258 * These functions actually update the LED's, and are called from a
246 * workqueue. By doing this as separate work rather than when the LED 259 * workqueue. By doing this as separate work rather than when the LED
247 * subsystem asks, we avoid messing with the Asus ACPI stuff during a 260 * subsystem asks, we avoid messing with the Asus ACPI stuff during a
248 * potentially bad time, such as a timer interrupt. */ 261 * potentially bad time, such as a timer interrupt.
262 */
249static struct workqueue_struct *led_workqueue; 263static struct workqueue_struct *led_workqueue;
250 264
251#define ASUS_LED(object, ledname, max) \ 265#define ASUS_LED(object, ledname, max) \
@@ -318,8 +332,8 @@ static struct key_entry asus_keymap[] = {
318static int write_acpi_int(acpi_handle handle, const char *method, int val, 332static int write_acpi_int(acpi_handle handle, const char *method, int val,
319 struct acpi_buffer *output) 333 struct acpi_buffer *output)
320{ 334{
321 struct acpi_object_list params; //list of input parameters (an int here) 335 struct acpi_object_list params; /* list of input parameters (an int) */
322 union acpi_object in_obj; //the only param we use 336 union acpi_object in_obj; /* the only param we use */
323 acpi_status status; 337 acpi_status status;
324 338
325 if (!handle) 339 if (!handle)
@@ -574,7 +588,7 @@ static ssize_t show_infos(struct device *dev,
574{ 588{
575 int len = 0; 589 int len = 0;
576 unsigned long long temp; 590 unsigned long long temp;
577 char buf[16]; //enough for all info 591 char buf[16]; /* enough for all info */
578 acpi_status rv = AE_OK; 592 acpi_status rv = AE_OK;
579 593
580 /* 594 /*
@@ -734,8 +748,10 @@ static int read_display(void)
734 unsigned long long value = 0; 748 unsigned long long value = 0;
735 acpi_status rv = AE_OK; 749 acpi_status rv = AE_OK;
736 750
737 /* In most of the case, we know how to set the display, but sometime 751 /*
738 we can't read it */ 752 * In most of the case, we know how to set the display, but sometime
753 * we can't read it
754 */
739 if (display_get_handle) { 755 if (display_get_handle) {
740 rv = acpi_evaluate_integer(display_get_handle, NULL, 756 rv = acpi_evaluate_integer(display_get_handle, NULL,
741 NULL, &value); 757 NULL, &value);
@@ -1152,8 +1168,10 @@ static int asus_hotk_get_info(void)
1152 ASUS_HANDLE_INIT(display_set); 1168 ASUS_HANDLE_INIT(display_set);
1153 ASUS_HANDLE_INIT(display_get); 1169 ASUS_HANDLE_INIT(display_get);
1154 1170
1155 /* There is a lot of models with "ALSL", but a few get 1171 /*
1156 a real light sens, so we need to check it. */ 1172 * There is a lot of models with "ALSL", but a few get
1173 * a real light sens, so we need to check it.
1174 */
1157 if (!ASUS_HANDLE_INIT(ls_switch)) 1175 if (!ASUS_HANDLE_INIT(ls_switch))
1158 ASUS_HANDLE_INIT(ls_level); 1176 ASUS_HANDLE_INIT(ls_level);
1159 1177