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