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