xref: /linux/drivers/platform/x86/toshiba_acpi.c (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
1 /*
2  *  toshiba_acpi.c - Toshiba Laptop ACPI Extras
3  *
4  *  Copyright (C) 2002-2004 John Belmonte
5  *  Copyright (C) 2008 Philip Langdale
6  *  Copyright (C) 2010 Pierre Ducroquet
7  *  Copyright (C) 2014-2015 Azael Avalos
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  *  The full GNU General Public License is included in this distribution in
20  *  the file called "COPYING".
21  *
22  *  The devolpment page for this driver is located at
23  *  http://memebeam.org/toys/ToshibaAcpiDriver.
24  *
25  *  Credits:
26  *	Jonathan A. Buzzard - Toshiba HCI info, and critical tips on reverse
27  *		engineering the Windows drivers
28  *	Yasushi Nagato - changes for linux kernel 2.4 -> 2.5
29  *	Rob Miller - TV out and hotkeys help
30  */
31 
32 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
33 
34 #define TOSHIBA_ACPI_VERSION	"0.23"
35 #define PROC_INTERFACE_VERSION	1
36 
37 #include <linux/kernel.h>
38 #include <linux/module.h>
39 #include <linux/init.h>
40 #include <linux/types.h>
41 #include <linux/proc_fs.h>
42 #include <linux/seq_file.h>
43 #include <linux/backlight.h>
44 #include <linux/input.h>
45 #include <linux/input/sparse-keymap.h>
46 #include <linux/leds.h>
47 #include <linux/slab.h>
48 #include <linux/workqueue.h>
49 #include <linux/i8042.h>
50 #include <linux/acpi.h>
51 #include <linux/dmi.h>
52 #include <linux/uaccess.h>
53 #include <linux/miscdevice.h>
54 #include <linux/toshiba.h>
55 #include <acpi/video.h>
56 
57 MODULE_AUTHOR("John Belmonte");
58 MODULE_DESCRIPTION("Toshiba Laptop ACPI Extras Driver");
59 MODULE_LICENSE("GPL");
60 
61 #define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
62 
63 /* Scan code for Fn key on TOS1900 models */
64 #define TOS1900_FN_SCAN		0x6e
65 
66 /* Toshiba ACPI method paths */
67 #define METHOD_VIDEO_OUT	"\\_SB_.VALX.DSSX"
68 
69 /*
70  * The Toshiba configuration interface is composed of the HCI and the SCI,
71  * which are defined as follows:
72  *
73  * HCI is Toshiba's "Hardware Control Interface" which is supposed to
74  * be uniform across all their models.  Ideally we would just call
75  * dedicated ACPI methods instead of using this primitive interface.
76  * However the ACPI methods seem to be incomplete in some areas (for
77  * example they allow setting, but not reading, the LCD brightness value),
78  * so this is still useful.
79  *
80  * SCI stands for "System Configuration Interface" which aim is to
81  * conceal differences in hardware between different models.
82  */
83 
84 #define TCI_WORDS			6
85 
86 /* Operations */
87 #define HCI_SET				0xff00
88 #define HCI_GET				0xfe00
89 #define SCI_OPEN			0xf100
90 #define SCI_CLOSE			0xf200
91 #define SCI_GET				0xf300
92 #define SCI_SET				0xf400
93 
94 /* Return codes */
95 #define TOS_SUCCESS			0x0000
96 #define TOS_SUCCESS2			0x0001
97 #define TOS_OPEN_CLOSE_OK		0x0044
98 #define TOS_FAILURE			0x1000
99 #define TOS_NOT_SUPPORTED		0x8000
100 #define TOS_ALREADY_OPEN		0x8100
101 #define TOS_NOT_OPENED			0x8200
102 #define TOS_INPUT_DATA_ERROR		0x8300
103 #define TOS_WRITE_PROTECTED		0x8400
104 #define TOS_NOT_PRESENT			0x8600
105 #define TOS_FIFO_EMPTY			0x8c00
106 #define TOS_DATA_NOT_AVAILABLE		0x8d20
107 #define TOS_NOT_INITIALIZED		0x8d50
108 #define TOS_NOT_INSTALLED		0x8e00
109 
110 /* Registers */
111 #define HCI_FAN				0x0004
112 #define HCI_TR_BACKLIGHT		0x0005
113 #define HCI_SYSTEM_EVENT		0x0016
114 #define HCI_VIDEO_OUT			0x001c
115 #define HCI_HOTKEY_EVENT		0x001e
116 #define HCI_LCD_BRIGHTNESS		0x002a
117 #define HCI_ACCELEROMETER		0x006d
118 #define HCI_KBD_ILLUMINATION		0x0095
119 #define HCI_ECO_MODE			0x0097
120 #define HCI_ACCELEROMETER2		0x00a6
121 #define HCI_SYSTEM_INFO			0xc000
122 #define SCI_PANEL_POWER_ON		0x010d
123 #define SCI_ILLUMINATION		0x014e
124 #define SCI_USB_SLEEP_CHARGE		0x0150
125 #define SCI_KBD_ILLUM_STATUS		0x015c
126 #define SCI_USB_SLEEP_MUSIC		0x015e
127 #define SCI_USB_THREE			0x0169
128 #define SCI_TOUCHPAD			0x050e
129 #define SCI_KBD_FUNCTION_KEYS		0x0522
130 
131 /* Field definitions */
132 #define HCI_ACCEL_MASK			0x7fff
133 #define HCI_HOTKEY_DISABLE		0x0b
134 #define HCI_HOTKEY_ENABLE		0x09
135 #define HCI_HOTKEY_SPECIAL_FUNCTIONS	0x10
136 #define HCI_LCD_BRIGHTNESS_BITS		3
137 #define HCI_LCD_BRIGHTNESS_SHIFT	(16-HCI_LCD_BRIGHTNESS_BITS)
138 #define HCI_LCD_BRIGHTNESS_LEVELS	(1 << HCI_LCD_BRIGHTNESS_BITS)
139 #define HCI_MISC_SHIFT			0x10
140 #define HCI_SYSTEM_TYPE1		0x10
141 #define HCI_SYSTEM_TYPE2		0x11
142 #define HCI_VIDEO_OUT_LCD		0x1
143 #define HCI_VIDEO_OUT_CRT		0x2
144 #define HCI_VIDEO_OUT_TV		0x4
145 #define SCI_KBD_MODE_MASK		0x1f
146 #define SCI_KBD_MODE_FNZ		0x1
147 #define SCI_KBD_MODE_AUTO		0x2
148 #define SCI_KBD_MODE_ON			0x8
149 #define SCI_KBD_MODE_OFF		0x10
150 #define SCI_KBD_TIME_MAX		0x3c001a
151 #define SCI_USB_CHARGE_MODE_MASK	0xff
152 #define SCI_USB_CHARGE_DISABLED		0x00
153 #define SCI_USB_CHARGE_ALTERNATE	0x09
154 #define SCI_USB_CHARGE_TYPICAL		0x11
155 #define SCI_USB_CHARGE_AUTO		0x21
156 #define SCI_USB_CHARGE_BAT_MASK		0x7
157 #define SCI_USB_CHARGE_BAT_LVL_OFF	0x1
158 #define SCI_USB_CHARGE_BAT_LVL_ON	0x4
159 #define SCI_USB_CHARGE_BAT_LVL		0x0200
160 #define SCI_USB_CHARGE_RAPID_DSP	0x0300
161 
162 struct toshiba_acpi_dev {
163 	struct acpi_device *acpi_dev;
164 	const char *method_hci;
165 	struct input_dev *hotkey_dev;
166 	struct work_struct hotkey_work;
167 	struct backlight_device *backlight_dev;
168 	struct led_classdev led_dev;
169 	struct led_classdev kbd_led;
170 	struct led_classdev eco_led;
171 	struct miscdevice miscdev;
172 
173 	int force_fan;
174 	int last_key_event;
175 	int key_event_valid;
176 	int kbd_type;
177 	int kbd_mode;
178 	int kbd_time;
179 	int usbsc_bat_level;
180 	int usbsc_mode_base;
181 	int hotkey_event_type;
182 
183 	unsigned int illumination_supported:1;
184 	unsigned int video_supported:1;
185 	unsigned int fan_supported:1;
186 	unsigned int system_event_supported:1;
187 	unsigned int ntfy_supported:1;
188 	unsigned int info_supported:1;
189 	unsigned int tr_backlight_supported:1;
190 	unsigned int kbd_illum_supported:1;
191 	unsigned int touchpad_supported:1;
192 	unsigned int eco_supported:1;
193 	unsigned int accelerometer_supported:1;
194 	unsigned int usb_sleep_charge_supported:1;
195 	unsigned int usb_rapid_charge_supported:1;
196 	unsigned int usb_sleep_music_supported:1;
197 	unsigned int kbd_function_keys_supported:1;
198 	unsigned int panel_power_on_supported:1;
199 	unsigned int usb_three_supported:1;
200 	unsigned int sysfs_created:1;
201 
202 	bool kbd_led_registered;
203 	bool illumination_led_registered;
204 	bool eco_led_registered;
205 };
206 
207 static struct toshiba_acpi_dev *toshiba_acpi;
208 
209 static const struct acpi_device_id toshiba_device_ids[] = {
210 	{"TOS6200", 0},
211 	{"TOS6207", 0},
212 	{"TOS6208", 0},
213 	{"TOS1900", 0},
214 	{"", 0},
215 };
216 MODULE_DEVICE_TABLE(acpi, toshiba_device_ids);
217 
218 static const struct key_entry toshiba_acpi_keymap[] = {
219 	{ KE_KEY, 0x9e, { KEY_RFKILL } },
220 	{ KE_KEY, 0x101, { KEY_MUTE } },
221 	{ KE_KEY, 0x102, { KEY_ZOOMOUT } },
222 	{ KE_KEY, 0x103, { KEY_ZOOMIN } },
223 	{ KE_KEY, 0x10f, { KEY_TAB } },
224 	{ KE_KEY, 0x12c, { KEY_KBDILLUMTOGGLE } },
225 	{ KE_KEY, 0x139, { KEY_ZOOMRESET } },
226 	{ KE_KEY, 0x13b, { KEY_COFFEE } },
227 	{ KE_KEY, 0x13c, { KEY_BATTERY } },
228 	{ KE_KEY, 0x13d, { KEY_SLEEP } },
229 	{ KE_KEY, 0x13e, { KEY_SUSPEND } },
230 	{ KE_KEY, 0x13f, { KEY_SWITCHVIDEOMODE } },
231 	{ KE_KEY, 0x140, { KEY_BRIGHTNESSDOWN } },
232 	{ KE_KEY, 0x141, { KEY_BRIGHTNESSUP } },
233 	{ KE_KEY, 0x142, { KEY_WLAN } },
234 	{ KE_KEY, 0x143, { KEY_TOUCHPAD_TOGGLE } },
235 	{ KE_KEY, 0x17f, { KEY_FN } },
236 	{ KE_KEY, 0xb05, { KEY_PROG2 } },
237 	{ KE_KEY, 0xb06, { KEY_WWW } },
238 	{ KE_KEY, 0xb07, { KEY_MAIL } },
239 	{ KE_KEY, 0xb30, { KEY_STOP } },
240 	{ KE_KEY, 0xb31, { KEY_PREVIOUSSONG } },
241 	{ KE_KEY, 0xb32, { KEY_NEXTSONG } },
242 	{ KE_KEY, 0xb33, { KEY_PLAYPAUSE } },
243 	{ KE_KEY, 0xb5a, { KEY_MEDIA } },
244 	{ KE_IGNORE, 0x1430, { KEY_RESERVED } }, /* Wake from sleep */
245 	{ KE_IGNORE, 0x1501, { KEY_RESERVED } }, /* Output changed */
246 	{ KE_IGNORE, 0x1502, { KEY_RESERVED } }, /* HDMI plugged/unplugged */
247 	{ KE_IGNORE, 0x1ABE, { KEY_RESERVED } }, /* Protection level set */
248 	{ KE_IGNORE, 0x1ABF, { KEY_RESERVED } }, /* Protection level off */
249 	{ KE_END, 0 },
250 };
251 
252 static const struct key_entry toshiba_acpi_alt_keymap[] = {
253 	{ KE_KEY, 0x102, { KEY_ZOOMOUT } },
254 	{ KE_KEY, 0x103, { KEY_ZOOMIN } },
255 	{ KE_KEY, 0x12c, { KEY_KBDILLUMTOGGLE } },
256 	{ KE_KEY, 0x139, { KEY_ZOOMRESET } },
257 	{ KE_KEY, 0x13c, { KEY_BRIGHTNESSDOWN } },
258 	{ KE_KEY, 0x13d, { KEY_BRIGHTNESSUP } },
259 	{ KE_KEY, 0x13e, { KEY_SWITCHVIDEOMODE } },
260 	{ KE_KEY, 0x13f, { KEY_TOUCHPAD_TOGGLE } },
261 	{ KE_KEY, 0x157, { KEY_MUTE } },
262 	{ KE_KEY, 0x158, { KEY_WLAN } },
263 	{ KE_END, 0 },
264 };
265 
266 /*
267  * List of models which have a broken acpi-video backlight interface and thus
268  * need to use the toshiba (vendor) interface instead.
269  */
270 static const struct dmi_system_id toshiba_vendor_backlight_dmi[] = {
271 	{}
272 };
273 
274 /*
275  * Utility
276  */
277 
278 static inline void _set_bit(u32 *word, u32 mask, int value)
279 {
280 	*word = (*word & ~mask) | (mask * value);
281 }
282 
283 /*
284  * ACPI interface wrappers
285  */
286 
287 static int write_acpi_int(const char *methodName, int val)
288 {
289 	acpi_status status;
290 
291 	status = acpi_execute_simple_method(NULL, (char *)methodName, val);
292 	return (status == AE_OK) ? 0 : -EIO;
293 }
294 
295 /*
296  * Perform a raw configuration call.  Here we don't care about input or output
297  * buffer format.
298  */
299 static acpi_status tci_raw(struct toshiba_acpi_dev *dev,
300 			   const u32 in[TCI_WORDS], u32 out[TCI_WORDS])
301 {
302 	struct acpi_object_list params;
303 	union acpi_object in_objs[TCI_WORDS];
304 	struct acpi_buffer results;
305 	union acpi_object out_objs[TCI_WORDS + 1];
306 	acpi_status status;
307 	int i;
308 
309 	params.count = TCI_WORDS;
310 	params.pointer = in_objs;
311 	for (i = 0; i < TCI_WORDS; ++i) {
312 		in_objs[i].type = ACPI_TYPE_INTEGER;
313 		in_objs[i].integer.value = in[i];
314 	}
315 
316 	results.length = sizeof(out_objs);
317 	results.pointer = out_objs;
318 
319 	status = acpi_evaluate_object(dev->acpi_dev->handle,
320 				      (char *)dev->method_hci, &params,
321 				      &results);
322 	if ((status == AE_OK) && (out_objs->package.count <= TCI_WORDS)) {
323 		for (i = 0; i < out_objs->package.count; ++i)
324 			out[i] = out_objs->package.elements[i].integer.value;
325 	}
326 
327 	return status;
328 }
329 
330 /*
331  * Common hci tasks
332  *
333  * In addition to the ACPI status, the HCI system returns a result which
334  * may be useful (such as "not supported").
335  */
336 
337 static u32 hci_write(struct toshiba_acpi_dev *dev, u32 reg, u32 in1)
338 {
339 	u32 in[TCI_WORDS] = { HCI_SET, reg, in1, 0, 0, 0 };
340 	u32 out[TCI_WORDS];
341 	acpi_status status = tci_raw(dev, in, out);
342 
343 	return ACPI_SUCCESS(status) ? out[0] : TOS_FAILURE;
344 }
345 
346 static u32 hci_read(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1)
347 {
348 	u32 in[TCI_WORDS] = { HCI_GET, reg, 0, 0, 0, 0 };
349 	u32 out[TCI_WORDS];
350 	acpi_status status = tci_raw(dev, in, out);
351 
352 	if (ACPI_FAILURE(status))
353 		return TOS_FAILURE;
354 
355 	*out1 = out[2];
356 
357 	return out[0];
358 }
359 
360 /*
361  * Common sci tasks
362  */
363 
364 static int sci_open(struct toshiba_acpi_dev *dev)
365 {
366 	u32 in[TCI_WORDS] = { SCI_OPEN, 0, 0, 0, 0, 0 };
367 	u32 out[TCI_WORDS];
368 	acpi_status status;
369 
370 	status = tci_raw(dev, in, out);
371 	if  (ACPI_FAILURE(status)) {
372 		pr_err("ACPI call to open SCI failed\n");
373 		return 0;
374 	}
375 
376 	if (out[0] == TOS_OPEN_CLOSE_OK) {
377 		return 1;
378 	} else if (out[0] == TOS_ALREADY_OPEN) {
379 		pr_info("Toshiba SCI already opened\n");
380 		return 1;
381 	} else if (out[0] == TOS_NOT_SUPPORTED) {
382 		/*
383 		 * Some BIOSes do not have the SCI open/close functions
384 		 * implemented and return 0x8000 (Not Supported), failing to
385 		 * register some supported features.
386 		 *
387 		 * Simply return 1 if we hit those affected laptops to make the
388 		 * supported features work.
389 		 *
390 		 * In the case that some laptops really do not support the SCI,
391 		 * all the SCI dependent functions check for TOS_NOT_SUPPORTED,
392 		 * and thus, not registering support for the queried feature.
393 		 */
394 		return 1;
395 	} else if (out[0] == TOS_NOT_PRESENT) {
396 		pr_info("Toshiba SCI is not present\n");
397 	}
398 
399 	return 0;
400 }
401 
402 static void sci_close(struct toshiba_acpi_dev *dev)
403 {
404 	u32 in[TCI_WORDS] = { SCI_CLOSE, 0, 0, 0, 0, 0 };
405 	u32 out[TCI_WORDS];
406 	acpi_status status;
407 
408 	status = tci_raw(dev, in, out);
409 	if (ACPI_FAILURE(status)) {
410 		pr_err("ACPI call to close SCI failed\n");
411 		return;
412 	}
413 
414 	if (out[0] == TOS_OPEN_CLOSE_OK)
415 		return;
416 	else if (out[0] == TOS_NOT_OPENED)
417 		pr_info("Toshiba SCI not opened\n");
418 	else if (out[0] == TOS_NOT_PRESENT)
419 		pr_info("Toshiba SCI is not present\n");
420 }
421 
422 static u32 sci_read(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1)
423 {
424 	u32 in[TCI_WORDS] = { SCI_GET, reg, 0, 0, 0, 0 };
425 	u32 out[TCI_WORDS];
426 	acpi_status status = tci_raw(dev, in, out);
427 
428 	if (ACPI_FAILURE(status))
429 		return TOS_FAILURE;
430 
431 	*out1 = out[2];
432 
433 	return out[0];
434 }
435 
436 static u32 sci_write(struct toshiba_acpi_dev *dev, u32 reg, u32 in1)
437 {
438 	u32 in[TCI_WORDS] = { SCI_SET, reg, in1, 0, 0, 0 };
439 	u32 out[TCI_WORDS];
440 	acpi_status status = tci_raw(dev, in, out);
441 
442 	return ACPI_SUCCESS(status) ? out[0] : TOS_FAILURE;
443 }
444 
445 /* Illumination support */
446 static void toshiba_illumination_available(struct toshiba_acpi_dev *dev)
447 {
448 	u32 in[TCI_WORDS] = { SCI_GET, SCI_ILLUMINATION, 0, 0, 0, 0 };
449 	u32 out[TCI_WORDS];
450 	acpi_status status;
451 
452 	dev->illumination_supported = 0;
453 	dev->illumination_led_registered = false;
454 
455 	if (!sci_open(dev))
456 		return;
457 
458 	status = tci_raw(dev, in, out);
459 	sci_close(dev);
460 	if (ACPI_FAILURE(status))
461 		pr_err("ACPI call to query Illumination support failed\n");
462 	else if (out[0] == TOS_SUCCESS)
463 		dev->illumination_supported = 1;
464 }
465 
466 static void toshiba_illumination_set(struct led_classdev *cdev,
467 				     enum led_brightness brightness)
468 {
469 	struct toshiba_acpi_dev *dev = container_of(cdev,
470 			struct toshiba_acpi_dev, led_dev);
471 	u32 result;
472 	u32 state;
473 
474 	/* First request : initialize communication. */
475 	if (!sci_open(dev))
476 		return;
477 
478 	/* Switch the illumination on/off */
479 	state = brightness ? 1 : 0;
480 	result = sci_write(dev, SCI_ILLUMINATION, state);
481 	sci_close(dev);
482 	if (result == TOS_FAILURE)
483 		pr_err("ACPI call for illumination failed\n");
484 }
485 
486 static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
487 {
488 	struct toshiba_acpi_dev *dev = container_of(cdev,
489 			struct toshiba_acpi_dev, led_dev);
490 	u32 state, result;
491 
492 	/* First request : initialize communication. */
493 	if (!sci_open(dev))
494 		return LED_OFF;
495 
496 	/* Check the illumination */
497 	result = sci_read(dev, SCI_ILLUMINATION, &state);
498 	sci_close(dev);
499 	if (result == TOS_FAILURE) {
500 		pr_err("ACPI call for illumination failed\n");
501 		return LED_OFF;
502 	} else if (result != TOS_SUCCESS) {
503 		return LED_OFF;
504 	}
505 
506 	return state ? LED_FULL : LED_OFF;
507 }
508 
509 /* KBD Illumination */
510 static void toshiba_kbd_illum_available(struct toshiba_acpi_dev *dev)
511 {
512 	u32 in[TCI_WORDS] = { SCI_GET, SCI_KBD_ILLUM_STATUS, 0, 0, 0, 0 };
513 	u32 out[TCI_WORDS];
514 	acpi_status status;
515 
516 	dev->kbd_illum_supported = 0;
517 	dev->kbd_led_registered = false;
518 
519 	if (!sci_open(dev))
520 		return;
521 
522 	status = tci_raw(dev, in, out);
523 	sci_close(dev);
524 	if (ACPI_FAILURE(status)) {
525 		pr_err("ACPI call to query kbd illumination support failed\n");
526 	} else if (out[0] == TOS_SUCCESS) {
527 		/*
528 		 * Check for keyboard backlight timeout max value,
529 		 * previous kbd backlight implementation set this to
530 		 * 0x3c0003, and now the new implementation set this
531 		 * to 0x3c001a, use this to distinguish between them.
532 		 */
533 		if (out[3] == SCI_KBD_TIME_MAX)
534 			dev->kbd_type = 2;
535 		else
536 			dev->kbd_type = 1;
537 		/* Get the current keyboard backlight mode */
538 		dev->kbd_mode = out[2] & SCI_KBD_MODE_MASK;
539 		/* Get the current time (1-60 seconds) */
540 		dev->kbd_time = out[2] >> HCI_MISC_SHIFT;
541 		/* Flag as supported */
542 		dev->kbd_illum_supported = 1;
543 	}
544 }
545 
546 static int toshiba_kbd_illum_status_set(struct toshiba_acpi_dev *dev, u32 time)
547 {
548 	u32 result;
549 
550 	if (!sci_open(dev))
551 		return -EIO;
552 
553 	result = sci_write(dev, SCI_KBD_ILLUM_STATUS, time);
554 	sci_close(dev);
555 	if (result == TOS_FAILURE)
556 		pr_err("ACPI call to set KBD backlight status failed\n");
557 	else if (result == TOS_NOT_SUPPORTED)
558 		return -ENODEV;
559 
560 	return result == TOS_SUCCESS ? 0 : -EIO;
561 }
562 
563 static int toshiba_kbd_illum_status_get(struct toshiba_acpi_dev *dev, u32 *time)
564 {
565 	u32 result;
566 
567 	if (!sci_open(dev))
568 		return -EIO;
569 
570 	result = sci_read(dev, SCI_KBD_ILLUM_STATUS, time);
571 	sci_close(dev);
572 	if (result == TOS_FAILURE)
573 		pr_err("ACPI call to get KBD backlight status failed\n");
574 	else if (result == TOS_NOT_SUPPORTED)
575 		return -ENODEV;
576 
577 	return result == TOS_SUCCESS ? 0 : -EIO;
578 }
579 
580 static enum led_brightness toshiba_kbd_backlight_get(struct led_classdev *cdev)
581 {
582 	struct toshiba_acpi_dev *dev = container_of(cdev,
583 			struct toshiba_acpi_dev, kbd_led);
584 	u32 result;
585 	u32 state;
586 
587 	/* Check the keyboard backlight state */
588 	result = hci_read(dev, HCI_KBD_ILLUMINATION, &state);
589 	if (result == TOS_FAILURE) {
590 		pr_err("ACPI call to get the keyboard backlight failed\n");
591 		return LED_OFF;
592 	} else if (result != TOS_SUCCESS) {
593 		return LED_OFF;
594 	}
595 
596 	return state ? LED_FULL : LED_OFF;
597 }
598 
599 static void toshiba_kbd_backlight_set(struct led_classdev *cdev,
600 				     enum led_brightness brightness)
601 {
602 	struct toshiba_acpi_dev *dev = container_of(cdev,
603 			struct toshiba_acpi_dev, kbd_led);
604 	u32 result;
605 	u32 state;
606 
607 	/* Set the keyboard backlight state */
608 	state = brightness ? 1 : 0;
609 	result = hci_write(dev, HCI_KBD_ILLUMINATION, state);
610 	if (result == TOS_FAILURE)
611 		pr_err("ACPI call to set KBD Illumination mode failed\n");
612 }
613 
614 /* TouchPad support */
615 static int toshiba_touchpad_set(struct toshiba_acpi_dev *dev, u32 state)
616 {
617 	u32 result;
618 
619 	if (!sci_open(dev))
620 		return -EIO;
621 
622 	result = sci_write(dev, SCI_TOUCHPAD, state);
623 	sci_close(dev);
624 	if (result == TOS_FAILURE)
625 		pr_err("ACPI call to set the touchpad failed\n");
626 	else if (result == TOS_NOT_SUPPORTED)
627 		return -ENODEV;
628 
629 	return result == TOS_SUCCESS ? 0 : -EIO;
630 }
631 
632 static int toshiba_touchpad_get(struct toshiba_acpi_dev *dev, u32 *state)
633 {
634 	u32 result;
635 
636 	if (!sci_open(dev))
637 		return -EIO;
638 
639 	result = sci_read(dev, SCI_TOUCHPAD, state);
640 	sci_close(dev);
641 	if (result == TOS_FAILURE)
642 		pr_err("ACPI call to query the touchpad failed\n");
643 	else if (result == TOS_NOT_SUPPORTED)
644 		return -ENODEV;
645 
646 	return result == TOS_SUCCESS ? 0 : -EIO;
647 }
648 
649 /* Eco Mode support */
650 static void toshiba_eco_mode_available(struct toshiba_acpi_dev *dev)
651 {
652 	acpi_status status;
653 	u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 0, 0, 0 };
654 	u32 out[TCI_WORDS];
655 
656 	dev->eco_supported = 0;
657 	dev->eco_led_registered = false;
658 
659 	status = tci_raw(dev, in, out);
660 	if (ACPI_FAILURE(status)) {
661 		pr_err("ACPI call to get ECO led failed\n");
662 	} else if (out[0] == TOS_INPUT_DATA_ERROR) {
663 		/*
664 		 * If we receive 0x8300 (Input Data Error), it means that the
665 		 * LED device is present, but that we just screwed the input
666 		 * parameters.
667 		 *
668 		 * Let's query the status of the LED to see if we really have a
669 		 * success response, indicating the actual presense of the LED,
670 		 * bail out otherwise.
671 		 */
672 		in[3] = 1;
673 		status = tci_raw(dev, in, out);
674 		if (ACPI_FAILURE(status))
675 			pr_err("ACPI call to get ECO led failed\n");
676 		else if (out[0] == TOS_SUCCESS)
677 			dev->eco_supported = 1;
678 	}
679 }
680 
681 static enum led_brightness
682 toshiba_eco_mode_get_status(struct led_classdev *cdev)
683 {
684 	struct toshiba_acpi_dev *dev = container_of(cdev,
685 			struct toshiba_acpi_dev, eco_led);
686 	u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 1, 0, 0 };
687 	u32 out[TCI_WORDS];
688 	acpi_status status;
689 
690 	status = tci_raw(dev, in, out);
691 	if (ACPI_FAILURE(status)) {
692 		pr_err("ACPI call to get ECO led failed\n");
693 		return LED_OFF;
694 	} else if (out[0] != TOS_SUCCESS) {
695 		return LED_OFF;
696 	}
697 
698 	return out[2] ? LED_FULL : LED_OFF;
699 }
700 
701 static void toshiba_eco_mode_set_status(struct led_classdev *cdev,
702 				     enum led_brightness brightness)
703 {
704 	struct toshiba_acpi_dev *dev = container_of(cdev,
705 			struct toshiba_acpi_dev, eco_led);
706 	u32 in[TCI_WORDS] = { HCI_SET, HCI_ECO_MODE, 0, 1, 0, 0 };
707 	u32 out[TCI_WORDS];
708 	acpi_status status;
709 
710 	/* Switch the Eco Mode led on/off */
711 	in[2] = (brightness) ? 1 : 0;
712 	status = tci_raw(dev, in, out);
713 	if (ACPI_FAILURE(status))
714 		pr_err("ACPI call to set ECO led failed\n");
715 }
716 
717 /* Accelerometer support */
718 static void toshiba_accelerometer_available(struct toshiba_acpi_dev *dev)
719 {
720 	u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER2, 0, 0, 0, 0 };
721 	u32 out[TCI_WORDS];
722 	acpi_status status;
723 
724 	dev->accelerometer_supported = 0;
725 
726 	/*
727 	 * Check if the accelerometer call exists,
728 	 * this call also serves as initialization
729 	 */
730 	status = tci_raw(dev, in, out);
731 	if (ACPI_FAILURE(status))
732 		pr_err("ACPI call to query the accelerometer failed\n");
733 	else if (out[0] == TOS_SUCCESS)
734 		dev->accelerometer_supported = 1;
735 }
736 
737 static int toshiba_accelerometer_get(struct toshiba_acpi_dev *dev,
738 				     u32 *xy, u32 *z)
739 {
740 	u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER, 0, 1, 0, 0 };
741 	u32 out[TCI_WORDS];
742 	acpi_status status;
743 
744 	/* Check the Accelerometer status */
745 	status = tci_raw(dev, in, out);
746 	if (ACPI_FAILURE(status)) {
747 		pr_err("ACPI call to query the accelerometer failed\n");
748 		return -EIO;
749 	} else if (out[0] == TOS_NOT_SUPPORTED) {
750 		return -ENODEV;
751 	} else if (out[0] == TOS_SUCCESS) {
752 		*xy = out[2];
753 		*z = out[4];
754 		return 0;
755 	}
756 
757 	return -EIO;
758 }
759 
760 /* Sleep (Charge and Music) utilities support */
761 static void toshiba_usb_sleep_charge_available(struct toshiba_acpi_dev *dev)
762 {
763 	u32 in[TCI_WORDS] = { SCI_GET, SCI_USB_SLEEP_CHARGE, 0, 0, 0, 0 };
764 	u32 out[TCI_WORDS];
765 	acpi_status status;
766 
767 	dev->usb_sleep_charge_supported = 0;
768 
769 	if (!sci_open(dev))
770 		return;
771 
772 	status = tci_raw(dev, in, out);
773 	if (ACPI_FAILURE(status)) {
774 		pr_err("ACPI call to get USB Sleep and Charge mode failed\n");
775 		sci_close(dev);
776 		return;
777 	} else if (out[0] == TOS_NOT_SUPPORTED) {
778 		sci_close(dev);
779 		return;
780 	} else if (out[0] == TOS_SUCCESS) {
781 		dev->usbsc_mode_base = out[4];
782 	}
783 
784 	in[5] = SCI_USB_CHARGE_BAT_LVL;
785 	status = tci_raw(dev, in, out);
786 	sci_close(dev);
787 	if (ACPI_FAILURE(status)) {
788 		pr_err("ACPI call to get USB Sleep and Charge mode failed\n");
789 	} else if (out[0] == TOS_SUCCESS) {
790 		dev->usbsc_bat_level = out[2];
791 		/* Flag as supported */
792 		dev->usb_sleep_charge_supported = 1;
793 	}
794 
795 }
796 
797 static int toshiba_usb_sleep_charge_get(struct toshiba_acpi_dev *dev,
798 					u32 *mode)
799 {
800 	u32 result;
801 
802 	if (!sci_open(dev))
803 		return -EIO;
804 
805 	result = sci_read(dev, SCI_USB_SLEEP_CHARGE, mode);
806 	sci_close(dev);
807 	if (result == TOS_FAILURE)
808 		pr_err("ACPI call to set USB S&C mode failed\n");
809 	else if (result == TOS_NOT_SUPPORTED)
810 		return -ENODEV;
811 
812 	return result == TOS_SUCCESS ? 0 : -EIO;
813 }
814 
815 static int toshiba_usb_sleep_charge_set(struct toshiba_acpi_dev *dev,
816 					u32 mode)
817 {
818 	u32 result;
819 
820 	if (!sci_open(dev))
821 		return -EIO;
822 
823 	result = sci_write(dev, SCI_USB_SLEEP_CHARGE, mode);
824 	sci_close(dev);
825 	if (result == TOS_FAILURE)
826 		pr_err("ACPI call to set USB S&C mode failed\n");
827 	else if (result == TOS_NOT_SUPPORTED)
828 		return -ENODEV;
829 
830 	return result == TOS_SUCCESS ? 0 : -EIO;
831 }
832 
833 static int toshiba_sleep_functions_status_get(struct toshiba_acpi_dev *dev,
834 					      u32 *mode)
835 {
836 	u32 in[TCI_WORDS] = { SCI_GET, SCI_USB_SLEEP_CHARGE, 0, 0, 0, 0 };
837 	u32 out[TCI_WORDS];
838 	acpi_status status;
839 
840 	if (!sci_open(dev))
841 		return -EIO;
842 
843 	in[5] = SCI_USB_CHARGE_BAT_LVL;
844 	status = tci_raw(dev, in, out);
845 	sci_close(dev);
846 	if (ACPI_FAILURE(status)) {
847 		pr_err("ACPI call to get USB S&C battery level failed\n");
848 	} else if (out[0] == TOS_NOT_SUPPORTED) {
849 		return -ENODEV;
850 	} else if (out[0] == TOS_SUCCESS) {
851 		*mode = out[2];
852 		return 0;
853 	}
854 
855 	return -EIO;
856 }
857 
858 static int toshiba_sleep_functions_status_set(struct toshiba_acpi_dev *dev,
859 					      u32 mode)
860 {
861 	u32 in[TCI_WORDS] = { SCI_SET, SCI_USB_SLEEP_CHARGE, 0, 0, 0, 0 };
862 	u32 out[TCI_WORDS];
863 	acpi_status status;
864 
865 	if (!sci_open(dev))
866 		return -EIO;
867 
868 	in[2] = mode;
869 	in[5] = SCI_USB_CHARGE_BAT_LVL;
870 	status = tci_raw(dev, in, out);
871 	sci_close(dev);
872 	if (ACPI_FAILURE(status))
873 		pr_err("ACPI call to set USB S&C battery level failed\n");
874 	else if (out[0] == TOS_NOT_SUPPORTED)
875 		return -ENODEV;
876 
877 	return out[0] == TOS_SUCCESS ? 0 : -EIO;
878 }
879 
880 static int toshiba_usb_rapid_charge_get(struct toshiba_acpi_dev *dev,
881 					u32 *state)
882 {
883 	u32 in[TCI_WORDS] = { SCI_GET, SCI_USB_SLEEP_CHARGE, 0, 0, 0, 0 };
884 	u32 out[TCI_WORDS];
885 	acpi_status status;
886 
887 	if (!sci_open(dev))
888 		return -EIO;
889 
890 	in[5] = SCI_USB_CHARGE_RAPID_DSP;
891 	status = tci_raw(dev, in, out);
892 	sci_close(dev);
893 	if (ACPI_FAILURE(status)) {
894 		pr_err("ACPI call to get USB Rapid Charge failed\n");
895 	} else if (out[0] == TOS_NOT_SUPPORTED) {
896 		return -ENODEV;
897 	} else if (out[0] == TOS_SUCCESS || out[0] == TOS_SUCCESS2) {
898 		*state = out[2];
899 		return 0;
900 	}
901 
902 	return -EIO;
903 }
904 
905 static int toshiba_usb_rapid_charge_set(struct toshiba_acpi_dev *dev,
906 					u32 state)
907 {
908 	u32 in[TCI_WORDS] = { SCI_SET, SCI_USB_SLEEP_CHARGE, 0, 0, 0, 0 };
909 	u32 out[TCI_WORDS];
910 	acpi_status status;
911 
912 	if (!sci_open(dev))
913 		return -EIO;
914 
915 	in[2] = state;
916 	in[5] = SCI_USB_CHARGE_RAPID_DSP;
917 	status = tci_raw(dev, in, out);
918 	sci_close(dev);
919 	if (ACPI_FAILURE(status))
920 		pr_err("ACPI call to set USB Rapid Charge failed\n");
921 	else if (out[0] == TOS_NOT_SUPPORTED)
922 		return -ENODEV;
923 
924 	return (out[0] == TOS_SUCCESS || out[0] == TOS_SUCCESS2) ? 0 : -EIO;
925 }
926 
927 static int toshiba_usb_sleep_music_get(struct toshiba_acpi_dev *dev, u32 *state)
928 {
929 	u32 result;
930 
931 	if (!sci_open(dev))
932 		return -EIO;
933 
934 	result = sci_read(dev, SCI_USB_SLEEP_MUSIC, state);
935 	sci_close(dev);
936 	if (result == TOS_FAILURE)
937 		pr_err("ACPI call to get Sleep and Music failed\n");
938 	else if (result == TOS_NOT_SUPPORTED)
939 		return -ENODEV;
940 
941 	return result == TOS_SUCCESS ? 0 : -EIO;
942 }
943 
944 static int toshiba_usb_sleep_music_set(struct toshiba_acpi_dev *dev, u32 state)
945 {
946 	u32 result;
947 
948 	if (!sci_open(dev))
949 		return -EIO;
950 
951 	result = sci_write(dev, SCI_USB_SLEEP_MUSIC, state);
952 	sci_close(dev);
953 	if (result == TOS_FAILURE)
954 		pr_err("ACPI call to set Sleep and Music failed\n");
955 	else if (result == TOS_NOT_SUPPORTED)
956 		return -ENODEV;
957 
958 	return result == TOS_SUCCESS ? 0 : -EIO;
959 }
960 
961 /* Keyboard function keys */
962 static int toshiba_function_keys_get(struct toshiba_acpi_dev *dev, u32 *mode)
963 {
964 	u32 result;
965 
966 	if (!sci_open(dev))
967 		return -EIO;
968 
969 	result = sci_read(dev, SCI_KBD_FUNCTION_KEYS, mode);
970 	sci_close(dev);
971 	if (result == TOS_FAILURE)
972 		pr_err("ACPI call to get KBD function keys failed\n");
973 	else if (result == TOS_NOT_SUPPORTED)
974 		return -ENODEV;
975 
976 	return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO;
977 }
978 
979 static int toshiba_function_keys_set(struct toshiba_acpi_dev *dev, u32 mode)
980 {
981 	u32 result;
982 
983 	if (!sci_open(dev))
984 		return -EIO;
985 
986 	result = sci_write(dev, SCI_KBD_FUNCTION_KEYS, mode);
987 	sci_close(dev);
988 	if (result == TOS_FAILURE)
989 		pr_err("ACPI call to set KBD function keys failed\n");
990 	else if (result == TOS_NOT_SUPPORTED)
991 		return -ENODEV;
992 
993 	return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO;
994 }
995 
996 /* Panel Power ON */
997 static int toshiba_panel_power_on_get(struct toshiba_acpi_dev *dev, u32 *state)
998 {
999 	u32 result;
1000 
1001 	if (!sci_open(dev))
1002 		return -EIO;
1003 
1004 	result = sci_read(dev, SCI_PANEL_POWER_ON, state);
1005 	sci_close(dev);
1006 	if (result == TOS_FAILURE)
1007 		pr_err("ACPI call to get Panel Power ON failed\n");
1008 	else if (result == TOS_NOT_SUPPORTED)
1009 		return -ENODEV;
1010 
1011 	return result == TOS_SUCCESS ? 0 : -EIO;
1012 }
1013 
1014 static int toshiba_panel_power_on_set(struct toshiba_acpi_dev *dev, u32 state)
1015 {
1016 	u32 result;
1017 
1018 	if (!sci_open(dev))
1019 		return -EIO;
1020 
1021 	result = sci_write(dev, SCI_PANEL_POWER_ON, state);
1022 	sci_close(dev);
1023 	if (result == TOS_FAILURE)
1024 		pr_err("ACPI call to set Panel Power ON failed\n");
1025 	else if (result == TOS_NOT_SUPPORTED)
1026 		return -ENODEV;
1027 
1028 	return result == TOS_SUCCESS ? 0 : -EIO;
1029 }
1030 
1031 /* USB Three */
1032 static int toshiba_usb_three_get(struct toshiba_acpi_dev *dev, u32 *state)
1033 {
1034 	u32 result;
1035 
1036 	if (!sci_open(dev))
1037 		return -EIO;
1038 
1039 	result = sci_read(dev, SCI_USB_THREE, state);
1040 	sci_close(dev);
1041 	if (result == TOS_FAILURE)
1042 		pr_err("ACPI call to get USB 3 failed\n");
1043 	else if (result == TOS_NOT_SUPPORTED)
1044 		return -ENODEV;
1045 
1046 	return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO;
1047 }
1048 
1049 static int toshiba_usb_three_set(struct toshiba_acpi_dev *dev, u32 state)
1050 {
1051 	u32 result;
1052 
1053 	if (!sci_open(dev))
1054 		return -EIO;
1055 
1056 	result = sci_write(dev, SCI_USB_THREE, state);
1057 	sci_close(dev);
1058 	if (result == TOS_FAILURE)
1059 		pr_err("ACPI call to set USB 3 failed\n");
1060 	else if (result == TOS_NOT_SUPPORTED)
1061 		return -ENODEV;
1062 
1063 	return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO;
1064 }
1065 
1066 /* Hotkey Event type */
1067 static int toshiba_hotkey_event_type_get(struct toshiba_acpi_dev *dev,
1068 					 u32 *type)
1069 {
1070 	u32 in[TCI_WORDS] = { HCI_GET, HCI_SYSTEM_INFO, 0x03, 0, 0, 0 };
1071 	u32 out[TCI_WORDS];
1072 	acpi_status status;
1073 
1074 	status = tci_raw(dev, in, out);
1075 	if (ACPI_FAILURE(status)) {
1076 		pr_err("ACPI call to get System type failed\n");
1077 	} else if (out[0] == TOS_NOT_SUPPORTED) {
1078 		return -ENODEV;
1079 	} else if (out[0] == TOS_SUCCESS) {
1080 		*type = out[3];
1081 		return 0;
1082 	}
1083 
1084 	return -EIO;
1085 }
1086 
1087 /* Transflective Backlight */
1088 static int get_tr_backlight_status(struct toshiba_acpi_dev *dev, u32 *status)
1089 {
1090 	u32 result = hci_read(dev, HCI_TR_BACKLIGHT, status);
1091 
1092 	if (result == TOS_FAILURE)
1093 		pr_err("ACPI call to get Transflective Backlight failed\n");
1094 	else if (result == TOS_NOT_SUPPORTED)
1095 		return -ENODEV;
1096 
1097 	return result == TOS_SUCCESS ? 0 : -EIO;
1098 }
1099 
1100 static int set_tr_backlight_status(struct toshiba_acpi_dev *dev, u32 status)
1101 {
1102 	u32 result = hci_write(dev, HCI_TR_BACKLIGHT, !status);
1103 
1104 	if (result == TOS_FAILURE)
1105 		pr_err("ACPI call to set Transflective Backlight failed\n");
1106 	else if (result == TOS_NOT_SUPPORTED)
1107 		return -ENODEV;
1108 
1109 	return result == TOS_SUCCESS ? 0 : -EIO;
1110 }
1111 
1112 static struct proc_dir_entry *toshiba_proc_dir;
1113 
1114 /* LCD Brightness */
1115 static int __get_lcd_brightness(struct toshiba_acpi_dev *dev)
1116 {
1117 	u32 result;
1118 	u32 value;
1119 	int brightness = 0;
1120 
1121 	if (dev->tr_backlight_supported) {
1122 		int ret = get_tr_backlight_status(dev, &value);
1123 
1124 		if (ret)
1125 			return ret;
1126 		if (value)
1127 			return 0;
1128 		brightness++;
1129 	}
1130 
1131 	result = hci_read(dev, HCI_LCD_BRIGHTNESS, &value);
1132 	if (result == TOS_FAILURE)
1133 		pr_err("ACPI call to get LCD Brightness failed\n");
1134 	else if (result == TOS_NOT_SUPPORTED)
1135 		return -ENODEV;
1136 	if (result == TOS_SUCCESS)
1137 		return brightness + (value >> HCI_LCD_BRIGHTNESS_SHIFT);
1138 
1139 	return -EIO;
1140 }
1141 
1142 static int get_lcd_brightness(struct backlight_device *bd)
1143 {
1144 	struct toshiba_acpi_dev *dev = bl_get_data(bd);
1145 
1146 	return __get_lcd_brightness(dev);
1147 }
1148 
1149 static int lcd_proc_show(struct seq_file *m, void *v)
1150 {
1151 	struct toshiba_acpi_dev *dev = m->private;
1152 	int levels;
1153 	int value;
1154 
1155 	if (!dev->backlight_dev)
1156 		return -ENODEV;
1157 
1158 	levels = dev->backlight_dev->props.max_brightness + 1;
1159 	value = get_lcd_brightness(dev->backlight_dev);
1160 	if (value >= 0) {
1161 		seq_printf(m, "brightness:              %d\n", value);
1162 		seq_printf(m, "brightness_levels:       %d\n", levels);
1163 		return 0;
1164 	}
1165 
1166 	pr_err("Error reading LCD brightness\n");
1167 
1168 	return -EIO;
1169 }
1170 
1171 static int lcd_proc_open(struct inode *inode, struct file *file)
1172 {
1173 	return single_open(file, lcd_proc_show, PDE_DATA(inode));
1174 }
1175 
1176 static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value)
1177 {
1178 	u32 result;
1179 
1180 	if (dev->tr_backlight_supported) {
1181 		int ret = set_tr_backlight_status(dev, !value);
1182 
1183 		if (ret)
1184 			return ret;
1185 		if (value)
1186 			value--;
1187 	}
1188 
1189 	value = value << HCI_LCD_BRIGHTNESS_SHIFT;
1190 	result = hci_write(dev, HCI_LCD_BRIGHTNESS, value);
1191 	if (result == TOS_FAILURE)
1192 		pr_err("ACPI call to set LCD Brightness failed\n");
1193 	else if (result == TOS_NOT_SUPPORTED)
1194 		return -ENODEV;
1195 
1196 	return result == TOS_SUCCESS ? 0 : -EIO;
1197 }
1198 
1199 static int set_lcd_status(struct backlight_device *bd)
1200 {
1201 	struct toshiba_acpi_dev *dev = bl_get_data(bd);
1202 
1203 	return set_lcd_brightness(dev, bd->props.brightness);
1204 }
1205 
1206 static ssize_t lcd_proc_write(struct file *file, const char __user *buf,
1207 			      size_t count, loff_t *pos)
1208 {
1209 	struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1210 	char cmd[42];
1211 	size_t len;
1212 	int levels = dev->backlight_dev->props.max_brightness + 1;
1213 	int value;
1214 
1215 	len = min(count, sizeof(cmd) - 1);
1216 	if (copy_from_user(cmd, buf, len))
1217 		return -EFAULT;
1218 	cmd[len] = '\0';
1219 
1220 	if (sscanf(cmd, " brightness : %i", &value) != 1 &&
1221 	    value < 0 && value > levels)
1222 		return -EINVAL;
1223 
1224 	if (set_lcd_brightness(dev, value))
1225 		return -EIO;
1226 
1227 	return count;
1228 }
1229 
1230 static const struct file_operations lcd_proc_fops = {
1231 	.owner		= THIS_MODULE,
1232 	.open		= lcd_proc_open,
1233 	.read		= seq_read,
1234 	.llseek		= seq_lseek,
1235 	.release	= single_release,
1236 	.write		= lcd_proc_write,
1237 };
1238 
1239 /* Video-Out */
1240 static int get_video_status(struct toshiba_acpi_dev *dev, u32 *status)
1241 {
1242 	u32 result = hci_read(dev, HCI_VIDEO_OUT, status);
1243 
1244 	if (result == TOS_FAILURE)
1245 		pr_err("ACPI call to get Video-Out failed\n");
1246 	else if (result == TOS_NOT_SUPPORTED)
1247 		return -ENODEV;
1248 
1249 	return result == TOS_SUCCESS ? 0 : -EIO;
1250 }
1251 
1252 static int video_proc_show(struct seq_file *m, void *v)
1253 {
1254 	struct toshiba_acpi_dev *dev = m->private;
1255 	u32 value;
1256 
1257 	if (!get_video_status(dev, &value)) {
1258 		int is_lcd = (value & HCI_VIDEO_OUT_LCD) ? 1 : 0;
1259 		int is_crt = (value & HCI_VIDEO_OUT_CRT) ? 1 : 0;
1260 		int is_tv = (value & HCI_VIDEO_OUT_TV) ? 1 : 0;
1261 
1262 		seq_printf(m, "lcd_out:                 %d\n", is_lcd);
1263 		seq_printf(m, "crt_out:                 %d\n", is_crt);
1264 		seq_printf(m, "tv_out:                  %d\n", is_tv);
1265 		return 0;
1266 	}
1267 
1268 	return -EIO;
1269 }
1270 
1271 static int video_proc_open(struct inode *inode, struct file *file)
1272 {
1273 	return single_open(file, video_proc_show, PDE_DATA(inode));
1274 }
1275 
1276 static ssize_t video_proc_write(struct file *file, const char __user *buf,
1277 				size_t count, loff_t *pos)
1278 {
1279 	struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1280 	char *buffer;
1281 	char *cmd;
1282 	int remain = count;
1283 	int lcd_out = -1;
1284 	int crt_out = -1;
1285 	int tv_out = -1;
1286 	int value;
1287 	int ret;
1288 	u32 video_out;
1289 
1290 	cmd = kmalloc(count + 1, GFP_KERNEL);
1291 	if (!cmd)
1292 		return -ENOMEM;
1293 	if (copy_from_user(cmd, buf, count)) {
1294 		kfree(cmd);
1295 		return -EFAULT;
1296 	}
1297 	cmd[count] = '\0';
1298 
1299 	buffer = cmd;
1300 
1301 	/*
1302 	 * Scan expression.  Multiple expressions may be delimited with ;
1303 	 * NOTE: To keep scanning simple, invalid fields are ignored.
1304 	 */
1305 	while (remain) {
1306 		if (sscanf(buffer, " lcd_out : %i", &value) == 1)
1307 			lcd_out = value & 1;
1308 		else if (sscanf(buffer, " crt_out : %i", &value) == 1)
1309 			crt_out = value & 1;
1310 		else if (sscanf(buffer, " tv_out : %i", &value) == 1)
1311 			tv_out = value & 1;
1312 		/* Advance to one character past the next ; */
1313 		do {
1314 			++buffer;
1315 			--remain;
1316 		} while (remain && *(buffer - 1) != ';');
1317 	}
1318 
1319 	kfree(cmd);
1320 
1321 	ret = get_video_status(dev, &video_out);
1322 	if (!ret) {
1323 		unsigned int new_video_out = video_out;
1324 
1325 		if (lcd_out != -1)
1326 			_set_bit(&new_video_out, HCI_VIDEO_OUT_LCD, lcd_out);
1327 		if (crt_out != -1)
1328 			_set_bit(&new_video_out, HCI_VIDEO_OUT_CRT, crt_out);
1329 		if (tv_out != -1)
1330 			_set_bit(&new_video_out, HCI_VIDEO_OUT_TV, tv_out);
1331 		/*
1332 		 * To avoid unnecessary video disruption, only write the new
1333 		 * video setting if something changed.
1334 		 */
1335 		if (new_video_out != video_out)
1336 			ret = write_acpi_int(METHOD_VIDEO_OUT, new_video_out);
1337 	}
1338 
1339 	return ret ? -EIO : count;
1340 }
1341 
1342 static const struct file_operations video_proc_fops = {
1343 	.owner		= THIS_MODULE,
1344 	.open		= video_proc_open,
1345 	.read		= seq_read,
1346 	.llseek		= seq_lseek,
1347 	.release	= single_release,
1348 	.write		= video_proc_write,
1349 };
1350 
1351 /* Fan status */
1352 static int get_fan_status(struct toshiba_acpi_dev *dev, u32 *status)
1353 {
1354 	u32 result = hci_read(dev, HCI_FAN, status);
1355 
1356 	if (result == TOS_FAILURE)
1357 		pr_err("ACPI call to get Fan status failed\n");
1358 	else if (result == TOS_NOT_SUPPORTED)
1359 		return -ENODEV;
1360 
1361 	return result == TOS_SUCCESS ? 0 : -EIO;
1362 }
1363 
1364 static int set_fan_status(struct toshiba_acpi_dev *dev, u32 status)
1365 {
1366 	u32 result = hci_write(dev, HCI_FAN, status);
1367 
1368 	if (result == TOS_FAILURE)
1369 		pr_err("ACPI call to set Fan status failed\n");
1370 	else if (result == TOS_NOT_SUPPORTED)
1371 		return -ENODEV;
1372 
1373 	return result == TOS_SUCCESS ? 0 : -EIO;
1374 }
1375 
1376 static int fan_proc_show(struct seq_file *m, void *v)
1377 {
1378 	struct toshiba_acpi_dev *dev = m->private;
1379 	u32 value;
1380 
1381 	if (get_fan_status(dev, &value))
1382 		return -EIO;
1383 
1384 	seq_printf(m, "running:                 %d\n", (value > 0));
1385 	seq_printf(m, "force_on:                %d\n", dev->force_fan);
1386 
1387 	return 0;
1388 }
1389 
1390 static int fan_proc_open(struct inode *inode, struct file *file)
1391 {
1392 	return single_open(file, fan_proc_show, PDE_DATA(inode));
1393 }
1394 
1395 static ssize_t fan_proc_write(struct file *file, const char __user *buf,
1396 			      size_t count, loff_t *pos)
1397 {
1398 	struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1399 	char cmd[42];
1400 	size_t len;
1401 	int value;
1402 
1403 	len = min(count, sizeof(cmd) - 1);
1404 	if (copy_from_user(cmd, buf, len))
1405 		return -EFAULT;
1406 	cmd[len] = '\0';
1407 
1408 	if (sscanf(cmd, " force_on : %i", &value) != 1 &&
1409 	    value != 0 && value != 1)
1410 		return -EINVAL;
1411 
1412 	if (set_fan_status(dev, value))
1413 		return -EIO;
1414 
1415 	dev->force_fan = value;
1416 
1417 	return count;
1418 }
1419 
1420 static const struct file_operations fan_proc_fops = {
1421 	.owner		= THIS_MODULE,
1422 	.open		= fan_proc_open,
1423 	.read		= seq_read,
1424 	.llseek		= seq_lseek,
1425 	.release	= single_release,
1426 	.write		= fan_proc_write,
1427 };
1428 
1429 static int keys_proc_show(struct seq_file *m, void *v)
1430 {
1431 	struct toshiba_acpi_dev *dev = m->private;
1432 
1433 	seq_printf(m, "hotkey_ready:            %d\n", dev->key_event_valid);
1434 	seq_printf(m, "hotkey:                  0x%04x\n", dev->last_key_event);
1435 
1436 	return 0;
1437 }
1438 
1439 static int keys_proc_open(struct inode *inode, struct file *file)
1440 {
1441 	return single_open(file, keys_proc_show, PDE_DATA(inode));
1442 }
1443 
1444 static ssize_t keys_proc_write(struct file *file, const char __user *buf,
1445 			       size_t count, loff_t *pos)
1446 {
1447 	struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
1448 	char cmd[42];
1449 	size_t len;
1450 	int value;
1451 
1452 	len = min(count, sizeof(cmd) - 1);
1453 	if (copy_from_user(cmd, buf, len))
1454 		return -EFAULT;
1455 	cmd[len] = '\0';
1456 
1457 	if (sscanf(cmd, " hotkey_ready : %i", &value) == 1 && value == 0)
1458 		dev->key_event_valid = 0;
1459 	else
1460 		return -EINVAL;
1461 
1462 	return count;
1463 }
1464 
1465 static const struct file_operations keys_proc_fops = {
1466 	.owner		= THIS_MODULE,
1467 	.open		= keys_proc_open,
1468 	.read		= seq_read,
1469 	.llseek		= seq_lseek,
1470 	.release	= single_release,
1471 	.write		= keys_proc_write,
1472 };
1473 
1474 static int version_proc_show(struct seq_file *m, void *v)
1475 {
1476 	seq_printf(m, "driver:                  %s\n", TOSHIBA_ACPI_VERSION);
1477 	seq_printf(m, "proc_interface:          %d\n", PROC_INTERFACE_VERSION);
1478 	return 0;
1479 }
1480 
1481 static int version_proc_open(struct inode *inode, struct file *file)
1482 {
1483 	return single_open(file, version_proc_show, PDE_DATA(inode));
1484 }
1485 
1486 static const struct file_operations version_proc_fops = {
1487 	.owner		= THIS_MODULE,
1488 	.open		= version_proc_open,
1489 	.read		= seq_read,
1490 	.llseek		= seq_lseek,
1491 	.release	= single_release,
1492 };
1493 
1494 /*
1495  * Proc and module init
1496  */
1497 
1498 #define PROC_TOSHIBA		"toshiba"
1499 
1500 static void create_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
1501 {
1502 	if (dev->backlight_dev)
1503 		proc_create_data("lcd", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1504 				 &lcd_proc_fops, dev);
1505 	if (dev->video_supported)
1506 		proc_create_data("video", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1507 				 &video_proc_fops, dev);
1508 	if (dev->fan_supported)
1509 		proc_create_data("fan", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1510 				 &fan_proc_fops, dev);
1511 	if (dev->hotkey_dev)
1512 		proc_create_data("keys", S_IRUGO | S_IWUSR, toshiba_proc_dir,
1513 				 &keys_proc_fops, dev);
1514 	proc_create_data("version", S_IRUGO, toshiba_proc_dir,
1515 			 &version_proc_fops, dev);
1516 }
1517 
1518 static void remove_toshiba_proc_entries(struct toshiba_acpi_dev *dev)
1519 {
1520 	if (dev->backlight_dev)
1521 		remove_proc_entry("lcd", toshiba_proc_dir);
1522 	if (dev->video_supported)
1523 		remove_proc_entry("video", toshiba_proc_dir);
1524 	if (dev->fan_supported)
1525 		remove_proc_entry("fan", toshiba_proc_dir);
1526 	if (dev->hotkey_dev)
1527 		remove_proc_entry("keys", toshiba_proc_dir);
1528 	remove_proc_entry("version", toshiba_proc_dir);
1529 }
1530 
1531 static const struct backlight_ops toshiba_backlight_data = {
1532 	.options = BL_CORE_SUSPENDRESUME,
1533 	.get_brightness = get_lcd_brightness,
1534 	.update_status  = set_lcd_status,
1535 };
1536 
1537 /*
1538  * Sysfs files
1539  */
1540 static ssize_t version_show(struct device *dev,
1541 			    struct device_attribute *attr, char *buf)
1542 {
1543 	return sprintf(buf, "%s\n", TOSHIBA_ACPI_VERSION);
1544 }
1545 static DEVICE_ATTR_RO(version);
1546 
1547 static ssize_t fan_store(struct device *dev,
1548 			 struct device_attribute *attr,
1549 			 const char *buf, size_t count)
1550 {
1551 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1552 	int state;
1553 	int ret;
1554 
1555 	ret = kstrtoint(buf, 0, &state);
1556 	if (ret)
1557 		return ret;
1558 
1559 	if (state != 0 && state != 1)
1560 		return -EINVAL;
1561 
1562 	ret = set_fan_status(toshiba, state);
1563 	if (ret)
1564 		return ret;
1565 
1566 	return count;
1567 }
1568 
1569 static ssize_t fan_show(struct device *dev,
1570 			struct device_attribute *attr, char *buf)
1571 {
1572 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1573 	u32 value;
1574 	int ret;
1575 
1576 	ret = get_fan_status(toshiba, &value);
1577 	if (ret)
1578 		return ret;
1579 
1580 	return sprintf(buf, "%d\n", value);
1581 }
1582 static DEVICE_ATTR_RW(fan);
1583 
1584 static ssize_t kbd_backlight_mode_store(struct device *dev,
1585 					struct device_attribute *attr,
1586 					const char *buf, size_t count)
1587 {
1588 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1589 	int mode;
1590 	int ret;
1591 
1592 
1593 	ret = kstrtoint(buf, 0, &mode);
1594 	if (ret)
1595 		return ret;
1596 
1597 	/* Check for supported modes depending on keyboard backlight type */
1598 	if (toshiba->kbd_type == 1) {
1599 		/* Type 1 supports SCI_KBD_MODE_FNZ and SCI_KBD_MODE_AUTO */
1600 		if (mode != SCI_KBD_MODE_FNZ && mode != SCI_KBD_MODE_AUTO)
1601 			return -EINVAL;
1602 	} else if (toshiba->kbd_type == 2) {
1603 		/* Type 2 doesn't support SCI_KBD_MODE_FNZ */
1604 		if (mode != SCI_KBD_MODE_AUTO && mode != SCI_KBD_MODE_ON &&
1605 		    mode != SCI_KBD_MODE_OFF)
1606 			return -EINVAL;
1607 	}
1608 
1609 	/*
1610 	 * Set the Keyboard Backlight Mode where:
1611 	 *	Auto - KBD backlight turns off automatically in given time
1612 	 *	FN-Z - KBD backlight "toggles" when hotkey pressed
1613 	 *	ON   - KBD backlight is always on
1614 	 *	OFF  - KBD backlight is always off
1615 	 */
1616 
1617 	/* Only make a change if the actual mode has changed */
1618 	if (toshiba->kbd_mode != mode) {
1619 		/* Shift the time to "base time" (0x3c0000 == 60 seconds) */
1620 		int time = toshiba->kbd_time << HCI_MISC_SHIFT;
1621 
1622 		/* OR the "base time" to the actual method format */
1623 		if (toshiba->kbd_type == 1) {
1624 			/* Type 1 requires the current mode */
1625 			time |= toshiba->kbd_mode;
1626 		} else if (toshiba->kbd_type == 2) {
1627 			/* Type 2 requires the desired mode */
1628 			time |= mode;
1629 		}
1630 
1631 		ret = toshiba_kbd_illum_status_set(toshiba, time);
1632 		if (ret)
1633 			return ret;
1634 
1635 		toshiba->kbd_mode = mode;
1636 	}
1637 
1638 	return count;
1639 }
1640 
1641 static ssize_t kbd_backlight_mode_show(struct device *dev,
1642 				       struct device_attribute *attr,
1643 				       char *buf)
1644 {
1645 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1646 	u32 time;
1647 
1648 	if (toshiba_kbd_illum_status_get(toshiba, &time) < 0)
1649 		return -EIO;
1650 
1651 	return sprintf(buf, "%i\n", time & SCI_KBD_MODE_MASK);
1652 }
1653 static DEVICE_ATTR_RW(kbd_backlight_mode);
1654 
1655 static ssize_t kbd_type_show(struct device *dev,
1656 			     struct device_attribute *attr, char *buf)
1657 {
1658 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1659 
1660 	return sprintf(buf, "%d\n", toshiba->kbd_type);
1661 }
1662 static DEVICE_ATTR_RO(kbd_type);
1663 
1664 static ssize_t available_kbd_modes_show(struct device *dev,
1665 					struct device_attribute *attr,
1666 					char *buf)
1667 {
1668 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1669 
1670 	if (toshiba->kbd_type == 1)
1671 		return sprintf(buf, "%x %x\n",
1672 			       SCI_KBD_MODE_FNZ, SCI_KBD_MODE_AUTO);
1673 
1674 	return sprintf(buf, "%x %x %x\n",
1675 		       SCI_KBD_MODE_AUTO, SCI_KBD_MODE_ON, SCI_KBD_MODE_OFF);
1676 }
1677 static DEVICE_ATTR_RO(available_kbd_modes);
1678 
1679 static ssize_t kbd_backlight_timeout_store(struct device *dev,
1680 					   struct device_attribute *attr,
1681 					   const char *buf, size_t count)
1682 {
1683 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1684 	int time;
1685 	int ret;
1686 
1687 	ret = kstrtoint(buf, 0, &time);
1688 	if (ret)
1689 		return ret;
1690 
1691 	/* Check for supported values depending on kbd_type */
1692 	if (toshiba->kbd_type == 1) {
1693 		if (time < 0 || time > 60)
1694 			return -EINVAL;
1695 	} else if (toshiba->kbd_type == 2) {
1696 		if (time < 1 || time > 60)
1697 			return -EINVAL;
1698 	}
1699 
1700 	/* Set the Keyboard Backlight Timeout */
1701 
1702 	/* Only make a change if the actual timeout has changed */
1703 	if (toshiba->kbd_time != time) {
1704 		/* Shift the time to "base time" (0x3c0000 == 60 seconds) */
1705 		time = time << HCI_MISC_SHIFT;
1706 		/* OR the "base time" to the actual method format */
1707 		if (toshiba->kbd_type == 1)
1708 			time |= SCI_KBD_MODE_FNZ;
1709 		else if (toshiba->kbd_type == 2)
1710 			time |= SCI_KBD_MODE_AUTO;
1711 
1712 		ret = toshiba_kbd_illum_status_set(toshiba, time);
1713 		if (ret)
1714 			return ret;
1715 
1716 		toshiba->kbd_time = time >> HCI_MISC_SHIFT;
1717 	}
1718 
1719 	return count;
1720 }
1721 
1722 static ssize_t kbd_backlight_timeout_show(struct device *dev,
1723 					  struct device_attribute *attr,
1724 					  char *buf)
1725 {
1726 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1727 	u32 time;
1728 
1729 	if (toshiba_kbd_illum_status_get(toshiba, &time) < 0)
1730 		return -EIO;
1731 
1732 	return sprintf(buf, "%i\n", time >> HCI_MISC_SHIFT);
1733 }
1734 static DEVICE_ATTR_RW(kbd_backlight_timeout);
1735 
1736 static ssize_t touchpad_store(struct device *dev,
1737 			      struct device_attribute *attr,
1738 			      const char *buf, size_t count)
1739 {
1740 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1741 	int state;
1742 	int ret;
1743 
1744 	/* Set the TouchPad on/off, 0 - Disable | 1 - Enable */
1745 	ret = kstrtoint(buf, 0, &state);
1746 	if (ret)
1747 		return ret;
1748 	if (state != 0 && state != 1)
1749 		return -EINVAL;
1750 
1751 	ret = toshiba_touchpad_set(toshiba, state);
1752 	if (ret)
1753 		return ret;
1754 
1755 	return count;
1756 }
1757 
1758 static ssize_t touchpad_show(struct device *dev,
1759 			     struct device_attribute *attr, char *buf)
1760 {
1761 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1762 	u32 state;
1763 	int ret;
1764 
1765 	ret = toshiba_touchpad_get(toshiba, &state);
1766 	if (ret < 0)
1767 		return ret;
1768 
1769 	return sprintf(buf, "%i\n", state);
1770 }
1771 static DEVICE_ATTR_RW(touchpad);
1772 
1773 static ssize_t position_show(struct device *dev,
1774 			     struct device_attribute *attr, char *buf)
1775 {
1776 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1777 	u32 xyval, zval, tmp;
1778 	u16 x, y, z;
1779 	int ret;
1780 
1781 	xyval = zval = 0;
1782 	ret = toshiba_accelerometer_get(toshiba, &xyval, &zval);
1783 	if (ret < 0)
1784 		return ret;
1785 
1786 	x = xyval & HCI_ACCEL_MASK;
1787 	tmp = xyval >> HCI_MISC_SHIFT;
1788 	y = tmp & HCI_ACCEL_MASK;
1789 	z = zval & HCI_ACCEL_MASK;
1790 
1791 	return sprintf(buf, "%d %d %d\n", x, y, z);
1792 }
1793 static DEVICE_ATTR_RO(position);
1794 
1795 static ssize_t usb_sleep_charge_show(struct device *dev,
1796 				     struct device_attribute *attr, char *buf)
1797 {
1798 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1799 	u32 mode;
1800 	int ret;
1801 
1802 	ret = toshiba_usb_sleep_charge_get(toshiba, &mode);
1803 	if (ret < 0)
1804 		return ret;
1805 
1806 	return sprintf(buf, "%x\n", mode & SCI_USB_CHARGE_MODE_MASK);
1807 }
1808 
1809 static ssize_t usb_sleep_charge_store(struct device *dev,
1810 				      struct device_attribute *attr,
1811 				      const char *buf, size_t count)
1812 {
1813 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1814 	u32 mode;
1815 	int state;
1816 	int ret;
1817 
1818 	ret = kstrtoint(buf, 0, &state);
1819 	if (ret)
1820 		return ret;
1821 	/*
1822 	 * Check for supported values, where:
1823 	 * 0 - Disabled
1824 	 * 1 - Alternate (Non USB conformant devices that require more power)
1825 	 * 2 - Auto (USB conformant devices)
1826 	 * 3 - Typical
1827 	 */
1828 	if (state != 0 && state != 1 && state != 2 && state != 3)
1829 		return -EINVAL;
1830 
1831 	/* Set the USB charging mode to internal value */
1832 	mode = toshiba->usbsc_mode_base;
1833 	if (state == 0)
1834 		mode |= SCI_USB_CHARGE_DISABLED;
1835 	else if (state == 1)
1836 		mode |= SCI_USB_CHARGE_ALTERNATE;
1837 	else if (state == 2)
1838 		mode |= SCI_USB_CHARGE_AUTO;
1839 	else if (state == 3)
1840 		mode |= SCI_USB_CHARGE_TYPICAL;
1841 
1842 	ret = toshiba_usb_sleep_charge_set(toshiba, mode);
1843 	if (ret)
1844 		return ret;
1845 
1846 	return count;
1847 }
1848 static DEVICE_ATTR_RW(usb_sleep_charge);
1849 
1850 static ssize_t sleep_functions_on_battery_show(struct device *dev,
1851 					       struct device_attribute *attr,
1852 					       char *buf)
1853 {
1854 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1855 	u32 state;
1856 	int bat_lvl;
1857 	int status;
1858 	int ret;
1859 	int tmp;
1860 
1861 	ret = toshiba_sleep_functions_status_get(toshiba, &state);
1862 	if (ret < 0)
1863 		return ret;
1864 
1865 	/* Determine the status: 0x4 - Enabled | 0x1 - Disabled */
1866 	tmp = state & SCI_USB_CHARGE_BAT_MASK;
1867 	status = (tmp == 0x4) ? 1 : 0;
1868 	/* Determine the battery level set */
1869 	bat_lvl = state >> HCI_MISC_SHIFT;
1870 
1871 	return sprintf(buf, "%d %d\n", status, bat_lvl);
1872 }
1873 
1874 static ssize_t sleep_functions_on_battery_store(struct device *dev,
1875 						struct device_attribute *attr,
1876 						const char *buf, size_t count)
1877 {
1878 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1879 	u32 status;
1880 	int value;
1881 	int ret;
1882 	int tmp;
1883 
1884 	ret = kstrtoint(buf, 0, &value);
1885 	if (ret)
1886 		return ret;
1887 
1888 	/*
1889 	 * Set the status of the function:
1890 	 * 0 - Disabled
1891 	 * 1-100 - Enabled
1892 	 */
1893 	if (value < 0 || value > 100)
1894 		return -EINVAL;
1895 
1896 	if (value == 0) {
1897 		tmp = toshiba->usbsc_bat_level << HCI_MISC_SHIFT;
1898 		status = tmp | SCI_USB_CHARGE_BAT_LVL_OFF;
1899 	} else {
1900 		tmp = value << HCI_MISC_SHIFT;
1901 		status = tmp | SCI_USB_CHARGE_BAT_LVL_ON;
1902 	}
1903 	ret = toshiba_sleep_functions_status_set(toshiba, status);
1904 	if (ret < 0)
1905 		return ret;
1906 
1907 	toshiba->usbsc_bat_level = status >> HCI_MISC_SHIFT;
1908 
1909 	return count;
1910 }
1911 static DEVICE_ATTR_RW(sleep_functions_on_battery);
1912 
1913 static ssize_t usb_rapid_charge_show(struct device *dev,
1914 				     struct device_attribute *attr, char *buf)
1915 {
1916 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1917 	u32 state;
1918 	int ret;
1919 
1920 	ret = toshiba_usb_rapid_charge_get(toshiba, &state);
1921 	if (ret < 0)
1922 		return ret;
1923 
1924 	return sprintf(buf, "%d\n", state);
1925 }
1926 
1927 static ssize_t usb_rapid_charge_store(struct device *dev,
1928 				      struct device_attribute *attr,
1929 				      const char *buf, size_t count)
1930 {
1931 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1932 	int state;
1933 	int ret;
1934 
1935 	ret = kstrtoint(buf, 0, &state);
1936 	if (ret)
1937 		return ret;
1938 	if (state != 0 && state != 1)
1939 		return -EINVAL;
1940 
1941 	ret = toshiba_usb_rapid_charge_set(toshiba, state);
1942 	if (ret)
1943 		return ret;
1944 
1945 	return count;
1946 }
1947 static DEVICE_ATTR_RW(usb_rapid_charge);
1948 
1949 static ssize_t usb_sleep_music_show(struct device *dev,
1950 				    struct device_attribute *attr, char *buf)
1951 {
1952 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1953 	u32 state;
1954 	int ret;
1955 
1956 	ret = toshiba_usb_sleep_music_get(toshiba, &state);
1957 	if (ret < 0)
1958 		return ret;
1959 
1960 	return sprintf(buf, "%d\n", state);
1961 }
1962 
1963 static ssize_t usb_sleep_music_store(struct device *dev,
1964 				     struct device_attribute *attr,
1965 				     const char *buf, size_t count)
1966 {
1967 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1968 	int state;
1969 	int ret;
1970 
1971 	ret = kstrtoint(buf, 0, &state);
1972 	if (ret)
1973 		return ret;
1974 	if (state != 0 && state != 1)
1975 		return -EINVAL;
1976 
1977 	ret = toshiba_usb_sleep_music_set(toshiba, state);
1978 	if (ret)
1979 		return ret;
1980 
1981 	return count;
1982 }
1983 static DEVICE_ATTR_RW(usb_sleep_music);
1984 
1985 static ssize_t kbd_function_keys_show(struct device *dev,
1986 				      struct device_attribute *attr, char *buf)
1987 {
1988 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
1989 	int mode;
1990 	int ret;
1991 
1992 	ret = toshiba_function_keys_get(toshiba, &mode);
1993 	if (ret < 0)
1994 		return ret;
1995 
1996 	return sprintf(buf, "%d\n", mode);
1997 }
1998 
1999 static ssize_t kbd_function_keys_store(struct device *dev,
2000 				       struct device_attribute *attr,
2001 				       const char *buf, size_t count)
2002 {
2003 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
2004 	int mode;
2005 	int ret;
2006 
2007 	ret = kstrtoint(buf, 0, &mode);
2008 	if (ret)
2009 		return ret;
2010 	/*
2011 	 * Check for the function keys mode where:
2012 	 * 0 - Normal operation (F{1-12} as usual and hotkeys via FN-F{1-12})
2013 	 * 1 - Special functions (Opposite of the above setting)
2014 	 */
2015 	if (mode != 0 && mode != 1)
2016 		return -EINVAL;
2017 
2018 	ret = toshiba_function_keys_set(toshiba, mode);
2019 	if (ret)
2020 		return ret;
2021 
2022 	pr_info("Reboot for changes to KBD Function Keys to take effect");
2023 
2024 	return count;
2025 }
2026 static DEVICE_ATTR_RW(kbd_function_keys);
2027 
2028 static ssize_t panel_power_on_show(struct device *dev,
2029 				   struct device_attribute *attr, char *buf)
2030 {
2031 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
2032 	u32 state;
2033 	int ret;
2034 
2035 	ret = toshiba_panel_power_on_get(toshiba, &state);
2036 	if (ret < 0)
2037 		return ret;
2038 
2039 	return sprintf(buf, "%d\n", state);
2040 }
2041 
2042 static ssize_t panel_power_on_store(struct device *dev,
2043 				    struct device_attribute *attr,
2044 				    const char *buf, size_t count)
2045 {
2046 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
2047 	int state;
2048 	int ret;
2049 
2050 	ret = kstrtoint(buf, 0, &state);
2051 	if (ret)
2052 		return ret;
2053 	if (state != 0 && state != 1)
2054 		return -EINVAL;
2055 
2056 	ret = toshiba_panel_power_on_set(toshiba, state);
2057 	if (ret)
2058 		return ret;
2059 
2060 	pr_info("Reboot for changes to Panel Power ON to take effect");
2061 
2062 	return count;
2063 }
2064 static DEVICE_ATTR_RW(panel_power_on);
2065 
2066 static ssize_t usb_three_show(struct device *dev,
2067 			      struct device_attribute *attr, char *buf)
2068 {
2069 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
2070 	u32 state;
2071 	int ret;
2072 
2073 	ret = toshiba_usb_three_get(toshiba, &state);
2074 	if (ret < 0)
2075 		return ret;
2076 
2077 	return sprintf(buf, "%d\n", state);
2078 }
2079 
2080 static ssize_t usb_three_store(struct device *dev,
2081 			       struct device_attribute *attr,
2082 			       const char *buf, size_t count)
2083 {
2084 	struct toshiba_acpi_dev *toshiba = dev_get_drvdata(dev);
2085 	int state;
2086 	int ret;
2087 
2088 	ret = kstrtoint(buf, 0, &state);
2089 	if (ret)
2090 		return ret;
2091 	/*
2092 	 * Check for USB 3 mode where:
2093 	 * 0 - Disabled (Acts like a USB 2 port, saving power)
2094 	 * 1 - Enabled
2095 	 */
2096 	if (state != 0 && state != 1)
2097 		return -EINVAL;
2098 
2099 	ret = toshiba_usb_three_set(toshiba, state);
2100 	if (ret)
2101 		return ret;
2102 
2103 	pr_info("Reboot for changes to USB 3 to take effect");
2104 
2105 	return count;
2106 }
2107 static DEVICE_ATTR_RW(usb_three);
2108 
2109 static struct attribute *toshiba_attributes[] = {
2110 	&dev_attr_version.attr,
2111 	&dev_attr_fan.attr,
2112 	&dev_attr_kbd_backlight_mode.attr,
2113 	&dev_attr_kbd_type.attr,
2114 	&dev_attr_available_kbd_modes.attr,
2115 	&dev_attr_kbd_backlight_timeout.attr,
2116 	&dev_attr_touchpad.attr,
2117 	&dev_attr_position.attr,
2118 	&dev_attr_usb_sleep_charge.attr,
2119 	&dev_attr_sleep_functions_on_battery.attr,
2120 	&dev_attr_usb_rapid_charge.attr,
2121 	&dev_attr_usb_sleep_music.attr,
2122 	&dev_attr_kbd_function_keys.attr,
2123 	&dev_attr_panel_power_on.attr,
2124 	&dev_attr_usb_three.attr,
2125 	NULL,
2126 };
2127 
2128 static umode_t toshiba_sysfs_is_visible(struct kobject *kobj,
2129 					struct attribute *attr, int idx)
2130 {
2131 	struct device *dev = container_of(kobj, struct device, kobj);
2132 	struct toshiba_acpi_dev *drv = dev_get_drvdata(dev);
2133 	bool exists = true;
2134 
2135 	if (attr == &dev_attr_fan.attr)
2136 		exists = (drv->fan_supported) ? true : false;
2137 	else if (attr == &dev_attr_kbd_backlight_mode.attr)
2138 		exists = (drv->kbd_illum_supported) ? true : false;
2139 	else if (attr == &dev_attr_kbd_backlight_timeout.attr)
2140 		exists = (drv->kbd_mode == SCI_KBD_MODE_AUTO) ? true : false;
2141 	else if (attr == &dev_attr_touchpad.attr)
2142 		exists = (drv->touchpad_supported) ? true : false;
2143 	else if (attr == &dev_attr_position.attr)
2144 		exists = (drv->accelerometer_supported) ? true : false;
2145 	else if (attr == &dev_attr_usb_sleep_charge.attr)
2146 		exists = (drv->usb_sleep_charge_supported) ? true : false;
2147 	else if (attr == &dev_attr_sleep_functions_on_battery.attr)
2148 		exists = (drv->usb_sleep_charge_supported) ? true : false;
2149 	else if (attr == &dev_attr_usb_rapid_charge.attr)
2150 		exists = (drv->usb_rapid_charge_supported) ? true : false;
2151 	else if (attr == &dev_attr_usb_sleep_music.attr)
2152 		exists = (drv->usb_sleep_music_supported) ? true : false;
2153 	else if (attr == &dev_attr_kbd_function_keys.attr)
2154 		exists = (drv->kbd_function_keys_supported) ? true : false;
2155 	else if (attr == &dev_attr_panel_power_on.attr)
2156 		exists = (drv->panel_power_on_supported) ? true : false;
2157 	else if (attr == &dev_attr_usb_three.attr)
2158 		exists = (drv->usb_three_supported) ? true : false;
2159 
2160 	return exists ? attr->mode : 0;
2161 }
2162 
2163 static struct attribute_group toshiba_attr_group = {
2164 	.is_visible = toshiba_sysfs_is_visible,
2165 	.attrs = toshiba_attributes,
2166 };
2167 
2168 /*
2169  * Misc device
2170  */
2171 static int toshiba_acpi_smm_bridge(SMMRegisters *regs)
2172 {
2173 	u32 in[TCI_WORDS] = { regs->eax, regs->ebx, regs->ecx,
2174 			      regs->edx, regs->esi, regs->edi };
2175 	u32 out[TCI_WORDS];
2176 	acpi_status status;
2177 
2178 	status = tci_raw(toshiba_acpi, in, out);
2179 	if (ACPI_FAILURE(status)) {
2180 		pr_err("ACPI call to query SMM registers failed\n");
2181 		return -EIO;
2182 	}
2183 
2184 	/* Fillout the SMM struct with the TCI call results */
2185 	regs->eax = out[0];
2186 	regs->ebx = out[1];
2187 	regs->ecx = out[2];
2188 	regs->edx = out[3];
2189 	regs->esi = out[4];
2190 	regs->edi = out[5];
2191 
2192 	return 0;
2193 }
2194 
2195 static long toshiba_acpi_ioctl(struct file *fp, unsigned int cmd,
2196 			       unsigned long arg)
2197 {
2198 	SMMRegisters __user *argp = (SMMRegisters __user *)arg;
2199 	SMMRegisters regs;
2200 	int ret;
2201 
2202 	if (!argp)
2203 		return -EINVAL;
2204 
2205 	switch (cmd) {
2206 	case TOSH_SMM:
2207 		if (copy_from_user(&regs, argp, sizeof(SMMRegisters)))
2208 			return -EFAULT;
2209 		ret = toshiba_acpi_smm_bridge(&regs);
2210 		if (ret)
2211 			return ret;
2212 		if (copy_to_user(argp, &regs, sizeof(SMMRegisters)))
2213 			return -EFAULT;
2214 		break;
2215 	case TOSHIBA_ACPI_SCI:
2216 		if (copy_from_user(&regs, argp, sizeof(SMMRegisters)))
2217 			return -EFAULT;
2218 		/* Ensure we are being called with a SCI_{GET, SET} register */
2219 		if (regs.eax != SCI_GET && regs.eax != SCI_SET)
2220 			return -EINVAL;
2221 		if (!sci_open(toshiba_acpi))
2222 			return -EIO;
2223 		ret = toshiba_acpi_smm_bridge(&regs);
2224 		sci_close(toshiba_acpi);
2225 		if (ret)
2226 			return ret;
2227 		if (copy_to_user(argp, &regs, sizeof(SMMRegisters)))
2228 			return -EFAULT;
2229 		break;
2230 	default:
2231 		return -EINVAL;
2232 	}
2233 
2234 	return 0;
2235 }
2236 
2237 static const struct file_operations toshiba_acpi_fops = {
2238 	.owner		= THIS_MODULE,
2239 	.unlocked_ioctl = toshiba_acpi_ioctl,
2240 	.llseek		= noop_llseek,
2241 };
2242 
2243 /*
2244  * Hotkeys
2245  */
2246 static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev)
2247 {
2248 	acpi_status status;
2249 	u32 result;
2250 
2251 	status = acpi_evaluate_object(dev->acpi_dev->handle,
2252 				      "ENAB", NULL, NULL);
2253 	if (ACPI_FAILURE(status))
2254 		return -ENODEV;
2255 
2256 	result = hci_write(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
2257 	if (result == TOS_FAILURE)
2258 		return -EIO;
2259 	else if (result == TOS_NOT_SUPPORTED)
2260 		return -ENODEV;
2261 
2262 	return 0;
2263 }
2264 
2265 static void toshiba_acpi_enable_special_functions(struct toshiba_acpi_dev *dev)
2266 {
2267 	u32 result;
2268 
2269 	/*
2270 	 * Re-activate the hotkeys, but this time, we are using the
2271 	 * "Special Functions" mode.
2272 	 */
2273 	result = hci_write(dev, HCI_HOTKEY_EVENT,
2274 			   HCI_HOTKEY_SPECIAL_FUNCTIONS);
2275 	if (result != TOS_SUCCESS)
2276 		pr_err("Could not enable the Special Function mode\n");
2277 }
2278 
2279 static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str,
2280 				      struct serio *port)
2281 {
2282 	if (str & I8042_STR_AUXDATA)
2283 		return false;
2284 
2285 	if (unlikely(data == 0xe0))
2286 		return false;
2287 
2288 	if ((data & 0x7f) == TOS1900_FN_SCAN) {
2289 		schedule_work(&toshiba_acpi->hotkey_work);
2290 		return true;
2291 	}
2292 
2293 	return false;
2294 }
2295 
2296 static void toshiba_acpi_hotkey_work(struct work_struct *work)
2297 {
2298 	acpi_handle ec_handle = ec_get_handle();
2299 	acpi_status status;
2300 
2301 	if (!ec_handle)
2302 		return;
2303 
2304 	status = acpi_evaluate_object(ec_handle, "NTFY", NULL, NULL);
2305 	if (ACPI_FAILURE(status))
2306 		pr_err("ACPI NTFY method execution failed\n");
2307 }
2308 
2309 /*
2310  * Returns hotkey scancode, or < 0 on failure.
2311  */
2312 static int toshiba_acpi_query_hotkey(struct toshiba_acpi_dev *dev)
2313 {
2314 	unsigned long long value;
2315 	acpi_status status;
2316 
2317 	status = acpi_evaluate_integer(dev->acpi_dev->handle, "INFO",
2318 				      NULL, &value);
2319 	if (ACPI_FAILURE(status)) {
2320 		pr_err("ACPI INFO method execution failed\n");
2321 		return -EIO;
2322 	}
2323 
2324 	return value;
2325 }
2326 
2327 static void toshiba_acpi_report_hotkey(struct toshiba_acpi_dev *dev,
2328 				       int scancode)
2329 {
2330 	if (scancode == 0x100)
2331 		return;
2332 
2333 	/* Act on key press; ignore key release */
2334 	if (scancode & 0x80)
2335 		return;
2336 
2337 	if (!sparse_keymap_report_event(dev->hotkey_dev, scancode, 1, true))
2338 		pr_info("Unknown key %x\n", scancode);
2339 }
2340 
2341 static void toshiba_acpi_process_hotkeys(struct toshiba_acpi_dev *dev)
2342 {
2343 	if (dev->info_supported) {
2344 		int scancode = toshiba_acpi_query_hotkey(dev);
2345 
2346 		if (scancode < 0) {
2347 			pr_err("Failed to query hotkey event\n");
2348 		} else if (scancode != 0) {
2349 			toshiba_acpi_report_hotkey(dev, scancode);
2350 			dev->key_event_valid = 1;
2351 			dev->last_key_event = scancode;
2352 		}
2353 	} else if (dev->system_event_supported) {
2354 		u32 result;
2355 		u32 value;
2356 		int retries = 3;
2357 
2358 		do {
2359 			result = hci_read(dev, HCI_SYSTEM_EVENT, &value);
2360 			switch (result) {
2361 			case TOS_SUCCESS:
2362 				toshiba_acpi_report_hotkey(dev, (int)value);
2363 				dev->key_event_valid = 1;
2364 				dev->last_key_event = value;
2365 				break;
2366 			case TOS_NOT_SUPPORTED:
2367 				/*
2368 				 * This is a workaround for an unresolved
2369 				 * issue on some machines where system events
2370 				 * sporadically become disabled.
2371 				 */
2372 				result = hci_write(dev, HCI_SYSTEM_EVENT, 1);
2373 				if (result == TOS_SUCCESS)
2374 					pr_notice("Re-enabled hotkeys\n");
2375 				/* Fall through */
2376 			default:
2377 				retries--;
2378 				break;
2379 			}
2380 		} while (retries && result != TOS_FIFO_EMPTY);
2381 	}
2382 }
2383 
2384 static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
2385 {
2386 	const struct key_entry *keymap = toshiba_acpi_keymap;
2387 	acpi_handle ec_handle;
2388 	u32 events_type;
2389 	u32 hci_result;
2390 	int error;
2391 
2392 	if (wmi_has_guid(TOSHIBA_WMI_EVENT_GUID)) {
2393 		pr_info("WMI event detected, hotkeys will not be monitored\n");
2394 		return 0;
2395 	}
2396 
2397 	error = toshiba_acpi_enable_hotkeys(dev);
2398 	if (error)
2399 		return error;
2400 
2401 	if (toshiba_hotkey_event_type_get(dev, &events_type))
2402 		pr_notice("Unable to query Hotkey Event Type\n");
2403 
2404 	dev->hotkey_event_type = events_type;
2405 
2406 	dev->hotkey_dev = input_allocate_device();
2407 	if (!dev->hotkey_dev)
2408 		return -ENOMEM;
2409 
2410 	dev->hotkey_dev->name = "Toshiba input device";
2411 	dev->hotkey_dev->phys = "toshiba_acpi/input0";
2412 	dev->hotkey_dev->id.bustype = BUS_HOST;
2413 
2414 	if (events_type == HCI_SYSTEM_TYPE1 ||
2415 	    !dev->kbd_function_keys_supported)
2416 		keymap = toshiba_acpi_keymap;
2417 	else if (events_type == HCI_SYSTEM_TYPE2 ||
2418 		 dev->kbd_function_keys_supported)
2419 		keymap = toshiba_acpi_alt_keymap;
2420 	else
2421 		pr_info("Unknown event type received %x\n", events_type);
2422 	error = sparse_keymap_setup(dev->hotkey_dev, keymap, NULL);
2423 	if (error)
2424 		goto err_free_dev;
2425 
2426 	/*
2427 	 * For some machines the SCI responsible for providing hotkey
2428 	 * notification doesn't fire. We can trigger the notification
2429 	 * whenever the Fn key is pressed using the NTFY method, if
2430 	 * supported, so if it's present set up an i8042 key filter
2431 	 * for this purpose.
2432 	 */
2433 	ec_handle = ec_get_handle();
2434 	if (ec_handle && acpi_has_method(ec_handle, "NTFY")) {
2435 		INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work);
2436 
2437 		error = i8042_install_filter(toshiba_acpi_i8042_filter);
2438 		if (error) {
2439 			pr_err("Error installing key filter\n");
2440 			goto err_free_keymap;
2441 		}
2442 
2443 		dev->ntfy_supported = 1;
2444 	}
2445 
2446 	/*
2447 	 * Determine hotkey query interface. Prefer using the INFO
2448 	 * method when it is available.
2449 	 */
2450 	if (acpi_has_method(dev->acpi_dev->handle, "INFO"))
2451 		dev->info_supported = 1;
2452 	else {
2453 		hci_result = hci_write(dev, HCI_SYSTEM_EVENT, 1);
2454 		if (hci_result == TOS_SUCCESS)
2455 			dev->system_event_supported = 1;
2456 	}
2457 
2458 	if (!dev->info_supported && !dev->system_event_supported) {
2459 		pr_warn("No hotkey query interface found\n");
2460 		goto err_remove_filter;
2461 	}
2462 
2463 	error = input_register_device(dev->hotkey_dev);
2464 	if (error) {
2465 		pr_info("Unable to register input device\n");
2466 		goto err_remove_filter;
2467 	}
2468 
2469 	return 0;
2470 
2471  err_remove_filter:
2472 	if (dev->ntfy_supported)
2473 		i8042_remove_filter(toshiba_acpi_i8042_filter);
2474  err_free_keymap:
2475 	sparse_keymap_free(dev->hotkey_dev);
2476  err_free_dev:
2477 	input_free_device(dev->hotkey_dev);
2478 	dev->hotkey_dev = NULL;
2479 	return error;
2480 }
2481 
2482 static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev)
2483 {
2484 	struct backlight_properties props;
2485 	int brightness;
2486 	int ret;
2487 
2488 	/*
2489 	 * Some machines don't support the backlight methods at all, and
2490 	 * others support it read-only. Either of these is pretty useless,
2491 	 * so only register the backlight device if the backlight method
2492 	 * supports both reads and writes.
2493 	 */
2494 	brightness = __get_lcd_brightness(dev);
2495 	if (brightness < 0)
2496 		return 0;
2497 	ret = set_lcd_brightness(dev, brightness);
2498 	if (ret) {
2499 		pr_debug("Backlight method is read-only, disabling backlight support\n");
2500 		return 0;
2501 	}
2502 
2503 	/*
2504 	 * Tell acpi-video-detect code to prefer vendor backlight on all
2505 	 * systems with transflective backlight and on dmi matched systems.
2506 	 */
2507 	if (dev->tr_backlight_supported ||
2508 	    dmi_check_system(toshiba_vendor_backlight_dmi))
2509 		acpi_video_set_dmi_backlight_type(acpi_backlight_vendor);
2510 
2511 	if (acpi_video_get_backlight_type() != acpi_backlight_vendor)
2512 		return 0;
2513 
2514 	memset(&props, 0, sizeof(props));
2515 	props.type = BACKLIGHT_PLATFORM;
2516 	props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1;
2517 
2518 	/* Adding an extra level and having 0 change to transflective mode */
2519 	if (dev->tr_backlight_supported)
2520 		props.max_brightness++;
2521 
2522 	dev->backlight_dev = backlight_device_register("toshiba",
2523 						       &dev->acpi_dev->dev,
2524 						       dev,
2525 						       &toshiba_backlight_data,
2526 						       &props);
2527 	if (IS_ERR(dev->backlight_dev)) {
2528 		ret = PTR_ERR(dev->backlight_dev);
2529 		pr_err("Could not register toshiba backlight device\n");
2530 		dev->backlight_dev = NULL;
2531 		return ret;
2532 	}
2533 
2534 	dev->backlight_dev->props.brightness = brightness;
2535 	return 0;
2536 }
2537 
2538 static void print_supported_features(struct toshiba_acpi_dev *dev)
2539 {
2540 	pr_info("Supported laptop features:");
2541 
2542 	if (dev->hotkey_dev)
2543 		pr_cont(" hotkeys");
2544 	if (dev->backlight_dev)
2545 		pr_cont(" backlight");
2546 	if (dev->video_supported)
2547 		pr_cont(" video-out");
2548 	if (dev->fan_supported)
2549 		pr_cont(" fan");
2550 	if (dev->tr_backlight_supported)
2551 		pr_cont(" transflective-backlight");
2552 	if (dev->illumination_supported)
2553 		pr_cont(" illumination");
2554 	if (dev->kbd_illum_supported)
2555 		pr_cont(" keyboard-backlight");
2556 	if (dev->touchpad_supported)
2557 		pr_cont(" touchpad");
2558 	if (dev->eco_supported)
2559 		pr_cont(" eco-led");
2560 	if (dev->accelerometer_supported)
2561 		pr_cont(" accelerometer-axes");
2562 	if (dev->usb_sleep_charge_supported)
2563 		pr_cont(" usb-sleep-charge");
2564 	if (dev->usb_rapid_charge_supported)
2565 		pr_cont(" usb-rapid-charge");
2566 	if (dev->usb_sleep_music_supported)
2567 		pr_cont(" usb-sleep-music");
2568 	if (dev->kbd_function_keys_supported)
2569 		pr_cont(" special-function-keys");
2570 	if (dev->panel_power_on_supported)
2571 		pr_cont(" panel-power-on");
2572 	if (dev->usb_three_supported)
2573 		pr_cont(" usb3");
2574 
2575 	pr_cont("\n");
2576 }
2577 
2578 static int toshiba_acpi_remove(struct acpi_device *acpi_dev)
2579 {
2580 	struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
2581 
2582 	misc_deregister(&dev->miscdev);
2583 
2584 	remove_toshiba_proc_entries(dev);
2585 
2586 	if (dev->sysfs_created)
2587 		sysfs_remove_group(&dev->acpi_dev->dev.kobj,
2588 				   &toshiba_attr_group);
2589 
2590 	if (dev->ntfy_supported) {
2591 		i8042_remove_filter(toshiba_acpi_i8042_filter);
2592 		cancel_work_sync(&dev->hotkey_work);
2593 	}
2594 
2595 	if (dev->hotkey_dev) {
2596 		input_unregister_device(dev->hotkey_dev);
2597 		sparse_keymap_free(dev->hotkey_dev);
2598 	}
2599 
2600 	backlight_device_unregister(dev->backlight_dev);
2601 
2602 	if (dev->illumination_led_registered)
2603 		led_classdev_unregister(&dev->led_dev);
2604 
2605 	if (dev->kbd_led_registered)
2606 		led_classdev_unregister(&dev->kbd_led);
2607 
2608 	if (dev->eco_led_registered)
2609 		led_classdev_unregister(&dev->eco_led);
2610 
2611 	if (toshiba_acpi)
2612 		toshiba_acpi = NULL;
2613 
2614 	kfree(dev);
2615 
2616 	return 0;
2617 }
2618 
2619 static const char *find_hci_method(acpi_handle handle)
2620 {
2621 	if (acpi_has_method(handle, "GHCI"))
2622 		return "GHCI";
2623 
2624 	if (acpi_has_method(handle, "SPFC"))
2625 		return "SPFC";
2626 
2627 	return NULL;
2628 }
2629 
2630 static int toshiba_acpi_add(struct acpi_device *acpi_dev)
2631 {
2632 	struct toshiba_acpi_dev *dev;
2633 	const char *hci_method;
2634 	u32 special_functions;
2635 	u32 dummy;
2636 	int ret = 0;
2637 
2638 	if (toshiba_acpi)
2639 		return -EBUSY;
2640 
2641 	pr_info("Toshiba Laptop ACPI Extras version %s\n",
2642 	       TOSHIBA_ACPI_VERSION);
2643 
2644 	hci_method = find_hci_method(acpi_dev->handle);
2645 	if (!hci_method) {
2646 		pr_err("HCI interface not found\n");
2647 		return -ENODEV;
2648 	}
2649 
2650 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2651 	if (!dev)
2652 		return -ENOMEM;
2653 	dev->acpi_dev = acpi_dev;
2654 	dev->method_hci = hci_method;
2655 	dev->miscdev.minor = MISC_DYNAMIC_MINOR;
2656 	dev->miscdev.name = "toshiba_acpi";
2657 	dev->miscdev.fops = &toshiba_acpi_fops;
2658 
2659 	ret = misc_register(&dev->miscdev);
2660 	if (ret) {
2661 		pr_err("Failed to register miscdevice\n");
2662 		kfree(dev);
2663 		return ret;
2664 	}
2665 
2666 	acpi_dev->driver_data = dev;
2667 	dev_set_drvdata(&acpi_dev->dev, dev);
2668 
2669 	/* Query the BIOS for supported features */
2670 
2671 	/*
2672 	 * The "Special Functions" are always supported by the laptops
2673 	 * with the new keyboard layout, query for its presence to help
2674 	 * determine the keymap layout to use.
2675 	 */
2676 	ret = toshiba_function_keys_get(dev, &special_functions);
2677 	dev->kbd_function_keys_supported = !ret;
2678 
2679 	if (toshiba_acpi_setup_keyboard(dev))
2680 		pr_info("Unable to activate hotkeys\n");
2681 
2682 	/* Determine whether or not BIOS supports transflective backlight */
2683 	ret = get_tr_backlight_status(dev, &dummy);
2684 	dev->tr_backlight_supported = !ret;
2685 
2686 	ret = toshiba_acpi_setup_backlight(dev);
2687 	if (ret)
2688 		goto error;
2689 
2690 	toshiba_illumination_available(dev);
2691 	if (dev->illumination_supported) {
2692 		dev->led_dev.name = "toshiba::illumination";
2693 		dev->led_dev.max_brightness = 1;
2694 		dev->led_dev.brightness_set = toshiba_illumination_set;
2695 		dev->led_dev.brightness_get = toshiba_illumination_get;
2696 		if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev))
2697 			dev->illumination_led_registered = true;
2698 	}
2699 
2700 	toshiba_eco_mode_available(dev);
2701 	if (dev->eco_supported) {
2702 		dev->eco_led.name = "toshiba::eco_mode";
2703 		dev->eco_led.max_brightness = 1;
2704 		dev->eco_led.brightness_set = toshiba_eco_mode_set_status;
2705 		dev->eco_led.brightness_get = toshiba_eco_mode_get_status;
2706 		if (!led_classdev_register(&dev->acpi_dev->dev, &dev->eco_led))
2707 			dev->eco_led_registered = true;
2708 	}
2709 
2710 	toshiba_kbd_illum_available(dev);
2711 	/*
2712 	 * Only register the LED if KBD illumination is supported
2713 	 * and the keyboard backlight operation mode is set to FN-Z
2714 	 */
2715 	if (dev->kbd_illum_supported && dev->kbd_mode == SCI_KBD_MODE_FNZ) {
2716 		dev->kbd_led.name = "toshiba::kbd_backlight";
2717 		dev->kbd_led.max_brightness = 1;
2718 		dev->kbd_led.brightness_set = toshiba_kbd_backlight_set;
2719 		dev->kbd_led.brightness_get = toshiba_kbd_backlight_get;
2720 		if (!led_classdev_register(&dev->acpi_dev->dev, &dev->kbd_led))
2721 			dev->kbd_led_registered = true;
2722 	}
2723 
2724 	ret = toshiba_touchpad_get(dev, &dummy);
2725 	dev->touchpad_supported = !ret;
2726 
2727 	toshiba_accelerometer_available(dev);
2728 
2729 	toshiba_usb_sleep_charge_available(dev);
2730 
2731 	ret = toshiba_usb_rapid_charge_get(dev, &dummy);
2732 	dev->usb_rapid_charge_supported = !ret;
2733 
2734 	ret = toshiba_usb_sleep_music_get(dev, &dummy);
2735 	dev->usb_sleep_music_supported = !ret;
2736 
2737 	ret = toshiba_panel_power_on_get(dev, &dummy);
2738 	dev->panel_power_on_supported = !ret;
2739 
2740 	ret = toshiba_usb_three_get(dev, &dummy);
2741 	dev->usb_three_supported = !ret;
2742 
2743 	ret = get_video_status(dev, &dummy);
2744 	dev->video_supported = !ret;
2745 
2746 	ret = get_fan_status(dev, &dummy);
2747 	dev->fan_supported = !ret;
2748 
2749 	print_supported_features(dev);
2750 
2751 	/*
2752 	 * Enable the "Special Functions" mode only if they are
2753 	 * supported and if they are activated.
2754 	 */
2755 	if (dev->kbd_function_keys_supported && special_functions)
2756 		toshiba_acpi_enable_special_functions(dev);
2757 
2758 	ret = sysfs_create_group(&dev->acpi_dev->dev.kobj,
2759 				 &toshiba_attr_group);
2760 	if (ret) {
2761 		dev->sysfs_created = 0;
2762 		goto error;
2763 	}
2764 	dev->sysfs_created = !ret;
2765 
2766 	create_toshiba_proc_entries(dev);
2767 
2768 	toshiba_acpi = dev;
2769 
2770 	return 0;
2771 
2772 error:
2773 	toshiba_acpi_remove(acpi_dev);
2774 	return ret;
2775 }
2776 
2777 static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
2778 {
2779 	struct toshiba_acpi_dev *dev = acpi_driver_data(acpi_dev);
2780 	int ret;
2781 
2782 	switch (event) {
2783 	case 0x80: /* Hotkeys and some system events */
2784 		/*
2785 		 * Machines with this WMI GUID aren't supported due to bugs in
2786 		 * their AML.
2787 		 *
2788 		 * Return silently to avoid triggering a netlink event.
2789 		 */
2790 		if (wmi_has_guid(TOSHIBA_WMI_EVENT_GUID))
2791 			return;
2792 		toshiba_acpi_process_hotkeys(dev);
2793 		break;
2794 	case 0x81: /* Dock events */
2795 	case 0x82:
2796 	case 0x83:
2797 		pr_info("Dock event received %x\n", event);
2798 		break;
2799 	case 0x88: /* Thermal events */
2800 		pr_info("Thermal event received\n");
2801 		break;
2802 	case 0x8f: /* LID closed */
2803 	case 0x90: /* LID is closed and Dock has been ejected */
2804 		break;
2805 	case 0x8c: /* SATA power events */
2806 	case 0x8b:
2807 		pr_info("SATA power event received %x\n", event);
2808 		break;
2809 	case 0x92: /* Keyboard backlight mode changed */
2810 		/* Update sysfs entries */
2811 		ret = sysfs_update_group(&acpi_dev->dev.kobj,
2812 					 &toshiba_attr_group);
2813 		if (ret)
2814 			pr_err("Unable to update sysfs entries\n");
2815 		break;
2816 	case 0x85: /* Unknown */
2817 	case 0x8d: /* Unknown */
2818 	case 0x8e: /* Unknown */
2819 	case 0x94: /* Unknown */
2820 	case 0x95: /* Unknown */
2821 	default:
2822 		pr_info("Unknown event received %x\n", event);
2823 		break;
2824 	}
2825 
2826 	acpi_bus_generate_netlink_event(acpi_dev->pnp.device_class,
2827 					dev_name(&acpi_dev->dev),
2828 					event, 0);
2829 }
2830 
2831 #ifdef CONFIG_PM_SLEEP
2832 static int toshiba_acpi_suspend(struct device *device)
2833 {
2834 	struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
2835 
2836 	if (dev->hotkey_dev) {
2837 		u32 result;
2838 
2839 		result = hci_write(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_DISABLE);
2840 		if (result != TOS_SUCCESS)
2841 			pr_info("Unable to disable hotkeys\n");
2842 	}
2843 
2844 	return 0;
2845 }
2846 
2847 static int toshiba_acpi_resume(struct device *device)
2848 {
2849 	struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
2850 
2851 	if (dev->hotkey_dev) {
2852 		int error = toshiba_acpi_enable_hotkeys(dev);
2853 
2854 		if (error)
2855 			pr_info("Unable to re-enable hotkeys\n");
2856 	}
2857 
2858 	return 0;
2859 }
2860 #endif
2861 
2862 static SIMPLE_DEV_PM_OPS(toshiba_acpi_pm,
2863 			 toshiba_acpi_suspend, toshiba_acpi_resume);
2864 
2865 static struct acpi_driver toshiba_acpi_driver = {
2866 	.name	= "Toshiba ACPI driver",
2867 	.owner	= THIS_MODULE,
2868 	.ids	= toshiba_device_ids,
2869 	.flags	= ACPI_DRIVER_ALL_NOTIFY_EVENTS,
2870 	.ops	= {
2871 		.add		= toshiba_acpi_add,
2872 		.remove		= toshiba_acpi_remove,
2873 		.notify		= toshiba_acpi_notify,
2874 	},
2875 	.drv.pm	= &toshiba_acpi_pm,
2876 };
2877 
2878 static int __init toshiba_acpi_init(void)
2879 {
2880 	int ret;
2881 
2882 	toshiba_proc_dir = proc_mkdir(PROC_TOSHIBA, acpi_root_dir);
2883 	if (!toshiba_proc_dir) {
2884 		pr_err("Unable to create proc dir " PROC_TOSHIBA "\n");
2885 		return -ENODEV;
2886 	}
2887 
2888 	ret = acpi_bus_register_driver(&toshiba_acpi_driver);
2889 	if (ret) {
2890 		pr_err("Failed to register ACPI driver: %d\n", ret);
2891 		remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
2892 	}
2893 
2894 	return ret;
2895 }
2896 
2897 static void __exit toshiba_acpi_exit(void)
2898 {
2899 	acpi_bus_unregister_driver(&toshiba_acpi_driver);
2900 	if (toshiba_proc_dir)
2901 		remove_proc_entry(PROC_TOSHIBA, acpi_root_dir);
2902 }
2903 
2904 module_init(toshiba_acpi_init);
2905 module_exit(toshiba_acpi_exit);
2906