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