c4680037bbfdee63ae4d7f202ad4430581a620ca
[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_NOT_PRESENT                 0x8600
104
105 /* registers */
106 #define HCI_FAN                         0x0004
107 #define HCI_TR_BACKLIGHT                0x0005
108 #define HCI_SYSTEM_EVENT                0x0016
109 #define HCI_VIDEO_OUT                   0x001c
110 #define HCI_HOTKEY_EVENT                0x001e
111 #define HCI_LCD_BRIGHTNESS              0x002a
112 #define HCI_WIRELESS                    0x0056
113
114 /* field definitions */
115 #define HCI_HOTKEY_DISABLE              0x0b
116 #define HCI_HOTKEY_ENABLE               0x09
117 #define HCI_LCD_BRIGHTNESS_BITS         3
118 #define HCI_LCD_BRIGHTNESS_SHIFT        (16-HCI_LCD_BRIGHTNESS_BITS)
119 #define HCI_LCD_BRIGHTNESS_LEVELS       (1 << HCI_LCD_BRIGHTNESS_BITS)
120 #define HCI_VIDEO_OUT_LCD               0x1
121 #define HCI_VIDEO_OUT_CRT               0x2
122 #define HCI_VIDEO_OUT_TV                0x4
123 #define HCI_WIRELESS_KILL_SWITCH        0x01
124 #define HCI_WIRELESS_BT_PRESENT         0x0f
125 #define HCI_WIRELESS_BT_ATTACH          0x40
126 #define HCI_WIRELESS_BT_POWER           0x80
127
128 struct toshiba_acpi_dev {
129         struct acpi_device *acpi_dev;
130         const char *method_hci;
131         struct rfkill *bt_rfk;
132         struct input_dev *hotkey_dev;
133         struct work_struct hotkey_work;
134         struct backlight_device *backlight_dev;
135         struct led_classdev led_dev;
136
137         int force_fan;
138         int last_key_event;
139         int key_event_valid;
140
141         unsigned int illumination_supported:1;
142         unsigned int video_supported:1;
143         unsigned int fan_supported:1;
144         unsigned int system_event_supported:1;
145         unsigned int ntfy_supported:1;
146         unsigned int info_supported:1;
147         unsigned int tr_backlight_supported:1;
148
149         struct mutex mutex;
150 };
151
152 static struct toshiba_acpi_dev *toshiba_acpi;
153
154 static const struct acpi_device_id toshiba_device_ids[] = {
155         {"TOS6200", 0},
156         {"TOS6208", 0},
157         {"TOS1900", 0},
158         {"", 0},
159 };
160 MODULE_DEVICE_TABLE(acpi, toshiba_device_ids);
161
162 static const struct key_entry toshiba_acpi_keymap[] = {
163         { KE_KEY, 0x9e, { KEY_RFKILL } },
164         { KE_KEY, 0x101, { KEY_MUTE } },
165         { KE_KEY, 0x102, { KEY_ZOOMOUT } },
166         { KE_KEY, 0x103, { KEY_ZOOMIN } },
167         { KE_KEY, 0x12c, { KEY_KBDILLUMTOGGLE } },
168         { KE_KEY, 0x139, { KEY_ZOOMRESET } },
169         { KE_KEY, 0x13b, { KEY_COFFEE } },
170         { KE_KEY, 0x13c, { KEY_BATTERY } },
171         { KE_KEY, 0x13d, { KEY_SLEEP } },
172         { KE_KEY, 0x13e, { KEY_SUSPEND } },
173         { KE_KEY, 0x13f, { KEY_SWITCHVIDEOMODE } },
174         { KE_KEY, 0x140, { KEY_BRIGHTNESSDOWN } },
175         { KE_KEY, 0x141, { KEY_BRIGHTNESSUP } },
176         { KE_KEY, 0x142, { KEY_WLAN } },
177         { KE_KEY, 0x143, { KEY_TOUCHPAD_TOGGLE } },
178         { KE_KEY, 0x17f, { KEY_FN } },
179         { KE_KEY, 0xb05, { KEY_PROG2 } },
180         { KE_KEY, 0xb06, { KEY_WWW } },
181         { KE_KEY, 0xb07, { KEY_MAIL } },
182         { KE_KEY, 0xb30, { KEY_STOP } },
183         { KE_KEY, 0xb31, { KEY_PREVIOUSSONG } },
184         { KE_KEY, 0xb32, { KEY_NEXTSONG } },
185         { KE_KEY, 0xb33, { KEY_PLAYPAUSE } },
186         { KE_KEY, 0xb5a, { KEY_MEDIA } },
187         { KE_IGNORE, 0x1430, { KEY_RESERVED } },
188         { KE_END, 0 },
189 };
190
191 /* utility
192  */
193
194 static __inline__ void _set_bit(u32 * word, u32 mask, int value)
195 {
196         *word = (*word & ~mask) | (mask * value);
197 }
198
199 /* acpi interface wrappers
200  */
201
202 static int write_acpi_int(const char *methodName, int val)
203 {
204         acpi_status status;
205
206         status = acpi_execute_simple_method(NULL, (char *)methodName, val);
207         return (status == AE_OK) ? 0 : -EIO;
208 }
209
210 /* Perform a raw HCI call.  Here we don't care about input or output buffer
211  * format.
212  */
213 static acpi_status hci_raw(struct toshiba_acpi_dev *dev,
214                            const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
215 {
216         struct acpi_object_list params;
217         union acpi_object in_objs[HCI_WORDS];
218         struct acpi_buffer results;
219         union acpi_object out_objs[HCI_WORDS + 1];
220         acpi_status status;
221         int i;
222
223         params.count = HCI_WORDS;
224         params.pointer = in_objs;
225         for (i = 0; i < HCI_WORDS; ++i) {
226                 in_objs[i].type = ACPI_TYPE_INTEGER;
227                 in_objs[i].integer.value = in[i];
228         }
229
230         results.length = sizeof(out_objs);
231         results.pointer = out_objs;
232
233         status = acpi_evaluate_object(dev->acpi_dev->handle,
234                                       (char *)dev->method_hci, &params,
235                                       &results);
236         if ((status == AE_OK) && (out_objs->package.count <= HCI_WORDS)) {
237                 for (i = 0; i < out_objs->package.count; ++i) {
238                         out[i] = out_objs->package.elements[i].integer.value;
239                 }
240         }
241
242         return status;
243 }
244
245 /* common hci tasks (get or set one or two value)
246  *
247  * In addition to the ACPI status, the HCI system returns a result which
248  * may be useful (such as "not supported").
249  */
250
251 static acpi_status hci_write1(struct toshiba_acpi_dev *dev, u32 reg,
252                               u32 in1, u32 *result)
253 {
254         u32 in[HCI_WORDS] = { HCI_SET, reg, in1, 0, 0, 0 };
255         u32 out[HCI_WORDS];
256         acpi_status status = hci_raw(dev, in, out);
257         *result = (status == AE_OK) ? out[0] : HCI_FAILURE;
258         return status;
259 }
260
261 static acpi_status hci_read1(struct toshiba_acpi_dev *dev, u32 reg,
262                              u32 *out1, u32 *result)
263 {
264         u32 in[HCI_WORDS] = { HCI_GET, reg, 0, 0, 0, 0 };
265         u32 out[HCI_WORDS];
266         acpi_status status = hci_raw(dev, in, out);
267         *out1 = out[2];
268         *result = (status == AE_OK) ? out[0] : HCI_FAILURE;
269         return status;
270 }
271
272 static acpi_status hci_write2(struct toshiba_acpi_dev *dev, u32 reg,
273                               u32 in1, u32 in2, u32 *result)
274 {
275         u32 in[HCI_WORDS] = { HCI_SET, reg, in1, in2, 0, 0 };
276         u32 out[HCI_WORDS];
277         acpi_status status = hci_raw(dev, in, out);
278         *result = (status == AE_OK) ? out[0] : HCI_FAILURE;
279         return status;
280 }
281
282 static acpi_status hci_read2(struct toshiba_acpi_dev *dev, u32 reg,
283                              u32 *out1, u32 *out2, u32 *result)
284 {
285         u32 in[HCI_WORDS] = { HCI_GET, reg, *out1, *out2, 0, 0 };
286         u32 out[HCI_WORDS];
287         acpi_status status = hci_raw(dev, in, out);
288         *out1 = out[2];
289         *out2 = out[3];
290         *result = (status == AE_OK) ? out[0] : HCI_FAILURE;
291         return status;
292 }
293
294 /* common sci tasks
295  */
296
297 static int sci_open(struct toshiba_acpi_dev *dev)
298 {
299         u32 in[HCI_WORDS] = { SCI_OPEN, 0, 0, 0, 0, 0 };
300         u32 out[HCI_WORDS];
301         acpi_status status;
302
303         status = hci_raw(dev, in, out);
304         if  (ACPI_FAILURE(status) || out[0] == HCI_FAILURE) {
305                 pr_err("ACPI call to open SCI failed\n");
306                 return 0;
307         }
308
309         if (out[0] == SCI_OPEN_CLOSE_OK) {
310                 return 1;
311         } else if (out[0] == SCI_ALREADY_OPEN) {
312                 pr_info("Toshiba SCI already opened\n");
313                 return 1;
314         } else if (out[0] == SCI_NOT_PRESENT) {
315                 pr_info("Toshiba SCI is not present\n");
316         }
317
318         return 0;
319 }
320
321 static void sci_close(struct toshiba_acpi_dev *dev)
322 {
323         u32 in[HCI_WORDS] = { SCI_CLOSE, 0, 0, 0, 0, 0 };
324         u32 out[HCI_WORDS];
325         acpi_status status;
326
327         status = hci_raw(dev, in, out);
328         if (ACPI_FAILURE(status) || out[0] == HCI_FAILURE) {
329                 pr_err("ACPI call to close SCI failed\n");
330                 return;
331         }
332
333         if (out[0] == SCI_OPEN_CLOSE_OK)
334                 return;
335         else if (out[0] == SCI_NOT_OPENED)
336                 pr_info("Toshiba SCI not opened\n");
337         else if (out[0] == SCI_NOT_PRESENT)
338                 pr_info("Toshiba SCI is not present\n");
339 }
340
341 static acpi_status sci_read(struct toshiba_acpi_dev *dev, u32 reg,
342                             u32 *out1, u32 *result)
343 {
344         u32 in[HCI_WORDS] = { SCI_GET, reg, 0, 0, 0, 0 };
345         u32 out[HCI_WORDS];
346         acpi_status status = hci_raw(dev, in, out);
347         *out1 = out[2];
348         *result = (ACPI_SUCCESS(status)) ? out[0] : HCI_FAILURE;
349         return status;
350 }
351
352 static acpi_status sci_write(struct toshiba_acpi_dev *dev, u32 reg,
353                              u32 in1, u32 *result)
354 {
355         u32 in[HCI_WORDS] = { SCI_SET, reg, in1, 0, 0, 0 };
356         u32 out[HCI_WORDS];
357         acpi_status status = hci_raw(dev, in, out);
358         *result = (ACPI_SUCCESS(status)) ? out[0] : HCI_FAILURE;
359         return status;
360 }
361
362 /* Illumination support */
363 static int toshiba_illumination_available(struct toshiba_acpi_dev *dev)
364 {
365         u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 };
366         u32 out[HCI_WORDS];
367         acpi_status status;
368
369         in[0] = 0xf100;
370         status = hci_raw(dev, in, out);
371         if (ACPI_FAILURE(status)) {
372                 pr_info("Illumination device not available\n");
373                 return 0;
374         }
375         in[0] = 0xf400;
376         status = hci_raw(dev, in, out);
377         return 1;
378 }
379
380 static void toshiba_illumination_set(struct led_classdev *cdev,
381                                      enum led_brightness brightness)
382 {
383         struct toshiba_acpi_dev *dev = container_of(cdev,
384                         struct toshiba_acpi_dev, led_dev);
385         u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 };
386         u32 out[HCI_WORDS];
387         acpi_status status;
388
389         /* First request : initialize communication. */
390         in[0] = 0xf100;
391         status = hci_raw(dev, in, out);
392         if (ACPI_FAILURE(status)) {
393                 pr_info("Illumination device not available\n");
394                 return;
395         }
396
397         if (brightness) {
398                 /* Switch the illumination on */
399                 in[0] = 0xf400;
400                 in[1] = 0x14e;
401                 in[2] = 1;
402                 status = hci_raw(dev, in, out);
403                 if (ACPI_FAILURE(status)) {
404                         pr_info("ACPI call for illumination failed\n");
405                         return;
406                 }
407         } else {
408                 /* Switch the illumination off */
409                 in[0] = 0xf400;
410                 in[1] = 0x14e;
411                 in[2] = 0;
412                 status = hci_raw(dev, in, out);
413                 if (ACPI_FAILURE(status)) {
414                         pr_info("ACPI call for illumination failed.\n");
415                         return;
416                 }
417         }
418
419         /* Last request : close communication. */
420         in[0] = 0xf200;
421         in[1] = 0;
422         in[2] = 0;
423         hci_raw(dev, in, out);
424 }
425
426 static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
427 {
428         struct toshiba_acpi_dev *dev = container_of(cdev,
429                         struct toshiba_acpi_dev, led_dev);
430         u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 };
431         u32 out[HCI_WORDS];
432         acpi_status status;
433         enum led_brightness result;
434
435         /* First request : initialize communication. */
436         in[0] = 0xf100;
437         status = hci_raw(dev, in, out);
438         if (ACPI_FAILURE(status)) {
439                 pr_info("Illumination device not available\n");
440                 return LED_OFF;
441         }
442
443         /* Check the illumination */
444         in[0] = 0xf300;
445         in[1] = 0x14e;
446         status = hci_raw(dev, in, out);
447         if (ACPI_FAILURE(status)) {
448                 pr_info("ACPI call for illumination failed.\n");
449                 return LED_OFF;
450         }
451
452         result = out[2] ? LED_FULL : LED_OFF;
453
454         /* Last request : close communication. */
455         in[0] = 0xf200;
456         in[1] = 0;
457         in[2] = 0;
458         hci_raw(dev, in, out);
459
460         return result;
461 }
462
463 /* Bluetooth rfkill handlers */
464
465 static u32 hci_get_bt_present(struct toshiba_acpi_dev *dev, bool *present)
466 {
467         u32 hci_result;
468         u32 value, value2;
469
470         value = 0;
471         value2 = 0;
472         hci_read2(dev, HCI_WIRELESS, &value, &value2, &hci_result);
473         if (hci_result == HCI_SUCCESS)
474                 *present = (value & HCI_WIRELESS_BT_PRESENT) ? true : false;
475
476         return hci_result;
477 }
478
479 static u32 hci_get_radio_state(struct toshiba_acpi_dev *dev, bool *radio_state)
480 {
481         u32 hci_result;
482         u32 value, value2;
483
484         value = 0;
485         value2 = 0x0001;
486         hci_read2(dev, HCI_WIRELESS, &value, &value2, &hci_result);
487
488         *radio_state = value & HCI_WIRELESS_KILL_SWITCH;
489         return hci_result;
490 }
491
492 static int bt_rfkill_set_block(void *data, bool blocked)
493 {
494         struct toshiba_acpi_dev *dev = data;
495         u32 result1, result2;
496         u32 value;
497         int err;
498         bool radio_state;
499
500         value = (blocked == false);
501
502         mutex_lock(&dev->mutex);
503         if (hci_get_radio_state(dev, &radio_state) != HCI_SUCCESS) {
504                 err = -EIO;
505                 goto out;
506         }
507
508         if (!radio_state) {
509                 err = 0;
510                 goto out;
511         }
512
513         hci_write2(dev, HCI_WIRELESS, value, HCI_WIRELESS_BT_POWER, &result1);
514         hci_write2(dev, HCI_WIRELESS, value, HCI_WIRELESS_BT_ATTACH, &result2);
515
516         if (result1 != HCI_SUCCESS || result2 != HCI_SUCCESS)
517                 err = -EIO;
518         else
519                 err = 0;
520  out:
521         mutex_unlock(&dev->mutex);
522         return err;
523 }
524
525 static void bt_rfkill_poll(struct rfkill *rfkill, void *data)
526 {
527         bool new_rfk_state;
528         bool value;
529         u32 hci_result;
530         struct toshiba_acpi_dev *dev = data;
531
532         mutex_lock(&dev->mutex);
533
534         hci_result = hci_get_radio_state(dev, &value);
535         if (hci_result != HCI_SUCCESS) {
536                 /* Can't do anything useful */
537                 mutex_unlock(&dev->mutex);
538                 return;
539         }
540
541         new_rfk_state = value;
542
543         mutex_unlock(&dev->mutex);
544
545         if (rfkill_set_hw_state(rfkill, !new_rfk_state))
546                 bt_rfkill_set_block(data, true);
547 }
548
549 static const struct rfkill_ops toshiba_rfk_ops = {
550         .set_block = bt_rfkill_set_block,
551         .poll = bt_rfkill_poll,
552 };
553
554 static int get_tr_backlight_status(struct toshiba_acpi_dev *dev, bool *enabled)
555 {
556         u32 hci_result;
557         u32 status;
558
559         hci_read1(dev, HCI_TR_BACKLIGHT, &status, &hci_result);
560         *enabled = !status;
561         return hci_result == HCI_SUCCESS ? 0 : -EIO;
562 }
563
564 static int set_tr_backlight_status(struct toshiba_acpi_dev *dev, bool enable)
565 {
566         u32 hci_result;
567         u32 value = !enable;
568
569         hci_write1(dev, HCI_TR_BACKLIGHT, value, &hci_result);
570         return hci_result == HCI_SUCCESS ? 0 : -EIO;
571 }
572
573 static struct proc_dir_entry *toshiba_proc_dir /*= 0*/ ;
574
575 static int __get_lcd_brightness(struct toshiba_acpi_dev *dev)
576 {
577         u32 hci_result;
578         u32 value;
579         int brightness = 0;
580
581         if (dev->tr_backlight_supported) {
582                 bool enabled;
583                 int ret = get_tr_backlight_status(dev, &enabled);
584                 if (ret)
585                         return ret;
586                 if (enabled)
587                         return 0;
588                 brightness++;
589         }
590
591         hci_read1(dev, HCI_LCD_BRIGHTNESS, &value, &hci_result);
592         if (hci_result == HCI_SUCCESS)
593                 return brightness + (value >> HCI_LCD_BRIGHTNESS_SHIFT);
594
595         return -EIO;
596 }
597
598 static int get_lcd_brightness(struct backlight_device *bd)
599 {
600         struct toshiba_acpi_dev *dev = bl_get_data(bd);
601         return __get_lcd_brightness(dev);
602 }
603
604 static int lcd_proc_show(struct seq_file *m, void *v)
605 {
606         struct toshiba_acpi_dev *dev = m->private;
607         int value;
608         int levels;
609
610         if (!dev->backlight_dev)
611                 return -ENODEV;
612
613         levels = dev->backlight_dev->props.max_brightness + 1;
614         value = get_lcd_brightness(dev->backlight_dev);
615         if (value >= 0) {
616                 seq_printf(m, "brightness:              %d\n", value);
617                 seq_printf(m, "brightness_levels:       %d\n", levels);
618                 return 0;
619         }
620
621         pr_err("Error reading LCD brightness\n");
622         return -EIO;
623 }
624
625 static int lcd_proc_open(struct inode *inode, struct file *file)
626 {
627         return single_open(file, lcd_proc_show, PDE_DATA(inode));
628 }
629
630 static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value)
631 {
632         u32 hci_result;
633
634         if (dev->tr_backlight_supported) {
635                 bool enable = !value;
636                 int ret = set_tr_backlight_status(dev, enable);
637                 if (ret)
638                         return ret;
639                 if (value)
640                         value--;
641         }
642
643         value = value << HCI_LCD_BRIGHTNESS_SHIFT;
644         hci_write1(dev, HCI_LCD_BRIGHTNESS, value, &hci_result);
645         return hci_result == HCI_SUCCESS ? 0 : -EIO;
646 }
647
648 static int set_lcd_status(struct backlight_device *bd)
649 {
650         struct toshiba_acpi_dev *dev = bl_get_data(bd);
651         return set_lcd_brightness(dev, bd->props.brightness);
652 }
653
654 static ssize_t lcd_proc_write(struct file *file, const char __user *buf,
655                               size_t count, loff_t *pos)
656 {
657         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
658         char cmd[42];
659         size_t len;
660         int value;
661         int ret;
662         int levels = dev->backlight_dev->props.max_brightness + 1;
663
664         len = min(count, sizeof(cmd) - 1);
665         if (copy_from_user(cmd, buf, len))
666                 return -EFAULT;
667         cmd[len] = '\0';
668
669         if (sscanf(cmd, " brightness : %i", &value) == 1 &&
670             value >= 0 && value < levels) {
671                 ret = set_lcd_brightness(dev, value);
672                 if (ret == 0)
673                         ret = count;
674         } else {
675                 ret = -EINVAL;
676         }
677         return ret;
678 }
679
680 static const struct file_operations lcd_proc_fops = {
681         .owner          = THIS_MODULE,
682         .open           = lcd_proc_open,
683         .read           = seq_read,
684         .llseek         = seq_lseek,
685         .release        = single_release,
686         .write          = lcd_proc_write,
687 };
688
689 static int get_video_status(struct toshiba_acpi_dev *dev, u32 *status)
690 {
691         u32 hci_result;
692
693         hci_read1(dev, HCI_VIDEO_OUT, status, &hci_result);
694         return hci_result == HCI_SUCCESS ? 0 : -EIO;
695 }
696
697 static int video_proc_show(struct seq_file *m, void *v)
698 {
699         struct toshiba_acpi_dev *dev = m->private;
700         u32 value;
701         int ret;
702
703         ret = get_video_status(dev, &value);
704         if (!ret) {
705                 int is_lcd = (value & HCI_VIDEO_OUT_LCD) ? 1 : 0;
706                 int is_crt = (value & HCI_VIDEO_OUT_CRT) ? 1 : 0;
707                 int is_tv = (value & HCI_VIDEO_OUT_TV) ? 1 : 0;
708                 seq_printf(m, "lcd_out:                 %d\n", is_lcd);
709                 seq_printf(m, "crt_out:                 %d\n", is_crt);
710                 seq_printf(m, "tv_out:                  %d\n", is_tv);
711         }
712
713         return ret;
714 }
715
716 static int video_proc_open(struct inode *inode, struct file *file)
717 {
718         return single_open(file, video_proc_show, PDE_DATA(inode));
719 }
720
721 static ssize_t video_proc_write(struct file *file, const char __user *buf,
722                                 size_t count, loff_t *pos)
723 {
724         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
725         char *cmd, *buffer;
726         int ret;
727         int value;
728         int remain = count;
729         int lcd_out = -1;
730         int crt_out = -1;
731         int tv_out = -1;
732         u32 video_out;
733
734         cmd = kmalloc(count + 1, GFP_KERNEL);
735         if (!cmd)
736                 return -ENOMEM;
737         if (copy_from_user(cmd, buf, count)) {
738                 kfree(cmd);
739                 return -EFAULT;
740         }
741         cmd[count] = '\0';
742
743         buffer = cmd;
744
745         /* scan expression.  Multiple expressions may be delimited with ;
746          *
747          *  NOTE: to keep scanning simple, invalid fields are ignored
748          */
749         while (remain) {
750                 if (sscanf(buffer, " lcd_out : %i", &value) == 1)
751                         lcd_out = value & 1;
752                 else if (sscanf(buffer, " crt_out : %i", &value) == 1)
753                         crt_out = value & 1;
754                 else if (sscanf(buffer, " tv_out : %i", &value) == 1)
755                         tv_out = value & 1;
756                 /* advance to one character past the next ; */
757                 do {
758                         ++buffer;
759                         --remain;
760                 }
761                 while (remain && *(buffer - 1) != ';');
762         }
763
764         kfree(cmd);
765
766         ret = get_video_status(dev, &video_out);
767         if (!ret) {
768                 unsigned int new_video_out = video_out;
769                 if (lcd_out != -1)
770                         _set_bit(&new_video_out, HCI_VIDEO_OUT_LCD, lcd_out);
771                 if (crt_out != -1)
772                         _set_bit(&new_video_out, HCI_VIDEO_OUT_CRT, crt_out);
773                 if (tv_out != -1)
774                         _set_bit(&new_video_out, HCI_VIDEO_OUT_TV, tv_out);
775                 /* To avoid unnecessary video disruption, only write the new
776                  * video setting if something changed. */
777                 if (new_video_out != video_out)
778                         ret = write_acpi_int(METHOD_VIDEO_OUT, new_video_out);
779         }
780
781         return ret ? ret : count;
782 }
783
784 static const struct file_operations video_proc_fops = {
785         .owner          = THIS_MODULE,
786         .open           = video_proc_open,
787         .read           = seq_read,
788         .llseek         = seq_lseek,
789         .release        = single_release,
790         .write          = video_proc_write,
791 };
792
793 static int get_fan_status(struct toshiba_acpi_dev *dev, u32 *status)
794 {
795         u32 hci_result;
796
797         hci_read1(dev, HCI_FAN, status, &hci_result);
798         return hci_result == HCI_SUCCESS ? 0 : -EIO;
799 }
800
801 static int fan_proc_show(struct seq_file *m, void *v)
802 {
803         struct toshiba_acpi_dev *dev = m->private;
804         int ret;
805         u32 value;
806
807         ret = get_fan_status(dev, &value);
808         if (!ret) {
809                 seq_printf(m, "running:                 %d\n", (value > 0));
810                 seq_printf(m, "force_on:                %d\n", dev->force_fan);
811         }
812
813         return ret;
814 }
815
816 static int fan_proc_open(struct inode *inode, struct file *file)
817 {
818         return single_open(file, fan_proc_show, PDE_DATA(inode));
819 }
820
821 static ssize_t fan_proc_write(struct file *file, const char __user *buf,
822                               size_t count, loff_t *pos)
823 {
824         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
825         char cmd[42];
826         size_t len;
827         int value;
828         u32 hci_result;
829
830         len = min(count, sizeof(cmd) - 1);
831         if (copy_from_user(cmd, buf, len))
832                 return -EFAULT;
833         cmd[len] = '\0';
834
835         if (sscanf(cmd, " force_on : %i", &value) == 1 &&
836             value >= 0 && value <= 1) {
837                 hci_write1(dev, HCI_FAN, value, &hci_result);
838                 if (hci_result != HCI_SUCCESS)
839                         return -EIO;
840                 else
841                         dev->force_fan = value;
842         } else {
843                 return -EINVAL;
844         }
845
846         return count;
847 }
848
849 static const struct file_operations fan_proc_fops = {
850         .owner          = THIS_MODULE,
851         .open           = fan_proc_open,
852         .read           = seq_read,
853         .llseek         = seq_lseek,
854         .release        = single_release,
855         .write          = fan_proc_write,
856 };
857
858 static int keys_proc_show(struct seq_file *m, void *v)
859 {
860         struct toshiba_acpi_dev *dev = m->private;
861         u32 hci_result;
862         u32 value;
863
864         if (!dev->key_event_valid && dev->system_event_supported) {
865                 hci_read1(dev, HCI_SYSTEM_EVENT, &value, &hci_result);
866                 if (hci_result == HCI_SUCCESS) {
867                         dev->key_event_valid = 1;
868                         dev->last_key_event = value;
869                 } else if (hci_result == HCI_EMPTY) {
870                         /* better luck next time */
871                 } else if (hci_result == HCI_NOT_SUPPORTED) {
872                         /* This is a workaround for an unresolved issue on
873                          * some machines where system events sporadically
874                          * become disabled. */
875                         hci_write1(dev, HCI_SYSTEM_EVENT, 1, &hci_result);
876                         pr_notice("Re-enabled hotkeys\n");
877                 } else {
878                         pr_err("Error reading hotkey status\n");
879                         return -EIO;
880                 }
881         }
882
883         seq_printf(m, "hotkey_ready:            %d\n", dev->key_event_valid);
884         seq_printf(m, "hotkey:                  0x%04x\n", dev->last_key_event);
885         return 0;
886 }
887
888 static int keys_proc_open(struct inode *inode, struct file *file)
889 {
890         return single_open(file, keys_proc_show, PDE_DATA(inode));
891 }
892
893 static ssize_t keys_proc_write(struct file *file, const char __user *buf,
894                                size_t count, loff_t *pos)
895 {
896         struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
897         char cmd[42];
898         size_t len;
899         int value;
900
901         len = min(count, sizeof(cmd) - 1);
902         if (copy_from_user(cmd, buf, len))
903                 return -EFAULT;
904         cmd[len] = '\0';
905
906         if (sscanf(cmd, " hotkey_ready : %i", &value) == 1 && value == 0) {
907                 dev->key_event_valid = 0;
908         } else {
909                 return -EINVAL;
910         }
911
912         return count;
913 }
914
915 static const struct file_operations keys_proc_fops = {
916         .owner          = THIS_MODULE,
917         .open           = keys_proc_open,
918         .read           = seq_read,
919         .llseek         = seq_lseek,
920         .release        = single_release,
921         .write          = keys_proc_write,
922 };
923
924 static int version_proc_show(struct seq_file *m, void *v)
925 {
926         seq_printf(m, "driver:                  %s\n", TOSHIBA_ACPI_VERSION);
927         seq_printf(m, "proc_interface:          %d\n", PROC_INTERFACE_VERSION);
928         return 0;
929 }
930
931 static int version_proc_open(struct inode *inode, struct file *file)
932 {
933         return single_open(file, version_proc_show, PDE_DATA(inode));
934 }
935
936 static const struct file_operations version_proc_fops = {
937         .owner          = THIS_MODULE,
938         .open           = version_proc_open,
939         .read           = seq_read,
940         .llseek         = seq_lseek,
941         .release        = single_release,
942 };
943
944 /* proc and module init
945  */
946
947 #define PROC_TOSHIBA            "toshiba"
948
949 static void create_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
950 {
951         if (dev->backlight_dev)
952                 proc_create_data("lcd", S_IRUGO | S_IWUSR, toshiba_proc_dir,
953                                  &lcd_proc_fops, dev);
954         if (dev->video_supported)
955                 proc_create_data("video", S_IRUGO | S_IWUSR, toshiba_proc_dir,
956                                  &video_proc_fops, dev);
957         if (dev->fan_supported)
958                 proc_create_data("fan", S_IRUGO | S_IWUSR, toshiba_proc_dir,
959                                  &fan_proc_fops, dev);
960         if (dev->hotkey_dev)
961                 proc_create_data("keys", S_IRUGO | S_IWUSR, toshiba_proc_dir,
962                                  &keys_proc_fops, dev);
963         proc_create_data("version", S_IRUGO, toshiba_proc_dir,
964                          &version_proc_fops, dev);
965 }
966
967 static void remove_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
968 {
969         if (dev->backlight_dev)
970                 remove_proc_entry("lcd", toshiba_proc_dir);
971         if (dev->video_supported)
972                 remove_proc_entry("video", toshiba_proc_dir);
973         if (dev->fan_supported)
974                 remove_proc_entry("fan", toshiba_proc_dir);
975         if (dev->hotkey_dev)
976                 remove_proc_entry("keys", toshiba_proc_dir);
977         remove_proc_entry("version", toshiba_proc_dir);
978 }
979
980 static const struct backlight_ops toshiba_backlight_data = {
981         .options = BL_CORE_SUSPENDRESUME,
982         .get_brightness = get_lcd_brightness,
983         .update_status  = set_lcd_status,
984 };
985
986 static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str,
987                                       struct serio *port)
988 {
989         if (str & 0x20)
990                 return false;
991
992         if (unlikely(data == 0xe0))
993                 return false;
994
995         if ((data & 0x7f) == TOS1900_FN_SCAN) {
996                 schedule_work(&toshiba_acpi->hotkey_work);
997                 return true;
998         }
999
1000         return false;
1001 }
1002
1003 static void toshiba_acpi_hotkey_work(struct work_struct *work)
1004 {
1005         acpi_handle ec_handle = ec_get_handle();
1006         acpi_status status;
1007
1008         if (!ec_handle)
1009                 return;
1010
1011         status = acpi_evaluate_object(ec_handle, "NTFY", NULL, NULL);
1012         if (ACPI_FAILURE(status))
1013                 pr_err("ACPI NTFY method execution failed\n");
1014 }
1015
1016 /*
1017  * Returns hotkey scancode, or < 0 on failure.
1018  */
1019 static int toshiba_acpi_query_hotkey(struct toshiba_acpi_dev *dev)
1020 {
1021         unsigned long long value;
1022         acpi_status status;
1023
1024         status = acpi_evaluate_integer(dev->acpi_dev->handle, "INFO",
1025                                       NULL, &value);
1026         if (ACPI_FAILURE(status)) {
1027                 pr_err("ACPI INFO method execution failed\n");
1028                 return -EIO;
1029         }
1030
1031         return value;
1032 }
1033
1034 static void toshiba_acpi_report_hotkey(struct toshiba_acpi_dev *dev,
1035                                        int scancode)
1036 {
1037         if (scancode == 0x100)
1038                 return;
1039
1040         /* act on key press; ignore key release */
1041         if (scancode & 0x80)
1042                 return;
1043
1044         if (!sparse_keymap_report_event(dev->hotkey_dev, scancode, 1, true))
1045                 pr_info("Unknown key %x\n", scancode);
1046 }
1047
1048 static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
1049 {
1050         acpi_status status;
1051         acpi_handle ec_handle;
1052         int error;
1053         u32 hci_result;
1054
1055         dev->hotkey_dev = input_allocate_device();
1056         if (!dev->hotkey_dev)
1057                 return -ENOMEM;
1058
1059         dev->hotkey_dev->name = "Toshiba input device";
1060         dev->hotkey_dev->phys = "toshiba_acpi/input0";
1061         dev->hotkey_dev->id.bustype = BUS_HOST;
1062
1063         error = sparse_keymap_setup(dev->hotkey_dev, toshiba_acpi_keymap, NULL);
1064         if (error)
1065                 goto err_free_dev;
1066
1067         /*
1068          * For some machines the SCI responsible for providing hotkey
1069          * notification doesn't fire. We can trigger the notification
1070          * whenever the Fn key is pressed using the NTFY method, if
1071          * supported, so if it's present set up an i8042 key filter
1072          * for this purpose.
1073          */
1074         status = AE_ERROR;
1075         ec_handle = ec_get_handle();
1076         if (ec_handle && acpi_has_method(ec_handle, "NTFY")) {
1077                 INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work);
1078
1079                 error = i8042_install_filter(toshiba_acpi_i8042_filter);
1080                 if (error) {
1081                         pr_err("Error installing key filter\n");
1082                         goto err_free_keymap;
1083                 }
1084
1085                 dev->ntfy_supported = 1;
1086         }
1087
1088         /*
1089          * Determine hotkey query interface. Prefer using the INFO
1090          * method when it is available.
1091          */
1092         if (acpi_has_method(dev->acpi_dev->handle, "INFO"))
1093                 dev->info_supported = 1;
1094         else {
1095                 hci_write1(dev, HCI_SYSTEM_EVENT, 1, &hci_result);
1096                 if (hci_result == HCI_SUCCESS)
1097                         dev->system_event_supported = 1;
1098         }
1099
1100         if (!dev->info_supported && !dev->system_event_supported) {
1101                 pr_warn("No hotkey query interface found\n");
1102                 goto err_remove_filter;
1103         }
1104
1105         status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB", NULL, NULL);
1106         if (ACPI_FAILURE(status)) {
1107                 pr_info("Unable to enable hotkeys\n");
1108                 error = -ENODEV;
1109                 goto err_remove_filter;
1110         }
1111
1112         error = input_register_device(dev->hotkey_dev);
1113         if (error) {
1114                 pr_info("Unable to register input device\n");
1115                 goto err_remove_filter;
1116         }
1117
1118         hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE, &hci_result);
1119         return 0;
1120
1121  err_remove_filter:
1122         if (dev->ntfy_supported)
1123                 i8042_remove_filter(toshiba_acpi_i8042_filter);
1124  err_free_keymap:
1125         sparse_keymap_free(dev->hotkey_dev);
1126  err_free_dev:
1127         input_free_device(dev->hotkey_dev);
1128         dev->hotkey_dev = NULL;
1129         return error;
1130 }
1131
1132 static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
1133 {
1134         struct backlight_properties props;
1135         int brightness;
1136         int ret;
1137         bool enabled;
1138
1139         /*
1140          * Some machines don't support the backlight methods at all, and
1141          * others support it read-only. Either of these is pretty useless,
1142          * so only register the backlight device if the backlight method
1143          * supports both reads and writes.
1144          */
1145         brightness = __get_lcd_brightness(dev);
1146         if (brightness < 0)
1147                 return 0;
1148         ret = set_lcd_brightness(dev, brightness);
1149         if (ret) {
1150                 pr_debug("Backlight method is read-only, disabling backlight support\n");
1151                 return 0;
1152         }
1153
1154         /* Determine whether or not BIOS supports transflective backlight */
1155         ret = get_tr_backlight_status(dev, &enabled);
1156         dev->tr_backlight_supported = !ret;
1157
1158         memset(&props, 0, sizeof(props));
1159         props.type = BACKLIGHT_PLATFORM;
1160         props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;
1161
1162         /* adding an extra level and having 0 change to transflective mode */
1163         if (dev->tr_backlight_supported)
1164                 props.max_brightness++;
1165
1166         dev->backlight_dev = backlight_device_register("toshiba",
1167                                                        &dev->acpi_dev->dev,
1168                                                        dev,
1169                                                        &toshiba_backlight_data,
1170                                                        &props);
1171         if (IS_ERR(dev->backlight_dev)) {
1172                 ret = PTR_ERR(dev->backlight_dev);
1173                 pr_err("Could not register toshiba backlight device\n");
1174                 dev->backlight_dev = NULL;
1175                 return ret;
1176         }
1177
1178         dev->backlight_dev->props.brightness = brightness;
1179         return 0;
1180 }
1181
1182 static int toshiba_acpi_remove(struct acpi_device *acpi_dev)
1183 {
1184         struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
1185
1186         remove_toshiba_proc_entries(dev);
1187
1188         if (dev->ntfy_supported) {
1189                 i8042_remove_filter(toshiba_acpi_i8042_filter);
1190                 cancel_work_sync(&dev->hotkey_work);
1191         }
1192
1193         if (dev->hotkey_dev) {
1194                 input_unregister_device(dev->hotkey_dev);
1195                 sparse_keymap_free(dev->hotkey_dev);
1196         }
1197
1198         if (dev->bt_rfk) {
1199                 rfkill_unregister(dev->bt_rfk);
1200                 rfkill_destroy(dev->bt_rfk);
1201         }
1202
1203         if (dev->backlight_dev)
1204                 backlight_device_unregister(dev->backlight_dev);
1205
1206         if (dev->illumination_supported)
1207                 led_classdev_unregister(&dev->led_dev);
1208
1209         if (toshiba_acpi)
1210                 toshiba_acpi = NULL;
1211
1212         kfree(dev);
1213
1214         return 0;
1215 }
1216
1217 static const char *find_hci_method(acpi_handle handle)
1218 {
1219         if (acpi_has_method(handle, "GHCI"))
1220                 return "GHCI";
1221
1222         if (acpi_has_method(handle, "SPFC"))
1223                 return "SPFC";
1224
1225         return NULL;
1226 }
1227
1228 static int toshiba_acpi_add(struct acpi_device *acpi_dev)
1229 {
1230         struct toshiba_acpi_dev *dev;
1231         const char *hci_method;
1232         u32 dummy;
1233         bool bt_present;
1234         int ret = 0;
1235
1236         if (toshiba_acpi)
1237                 return -EBUSY;
1238
1239         pr_info("Toshiba Laptop ACPI Extras version %s\n",
1240                TOSHIBA_ACPI_VERSION);
1241
1242         hci_method = find_hci_method(acpi_dev->handle);
1243         if (!hci_method) {
1244                 pr_err("HCI interface not found\n");
1245                 return -ENODEV;
1246         }
1247
1248         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1249         if (!dev)
1250                 return -ENOMEM;
1251         dev->acpi_dev = acpi_dev;
1252         dev->method_hci = hci_method;
1253         acpi_dev->driver_data = dev;
1254
1255         if (toshiba_acpi_setup_keyboard(dev))
1256                 pr_info("Unable to activate hotkeys\n");
1257
1258         mutex_init(&dev->mutex);
1259
1260         ret = toshiba_acpi_setup_backlight(dev);
1261         if (ret)
1262                 goto error;
1263
1264         /* Register rfkill switch for Bluetooth */
1265         if (hci_get_bt_present(dev, &bt_present) == HCI_SUCCESS && bt_present) {
1266                 dev->bt_rfk = rfkill_alloc("Toshiba Bluetooth",
1267                                            &acpi_dev->dev,
1268                                            RFKILL_TYPE_BLUETOOTH,
1269                                            &toshiba_rfk_ops,
1270                                            dev);
1271                 if (!dev->bt_rfk) {
1272                         pr_err("unable to allocate rfkill device\n");
1273                         ret = -ENOMEM;
1274                         goto error;
1275                 }
1276
1277                 ret = rfkill_register(dev->bt_rfk);
1278                 if (ret) {
1279                         pr_err("unable to register rfkill device\n");
1280                         rfkill_destroy(dev->bt_rfk);
1281                         goto error;
1282                 }
1283         }
1284
1285         if (toshiba_illumination_available(dev)) {
1286                 dev->led_dev.name = "toshiba::illumination";
1287                 dev->led_dev.max_brightness = 1;
1288                 dev->led_dev.brightness_set = toshiba_illumination_set;
1289                 dev->led_dev.brightness_get = toshiba_illumination_get;
1290                 if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev))
1291                         dev->illumination_supported = 1;
1292         }
1293
1294         /* Determine whether or not BIOS supports fan and video interfaces */
1295
1296         ret = get_video_status(dev, &dummy);
1297         dev->video_supported = !ret;
1298
1299         ret = get_fan_status(dev, &dummy);
1300         dev->fan_supported = !ret;
1301
1302         create_toshiba_proc_entries(dev);
1303
1304         toshiba_acpi = dev;
1305
1306         return 0;
1307
1308 error:
1309         toshiba_acpi_remove(acpi_dev);
1310         return ret;
1311 }
1312
1313 static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
1314 {
1315         struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
1316         u32 hci_result, value;
1317         int retries = 3;
1318         int scancode;
1319
1320         if (event != 0x80)
1321                 return;
1322
1323         if (dev->info_supported) {
1324                 scancode = toshiba_acpi_query_hotkey(dev);
1325                 if (scancode < 0)
1326                         pr_err("Failed to query hotkey event\n");
1327                 else if (scancode != 0)
1328                         toshiba_acpi_report_hotkey(dev, scancode);
1329         } else if (dev->system_event_supported) {
1330                 do {
1331                         hci_read1(dev, HCI_SYSTEM_EVENT, &value, &hci_result);
1332                         switch (hci_result) {
1333                         case HCI_SUCCESS:
1334                                 toshiba_acpi_report_hotkey(dev, (int)value);
1335                                 break;
1336                         case HCI_NOT_SUPPORTED:
1337                                 /*
1338                                  * This is a workaround for an unresolved
1339                                  * issue on some machines where system events
1340                                  * sporadically become disabled.
1341                                  */
1342                                 hci_write1(dev, HCI_SYSTEM_EVENT, 1,
1343                                            &hci_result);
1344                                 pr_notice("Re-enabled hotkeys\n");
1345                                 /* fall through */
1346                         default:
1347                                 retries--;
1348                                 break;
1349                         }
1350                 } while (retries && hci_result != HCI_EMPTY);
1351         }
1352 }
1353
1354 #ifdef CONFIG_PM_SLEEP
1355 static int toshiba_acpi_suspend(struct device *device)
1356 {
1357         struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
1358         u32 result;
1359
1360         if (dev->hotkey_dev)
1361                 hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_DISABLE, &result);
1362
1363         return 0;
1364 }
1365
1366 static int toshiba_acpi_resume(struct device *device)
1367 {
1368         struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
1369         u32 result;
1370
1371         if (dev->hotkey_dev)
1372                 hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE, &result);
1373
1374         return 0;
1375 }
1376 #endif
1377
1378 static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
1379                          toshiba_acpi_suspend, toshiba_acpi_resume);
1380
1381 static struct acpi_driver toshiba_acpi_driver = {
1382         .name   = "Toshiba ACPI driver",
1383         .owner  = THIS_MODULE,
1384         .ids    = toshiba_device_ids,
1385         .flags  = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
1386         .ops    = {
1387                 .add            = toshiba_acpi_add,
1388                 .remove         = toshiba_acpi_remove,
1389                 .notify         = toshiba_acpi_notify,
1390         },
1391         .drv.pm = &toshiba_acpi_pm,
1392 };
1393
1394 static int __init toshiba_acpi_init(void)
1395 {
1396         int ret;
1397
1398         /*
1399          * Machines with this WMI guid aren't supported due to bugs in
1400          * their AML. This check relies on wmi initializing before
1401          * toshiba_acpi to guarantee guids have been identified.
1402          */
1403         if (wmi_has_guid(TOSHIBA_WMI_EVENT_GUID))
1404                 return -ENODEV;
1405
1406         toshiba_proc_dir = proc_mkdir(PROC_TOSHIBA, acpi_root_dir);
1407         if (!toshiba_proc_dir) {
1408                 pr_err("Unable to create proc dir " PROC_TOSHIBA "\n");
1409                 return -ENODEV;
1410         }
1411
1412         ret = acpi_bus_register_driver(&toshiba_acpi_driver);
1413         if (ret) {
1414                 pr_err("Failed to register ACPI driver: %d\n", ret);
1415                 remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
1416         }
1417
1418         return ret;
1419 }
1420
1421 static void __exit toshiba_acpi_exit(void)
1422 {
1423         acpi_bus_unregister_driver(&toshiba_acpi_driver);
1424         if (toshiba_proc_dir)
1425                 remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
1426 }
1427
1428 module_init(toshiba_acpi_init);
1429 module_exit(toshiba_acpi_exit);