Lines Matching +full:fn +full:- +full:keymap
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * toshiba_acpi.c - Toshiba Laptop ACPI Extras
5 * Copyright (C) 2002-2004 John Belmonte
8 * Copyright (C) 2014-2016 Azael Avalos
14 * Jonathan A. Buzzard - Toshiba HCI info, and critical tips on reverse
16 * Yasushi Nagato - changes for linux kernel 2.4 -> 2.5
17 * Rob Miller - TV out and hotkeys help
35 #include <linux/input/sparse-keymap.h>
53 #define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"
55 /* Scan code for Fn key on TOS1900 models */
132 #define HCI_LCD_BRIGHTNESS_SHIFT (16-HCI_LCD_BRIGHTNESS_BITS)
275 * List of models which have a broken acpi-video backlight interface and thus
300 return (status == AE_OK) ? 0 : -EIO; in write_acpi_int()
326 status = acpi_evaluate_object(dev->acpi_dev->handle, in tci_raw()
327 (char *)dev->method_hci, ¶ms, in tci_raw()
329 if ((status == AE_OK) && (out_objs->package.count <= TCI_WORDS)) { in tci_raw()
330 for (i = 0; i < out_objs->package.count; ++i) in tci_raw()
331 out[i] = out_objs->package.elements[i].integer.value; in tci_raw()
457 dev->illumination_supported = 0; in toshiba_illumination_available()
472 dev->illumination_supported = 1; in toshiba_illumination_available()
526 dev->kbd_illum_supported = 0; in toshiba_kbd_illum_available()
527 dev->kbd_event_generated = false; in toshiba_kbd_illum_available()
549 dev->kbd_type = 2; in toshiba_kbd_illum_available()
551 dev->kbd_type = 1; in toshiba_kbd_illum_available()
553 dev->kbd_mode = out[2] & SCI_KBD_MODE_MASK; in toshiba_kbd_illum_available()
554 /* Get the current time (1-60 seconds) */ in toshiba_kbd_illum_available()
555 dev->kbd_time = out[2] >> HCI_MISC_SHIFT; in toshiba_kbd_illum_available()
557 dev->kbd_illum_supported = 1; in toshiba_kbd_illum_available()
565 return -EIO; in toshiba_kbd_illum_status_set()
572 return -ENODEV; in toshiba_kbd_illum_status_set()
574 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_kbd_illum_status_set()
582 return -EIO; in toshiba_kbd_illum_status_get()
589 return -ENODEV; in toshiba_kbd_illum_status_get()
591 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_kbd_illum_status_get()
634 return -EIO; in toshiba_touchpad_set()
641 return -ENODEV; in toshiba_touchpad_set()
643 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_touchpad_set()
651 return -EIO; in toshiba_touchpad_get()
658 return -ENODEV; in toshiba_touchpad_get()
660 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_touchpad_get()
670 dev->eco_supported = 0; in toshiba_eco_mode_available()
698 dev->eco_supported = 1; in toshiba_eco_mode_available()
746 dev->accelerometer_supported = 0; in toshiba_accelerometer_available()
761 dev->accelerometer_supported = 1; in toshiba_accelerometer_available()
775 return -EIO; in toshiba_accelerometer_get()
779 return -ENODEV; in toshiba_accelerometer_get()
782 return -EIO; in toshiba_accelerometer_get()
797 dev->usb_sleep_charge_supported = 0; in toshiba_usb_sleep_charge_available()
814 dev->usbsc_mode_base = out[4]; in toshiba_usb_sleep_charge_available()
827 dev->usbsc_bat_level = out[2]; in toshiba_usb_sleep_charge_available()
829 dev->usb_sleep_charge_supported = 1; in toshiba_usb_sleep_charge_available()
838 return -EIO; in toshiba_usb_sleep_charge_get()
845 return -ENODEV; in toshiba_usb_sleep_charge_get()
847 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_usb_sleep_charge_get()
856 return -EIO; in toshiba_usb_sleep_charge_set()
863 return -ENODEV; in toshiba_usb_sleep_charge_set()
865 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_usb_sleep_charge_set()
876 return -EIO; in toshiba_sleep_functions_status_get()
883 return -EIO; in toshiba_sleep_functions_status_get()
887 return -ENODEV; in toshiba_sleep_functions_status_get()
890 return -EIO; in toshiba_sleep_functions_status_get()
906 return -EIO; in toshiba_sleep_functions_status_set()
914 return -EIO; in toshiba_sleep_functions_status_set()
918 return -ENODEV; in toshiba_sleep_functions_status_set()
920 return out[0] == TOS_SUCCESS ? 0 : -EIO; in toshiba_sleep_functions_status_set()
931 return -EIO; in toshiba_usb_rapid_charge_get()
938 return -EIO; in toshiba_usb_rapid_charge_get()
942 return -ENODEV; in toshiba_usb_rapid_charge_get()
945 return -EIO; in toshiba_usb_rapid_charge_get()
960 return -EIO; in toshiba_usb_rapid_charge_set()
968 return -EIO; in toshiba_usb_rapid_charge_set()
972 return -ENODEV; in toshiba_usb_rapid_charge_set()
974 return (out[0] == TOS_SUCCESS || out[0] == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_usb_rapid_charge_set()
982 return -EIO; in toshiba_usb_sleep_music_get()
989 return -ENODEV; in toshiba_usb_sleep_music_get()
991 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_usb_sleep_music_get()
999 return -EIO; in toshiba_usb_sleep_music_set()
1006 return -ENODEV; in toshiba_usb_sleep_music_set()
1008 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_usb_sleep_music_set()
1017 return -EIO; in toshiba_function_keys_get()
1024 return -ENODEV; in toshiba_function_keys_get()
1026 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_function_keys_get()
1034 return -EIO; in toshiba_function_keys_set()
1041 return -ENODEV; in toshiba_function_keys_set()
1043 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_function_keys_set()
1052 return -EIO; in toshiba_panel_power_on_get()
1059 return -ENODEV; in toshiba_panel_power_on_get()
1061 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_panel_power_on_get()
1069 return -EIO; in toshiba_panel_power_on_set()
1076 return -ENODEV; in toshiba_panel_power_on_set()
1078 return result == TOS_SUCCESS ? 0 : -EIO; in toshiba_panel_power_on_set()
1087 return -EIO; in toshiba_usb_three_get()
1094 return -ENODEV; in toshiba_usb_three_get()
1096 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_usb_three_get()
1104 return -EIO; in toshiba_usb_three_set()
1111 return -ENODEV; in toshiba_usb_three_set()
1113 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_usb_three_set()
1127 return -EIO; in toshiba_hotkey_event_type_get()
1131 return -ENODEV; in toshiba_hotkey_event_type_get()
1134 return -EIO; in toshiba_hotkey_event_type_get()
1153 return -EIO; in toshiba_wireless_status()
1157 return -ENODEV; in toshiba_wireless_status()
1160 return -EIO; in toshiba_wireless_status()
1162 dev->killswitch = !!(out[2] & HCI_WIRELESS_STATUS); in toshiba_wireless_status()
1174 dev->wwan_supported = 0; in toshiba_wwan_available()
1196 dev->wwan_supported = (out[2] == HCI_WIRELESS_WWAN_STATUS); in toshiba_wwan_available()
1209 return -EIO; in toshiba_wwan_set()
1213 return -ENODEV; in toshiba_wwan_set()
1216 return -EIO; in toshiba_wwan_set()
1227 return -EIO; in toshiba_wwan_set()
1231 return -ENODEV; in toshiba_wwan_set()
1233 return out[0] == TOS_SUCCESS ? 0 : -EIO; in toshiba_wwan_set()
1243 dev->cooling_method_supported = 0; in toshiba_cooling_method_available()
1244 dev->max_cooling_method = 0; in toshiba_cooling_method_available()
1255 dev->cooling_method_supported = 1; in toshiba_cooling_method_available()
1256 dev->max_cooling_method = out[3]; in toshiba_cooling_method_available()
1267 return -ENODEV; in toshiba_cooling_method_get()
1269 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_cooling_method_get()
1280 return -ENODEV; in toshiba_cooling_method_set()
1282 return (result == TOS_SUCCESS || result == TOS_SUCCESS2) ? 0 : -EIO; in toshiba_cooling_method_set()
1293 return -ENODEV; in get_tr_backlight_status()
1295 return result == TOS_SUCCESS ? 0 : -EIO; in get_tr_backlight_status()
1305 return -ENODEV; in set_tr_backlight_status()
1307 return result == TOS_SUCCESS ? 0 : -EIO; in set_tr_backlight_status()
1319 if (dev->tr_backlight_supported) { in __get_lcd_brightness()
1333 return -ENODEV; in __get_lcd_brightness()
1337 -EIO; in __get_lcd_brightness()
1349 struct toshiba_acpi_dev *dev = m->private; in lcd_proc_show()
1353 if (!dev->backlight_dev) in lcd_proc_show()
1354 return -ENODEV; in lcd_proc_show()
1356 levels = dev->backlight_dev->props.max_brightness + 1; in lcd_proc_show()
1357 value = get_lcd_brightness(dev->backlight_dev); in lcd_proc_show()
1378 if (dev->tr_backlight_supported) { in set_lcd_brightness()
1384 value--; in set_lcd_brightness()
1392 return -ENODEV; in set_lcd_brightness()
1394 return result == TOS_SUCCESS ? 0 : -EIO; in set_lcd_brightness()
1401 return set_lcd_brightness(dev, bd->props.brightness); in set_lcd_status()
1413 len = min(count, sizeof(cmd) - 1); in lcd_proc_write()
1415 return -EFAULT; in lcd_proc_write()
1418 levels = dev->backlight_dev->props.max_brightness + 1; in lcd_proc_write()
1421 return -EINVAL; in lcd_proc_write()
1424 return -EIO; in lcd_proc_write()
1437 /* Video-Out */
1443 pr_err("ACPI call to get Video-Out failed\n"); in get_video_status()
1445 return -ENODEV; in get_video_status()
1447 return result == TOS_SUCCESS ? 0 : -EIO; in get_video_status()
1452 struct toshiba_acpi_dev *dev = m->private; in video_proc_show()
1457 return -EIO; in video_proc_show()
1481 int lcd_out = -1, crt_out = -1, tv_out = -1; in video_proc_write()
1507 --remain; in video_proc_write()
1508 } while (remain && *(buffer - 1) != ';'); in video_proc_write()
1517 if (lcd_out != -1) in video_proc_write()
1519 if (crt_out != -1) in video_proc_write()
1521 if (tv_out != -1) in video_proc_write()
1531 return ret ? -EIO : count; in video_proc_write()
1550 return -ENODEV; in get_fan_status()
1552 return result == TOS_SUCCESS ? 0 : -EIO; in get_fan_status()
1562 return -ENODEV; in set_fan_status()
1564 return result == TOS_SUCCESS ? 0 : -EIO; in set_fan_status()
1569 struct toshiba_acpi_dev *dev = m->private; in fan_proc_show()
1573 return -EIO; in fan_proc_show()
1576 seq_printf(m, "force_on: %d\n", dev->force_fan); in fan_proc_show()
1594 len = min(count, sizeof(cmd) - 1); in fan_proc_write()
1596 return -EFAULT; in fan_proc_write()
1601 return -EINVAL; in fan_proc_write()
1604 return -EIO; in fan_proc_write()
1606 dev->force_fan = value; in fan_proc_write()
1621 struct toshiba_acpi_dev *dev = m->private; in keys_proc_show()
1623 seq_printf(m, "hotkey_ready: %d\n", dev->key_event_valid); in keys_proc_show()
1624 seq_printf(m, "hotkey: 0x%04x\n", dev->last_key_event); in keys_proc_show()
1642 len = min(count, sizeof(cmd) - 1); in keys_proc_write()
1644 return -EFAULT; in keys_proc_write()
1648 dev->key_event_valid = 0; in keys_proc_write()
1650 return -EINVAL; in keys_proc_write()
1678 if (dev->backlight_dev) in create_toshiba_proc_entries()
1681 if (dev->video_supported) in create_toshiba_proc_entries()
1684 if (dev->fan_supported) in create_toshiba_proc_entries()
1687 if (dev->hotkey_dev) in create_toshiba_proc_entries()
1696 if (dev->backlight_dev) in remove_toshiba_proc_entries()
1698 if (dev->video_supported) in remove_toshiba_proc_entries()
1700 if (dev->fan_supported) in remove_toshiba_proc_entries()
1702 if (dev->hotkey_dev) in remove_toshiba_proc_entries()
1741 return -EINVAL; in fan_store()
1779 if (toshiba->kbd_type == 1) { in kbd_backlight_mode_store()
1782 return -EINVAL; in kbd_backlight_mode_store()
1783 } else if (toshiba->kbd_type == 2) { in kbd_backlight_mode_store()
1787 return -EINVAL; in kbd_backlight_mode_store()
1792 * Auto - KBD backlight turns off automatically in given time in kbd_backlight_mode_store()
1793 * FN-Z - KBD backlight "toggles" when hotkey pressed in kbd_backlight_mode_store()
1794 * ON - KBD backlight is always on in kbd_backlight_mode_store()
1795 * OFF - KBD backlight is always off in kbd_backlight_mode_store()
1799 if (toshiba->kbd_mode != mode) { in kbd_backlight_mode_store()
1801 int time = toshiba->kbd_time << HCI_MISC_SHIFT; in kbd_backlight_mode_store()
1804 if (toshiba->kbd_type == 1) { in kbd_backlight_mode_store()
1806 time |= toshiba->kbd_mode; in kbd_backlight_mode_store()
1807 } else if (toshiba->kbd_type == 2) { in kbd_backlight_mode_store()
1816 toshiba->kbd_mode = mode; in kbd_backlight_mode_store()
1817 toshiba_acpi->kbd_mode = mode; in kbd_backlight_mode_store()
1833 if (toshiba->kbd_type == 2 && in kbd_backlight_mode_store()
1834 !toshiba->kbd_event_generated) in kbd_backlight_mode_store()
1849 return -EIO; in kbd_backlight_mode_show()
1860 return sprintf(buf, "%d\n", toshiba->kbd_type); in kbd_type_show()
1870 if (toshiba->kbd_type == 1) in available_kbd_modes_show()
1892 if (toshiba->kbd_type == 1) { in kbd_backlight_timeout_store()
1894 return -EINVAL; in kbd_backlight_timeout_store()
1895 } else if (toshiba->kbd_type == 2) { in kbd_backlight_timeout_store()
1897 return -EINVAL; in kbd_backlight_timeout_store()
1903 if (toshiba->kbd_time != time) { in kbd_backlight_timeout_store()
1907 if (toshiba->kbd_type == 1) in kbd_backlight_timeout_store()
1909 else if (toshiba->kbd_type == 2) in kbd_backlight_timeout_store()
1916 toshiba->kbd_time = time >> HCI_MISC_SHIFT; in kbd_backlight_timeout_store()
1930 return -EIO; in kbd_backlight_timeout_show()
1944 /* Set the TouchPad on/off, 0 - Disable | 1 - Enable */ in touchpad_store()
1949 return -EINVAL; in touchpad_store()
2001 * 0 - Disabled in usb_sleep_charge_store()
2002 * 1 - Alternate (Non USB conformant devices that require more power) in usb_sleep_charge_store()
2003 * 2 - Auto (USB conformant devices) in usb_sleep_charge_store()
2004 * 3 - Typical in usb_sleep_charge_store()
2007 return -EINVAL; in usb_sleep_charge_store()
2010 mode = toshiba->usbsc_mode_base; in usb_sleep_charge_store()
2042 /* Determine the status: 0x4 - Enabled | 0x1 - Disabled */ in sleep_functions_on_battery_show()
2067 * 0 - Disabled in sleep_functions_on_battery_store()
2068 * 1-100 - Enabled in sleep_functions_on_battery_store()
2071 return -EINVAL; in sleep_functions_on_battery_store()
2074 tmp = toshiba->usbsc_bat_level << HCI_MISC_SHIFT; in sleep_functions_on_battery_store()
2084 toshiba->usbsc_bat_level = status >> HCI_MISC_SHIFT; in sleep_functions_on_battery_store()
2116 return -EINVAL; in usb_rapid_charge_store()
2152 return -EINVAL; in usb_sleep_music_store()
2189 * 0 - Normal operation (F{1-12} as usual and hotkeys via FN-F{1-12}) in kbd_function_keys_store()
2190 * 1 - Special functions (Opposite of the above setting) in kbd_function_keys_store()
2193 return -EINVAL; in kbd_function_keys_store()
2231 return -EINVAL; in panel_power_on_store()
2270 * 0 - Disabled (Acts like a USB 2 port, saving power) in usb_three_store()
2271 * 1 - Enabled in usb_three_store()
2274 return -EINVAL; in usb_three_store()
2297 return sprintf(buf, "%d %d\n", state, toshiba->max_cooling_method); in cooling_method_show()
2315 * 0 - Maximum Performance in cooling_method_store()
2316 * 1 - Battery Optimized in cooling_method_store()
2319 * 0 - Maximum Performance in cooling_method_store()
2320 * 1 - Performance in cooling_method_store()
2321 * 2 - Battery Optimized in cooling_method_store()
2323 if (state < 0 || state > toshiba->max_cooling_method) in cooling_method_store()
2324 return -EINVAL; in cooling_method_store()
2361 exists = (drv->fan_supported) ? true : false; in toshiba_sysfs_is_visible()
2363 exists = (drv->kbd_illum_supported) ? true : false; in toshiba_sysfs_is_visible()
2365 exists = (drv->kbd_mode == SCI_KBD_MODE_AUTO) ? true : false; in toshiba_sysfs_is_visible()
2367 exists = (drv->touchpad_supported) ? true : false; in toshiba_sysfs_is_visible()
2369 exists = (drv->usb_sleep_charge_supported) ? true : false; in toshiba_sysfs_is_visible()
2371 exists = (drv->usb_sleep_charge_supported) ? true : false; in toshiba_sysfs_is_visible()
2373 exists = (drv->usb_rapid_charge_supported) ? true : false; in toshiba_sysfs_is_visible()
2375 exists = (drv->usb_sleep_music_supported) ? true : false; in toshiba_sysfs_is_visible()
2377 exists = (drv->kbd_function_keys_supported) ? true : false; in toshiba_sysfs_is_visible()
2379 exists = (drv->panel_power_on_supported) ? true : false; in toshiba_sysfs_is_visible()
2381 exists = (drv->usb_three_supported) ? true : false; in toshiba_sysfs_is_visible()
2383 exists = (drv->cooling_method_supported) ? true : false; in toshiba_sysfs_is_visible()
2385 return exists ? attr->mode : 0; in toshiba_sysfs_is_visible()
2396 if (sysfs_update_group(&toshiba_acpi->acpi_dev->dev.kobj, in toshiba_acpi_kbd_bl_work()
2401 if (toshiba_acpi->kbd_type == 2 && in toshiba_acpi_kbd_bl_work()
2402 toshiba_acpi->kbd_mode != SCI_KBD_MODE_AUTO) in toshiba_acpi_kbd_bl_work()
2403 led_classdev_notify_brightness_hw_changed(&toshiba_acpi->kbd_led, in toshiba_acpi_kbd_bl_work()
2404 (toshiba_acpi->kbd_mode == SCI_KBD_MODE_ON) ? in toshiba_acpi_kbd_bl_work()
2408 acpi_bus_generate_netlink_event(toshiba_acpi->acpi_dev->pnp.device_class, in toshiba_acpi_kbd_bl_work()
2409 dev_name(&toshiba_acpi->acpi_dev->dev), in toshiba_acpi_kbd_bl_work()
2435 -(xyval & HCI_ACCEL_MASK) : xyval & HCI_ACCEL_MASK; in toshiba_iio_accel_get_axis()
2438 -((xyval >> HCI_MISC_SHIFT) & HCI_ACCEL_MASK) : in toshiba_iio_accel_get_axis()
2442 -(zval & HCI_ACCEL_MASK) : zval & HCI_ACCEL_MASK; in toshiba_iio_accel_get_axis()
2456 ret = toshiba_iio_accel_get_axis(chan->channel); in toshiba_iio_accel_read_raw()
2457 if (ret == -EIO || ret == -ENODEV) in toshiba_iio_accel_read_raw()
2465 return -EINVAL; in toshiba_iio_accel_read_raw()
2492 u32 in[TCI_WORDS] = { regs->eax, regs->ebx, regs->ecx, in toshiba_acpi_smm_bridge()
2493 regs->edx, regs->esi, regs->edi }; in toshiba_acpi_smm_bridge()
2500 return -EIO; in toshiba_acpi_smm_bridge()
2504 regs->eax = out[0]; in toshiba_acpi_smm_bridge()
2505 regs->ebx = out[1]; in toshiba_acpi_smm_bridge()
2506 regs->ecx = out[2]; in toshiba_acpi_smm_bridge()
2507 regs->edx = out[3]; in toshiba_acpi_smm_bridge()
2508 regs->esi = out[4]; in toshiba_acpi_smm_bridge()
2509 regs->edi = out[5]; in toshiba_acpi_smm_bridge()
2522 return -EINVAL; in toshiba_acpi_ioctl()
2527 return -EFAULT; in toshiba_acpi_ioctl()
2532 return -EFAULT; in toshiba_acpi_ioctl()
2536 return -EFAULT; in toshiba_acpi_ioctl()
2539 return -EINVAL; in toshiba_acpi_ioctl()
2541 return -EIO; in toshiba_acpi_ioctl()
2547 return -EFAULT; in toshiba_acpi_ioctl()
2550 return -EINVAL; in toshiba_acpi_ioctl()
2574 if (!dev->killswitch) in toshiba_acpi_wwan_set_block()
2587 rfkill_set_hw_state(dev->wwan_rfk, !dev->killswitch); in toshiba_acpi_wwan_poll()
2602 dev->wwan_rfk = rfkill_alloc("Toshiba WWAN", in toshiba_acpi_setup_wwan_rfkill()
2603 &dev->acpi_dev->dev, in toshiba_acpi_setup_wwan_rfkill()
2607 if (!dev->wwan_rfk) { in toshiba_acpi_setup_wwan_rfkill()
2609 return -ENOMEM; in toshiba_acpi_setup_wwan_rfkill()
2612 rfkill_set_hw_state(dev->wwan_rfk, !dev->killswitch); in toshiba_acpi_setup_wwan_rfkill()
2614 ret = rfkill_register(dev->wwan_rfk); in toshiba_acpi_setup_wwan_rfkill()
2617 rfkill_destroy(dev->wwan_rfk); in toshiba_acpi_setup_wwan_rfkill()
2631 status = acpi_evaluate_object(dev->acpi_dev->handle, in toshiba_acpi_enable_hotkeys()
2634 return -ENODEV; in toshiba_acpi_enable_hotkeys()
2640 if (dev->kbd_function_keys_supported && dev->special_functions) in toshiba_acpi_enable_hotkeys()
2647 return -EIO; in toshiba_acpi_enable_hotkeys()
2649 return -ENODEV; in toshiba_acpi_enable_hotkeys()
2664 schedule_work(&toshiba_acpi->hotkey_work); in toshiba_acpi_i8042_filter()
2692 status = acpi_evaluate_integer(dev->acpi_dev->handle, "INFO", in toshiba_acpi_query_hotkey()
2696 return -EIO; in toshiba_acpi_query_hotkey()
2712 if (!sparse_keymap_report_event(dev->hotkey_dev, scancode, 1, true)) in toshiba_acpi_report_hotkey()
2718 if (dev->info_supported) { in toshiba_acpi_process_hotkeys()
2725 dev->key_event_valid = 1; in toshiba_acpi_process_hotkeys()
2726 dev->last_key_event = scancode; in toshiba_acpi_process_hotkeys()
2728 } else if (dev->system_event_supported) { in toshiba_acpi_process_hotkeys()
2738 dev->key_event_valid = 1; in toshiba_acpi_process_hotkeys()
2739 dev->last_key_event = value; in toshiba_acpi_process_hotkeys()
2749 pr_notice("Re-enabled hotkeys\n"); in toshiba_acpi_process_hotkeys()
2752 retries--; in toshiba_acpi_process_hotkeys()
2761 const struct key_entry *keymap = toshiba_acpi_keymap; in toshiba_acpi_setup_keyboard() local
2779 if (toshiba_hotkey_event_type_get(dev, &dev->hotkey_event_type)) in toshiba_acpi_setup_keyboard()
2782 dev->hotkey_dev = input_allocate_device(); in toshiba_acpi_setup_keyboard()
2783 if (!dev->hotkey_dev) in toshiba_acpi_setup_keyboard()
2784 return -ENOMEM; in toshiba_acpi_setup_keyboard()
2786 dev->hotkey_dev->name = "Toshiba input device"; in toshiba_acpi_setup_keyboard()
2787 dev->hotkey_dev->phys = "toshiba_acpi/input0"; in toshiba_acpi_setup_keyboard()
2788 dev->hotkey_dev->id.bustype = BUS_HOST; in toshiba_acpi_setup_keyboard()
2790 if (dev->hotkey_event_type == HCI_SYSTEM_TYPE1 || in toshiba_acpi_setup_keyboard()
2791 !dev->kbd_function_keys_supported) in toshiba_acpi_setup_keyboard()
2792 keymap = toshiba_acpi_keymap; in toshiba_acpi_setup_keyboard()
2793 else if (dev->hotkey_event_type == HCI_SYSTEM_TYPE2 || in toshiba_acpi_setup_keyboard()
2794 dev->kbd_function_keys_supported) in toshiba_acpi_setup_keyboard()
2795 keymap = toshiba_acpi_alt_keymap; in toshiba_acpi_setup_keyboard()
2798 dev->hotkey_event_type); in toshiba_acpi_setup_keyboard()
2799 error = sparse_keymap_setup(dev->hotkey_dev, keymap, NULL); in toshiba_acpi_setup_keyboard()
2806 * whenever the Fn key is pressed using the NTFY method, if in toshiba_acpi_setup_keyboard()
2812 INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work); in toshiba_acpi_setup_keyboard()
2820 dev->ntfy_supported = 1; in toshiba_acpi_setup_keyboard()
2827 if (acpi_has_method(dev->acpi_dev->handle, "INFO")) in toshiba_acpi_setup_keyboard()
2828 dev->info_supported = 1; in toshiba_acpi_setup_keyboard()
2830 dev->system_event_supported = 1; in toshiba_acpi_setup_keyboard()
2832 if (!dev->info_supported && !dev->system_event_supported) { in toshiba_acpi_setup_keyboard()
2837 error = input_register_device(dev->hotkey_dev); in toshiba_acpi_setup_keyboard()
2846 if (dev->ntfy_supported) in toshiba_acpi_setup_keyboard()
2849 input_free_device(dev->hotkey_dev); in toshiba_acpi_setup_keyboard()
2850 dev->hotkey_dev = NULL; in toshiba_acpi_setup_keyboard()
2862 * others support it read-only. Either of these is pretty useless, in toshiba_acpi_setup_backlight()
2875 if (dev->tr_backlight_supported && brightness == 0) in toshiba_acpi_setup_backlight()
2879 pr_debug("Backlight method is read-only, disabling backlight support\n"); in toshiba_acpi_setup_backlight()
2884 * Tell acpi-video-detect code to prefer vendor backlight on all in toshiba_acpi_setup_backlight()
2887 if (dev->tr_backlight_supported || in toshiba_acpi_setup_backlight()
2896 props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1; in toshiba_acpi_setup_backlight()
2899 if (dev->tr_backlight_supported) in toshiba_acpi_setup_backlight()
2902 dev->backlight_dev = backlight_device_register("toshiba", in toshiba_acpi_setup_backlight()
2903 &dev->acpi_dev->dev, in toshiba_acpi_setup_backlight()
2907 if (IS_ERR(dev->backlight_dev)) { in toshiba_acpi_setup_backlight()
2908 ret = PTR_ERR(dev->backlight_dev); in toshiba_acpi_setup_backlight()
2910 dev->backlight_dev = NULL; in toshiba_acpi_setup_backlight()
2914 dev->backlight_dev->props.brightness = brightness; in toshiba_acpi_setup_backlight()
2922 if (dev->hotkey_dev) in print_supported_features()
2924 if (dev->backlight_dev) in print_supported_features()
2926 if (dev->video_supported) in print_supported_features()
2927 pr_cont(" video-out"); in print_supported_features()
2928 if (dev->fan_supported) in print_supported_features()
2930 if (dev->tr_backlight_supported) in print_supported_features()
2931 pr_cont(" transflective-backlight"); in print_supported_features()
2932 if (dev->illumination_supported) in print_supported_features()
2934 if (dev->kbd_illum_supported) in print_supported_features()
2935 pr_cont(" keyboard-backlight"); in print_supported_features()
2936 if (dev->touchpad_supported) in print_supported_features()
2938 if (dev->eco_supported) in print_supported_features()
2939 pr_cont(" eco-led"); in print_supported_features()
2940 if (dev->accelerometer_supported) in print_supported_features()
2941 pr_cont(" accelerometer-axes"); in print_supported_features()
2942 if (dev->usb_sleep_charge_supported) in print_supported_features()
2943 pr_cont(" usb-sleep-charge"); in print_supported_features()
2944 if (dev->usb_rapid_charge_supported) in print_supported_features()
2945 pr_cont(" usb-rapid-charge"); in print_supported_features()
2946 if (dev->usb_sleep_music_supported) in print_supported_features()
2947 pr_cont(" usb-sleep-music"); in print_supported_features()
2948 if (dev->kbd_function_keys_supported) in print_supported_features()
2949 pr_cont(" special-function-keys"); in print_supported_features()
2950 if (dev->panel_power_on_supported) in print_supported_features()
2951 pr_cont(" panel-power-on"); in print_supported_features()
2952 if (dev->usb_three_supported) in print_supported_features()
2954 if (dev->wwan_supported) in print_supported_features()
2956 if (dev->cooling_method_supported) in print_supported_features()
2957 pr_cont(" cooling-method"); in print_supported_features()
2966 misc_deregister(&dev->miscdev); in toshiba_acpi_remove()
2970 if (dev->accelerometer_supported && dev->indio_dev) { in toshiba_acpi_remove()
2971 iio_device_unregister(dev->indio_dev); in toshiba_acpi_remove()
2972 iio_device_free(dev->indio_dev); in toshiba_acpi_remove()
2975 if (dev->sysfs_created) in toshiba_acpi_remove()
2976 sysfs_remove_group(&dev->acpi_dev->dev.kobj, in toshiba_acpi_remove()
2979 if (dev->ntfy_supported) { in toshiba_acpi_remove()
2981 cancel_work_sync(&dev->hotkey_work); in toshiba_acpi_remove()
2984 if (dev->hotkey_dev) in toshiba_acpi_remove()
2985 input_unregister_device(dev->hotkey_dev); in toshiba_acpi_remove()
2987 backlight_device_unregister(dev->backlight_dev); in toshiba_acpi_remove()
2989 led_classdev_unregister(&dev->led_dev); in toshiba_acpi_remove()
2990 led_classdev_unregister(&dev->kbd_led); in toshiba_acpi_remove()
2991 led_classdev_unregister(&dev->eco_led); in toshiba_acpi_remove()
2993 if (dev->wwan_rfk) { in toshiba_acpi_remove()
2994 rfkill_unregister(dev->wwan_rfk); in toshiba_acpi_remove()
2995 rfkill_destroy(dev->wwan_rfk); in toshiba_acpi_remove()
3025 return -EBUSY; in toshiba_acpi_add()
3030 hci_method = find_hci_method(acpi_dev->handle); in toshiba_acpi_add()
3033 return -ENODEV; in toshiba_acpi_add()
3038 return -ENOMEM; in toshiba_acpi_add()
3039 dev->acpi_dev = acpi_dev; in toshiba_acpi_add()
3040 dev->method_hci = hci_method; in toshiba_acpi_add()
3041 dev->miscdev.minor = MISC_DYNAMIC_MINOR; in toshiba_acpi_add()
3042 dev->miscdev.name = "toshiba_acpi"; in toshiba_acpi_add()
3043 dev->miscdev.fops = &toshiba_acpi_fops; in toshiba_acpi_add()
3045 ret = misc_register(&dev->miscdev); in toshiba_acpi_add()
3052 acpi_dev->driver_data = dev; in toshiba_acpi_add()
3053 dev_set_drvdata(&acpi_dev->dev, dev); in toshiba_acpi_add()
3060 * determine the keymap layout to use. in toshiba_acpi_add()
3062 ret = toshiba_function_keys_get(dev, &dev->special_functions); in toshiba_acpi_add()
3063 dev->kbd_function_keys_supported = !ret; in toshiba_acpi_add()
3065 dev->hotkey_event_type = 0; in toshiba_acpi_add()
3071 dev->tr_backlight_supported = !ret; in toshiba_acpi_add()
3078 if (dev->illumination_supported) { in toshiba_acpi_add()
3079 dev->led_dev.name = "toshiba::illumination"; in toshiba_acpi_add()
3080 dev->led_dev.max_brightness = 1; in toshiba_acpi_add()
3081 dev->led_dev.brightness_set = toshiba_illumination_set; in toshiba_acpi_add()
3082 dev->led_dev.brightness_get = toshiba_illumination_get; in toshiba_acpi_add()
3083 led_classdev_register(&acpi_dev->dev, &dev->led_dev); in toshiba_acpi_add()
3087 if (dev->eco_supported) { in toshiba_acpi_add()
3088 dev->eco_led.name = "toshiba::eco_mode"; in toshiba_acpi_add()
3089 dev->eco_led.max_brightness = 1; in toshiba_acpi_add()
3090 dev->eco_led.brightness_set = toshiba_eco_mode_set_status; in toshiba_acpi_add()
3091 dev->eco_led.brightness_get = toshiba_eco_mode_get_status; in toshiba_acpi_add()
3092 led_classdev_register(&dev->acpi_dev->dev, &dev->eco_led); in toshiba_acpi_add()
3098 * and the keyboard backlight operation mode is set to FN-Z in toshiba_acpi_add()
3101 if (dev->kbd_illum_supported && in toshiba_acpi_add()
3102 (dev->kbd_mode == SCI_KBD_MODE_FNZ || dev->kbd_type == 2)) { in toshiba_acpi_add()
3103 dev->kbd_led.name = "toshiba::kbd_backlight"; in toshiba_acpi_add()
3104 dev->kbd_led.flags = LED_BRIGHT_HW_CHANGED; in toshiba_acpi_add()
3105 dev->kbd_led.max_brightness = 1; in toshiba_acpi_add()
3106 dev->kbd_led.brightness_set = toshiba_kbd_backlight_set; in toshiba_acpi_add()
3107 dev->kbd_led.brightness_get = toshiba_kbd_backlight_get; in toshiba_acpi_add()
3108 led_classdev_register(&dev->acpi_dev->dev, &dev->kbd_led); in toshiba_acpi_add()
3112 dev->touchpad_supported = !ret; in toshiba_acpi_add()
3115 if (dev->accelerometer_supported) { in toshiba_acpi_add()
3116 dev->indio_dev = iio_device_alloc(&acpi_dev->dev, sizeof(*dev)); in toshiba_acpi_add()
3117 if (!dev->indio_dev) { in toshiba_acpi_add()
3124 dev->indio_dev->info = &toshiba_iio_accel_info; in toshiba_acpi_add()
3125 dev->indio_dev->name = "Toshiba accelerometer"; in toshiba_acpi_add()
3126 dev->indio_dev->modes = INDIO_DIRECT_MODE; in toshiba_acpi_add()
3127 dev->indio_dev->channels = toshiba_iio_accel_channels; in toshiba_acpi_add()
3128 dev->indio_dev->num_channels = in toshiba_acpi_add()
3131 ret = iio_device_register(dev->indio_dev); in toshiba_acpi_add()
3134 iio_device_free(dev->indio_dev); in toshiba_acpi_add()
3142 dev->usb_rapid_charge_supported = !ret; in toshiba_acpi_add()
3145 dev->usb_sleep_music_supported = !ret; in toshiba_acpi_add()
3148 dev->panel_power_on_supported = !ret; in toshiba_acpi_add()
3151 dev->usb_three_supported = !ret; in toshiba_acpi_add()
3154 dev->video_supported = !ret; in toshiba_acpi_add()
3157 dev->fan_supported = !ret; in toshiba_acpi_add()
3160 if (dev->wwan_supported) in toshiba_acpi_add()
3167 ret = sysfs_create_group(&dev->acpi_dev->dev.kobj, in toshiba_acpi_add()
3170 dev->sysfs_created = 0; in toshiba_acpi_add()
3173 dev->sysfs_created = !ret; in toshiba_acpi_add()
3218 dev->kbd_event_generated = true; in toshiba_acpi_notify()
3220 if (sysfs_update_group(&acpi_dev->dev.kobj, in toshiba_acpi_notify()
3224 if (dev->kbd_type == 2 && dev->kbd_mode != SCI_KBD_MODE_AUTO) in toshiba_acpi_notify()
3225 led_classdev_notify_brightness_hw_changed(&dev->kbd_led, in toshiba_acpi_notify()
3226 (dev->kbd_mode == SCI_KBD_MODE_ON) ? in toshiba_acpi_notify()
3239 acpi_bus_generate_netlink_event(acpi_dev->pnp.device_class, in toshiba_acpi_notify()
3240 dev_name(&acpi_dev->dev), in toshiba_acpi_notify()
3242 dev->last_key_event : 0); in toshiba_acpi_notify()
3250 if (dev->hotkey_dev) { in toshiba_acpi_suspend()
3265 if (dev->hotkey_dev) { in toshiba_acpi_resume()
3267 pr_info("Unable to re-enable hotkeys\n"); in toshiba_acpi_resume()
3270 if (dev->wwan_rfk) { in toshiba_acpi_resume()
3272 rfkill_set_hw_state(dev->wwan_rfk, !dev->killswitch); in toshiba_acpi_resume()
3302 return -ENODEV; in toshiba_acpi_init()