Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / drivers / platform / x86 / toshiba_acpi.c
1 /*
2  *  toshiba_acpi.c - Toshiba Laptop ACPI Extras
3  *
4  *
5  *  Copyright (C) 2002-2004 John Belmonte
6  *  Copyright (C) 2008 Philip Langdale
7  *  Copyright (C) 2010 Pierre Ducroquet
8  *  Copyright (C) 2014 Azael Avalos
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23  *
24  *
25  *  The devolpment page for this driver is located at
26  *  http://memebeam.org/toys/ToshibaAcpiDriver.
27  *
28  *  Credits:
29  *      Jonathan A. Buzzard - Toshiba HCI info, and critical tips on reverse
30  *              engineering the Windows drivers
31  *      Yasushi Nagato - changes for linux kernel 2.4 -> 2.5
32  *      Rob Miller - TV out and hotkeys help
33  *
34  *
35  *  TODO
36  *
37  */
38
39 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
40
41 #define TOSHIBA_ACPI_VERSION    "0.20"
42 #define PROC_INTERFACE_VERSION  1
43
44 #include <linux/kernel.h>
45 #include <linux/module.h>
46 #include <linux/init.h>
47 #include <linux/types.h>
48 #include <linux/proc_fs.h>
49 #include <linux/seq_file.h>
50 #include <linux/backlight.h>
51 #include <linux/rfkill.h>
52 #include <linux/input.h>
53 #include <linux/input/sparse-keymap.h>
54 #include <linux/leds.h>
55 #include <linux/slab.h>
56 #include <linux/workqueue.h>
57 #include <linux/i8042.h>
58 #include <linux/acpi.h>
59 #include <linux/dmi.h>
60 #include <asm/uaccess.h>
61
62 MODULE_AUTHOR("John Belmonte");
63 MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
64 MODULE_LICENSE("GPL");
65
66 #define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
67
68 /* Scan code for Fn key on TOS1900 models */
69 #define TOS1900_FN_SCAN         0x6e
70
71 /* Toshiba ACPI method paths */
72 #define METHOD_VIDEO_OUT        "\\_SB_.VALX.DSSX"
73
74 /* The Toshiba configuration interface is composed of the HCI and the SCI,
75  * which are defined as follows:
76  *
77  * HCI is Toshiba's "Hardware Control Interface" which is supposed to
78  * be uniform across all their models.  Ideally we would just call
79  * dedicated ACPI methods instead of using this primitive interface.
80  * However the ACPI methods seem to be incomplete in some areas (for
81  * example they allow setting, but not reading, the LCD brightness value),
82  * so this is still useful.
83  *
84  * SCI stands for "System Configuration Interface" which aim is to
85  * conceal differences in hardware between different models.
86  */
87
88 #define TCI_WORDS                       6
89
90 /* operations */
91 #define HCI_SET                         0xff00
92 #define HCI_GET                         0xfe00
93 #define SCI_OPEN                        0xf100
94 #define SCI_CLOSE                       0xf200
95 #define SCI_GET                         0xf300
96 #define SCI_SET                         0xf400
97
98 /* return codes */
99 #define TOS_SUCCESS                     0x0000
100 #define TOS_OPEN_CLOSE_OK               0x0044
101 #define TOS_FAILURE                     0x1000
102 #define TOS_NOT_SUPPORTED               0x8000
103 #define TOS_ALREADY_OPEN                0x8100
104 #define TOS_NOT_OPENED                  0x8200
105 #define TOS_INPUT_DATA_ERROR            0x8300
106 #define TOS_WRITE_PROTECTED             0x8400
107 #define TOS_NOT_PRESENT                 0x8600
108 #define TOS_FIFO_EMPTY                  0x8c00
109 #define TOS_DATA_NOT_AVAILABLE          0x8d20
110 #define TOS_NOT_INITIALIZED             0x8d50
111
112 /* registers */
113 #define HCI_FAN                         0x0004
114 #define HCI_TR_BACKLIGHT                0x0005
115 #define HCI_SYSTEM_EVENT                0x0016
116 #define HCI_VIDEO_OUT                   0x001c
117 #define HCI_HOTKEY_EVENT                0x001e
118 #define HCI_LCD_BRIGHTNESS              0x002a
119 #define HCI_WIRELESS                    0x0056
120 #define HCI_ACCELEROMETER               0x006d
121 #define HCI_KBD_ILLUMINATION            0x0095
122 #define HCI_ECO_MODE                    0x0097
123 #define HCI_ACCELEROMETER2              0x00a6
124 #define SCI_ILLUMINATION                0x014e
125 #define SCI_KBD_ILLUM_STATUS            0x015c
126 #define SCI_TOUCHPAD                    0x050e
127
128 /* field definitions */
129 #define HCI_ACCEL_MASK                  0x7fff
130 #define HCI_HOTKEY_DISABLE              0x0b
131 #define HCI_HOTKEY_ENABLE               0x09
132 #define HCI_LCD_BRIGHTNESS_BITS         3
133 #define HCI_LCD_BRIGHTNESS_SHIFT        (16-HCI_LCD_BRIGHTNESS_BITS)
134 #define HCI_LCD_BRIGHTNESS_LEVELS       (1 << HCI_LCD_BRIGHTNESS_BITS)
135 #define HCI_MISC_SHIFT                  0x10
136 #define HCI_VIDEO_OUT_LCD               0x1
137 #define HCI_VIDEO_OUT_CRT               0x2
138 #define HCI_VIDEO_OUT_TV                0x4
139 #define HCI_WIRELESS_KILL_SWITCH        0x01
140 #define HCI_WIRELESS_BT_PRESENT         0x0f
141 #define HCI_WIRELESS_BT_ATTACH          0x40
142 #define HCI_WIRELESS_BT_POWER           0x80
143 #define SCI_KBD_MODE_MASK               0x1f
144 #define SCI_KBD_MODE_FNZ                0x1
145 #define SCI_KBD_MODE_AUTO               0x2
146 #define SCI_KBD_MODE_ON                 0x8
147 #define SCI_KBD_MODE_OFF                0x10
148 #define SCI_KBD_TIME_MAX                0x3c001a
149
150 struct toshiba_acpi_dev {
151         struct acpi_device *acpi_dev;
152         const char *method_hci;
153         struct rfkill *bt_rfk;
154         struct input_dev *hotkey_dev;
155         struct work_struct hotkey_work;
156         struct backlight_device *backlight_dev;
157         struct led_classdev led_dev;
158         struct led_classdev kbd_led;
159         struct led_classdev eco_led;
160
161         int force_fan;
162         int last_key_event;
163         int key_event_valid;
164         int kbd_type;
165         int kbd_mode;
166         int kbd_time;
167
168         unsigned int illumination_supported:1;
169         unsigned int video_supported:1;
170         unsigned int fan_supported:1;
171         unsigned int system_event_supported:1;
172         unsigned int ntfy_supported:1;
173         unsigned int info_supported:1;
174         unsigned int tr_backlight_supported:1;
175         unsigned int kbd_illum_supported:1;
176         unsigned int kbd_led_registered:1;
177         unsigned int touchpad_supported:1;
178         unsigned int eco_supported:1;
179         unsigned int accelerometer_supported:1;
180         unsigned int sysfs_created:1;
181
182         struct mutex mutex;
183 };
184
185 static struct toshiba_acpi_dev *toshiba_acpi;
186
187 static const struct acpi_device_id toshiba_device_ids[] = {
188         {"TOS6200", 0},
189         {"TOS6208", 0},
190         {"TOS1900", 0},
191         {"", 0},
192 };
193 MODULE_DEVICE_TABLE(acpi, toshiba_device_ids);
194
195 static const struct key_entry toshiba_acpi_keymap[] = {
196         { KE_KEY, 0x9e, { KEY_RFKILL } },
197         { KE_KEY, 0x101, { KEY_MUTE } },
198         { KE_KEY, 0x102, { KEY_ZOOMOUT } },
199         { KE_KEY, 0x103, { KEY_ZOOMIN } },
200         { KE_KEY, 0x10f, { KEY_TAB } },
201         { KE_KEY, 0x12c, { KEY_KBDILLUMTOGGLE } },
202         { KE_KEY, 0x139, { KEY_ZOOMRESET } },
203         { KE_KEY, 0x13b, { KEY_COFFEE } },
204         { KE_KEY, 0x13c, { KEY_BATTERY } },
205         { KE_KEY, 0x13d, { KEY_SLEEP } },
206         { KE_KEY, 0x13e, { KEY_SUSPEND } },
207         { KE_KEY, 0x13f, { KEY_SWITCHVIDEOMODE } },
208         { KE_KEY, 0x140, { KEY_BRIGHTNESSDOWN } },
209         { KE_KEY, 0x141, { KEY_BRIGHTNESSUP } },
210         { KE_KEY, 0x142, { KEY_WLAN } },
211         { KE_KEY, 0x143, { KEY_TOUCHPAD_TOGGLE } },
212         { KE_KEY, 0x17f, { KEY_FN } },
213         { KE_KEY, 0xb05, { KEY_PROG2 } },
214         { KE_KEY, 0xb06, { KEY_WWW } },
215         { KE_KEY, 0xb07, { KEY_MAIL } },
216         { KE_KEY, 0xb30, { KEY_STOP } },
217         { KE_KEY, 0xb31, { KEY_PREVIOUSSONG } },
218         { KE_KEY, 0xb32, { KEY_NEXTSONG } },
219         { KE_KEY, 0xb33, { KEY_PLAYPAUSE } },
220         { KE_KEY, 0xb5a, { KEY_MEDIA } },
221         { KE_IGNORE, 0x1430, { KEY_RESERVED } }, /* Wake from sleep */
222         { KE_IGNORE, 0x1501, { KEY_RESERVED } }, /* Output changed */
223         { KE_IGNORE, 0x1502, { KEY_RESERVED } }, /* HDMI plugged/unplugged */
224         { KE_IGNORE, 0x1ABE, { KEY_RESERVED } }, /* Protection level set */
225         { KE_IGNORE, 0x1ABF, { KEY_RESERVED } }, /* Protection level off */
226         { KE_END, 0 },
227 };
228
229 /* alternative keymap */
230 static const struct dmi_system_id toshiba_alt_keymap_dmi[] = {
231         {
232                 .matches = {
233                         DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
234                         DMI_MATCH(DMI_PRODUCT_NAME, "Satellite M840"),
235                 },
236         },
237         {
238                 .matches = {
239                         DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
240                         DMI_MATCH(DMI_PRODUCT_NAME, "Qosmio X75-A"),
241                 },
242         },
243         {}
244 };
245
246 static const struct key_entry toshiba_acpi_alt_keymap[] = {
247         { KE_KEY, 0x157, { KEY_MUTE } },
248         { KE_KEY, 0x102, { KEY_ZOOMOUT } },
249         { KE_KEY, 0x103, { KEY_ZOOMIN } },
250         { KE_KEY, 0x12c, { KEY_KBDILLUMTOGGLE } },
251         { KE_KEY, 0x139, { KEY_ZOOMRESET } },
252         { KE_KEY, 0x13e, { KEY_SWITCHVIDEOMODE } },
253         { KE_KEY, 0x13c, { KEY_BRIGHTNESSDOWN } },
254         { KE_KEY, 0x13d, { KEY_BRIGHTNESSUP } },
255         { KE_KEY, 0x158, { KEY_WLAN } },
256         { KE_KEY, 0x13f, { KEY_TOUCHPAD_TOGGLE } },
257         { KE_END, 0 },
258 };
259
260 /* utility
261  */
262
263 static __inline__ void _set_bit(u32 * word, u32 mask, int value)
264 {
265         *word = (*word & ~mask) | (mask * value);
266 }
267
268 /* acpi interface wrappers
269  */
270
271 static int write_acpi_int(const char *methodName, int val)
272 {
273         acpi_status status;
274
275         status = acpi_execute_simple_method(NULL, (char *)methodName, val);
276         return (status == AE_OK) ? 0 : -EIO;
277 }
278
279 /* Perform a raw configuration call.  Here we don't care about input or output
280  * buffer format.
281  */
282 static acpi_status tci_raw(struct toshiba_acpi_dev *dev,
283                            const u32 in[TCI_WORDS], u32 out[TCI_WORDS])
284 {
285         struct acpi_object_list params;
286         union acpi_object in_objs[TCI_WORDS];
287         struct acpi_buffer results;
288         union acpi_object out_objs[TCI_WORDS + 1];
289         acpi_status status;
290         int i;
291
292         params.count = TCI_WORDS;
293         params.pointer = in_objs;
294         for (i = 0; i < TCI_WORDS; ++i) {
295                 in_objs[i].type = ACPI_TYPE_INTEGER;
296                 in_objs[i].integer.value = in[i];
297         }
298
299         results.length = sizeof(out_objs);
300         results.pointer = out_objs;
301
302         status = acpi_evaluate_object(dev->acpi_dev->handle,
303                                       (char *)dev->method_hci, &params,
304                                       &results);
305         if ((status == AE_OK) && (out_objs->package.count <= TCI_WORDS)) {
306                 for (i = 0; i < out_objs->package.count; ++i) {
307                         out[i] = out_objs->package.elements[i].integer.value;
308                 }
309         }
310
311         return status;
312 }
313
314 /* common hci tasks (get or set one or two value)
315  *
316  * In addition to the ACPI status, the HCI system returns a result which
317  * may be useful (such as "not supported").
318  */
319
320 static u32 hci_write1(struct toshiba_acpi_dev *dev, u32 reg, u32 in1)
321 {
322         u32 in[TCI_WORDS] = { HCI_SET, reg, in1, 0, 0, 0 };
323         u32 out[TCI_WORDS];
324         acpi_status status = tci_raw(dev, in, out);
325
326         return ACPI_SUCCESS(status) ? out[0] : TOS_FAILURE;
327 }
328
329 static u32 hci_read1(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1)
330 {
331         u32 in[TCI_WORDS] = { HCI_GET, reg, 0, 0, 0, 0 };
332         u32 out[TCI_WORDS];
333         acpi_status status = tci_raw(dev, in, out);
334         if (ACPI_FAILURE(status))
335                 return TOS_FAILURE;
336
337         *out1 = out[2];
338
339         return out[0];
340 }
341
342 static u32 hci_write2(struct toshiba_acpi_dev *dev, u32 reg, u32 in1, u32 in2)
343 {
344         u32 in[TCI_WORDS] = { HCI_SET, reg, in1, in2, 0, 0 };
345         u32 out[TCI_WORDS];
346         acpi_status status = tci_raw(dev, in, out);
347
348         return ACPI_SUCCESS(status) ? out[0] : TOS_FAILURE;
349 }
350
351 static u32 hci_read2(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1, u32 *out2)
352 {
353         u32 in[TCI_WORDS] = { HCI_GET, reg, *out1, *out2, 0, 0 };
354         u32 out[TCI_WORDS];
355         acpi_status status = tci_raw(dev, in, out);
356         if (ACPI_FAILURE(status))
357                 return TOS_FAILURE;
358
359         *out1 = out[2];
360         *out2 = out[3];
361
362         return out[0];
363 }
364
365 /* common sci tasks
366  */
367
368 static int sci_open(struct toshiba_acpi_dev *dev)
369 {
370         u32 in[TCI_WORDS] = { SCI_OPEN, 0, 0, 0, 0, 0 };
371         u32 out[TCI_WORDS];
372         acpi_status status;
373
374         status = tci_raw(dev, in, out);
375         if  (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) {
376                 pr_err("ACPI call to open SCI failed\n");
377                 return 0;
378         }
379
380         if (out[0] == TOS_OPEN_CLOSE_OK) {
381                 return 1;
382         } else if (out[0] == TOS_ALREADY_OPEN) {
383                 pr_info("Toshiba SCI already opened\n");
384                 return 1;
385         } else if (out[0] == TOS_NOT_PRESENT) {
386                 pr_info("Toshiba SCI is not present\n");
387         }
388
389         return 0;
390 }
391
392 static void sci_close(struct toshiba_acpi_dev *dev)
393 {
394         u32 in[TCI_WORDS] = { SCI_CLOSE, 0, 0, 0, 0, 0 };
395         u32 out[TCI_WORDS];
396         acpi_status status;
397
398         status = tci_raw(dev, in, out);
399         if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) {
400                 pr_err("ACPI call to close SCI failed\n");
401                 return;
402         }
403
404         if (out[0] == TOS_OPEN_CLOSE_OK)
405                 return;
406         else if (out[0] == TOS_NOT_OPENED)
407                 pr_info("Toshiba SCI not opened\n");
408         else if (out[0] == TOS_NOT_PRESENT)
409                 pr_info("Toshiba SCI is not present\n");
410 }
411
412 static u32 sci_read(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1)
413 {
414         u32 in[TCI_WORDS] = { SCI_GET, reg, 0, 0, 0, 0 };
415         u32 out[TCI_WORDS];
416         acpi_status status = tci_raw(dev, in, out);
417         if (ACPI_FAILURE(status))
418                 return TOS_FAILURE;
419
420         *out1 = out[2];
421
422         return out[0];
423 }
424
425 static u32 sci_write(struct toshiba_acpi_dev *dev, u32 reg, u32 in1)
426 {
427         u32 in[TCI_WORDS] = { SCI_SET, reg, in1, 0, 0, 0 };
428         u32 out[TCI_WORDS];
429         acpi_status status = tci_raw(dev, in, out);
430
431         return ACPI_SUCCESS(status) ? out[0] : TOS_FAILURE;
432 }
433
434 /* Illumination support */
435 static int toshiba_illumination_available(struct toshiba_acpi_dev *dev)
436 {
437         u32 in[TCI_WORDS] = { SCI_GET, SCI_ILLUMINATION, 0, 0, 0, 0 };
438         u32 out[TCI_WORDS];
439         acpi_status status;
440
441         if (!sci_open(dev))
442                 return 0;
443
444         status = tci_raw(dev, in, out);
445         sci_close(dev);
446         if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) {
447                 pr_err("ACPI call to query Illumination support failed\n");
448                 return 0;
449         } else if (out[0] == TOS_NOT_SUPPORTED) {
450                 pr_info("Illumination device not available\n");
451                 return 0;
452         }
453
454         return 1;
455 }
456
457 static void toshiba_illumination_set(struct led_classdev *cdev,
458                                      enum led_brightness brightness)
459 {
460         struct toshiba_acpi_dev *dev = container_of(cdev,
461                         struct toshiba_acpi_dev, led_dev);
462         u32 state, result;
463
464         /* First request : initialize communication. */
465         if (!sci_open(dev))
466                 return;
467
468         /* Switch the illumination on/off */
469         state = brightness ? 1 : 0;
470         result = sci_write(dev, SCI_ILLUMINATION, state);
471         sci_close(dev);
472         if (result == TOS_FAILURE) {
473                 pr_err("ACPI call for illumination failed\n");
474                 return;
475         } else if (result == TOS_NOT_SUPPORTED) {
476                 pr_info("Illumination not supported\n");
477                 return;
478         }
479 }
480
481 static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
482 {
483         struct toshiba_acpi_dev *dev = container_of(cdev,
484                         struct toshiba_acpi_dev, led_dev);
485         u32 state, result;
486
487         /* First request : initialize communication. */
488         if (!sci_open(dev))
489                 return LED_OFF;
490
491         /* Check the illumination */
492         result = sci_read(dev, SCI_ILLUMINATION, &state);
493         sci_close(dev);
494         if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
495                 pr_err("ACPI call for illumination failed\n");
496                 return LED_OFF;
497         } else if (result == TOS_NOT_SUPPORTED) {
498                 pr_info("Illumination not supported\n");
499                 return LED_OFF;
500         }
501
502         return state ? LED_FULL : LED_OFF;
503 }
504
505 /* KBD Illumination */
506 static int toshiba_kbd_illum_available(struct toshiba_acpi_dev *dev)
507 {
508         u32 in[TCI_WORDS] = { SCI_GET, SCI_KBD_ILLUM_STATUS, 0, 0, 0, 0 };
509         u32 out[TCI_WORDS];
510         acpi_status status;
511
512         if (!sci_open(dev))
513                 return 0;
514
515         status = tci_raw(dev, in, out);
516         sci_close(dev);
517         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
518                 pr_err("ACPI call to query kbd illumination support failed\n");
519                 return 0;
520         } else if (out[0] == TOS_NOT_SUPPORTED) {
521                 pr_info("Keyboard illumination not available\n");
522                 return 0;
523         }
524
525         /* Check for keyboard backlight timeout max value,
526          * previous kbd backlight implementation set this to
527          * 0x3c0003, and now the new implementation set this
528          * to 0x3c001a, use this to distinguish between them
529          */
530         if (out[3] == SCI_KBD_TIME_MAX)
531                 dev->kbd_type = 2;
532         else
533                 dev->kbd_type = 1;
534         /* Get the current keyboard backlight mode */
535         dev->kbd_mode = out[2] & SCI_KBD_MODE_MASK;
536         /* Get the current time (1-60 seconds) */
537         dev->kbd_time = out[2] >> HCI_MISC_SHIFT;
538
539         return 1;
540 }
541
542 static int toshiba_kbd_illum_status_set(struct toshiba_acpi_dev *dev, u32 time)
543 {
544         u32 result;
545
546         if (!sci_open(dev))
547                 return -EIO;
548
549         result = sci_write(dev, SCI_KBD_ILLUM_STATUS, time);
550         sci_close(dev);
551         if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
552                 pr_err("ACPI call to set KBD backlight status failed\n");
553                 return -EIO;
554         } else if (result == TOS_NOT_SUPPORTED) {
555                 pr_info("Keyboard backlight status not supported\n");
556                 return -ENODEV;
557         }
558
559         return 0;
560 }
561
562 static int toshiba_kbd_illum_status_get(struct toshiba_acpi_dev *dev, u32 *time)
563 {
564         u32 result;
565
566         if (!sci_open(dev))
567                 return -EIO;
568
569         result = sci_read(dev, SCI_KBD_ILLUM_STATUS, time);
570         sci_close(dev);
571         if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
572                 pr_err("ACPI call to get KBD backlight status failed\n");
573                 return -EIO;
574         } else if (result == TOS_NOT_SUPPORTED) {
575                 pr_info("Keyboard backlight status not supported\n");
576                 return -ENODEV;
577         }
578
579         return 0;
580 }
581
582 static enum led_brightness toshiba_kbd_backlight_get(struct led_classdev *cdev)
583 {
584         struct toshiba_acpi_dev *dev = container_of(cdev,
585                         struct toshiba_acpi_dev, kbd_led);
586         u32 state, result;
587
588         /* Check the keyboard backlight state */
589         result = hci_read1(dev, HCI_KBD_ILLUMINATION, &state);
590         if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
591                 pr_err("ACPI call to get the keyboard backlight failed\n");
592                 return LED_OFF;
593         } else if (result == TOS_NOT_SUPPORTED) {
594                 pr_info("Keyboard backlight not supported\n");
595                 return LED_OFF;
596         }
597
598         return state ? LED_FULL : LED_OFF;
599 }
600
601 static void toshiba_kbd_backlight_set(struct led_classdev *cdev,
602                                      enum led_brightness brightness)
603 {
604         struct toshiba_acpi_dev *dev = container_of(cdev,
605                         struct toshiba_acpi_dev, kbd_led);
606         u32 state, result;
607
608         /* Set the keyboard backlight state */
609         state = brightness ? 1 : 0;
610         result = hci_write1(dev, HCI_KBD_ILLUMINATION, state);
611         if (result == TOS_FAILURE || result == TOS_INPUT_DATA_ERROR) {
612                 pr_err("ACPI call to set KBD Illumination mode failed\n");
613                 return;
614         } else if (result == TOS_NOT_SUPPORTED) {
615                 pr_info("Keyboard backlight not supported\n");
616                 return;
617         }
618 }
619
620 /* TouchPad support */
621 static int toshiba_touchpad_set(struct toshiba_acpi_dev *dev, u32 state)
622 {
623         u32 result;
624
625         if (!sci_open(dev))
626                 return -EIO;
627
628         result = sci_write(dev, SCI_TOUCHPAD, state);
629         sci_close(dev);
630         if (result == TOS_FAILURE) {
631                 pr_err("ACPI call to set the touchpad failed\n");
632                 return -EIO;
633         } else if (result == TOS_NOT_SUPPORTED) {
634                 return -ENODEV;
635         }
636
637         return 0;
638 }
639
640 static int toshiba_touchpad_get(struct toshiba_acpi_dev *dev, u32 *state)
641 {
642         u32 result;
643
644         if (!sci_open(dev))
645                 return -EIO;
646
647         result = sci_read(dev, SCI_TOUCHPAD, state);
648         sci_close(dev);
649         if (result == TOS_FAILURE) {
650                 pr_err("ACPI call to query the touchpad failed\n");
651                 return -EIO;
652         } else if (result == TOS_NOT_SUPPORTED) {
653                 return -ENODEV;
654         }
655
656         return 0;
657 }
658
659 /* Eco Mode support */
660 static int toshiba_eco_mode_available(struct toshiba_acpi_dev *dev)
661 {
662         acpi_status status;
663         u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 1, 0, 0 };
664         u32 out[TCI_WORDS];
665
666         status = tci_raw(dev, in, out);
667         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
668                 pr_info("ACPI call to get ECO led failed\n");
669                 return 0;
670         }
671
672         return 1;
673 }
674
675 static enum led_brightness toshiba_eco_mode_get_status(struct led_classdev *cdev)
676 {
677         struct toshiba_acpi_dev *dev = container_of(cdev,
678                         struct toshiba_acpi_dev, eco_led);
679         u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 1, 0, 0 };
680         u32 out[TCI_WORDS];
681         acpi_status status;
682
683         status = tci_raw(dev, in, out);
684         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
685                 pr_err("ACPI call to get ECO led failed\n");
686                 return LED_OFF;
687         }
688
689         return out[2] ? LED_FULL : LED_OFF;
690 }
691
692 static void toshiba_eco_mode_set_status(struct led_classdev *cdev,
693                                      enum led_brightness brightness)
694 {
695         struct toshiba_acpi_dev *dev = container_of(cdev,
696                         struct toshiba_acpi_dev, eco_led);
697         u32 in[TCI_WORDS] = { HCI_SET, HCI_ECO_MODE, 0, 1, 0, 0 };
698         u32 out[TCI_WORDS];
699         acpi_status status;
700
701         /* Switch the Eco Mode led on/off */
702         in[2] = (brightness) ? 1 : 0;
703         status = tci_raw(dev, in, out);
704         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
705                 pr_err("ACPI call to set ECO led failed\n");
706                 return;
707         }
708 }
709
710 /* Accelerometer support */
711 static int toshiba_accelerometer_supported(struct toshiba_acpi_dev *dev)
712 {
713         u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER2, 0, 0, 0, 0 };
714         u32 out[TCI_WORDS];
715         acpi_status status;
716
717         /* Check if the accelerometer call exists,
718          * this call also serves as initialization
719          */
720         status = tci_raw(dev, in, out);
721         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
722                 pr_err("ACPI call to query the accelerometer failed\n");
723                 return -EIO;
724         } else if (out[0] == TOS_DATA_NOT_AVAILABLE ||
725                    out[0] == TOS_NOT_INITIALIZED) {
726                 pr_err("Accelerometer not initialized\n");
727                 return -EIO;
728         } else if (out[0] == TOS_NOT_SUPPORTED) {
729                 pr_info("Accelerometer not supported\n");
730                 return -ENODEV;
731         }
732
733         return 0;
734 }
735
736 static int toshiba_accelerometer_get(struct toshiba_acpi_dev *dev,
737                                       u32 *xy, u32 *z)
738 {
739         u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER, 0, 1, 0, 0 };
740         u32 out[TCI_WORDS];
741         acpi_status status;
742
743         /* Check the Accelerometer status */
744         status = tci_raw(dev, in, out);
745         if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
746                 pr_err("ACPI call to query the accelerometer failed\n");
747                 return -EIO;
748         }
749
750         *xy = out[2];
751         *z = out[4];
752
753         return 0;
754 }
755
756 /* Bluetooth rfkill handlers */
757
758 static u32 hci_get_bt_present(struct toshiba_acpi_dev *dev, bool *present)
759 {
760         u32 hci_result;
761         u32 value, value2;
762
763         value = 0;
764         value2 = 0;
765         hci_result = hci_read2(dev, HCI_WIRELESS, &value, &value2);
766         if (hci_result == TOS_SUCCESS)
767                 *present = (value & HCI_WIRELESS_BT_PRESENT) ? true : false;
768
769         return hci_result;
770 }
771
772 static u32 hci_get_radio_state(struct toshiba_acpi_dev *dev, bool *radio_state)
773 {
774         u32 hci_result;
775         u32 value, value2;
776
777         value = 0;
778         value2 = 0x0001;
779         hci_result = hci_read2(dev, HCI_WIRELESS, &value, &value2);
780
781         *radio_state = value & HCI_WIRELESS_KILL_SWITCH;
782         return hci_result;
783 }
784
785 static int bt_rfkill_set_block(void *data, bool blocked)
786 {
787         struct toshiba_acpi_dev *dev = data;
788         u32 result1, result2;
789         u32 value;
790         int err;
791         bool radio_state;
792
793         value = (blocked == false);
794
795         mutex_lock(&dev->mutex);
796         if (hci_get_radio_state(dev, &radio_state) != TOS_SUCCESS) {
797                 err = -EIO;
798                 goto out;
799         }
800
801         if (!radio_state) {
802                 err = 0;
803                 goto out;
804         }
805
806         result1 = hci_write2(dev, HCI_WIRELESS, value, HCI_WIRELESS_BT_POWER);
807         result2 = hci_write2(dev, HCI_WIRELESS, value, HCI_WIRELESS_BT_ATTACH);
808
809         if (result1 != TOS_SUCCESS || result2 != TOS_SUCCESS)
810                 err = -EIO;
811         else
812                 err = 0;
813  out:
814         mutex_unlock(&dev->mutex);
815         return err;
816 }
817
818 static void bt_rfkill_poll(struct rfkill *rfkill, void *data)
819 {
820         bool new_rfk_state;
821         bool value;
822         u32 hci_result;
823         struct toshiba_acpi_dev *dev = data;
824
825         mutex_lock(&dev->mutex);
826
827         hci_result = hci_get_radio_state(dev, &value);
828         if (hci_result != TOS_SUCCESS) {
829                 /* Can't do anything useful */
830                 mutex_unlock(&dev->mutex);
831                 return;
832         }
833
834         new_rfk_state = value;
835
836         mutex_unlock(&dev->mutex);
837
838         if (rfkill_set_hw_state(rfkill, !new_rfk_state))
839                 bt_rfkill_set_block(data, true);
840 }
841
842 static const struct rfkill_ops toshiba_rfk_ops = {
843         .set_block = bt_rfkill_set_block,
844         .poll = bt_rfkill_poll,
845 };
846
847 static int get_tr_backlight_status(struct toshiba_acpi_dev *dev, bool *enabled)
848 {
849         u32 hci_result;
850         u32 status;
851
852         hci_result = hci_read1(dev, HCI_TR_BACKLIGHT, &status);
853         *enabled = !status;
854         return hci_result == TOS_SUCCESS ? 0 : -EIO;
855 }
856
857 static int set_tr_backlight_status(struct toshiba_acpi_dev *dev, bool enable)
858 {
859         u32 hci_result;
860         u32 value = !enable;
861
862         hci_result = hci_write1(dev, HCI_TR_BACKLIGHT, value);
863         return hci_result == TOS_SUCCESS ? 0 : -EIO;
864 }
865
866 static struct proc_dir_entry *toshiba_proc_dir /*= 0*/ ;
867
868 static int __get_lcd_brightness(struct toshiba_acpi_dev *dev)
869 {
870         u32 hci_result;
871         u32 value;
872         int brightness = 0;
873
874         if (dev->tr_backlight_supported) {
875                 bool enabled;
876                 int ret = get_tr_backlight_status(dev, &enabled);
877                 if (ret)
878                         return ret;
879                 if (enabled)
880                         return 0;
881                 brightness++;
882         }
883
884         hci_result = hci_read1(dev, HCI_LCD_BRIGHTNESS, &value);
885         if (hci_result == TOS_SUCCESS)
886                 return brightness + (value >> HCI_LCD_BRIGHTNESS_SHIFT);
887
888         return -EIO;
889 }
890
891 static int get_lcd_brightness(struct backlight_device *bd)
892 {
893         struct toshiba_acpi_dev *dev = bl_get_data(bd);
894         return __get_lcd_brightness(dev);
895 }
896
897 static int lcd_proc_show(struct seq_file *m, void *v)
898 {
899         struct toshiba_acpi_dev *dev = m->private;
900         int value;
901         int levels;
902
903         if (!dev->backlight_dev)
904                 return -ENODEV;
905
906         levels = dev->backlight_dev->props.max_brightness + 1;
907         value = get_lcd_brightness(dev->backlight_dev);
908         if (value >= 0) {
909                 seq_printf(m, "brightness:              %d\n", value);
910                 seq_printf(m, "brightness_levels:       %d\n", levels);
911                 return 0;
912         }
913
914         pr_err("Error reading LCD brightness\n");
915         return -EIO;
916 }
917
918 static int lcd_proc_open(struct inode *inode, struct file *file)
919 {
920         return single_open(file, lcd_proc_show, PDE_DATA(inode));
921 }
922
923 static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value)
924 {
925         u32 in[TCI_WORDS] = { HCI_SET, HCI_LCD_BRIGHTNESS, 0, 0, 0, 0 };
926         u32 out[TCI_WORDS];
927         acpi_status status;
928
929         if (dev->tr_backlight_supported) {
930                 bool enable = !value;
931                 int ret = set_tr_backlight_status(dev, enable);
932                 if (ret)
933                         return ret;
934                 if (value)
935                         value--;
936         }
937
938         in[2] = value << HCI_LCD_BRIGHTNESS_SHIFT;
939         status = tci_raw(dev, in, out);
940         if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) {
941                 pr_err("ACPI call to set brightness failed");
942                 return -EIO;
943         }
944         /* Extra check for "incomplete" backlight method, where the AML code
945          * doesn't check for HCI_SET or HCI_GET and returns TOS_SUCCESS,
946          * the actual brightness, and in some cases the max brightness.
947          */
948         if (out[2] > 0  || out[3] == 0xE000)
949                 return -ENODEV;
950
951         return out[0] == TOS_SUCCESS ? 0 : -EIO;
952 }
953
954 static int set_lcd_status(struct backlight_device *bd)
955 {
956         struct toshiba_acpi_dev *dev = bl_get_data(bd);
957         return set_lcd_brightness(dev, bd->props.brightness);
958 }
959
960 static ssize_t lcd_proc_write(struct file *file, const char __user *buf,
961                               size_t count, loff_t *pos)
962 {
963         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
964         char cmd[42];
965         size_t len;
966         int value;
967         int ret;
968         int levels = dev->backlight_dev->props.max_brightness + 1;
969
970         len = min(count, sizeof(cmd) - 1);
971         if (copy_from_user(cmd, buf, len))
972                 return -EFAULT;
973         cmd[len] = '\0';
974
975         if (sscanf(cmd, " brightness : %i", &value) == 1 &&
976             value >= 0 && value < levels) {
977                 ret = set_lcd_brightness(dev, value);
978                 if (ret == 0)
979                         ret = count;
980         } else {
981                 ret = -EINVAL;
982         }
983         return ret;
984 }
985
986 static const struct file_operations lcd_proc_fops = {
987         .owner          = THIS_MODULE,
988         .open           = lcd_proc_open,
989         .read           = seq_read,
990         .llseek         = seq_lseek,
991         .release        = single_release,
992         .write          = lcd_proc_write,
993 };
994
995 static int get_video_status(struct toshiba_acpi_dev *dev, u32 *status)
996 {
997         u32 hci_result;
998
999         hci_result = hci_read1(dev, HCI_VIDEO_OUT, status);
1000         return hci_result == TOS_SUCCESS ? 0 : -EIO;
1001 }
1002
1003 static int video_proc_show(struct seq_file *m, void *v)
1004 {
1005         struct toshiba_acpi_dev *dev = m->private;
1006         u32 value;
1007         int ret;
1008
1009         ret = get_video_status(dev, &value);
1010         if (!ret) {
1011                 int is_lcd = (value & HCI_VIDEO_OUT_LCD) ? 1 : 0;
1012                 int is_crt = (value & HCI_VIDEO_OUT_CRT) ? 1 : 0;
1013                 int is_tv = (value & HCI_VIDEO_OUT_TV) ? 1 : 0;
1014                 seq_printf(m, "lcd_out:                 %d\n", is_lcd);
1015                 seq_printf(m, "crt_out:                 %d\n", is_crt);
1016                 seq_printf(m, "tv_out:                  %d\n", is_tv);
1017         }
1018
1019         return ret;
1020 }
1021
1022 static int video_proc_open(struct inode *inode, struct file *file)
1023 {
1024         return single_open(file, video_proc_show, PDE_DATA(inode));
1025 }
1026
1027 static ssize_t video_proc_write(struct file *file, const char __user *buf,
1028                                 size_t count, loff_t *pos)
1029 {
1030         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1031         char *cmd, *buffer;
1032         int ret;
1033         int value;
1034         int remain = count;
1035         int lcd_out = -1;
1036         int crt_out = -1;
1037         int tv_out = -1;
1038         u32 video_out;
1039
1040         cmd = kmalloc(count + 1, GFP_KERNEL);
1041         if (!cmd)
1042                 return -ENOMEM;
1043         if (copy_from_user(cmd, buf, count)) {
1044                 kfree(cmd);
1045                 return -EFAULT;
1046         }
1047         cmd[count] = '\0';
1048
1049         buffer = cmd;
1050
1051         /* scan expression.  Multiple expressions may be delimited with ;
1052          *
1053          *  NOTE: to keep scanning simple, invalid fields are ignored
1054          */
1055         while (remain) {
1056                 if (sscanf(buffer, " lcd_out : %i", &value) == 1)
1057                         lcd_out = value & 1;
1058                 else if (sscanf(buffer, " crt_out : %i", &value) == 1)
1059                         crt_out = value & 1;
1060                 else if (sscanf(buffer, " tv_out : %i", &value) == 1)
1061                         tv_out = value & 1;
1062                 /* advance to one character past the next ; */
1063                 do {
1064                         ++buffer;
1065                         --remain;
1066                 }
1067                 while (remain && *(buffer - 1) != ';');
1068         }
1069
1070         kfree(cmd);
1071
1072         ret = get_video_status(dev, &video_out);
1073         if (!ret) {
1074                 unsigned int new_video_out = video_out;
1075                 if (lcd_out != -1)
1076                         _set_bit(&new_video_out, HCI_VIDEO_OUT_LCD, lcd_out);
1077                 if (crt_out != -1)
1078                         _set_bit(&new_video_out, HCI_VIDEO_OUT_CRT, crt_out);
1079                 if (tv_out != -1)
1080                         _set_bit(&new_video_out, HCI_VIDEO_OUT_TV, tv_out);
1081                 /* To avoid unnecessary video disruption, only write the new
1082                  * video setting if something changed. */
1083                 if (new_video_out != video_out)
1084                         ret = write_acpi_int(METHOD_VIDEO_OUT, new_video_out);
1085         }
1086
1087         return ret ? ret : count;
1088 }
1089
1090 static const struct file_operations video_proc_fops = {
1091         .owner          = THIS_MODULE,
1092         .open           = video_proc_open,
1093         .read           = seq_read,
1094         .llseek         = seq_lseek,
1095         .release        = single_release,
1096         .write          = video_proc_write,
1097 };
1098
1099 static int get_fan_status(struct toshiba_acpi_dev *dev, u32 *status)
1100 {
1101         u32 hci_result;
1102
1103         hci_result = hci_read1(dev, HCI_FAN, status);
1104         return hci_result == TOS_SUCCESS ? 0 : -EIO;
1105 }
1106
1107 static int fan_proc_show(struct seq_file *m, void *v)
1108 {
1109         struct toshiba_acpi_dev *dev = m->private;
1110         int ret;
1111         u32 value;
1112
1113         ret = get_fan_status(dev, &value);
1114         if (!ret) {
1115                 seq_printf(m, "running:                 %d\n", (value > 0));
1116                 seq_printf(m, "force_on:                %d\n", dev->force_fan);
1117         }
1118
1119         return ret;
1120 }
1121
1122 static int fan_proc_open(struct inode *inode, struct file *file)
1123 {
1124         return single_open(file, fan_proc_show, PDE_DATA(inode));
1125 }
1126
1127 static ssize_t fan_proc_write(struct file *file, const char __user *buf,
1128                               size_t count, loff_t *pos)
1129 {
1130         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1131         char cmd[42];
1132         size_t len;
1133         int value;
1134         u32 hci_result;
1135
1136         len = min(count, sizeof(cmd) - 1);
1137         if (copy_from_user(cmd, buf, len))
1138                 return -EFAULT;
1139         cmd[len] = '\0';
1140
1141         if (sscanf(cmd, " force_on : %i", &value) == 1 &&
1142             value >= 0 && value <= 1) {
1143                 hci_result = hci_write1(dev, HCI_FAN, value);
1144                 if (hci_result != TOS_SUCCESS)
1145                         return -EIO;
1146                 else
1147                         dev->force_fan = value;
1148         } else {
1149                 return -EINVAL;
1150         }
1151
1152         return count;
1153 }
1154
1155 static const struct file_operations fan_proc_fops = {
1156         .owner          = THIS_MODULE,
1157         .open           = fan_proc_open,
1158         .read           = seq_read,
1159         .llseek         = seq_lseek,
1160         .release        = single_release,
1161         .write          = fan_proc_write,
1162 };
1163
1164 static int keys_proc_show(struct seq_file *m, void *v)
1165 {
1166         struct toshiba_acpi_dev *dev = m->private;
1167         u32 hci_result;
1168         u32 value;
1169
1170         if (!dev->key_event_valid && dev->system_event_supported) {
1171                 hci_result = hci_read1(dev, HCI_SYSTEM_EVENT, &value);
1172                 if (hci_result == TOS_SUCCESS) {
1173                         dev->key_event_valid = 1;
1174                         dev->last_key_event = value;
1175                 } else if (hci_result == TOS_FIFO_EMPTY) {
1176                         /* better luck next time */
1177                 } else if (hci_result == TOS_NOT_SUPPORTED) {
1178                         /* This is a workaround for an unresolved issue on
1179                          * some machines where system events sporadically
1180                          * become disabled. */
1181                         hci_result = hci_write1(dev, HCI_SYSTEM_EVENT, 1);
1182                         pr_notice("Re-enabled hotkeys\n");
1183                 } else {
1184                         pr_err("Error reading hotkey status\n");
1185                         return -EIO;
1186                 }
1187         }
1188
1189         seq_printf(m, "hotkey_ready:            %d\n", dev->key_event_valid);
1190         seq_printf(m, "hotkey:                  0x%04x\n", dev->last_key_event);
1191         return 0;
1192 }
1193
1194 static int keys_proc_open(struct inode *inode, struct file *file)
1195 {
1196         return single_open(file, keys_proc_show, PDE_DATA(inode));
1197 }
1198
1199 static ssize_t keys_proc_write(struct file *file, const char __user *buf,
1200                                size_t count, loff_t *pos)
1201 {
1202         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1203         char cmd[42];
1204         size_t len;
1205         int value;
1206
1207         len = min(count, sizeof(cmd) - 1);
1208         if (copy_from_user(cmd, buf, len))
1209                 return -EFAULT;
1210         cmd[len] = '\0';
1211
1212         if (sscanf(cmd, " hotkey_ready : %i", &value) == 1 && value == 0) {
1213                 dev->key_event_valid = 0;
1214         } else {
1215                 return -EINVAL;
1216         }
1217
1218         return count;
1219 }
1220
1221 static const struct file_operations keys_proc_fops = {
1222         .owner          = THIS_MODULE,
1223         .open           = keys_proc_open,
1224         .read           = seq_read,
1225         .llseek         = seq_lseek,
1226         .release        = single_release,
1227         .write          = keys_proc_write,
1228 };
1229
1230 static int version_proc_show(struct seq_file *m, void *v)
1231 {
1232         seq_printf(m, "driver:                  %s\n", TOSHIBA_ACPI_VERSION);
1233         seq_printf(m, "proc_interface:          %d\n", PROC_INTERFACE_VERSION);
1234         return 0;
1235 }
1236
1237 static int version_proc_open(struct inode *inode, struct file *file)
1238 {
1239         return single_open(file, version_proc_show, PDE_DATA(inode));
1240 }
1241
1242 static const struct file_operations version_proc_fops = {
1243         .owner          = THIS_MODULE,
1244         .open           = version_proc_open,
1245         .read           = seq_read,
1246         .llseek         = seq_lseek,
1247         .release        = single_release,
1248 };
1249
1250 /* proc and module init
1251  */
1252
1253 #define PROC_TOSHIBA            "toshiba"
1254
1255 static void create_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
1256 {
1257         if (dev->backlight_dev)
1258                 proc_create_data("lcd", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1259                                  &lcd_proc_fops, dev);
1260         if (dev->video_supported)
1261                 proc_create_data("video", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1262                                  &video_proc_fops, dev);
1263         if (dev->fan_supported)
1264                 proc_create_data("fan", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1265                                  &fan_proc_fops, dev);
1266         if (dev->hotkey_dev)
1267                 proc_create_data("keys", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1268                                  &keys_proc_fops, dev);
1269         proc_create_data("version", S_IRUGO, toshiba_proc_dir,
1270                          &version_proc_fops, dev);
1271 }
1272
1273 static void remove_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
1274 {
1275         if (dev->backlight_dev)
1276                 remove_proc_entry("lcd", toshiba_proc_dir);
1277         if (dev->video_supported)
1278                 remove_proc_entry("video", toshiba_proc_dir);
1279         if (dev->fan_supported)
1280                 remove_proc_entry("fan", toshiba_proc_dir);
1281         if (dev->hotkey_dev)
1282                 remove_proc_entry("keys", toshiba_proc_dir);
1283         remove_proc_entry("version", toshiba_proc_dir);
1284 }
1285
1286 static const struct backlight_ops toshiba_backlight_data = {
1287         .options = BL_CORE_SUSPENDRESUME,
1288         .get_brightness = get_lcd_brightness,
1289         .update_status  = set_lcd_status,
1290 };
1291
1292 /*
1293  * Sysfs files
1294  */
1295 static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
1296                                          struct device_attribute *attr,
1297                                          const char *buf, size_t count);
1298 static ssize_t toshiba_kbd_bl_mode_show(struct device *dev,
1299                                         struct device_attribute *attr,
1300                                         char *buf);
1301 static ssize_t toshiba_kbd_type_show(struct device *dev,
1302                                      struct device_attribute *attr,
1303                                      char *buf);
1304 static ssize_t toshiba_available_kbd_modes_show(struct device *dev,
1305                                         struct device_attribute *attr,
1306                                         char *buf);
1307 static ssize_t toshiba_kbd_bl_timeout_store(struct device *dev,
1308                                             struct device_attribute *attr,
1309                                             const char *buf, size_t count);
1310 static ssize_t toshiba_kbd_bl_timeout_show(struct device *dev,
1311                                            struct device_attribute *attr,
1312                                            char *buf);
1313 static ssize_t toshiba_touchpad_store(struct device *dev,
1314                                       struct device_attribute *attr,
1315                                       const char *buf, size_t count);
1316 static ssize_t toshiba_touchpad_show(struct device *dev,
1317                                      struct device_attribute *attr,
1318                                      char *buf);
1319 static ssize_t toshiba_position_show(struct device *dev,
1320                                      struct device_attribute *attr,
1321                                      char *buf);
1322
1323 static DEVICE_ATTR(kbd_backlight_mode, S_IRUGO | S_IWUSR,
1324                    toshiba_kbd_bl_mode_show, toshiba_kbd_bl_mode_store);
1325 static DEVICE_ATTR(kbd_type, S_IRUGO, toshiba_kbd_type_show, NULL);
1326 static DEVICE_ATTR(available_kbd_modes, S_IRUGO,
1327                    toshiba_available_kbd_modes_show, NULL);
1328 static DEVICE_ATTR(kbd_backlight_timeout, S_IRUGO | S_IWUSR,
1329                    toshiba_kbd_bl_timeout_show, toshiba_kbd_bl_timeout_store);
1330 static DEVICE_ATTR(touchpad, S_IRUGO | S_IWUSR,
1331                    toshiba_touchpad_show, toshiba_touchpad_store);
1332 static DEVICE_ATTR(position, S_IRUGO, toshiba_position_show, NULL);
1333
1334 static struct attribute *toshiba_attributes[] = {
1335         &dev_attr_kbd_backlight_mode.attr,
1336         &dev_attr_kbd_type.attr,
1337         &dev_attr_available_kbd_modes.attr,
1338         &dev_attr_kbd_backlight_timeout.attr,
1339         &dev_attr_touchpad.attr,
1340         &dev_attr_position.attr,
1341         NULL,
1342 };
1343
1344 static umode_t toshiba_sysfs_is_visible(struct kobject *,
1345                                         struct attribute *, int);
1346
1347 static struct attribute_group toshiba_attr_group = {
1348         .is_visible = toshiba_sysfs_is_visible,
1349         .attrs = toshiba_attributes,
1350 };
1351
1352 static ssize_t toshiba_kbd_bl_mode_store(struct device *dev,
1353                                          struct device_attribute *attr,
1354                                          const char *buf, size_t count)
1355 {
1356         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1357         int mode;
1358         int time;
1359         int ret;
1360
1361
1362         ret = kstrtoint(buf, 0, &mode);
1363         if (ret)
1364                 return ret;
1365
1366         /* Check for supported modes depending on keyboard backlight type */
1367         if (toshiba->kbd_type == 1) {
1368                 /* Type 1 supports SCI_KBD_MODE_FNZ and SCI_KBD_MODE_AUTO */
1369                 if (mode != SCI_KBD_MODE_FNZ && mode != SCI_KBD_MODE_AUTO)
1370                         return -EINVAL;
1371         } else if (toshiba->kbd_type == 2) {
1372                 /* Type 2 doesn't support SCI_KBD_MODE_FNZ */
1373                 if (mode != SCI_KBD_MODE_AUTO && mode != SCI_KBD_MODE_ON &&
1374                     mode != SCI_KBD_MODE_OFF)
1375                         return -EINVAL;
1376         }
1377
1378         /* Set the Keyboard Backlight Mode where:
1379          *      Auto - KBD backlight turns off automatically in given time
1380          *      FN-Z - KBD backlight "toggles" when hotkey pressed
1381          *      ON   - KBD backlight is always on
1382          *      OFF  - KBD backlight is always off
1383          */
1384
1385         /* Only make a change if the actual mode has changed */
1386         if (toshiba->kbd_mode != mode) {
1387                 /* Shift the time to "base time" (0x3c0000 == 60 seconds) */
1388                 time = toshiba->kbd_time << HCI_MISC_SHIFT;
1389
1390                 /* OR the "base time" to the actual method format */
1391                 if (toshiba->kbd_type == 1) {
1392                         /* Type 1 requires the current mode */
1393                         time |= toshiba->kbd_mode;
1394                 } else if (toshiba->kbd_type == 2) {
1395                         /* Type 2 requires the desired mode */
1396                         time |= mode;
1397                 }
1398
1399                 ret = toshiba_kbd_illum_status_set(toshiba, time);
1400                 if (ret)
1401                         return ret;
1402
1403                 /* Update sysfs entries on successful mode change*/
1404                 ret = sysfs_update_group(&toshiba->acpi_dev->dev.kobj,
1405                                          &toshiba_attr_group);
1406                 if (ret)
1407                         return ret;
1408
1409                 toshiba->kbd_mode = mode;
1410         }
1411
1412         return count;
1413 }
1414
1415 static ssize_t toshiba_kbd_bl_mode_show(struct device *dev,
1416                                         struct device_attribute *attr,
1417                                         char *buf)
1418 {
1419         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1420         u32 time;
1421
1422         if (toshiba_kbd_illum_status_get(toshiba, &time) < 0)
1423                 return -EIO;
1424
1425         return sprintf(buf, "%i\n", time & SCI_KBD_MODE_MASK);
1426 }
1427
1428 static ssize_t toshiba_kbd_type_show(struct device *dev,
1429                                      struct device_attribute *attr,
1430                                      char *buf)
1431 {
1432         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1433
1434         return sprintf(buf, "%d\n", toshiba->kbd_type);
1435 }
1436
1437 static ssize_t toshiba_available_kbd_modes_show(struct device *dev,
1438                                                 struct device_attribute *attr,
1439                                                 char *buf)
1440 {
1441         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1442
1443         if (toshiba->kbd_type == 1)
1444                 return sprintf(buf, "%x %x\n",
1445                                SCI_KBD_MODE_FNZ, SCI_KBD_MODE_AUTO);
1446
1447         return sprintf(buf, "%x %x %x\n",
1448                        SCI_KBD_MODE_AUTO, SCI_KBD_MODE_ON, SCI_KBD_MODE_OFF);
1449 }
1450
1451 static ssize_t toshiba_kbd_bl_timeout_store(struct device *dev,
1452                                             struct device_attribute *attr,
1453                                             const char *buf, size_t count)
1454 {
1455         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1456         int time;
1457         int ret;
1458
1459         ret = kstrtoint(buf, 0, &time);
1460         if (ret)
1461                 return ret;
1462
1463         /* Check for supported values depending on kbd_type */
1464         if (toshiba->kbd_type == 1) {
1465                 if (time < 0 || time > 60)
1466                         return -EINVAL;
1467         } else if (toshiba->kbd_type == 2) {
1468                 if (time < 1 || time > 60)
1469                         return -EINVAL;
1470         }
1471
1472         /* Set the Keyboard Backlight Timeout */
1473
1474         /* Only make a change if the actual timeout has changed */
1475         if (toshiba->kbd_time != time) {
1476                 /* Shift the time to "base time" (0x3c0000 == 60 seconds) */
1477                 time = time << HCI_MISC_SHIFT;
1478                 /* OR the "base time" to the actual method format */
1479                 if (toshiba->kbd_type == 1)
1480                         time |= SCI_KBD_MODE_FNZ;
1481                 else if (toshiba->kbd_type == 2)
1482                         time |= SCI_KBD_MODE_AUTO;
1483
1484                 ret = toshiba_kbd_illum_status_set(toshiba, time);
1485                 if (ret)
1486                         return ret;
1487
1488                 toshiba->kbd_time = time >> HCI_MISC_SHIFT;
1489         }
1490
1491         return count;
1492 }
1493
1494 static ssize_t toshiba_kbd_bl_timeout_show(struct device *dev,
1495                                            struct device_attribute *attr,
1496                                            char *buf)
1497 {
1498         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1499         u32 time;
1500
1501         if (toshiba_kbd_illum_status_get(toshiba, &time) < 0)
1502                 return -EIO;
1503
1504         return sprintf(buf, "%i\n", time >> HCI_MISC_SHIFT);
1505 }
1506
1507 static ssize_t toshiba_touchpad_store(struct device *dev,
1508                                       struct device_attribute *attr,
1509                                       const char *buf, size_t count)
1510 {
1511         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1512         int state;
1513         int ret;
1514
1515         /* Set the TouchPad on/off, 0 - Disable | 1 - Enable */
1516         ret = kstrtoint(buf, 0, &state);
1517         if (ret)
1518                 return ret;
1519         if (state != 0 && state != 1)
1520                 return -EINVAL;
1521
1522         ret = toshiba_touchpad_set(toshiba, state);
1523         if (ret)
1524                 return ret;
1525
1526         return count;
1527 }
1528
1529 static ssize_t toshiba_touchpad_show(struct device *dev,
1530                                      struct device_attribute *attr, char *buf)
1531 {
1532         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1533         u32 state;
1534         int ret;
1535
1536         ret = toshiba_touchpad_get(toshiba, &state);
1537         if (ret < 0)
1538                 return ret;
1539
1540         return sprintf(buf, "%i\n", state);
1541 }
1542
1543 static ssize_t toshiba_position_show(struct device *dev,
1544                                      struct device_attribute *attr, char *buf)
1545 {
1546         struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1547         u32 xyval, zval, tmp;
1548         u16 x, y, z;
1549         int ret;
1550
1551         xyval = zval = 0;
1552         ret = toshiba_accelerometer_get(toshiba, &xyval, &zval);
1553         if (ret < 0)
1554                 return ret;
1555
1556         x = xyval & HCI_ACCEL_MASK;
1557         tmp = xyval >> HCI_MISC_SHIFT;
1558         y = tmp & HCI_ACCEL_MASK;
1559         z = zval & HCI_ACCEL_MASK;
1560
1561         return sprintf(buf, "%d %d %d\n", x, y, z);
1562 }
1563
1564 static umode_t toshiba_sysfs_is_visible(struct kobject *kobj,
1565                                         struct attribute *attr, int idx)
1566 {
1567         struct device *dev = container_of(kobj, struct device, kobj);
1568         struct toshiba_acpi_dev *drv = dev_get_drvdata(dev);
1569         bool exists = true;
1570
1571         if (attr == &dev_attr_kbd_backlight_mode.attr)
1572                 exists = (drv->kbd_illum_supported) ? true : false;
1573         else if (attr == &dev_attr_kbd_backlight_timeout.attr)
1574                 exists = (drv->kbd_mode == SCI_KBD_MODE_AUTO) ? true : false;
1575         else if (attr == &dev_attr_touchpad.attr)
1576                 exists = (drv->touchpad_supported) ? true : false;
1577         else if (attr == &dev_attr_position.attr)
1578                 exists = (drv->accelerometer_supported) ? true : false;
1579
1580         return exists ? attr->mode : 0;
1581 }
1582
1583 static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str,
1584                                       struct serio *port)
1585 {
1586         if (str & 0x20)
1587                 return false;
1588
1589         if (unlikely(data == 0xe0))
1590                 return false;
1591
1592         if ((data & 0x7f) == TOS1900_FN_SCAN) {
1593                 schedule_work(&toshiba_acpi->hotkey_work);
1594                 return true;
1595         }
1596
1597         return false;
1598 }
1599
1600 static void toshiba_acpi_hotkey_work(struct work_struct *work)
1601 {
1602         acpi_handle ec_handle = ec_get_handle();
1603         acpi_status status;
1604
1605         if (!ec_handle)
1606                 return;
1607
1608         status = acpi_evaluate_object(ec_handle, "NTFY", NULL, NULL);
1609         if (ACPI_FAILURE(status))
1610                 pr_err("ACPI NTFY method execution failed\n");
1611 }
1612
1613 /*
1614  * Returns hotkey scancode, or < 0 on failure.
1615  */
1616 static int toshiba_acpi_query_hotkey(struct toshiba_acpi_dev *dev)
1617 {
1618         unsigned long long value;
1619         acpi_status status;
1620
1621         status = acpi_evaluate_integer(dev->acpi_dev->handle, "INFO",
1622                                       NULL, &value);
1623         if (ACPI_FAILURE(status)) {
1624                 pr_err("ACPI INFO method execution failed\n");
1625                 return -EIO;
1626         }
1627
1628         return value;
1629 }
1630
1631 static void toshiba_acpi_report_hotkey(struct toshiba_acpi_dev *dev,
1632                                        int scancode)
1633 {
1634         if (scancode == 0x100)
1635                 return;
1636
1637         /* act on key press; ignore key release */
1638         if (scancode & 0x80)
1639                 return;
1640
1641         if (!sparse_keymap_report_event(dev->hotkey_dev, scancode, 1, true))
1642                 pr_info("Unknown key %x\n", scancode);
1643 }
1644
1645 static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
1646 {
1647         acpi_status status;
1648         acpi_handle ec_handle;
1649         int error;
1650         u32 hci_result;
1651         const struct key_entry *keymap = toshiba_acpi_keymap;
1652
1653         dev->hotkey_dev = input_allocate_device();
1654         if (!dev->hotkey_dev)
1655                 return -ENOMEM;
1656
1657         dev->hotkey_dev->name = "Toshiba input device";
1658         dev->hotkey_dev->phys = "toshiba_acpi/input0";
1659         dev->hotkey_dev->id.bustype = BUS_HOST;
1660
1661         if (dmi_check_system(toshiba_alt_keymap_dmi))
1662                 keymap = toshiba_acpi_alt_keymap;
1663         error = sparse_keymap_setup(dev->hotkey_dev, keymap, NULL);
1664         if (error)
1665                 goto err_free_dev;
1666
1667         /*
1668          * For some machines the SCI responsible for providing hotkey
1669          * notification doesn't fire. We can trigger the notification
1670          * whenever the Fn key is pressed using the NTFY method, if
1671          * supported, so if it's present set up an i8042 key filter
1672          * for this purpose.
1673          */
1674         status = AE_ERROR;
1675         ec_handle = ec_get_handle();
1676         if (ec_handle && acpi_has_method(ec_handle, "NTFY")) {
1677                 INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work);
1678
1679                 error = i8042_install_filter(toshiba_acpi_i8042_filter);
1680                 if (error) {
1681                         pr_err("Error installing key filter\n");
1682                         goto err_free_keymap;
1683                 }
1684
1685                 dev->ntfy_supported = 1;
1686         }
1687
1688         /*
1689          * Determine hotkey query interface. Prefer using the INFO
1690          * method when it is available.
1691          */
1692         if (acpi_has_method(dev->acpi_dev->handle, "INFO"))
1693                 dev->info_supported = 1;
1694         else {
1695                 hci_result = hci_write1(dev, HCI_SYSTEM_EVENT, 1);
1696                 if (hci_result == TOS_SUCCESS)
1697                         dev->system_event_supported = 1;
1698         }
1699
1700         if (!dev->info_supported && !dev->system_event_supported) {
1701                 pr_warn("No hotkey query interface found\n");
1702                 goto err_remove_filter;
1703         }
1704
1705         status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB", NULL, NULL);
1706         if (ACPI_FAILURE(status)) {
1707                 pr_info("Unable to enable hotkeys\n");
1708                 error = -ENODEV;
1709                 goto err_remove_filter;
1710         }
1711
1712         error = input_register_device(dev->hotkey_dev);
1713         if (error) {
1714                 pr_info("Unable to register input device\n");
1715                 goto err_remove_filter;
1716         }
1717
1718         hci_result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
1719         return 0;
1720
1721  err_remove_filter:
1722         if (dev->ntfy_supported)
1723                 i8042_remove_filter(toshiba_acpi_i8042_filter);
1724  err_free_keymap:
1725         sparse_keymap_free(dev->hotkey_dev);
1726  err_free_dev:
1727         input_free_device(dev->hotkey_dev);
1728         dev->hotkey_dev = NULL;
1729         return error;
1730 }
1731
1732 static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
1733 {
1734         struct backlight_properties props;
1735         int brightness;
1736         int ret;
1737         bool enabled;
1738
1739         /*
1740          * Some machines don't support the backlight methods at all, and
1741          * others support it read-only. Either of these is pretty useless,
1742          * so only register the backlight device if the backlight method
1743          * supports both reads and writes.
1744          */
1745         brightness = __get_lcd_brightness(dev);
1746         if (brightness < 0)
1747                 return 0;
1748         ret = set_lcd_brightness(dev, brightness);
1749         if (ret) {
1750                 pr_debug("Backlight method is read-only, disabling backlight support\n");
1751                 return 0;
1752         }
1753
1754         /* Determine whether or not BIOS supports transflective backlight */
1755         ret = get_tr_backlight_status(dev, &enabled);
1756         dev->tr_backlight_supported = !ret;
1757
1758         memset(&props, 0, sizeof(props));
1759         props.type = BACKLIGHT_PLATFORM;
1760         props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;
1761
1762         /* adding an extra level and having 0 change to transflective mode */
1763         if (dev->tr_backlight_supported)
1764                 props.max_brightness++;
1765
1766         dev->backlight_dev = backlight_device_register("toshiba",
1767                                                        &dev->acpi_dev->dev,
1768                                                        dev,
1769                                                        &toshiba_backlight_data,
1770                                                        &props);
1771         if (IS_ERR(dev->backlight_dev)) {
1772                 ret = PTR_ERR(dev->backlight_dev);
1773                 pr_err("Could not register toshiba backlight device\n");
1774                 dev->backlight_dev = NULL;
1775                 return ret;
1776         }
1777
1778         dev->backlight_dev->props.brightness = brightness;
1779         return 0;
1780 }
1781
1782 static int toshiba_acpi_remove(struct acpi_device *acpi_dev)
1783 {
1784         struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
1785
1786         remove_toshiba_proc_entries(dev);
1787
1788         if (dev->sysfs_created)
1789                 sysfs_remove_group(&dev->acpi_dev->dev.kobj,
1790                                    &toshiba_attr_group);
1791
1792         if (dev->ntfy_supported) {
1793                 i8042_remove_filter(toshiba_acpi_i8042_filter);
1794                 cancel_work_sync(&dev->hotkey_work);
1795         }
1796
1797         if (dev->hotkey_dev) {
1798                 input_unregister_device(dev->hotkey_dev);
1799                 sparse_keymap_free(dev->hotkey_dev);
1800         }
1801
1802         if (dev->bt_rfk) {
1803                 rfkill_unregister(dev->bt_rfk);
1804                 rfkill_destroy(dev->bt_rfk);
1805         }
1806
1807         if (dev->backlight_dev)
1808                 backlight_device_unregister(dev->backlight_dev);
1809
1810         if (dev->illumination_supported)
1811                 led_classdev_unregister(&dev->led_dev);
1812
1813         if (dev->kbd_led_registered)
1814                 led_classdev_unregister(&dev->kbd_led);
1815
1816         if (dev->eco_supported)
1817                 led_classdev_unregister(&dev->eco_led);
1818
1819         if (toshiba_acpi)
1820                 toshiba_acpi = NULL;
1821
1822         kfree(dev);
1823
1824         return 0;
1825 }
1826
1827 static const char *find_hci_method(acpi_handle handle)
1828 {
1829         if (acpi_has_method(handle, "GHCI"))
1830                 return "GHCI";
1831
1832         if (acpi_has_method(handle, "SPFC"))
1833                 return "SPFC";
1834
1835         return NULL;
1836 }
1837
1838 static int toshiba_acpi_add(struct acpi_device *acpi_dev)
1839 {
1840         struct toshiba_acpi_dev *dev;
1841         const char *hci_method;
1842         u32 dummy;
1843         bool bt_present;
1844         int ret = 0;
1845
1846         if (toshiba_acpi)
1847                 return -EBUSY;
1848
1849         pr_info("Toshiba Laptop ACPI Extras version %s\n",
1850                TOSHIBA_ACPI_VERSION);
1851
1852         hci_method = find_hci_method(acpi_dev->handle);
1853         if (!hci_method) {
1854                 pr_err("HCI interface not found\n");
1855                 return -ENODEV;
1856         }
1857
1858         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1859         if (!dev)
1860                 return -ENOMEM;
1861         dev->acpi_dev = acpi_dev;
1862         dev->method_hci = hci_method;
1863         acpi_dev->driver_data = dev;
1864         dev_set_drvdata(&acpi_dev->dev, dev);
1865
1866         if (toshiba_acpi_setup_keyboard(dev))
1867                 pr_info("Unable to activate hotkeys\n");
1868
1869         mutex_init(&dev->mutex);
1870
1871         ret = toshiba_acpi_setup_backlight(dev);
1872         if (ret)
1873                 goto error;
1874
1875         /* Register rfkill switch for Bluetooth */
1876         if (hci_get_bt_present(dev, &bt_present) == TOS_SUCCESS && bt_present) {
1877                 dev->bt_rfk = rfkill_alloc("Toshiba Bluetooth",
1878                                            &acpi_dev->dev,
1879                                            RFKILL_TYPE_BLUETOOTH,
1880                                            &toshiba_rfk_ops,
1881                                            dev);
1882                 if (!dev->bt_rfk) {
1883                         pr_err("unable to allocate rfkill device\n");
1884                         ret = -ENOMEM;
1885                         goto error;
1886                 }
1887
1888                 ret = rfkill_register(dev->bt_rfk);
1889                 if (ret) {
1890                         pr_err("unable to register rfkill device\n");
1891                         rfkill_destroy(dev->bt_rfk);
1892                         goto error;
1893                 }
1894         }
1895
1896         if (toshiba_illumination_available(dev)) {
1897                 dev->led_dev.name = "toshiba::illumination";
1898                 dev->led_dev.max_brightness = 1;
1899                 dev->led_dev.brightness_set = toshiba_illumination_set;
1900                 dev->led_dev.brightness_get = toshiba_illumination_get;
1901                 if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev))
1902                         dev->illumination_supported = 1;
1903         }
1904
1905         if (toshiba_eco_mode_available(dev)) {
1906                 dev->eco_led.name = "toshiba::eco_mode";
1907                 dev->eco_led.max_brightness = 1;
1908                 dev->eco_led.brightness_set = toshiba_eco_mode_set_status;
1909                 dev->eco_led.brightness_get = toshiba_eco_mode_get_status;
1910                 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->eco_led))
1911                         dev->eco_supported = 1;
1912         }
1913
1914         dev->kbd_illum_supported = toshiba_kbd_illum_available(dev);
1915         /*
1916          * Only register the LED if KBD illumination is supported
1917          * and the keyboard backlight operation mode is set to FN-Z
1918          */
1919         if (dev->kbd_illum_supported && dev->kbd_mode == SCI_KBD_MODE_FNZ) {
1920                 dev->kbd_led.name = "toshiba::kbd_backlight";
1921                 dev->kbd_led.max_brightness = 1;
1922                 dev->kbd_led.brightness_set = toshiba_kbd_backlight_set;
1923                 dev->kbd_led.brightness_get = toshiba_kbd_backlight_get;
1924                 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->kbd_led))
1925                         dev->kbd_led_registered = 1;
1926         }
1927
1928         ret = toshiba_touchpad_get(dev, &dummy);
1929         dev->touchpad_supported = !ret;
1930
1931         ret = toshiba_accelerometer_supported(dev);
1932         dev->accelerometer_supported = !ret;
1933
1934         /* Determine whether or not BIOS supports fan and video interfaces */
1935
1936         ret = get_video_status(dev, &dummy);
1937         dev->video_supported = !ret;
1938
1939         ret = get_fan_status(dev, &dummy);
1940         dev->fan_supported = !ret;
1941
1942         ret = sysfs_create_group(&dev->acpi_dev->dev.kobj,
1943                                  &toshiba_attr_group);
1944         if (ret) {
1945                 dev->sysfs_created = 0;
1946                 goto error;
1947         }
1948         dev->sysfs_created = !ret;
1949
1950         create_toshiba_proc_entries(dev);
1951
1952         toshiba_acpi = dev;
1953
1954         return 0;
1955
1956 error:
1957         toshiba_acpi_remove(acpi_dev);
1958         return ret;
1959 }
1960
1961 static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
1962 {
1963         struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
1964         u32 hci_result, value;
1965         int retries = 3;
1966         int scancode;
1967
1968         if (event != 0x80)
1969                 return;
1970
1971         if (dev->info_supported) {
1972                 scancode = toshiba_acpi_query_hotkey(dev);
1973                 if (scancode < 0)
1974                         pr_err("Failed to query hotkey event\n");
1975                 else if (scancode != 0)
1976                         toshiba_acpi_report_hotkey(dev, scancode);
1977         } else if (dev->system_event_supported) {
1978                 do {
1979                         hci_result = hci_read1(dev, HCI_SYSTEM_EVENT, &value);
1980                         switch (hci_result) {
1981                         case TOS_SUCCESS:
1982                                 toshiba_acpi_report_hotkey(dev, (int)value);
1983                                 break;
1984                         case TOS_NOT_SUPPORTED:
1985                                 /*
1986                                  * This is a workaround for an unresolved
1987                                  * issue on some machines where system events
1988                                  * sporadically become disabled.
1989                                  */
1990                                 hci_result =
1991                                         hci_write1(dev, HCI_SYSTEM_EVENT, 1);
1992                                 pr_notice("Re-enabled hotkeys\n");
1993                                 /* fall through */
1994                         default:
1995                                 retries--;
1996                                 break;
1997                         }
1998                 } while (retries && hci_result != TOS_FIFO_EMPTY);
1999         }
2000 }
2001
2002 #ifdef CONFIG_PM_SLEEP
2003 static int toshiba_acpi_suspend(struct device *device)
2004 {
2005         struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
2006         u32 result;
2007
2008         if (dev->hotkey_dev)
2009                 result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_DISABLE);
2010
2011         return 0;
2012 }
2013
2014 static int toshiba_acpi_resume(struct device *device)
2015 {
2016         struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
2017         u32 result;
2018         acpi_status status;
2019
2020         if (dev->hotkey_dev) {
2021                 status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB",
2022                                 NULL, NULL);
2023                 if (ACPI_FAILURE(status))
2024                         pr_info("Unable to re-enable hotkeys\n");
2025
2026                 result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
2027         }
2028
2029         return 0;
2030 }
2031 #endif
2032
2033 static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
2034                          toshiba_acpi_suspend, toshiba_acpi_resume);
2035
2036 static struct acpi_driver toshiba_acpi_driver = {
2037         .name   = "Toshiba ACPI driver",
2038         .owner  = THIS_MODULE,
2039         .ids    = toshiba_device_ids,
2040         .flags  = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
2041         .ops    = {
2042                 .add            = toshiba_acpi_add,
2043                 .remove         = toshiba_acpi_remove,
2044                 .notify         = toshiba_acpi_notify,
2045         },
2046         .drv.pm = &toshiba_acpi_pm,
2047 };
2048
2049 static int __init toshiba_acpi_init(void)
2050 {
2051         int ret;
2052
2053         /*
2054          * Machines with this WMI guid aren't supported due to bugs in
2055          * their AML. This check relies on wmi initializing before
2056          * toshiba_acpi to guarantee guids have been identified.
2057          */
2058         if (wmi_has_guid(TOSHIBA_WMI_EVENT_GUID))
2059                 return -ENODEV;
2060
2061         toshiba_proc_dir = proc_mkdir(PROC_TOSHIBA, acpi_root_dir);
2062         if (!toshiba_proc_dir) {
2063                 pr_err("Unable to create proc dir " PROC_TOSHIBA "\n");
2064                 return -ENODEV;
2065         }
2066
2067         ret = acpi_bus_register_driver(&toshiba_acpi_driver);
2068         if (ret) {
2069                 pr_err("Failed to register ACPI driver: %d\n", ret);
2070                 remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
2071         }
2072
2073         return ret;
2074 }
2075
2076 static void __exit toshiba_acpi_exit(void)
2077 {
2078         acpi_bus_unregister_driver(&toshiba_acpi_driver);
2079         if (toshiba_proc_dir)
2080                 remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
2081 }
2082
2083 module_init(toshiba_acpi_init);
2084 module_exit(toshiba_acpi_exit);