diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/platform/x86/toshiba_acpi.c | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index f2372f400ddb..5510d3f593f4 100644 --- a/drivers/platform/x86/toshiba_acpi.c +++ b/drivers/platform/x86/toshiba_acpi.c | |||
@@ -198,6 +198,7 @@ struct toshiba_acpi_dev { | |||
198 | unsigned int panel_power_on_supported:1; | 198 | unsigned int panel_power_on_supported:1; |
199 | unsigned int usb_three_supported:1; | 199 | unsigned int usb_three_supported:1; |
200 | unsigned int sysfs_created:1; | 200 | unsigned int sysfs_created:1; |
201 | unsigned int special_functions; | ||
201 | 202 | ||
202 | bool kbd_led_registered; | 203 | bool kbd_led_registered; |
203 | bool illumination_led_registered; | 204 | bool illumination_led_registered; |
@@ -2253,7 +2254,16 @@ static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev) | |||
2253 | if (ACPI_FAILURE(status)) | 2254 | if (ACPI_FAILURE(status)) |
2254 | return -ENODEV; | 2255 | return -ENODEV; |
2255 | 2256 | ||
2256 | result = hci_write(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE); | 2257 | /* |
2258 | * Enable the "Special Functions" mode only if they are | ||
2259 | * supported and if they are activated. | ||
2260 | */ | ||
2261 | if (dev->kbd_function_keys_supported && dev->special_functions) | ||
2262 | result = hci_write(dev, HCI_HOTKEY_EVENT, | ||
2263 | HCI_HOTKEY_SPECIAL_FUNCTIONS); | ||
2264 | else | ||
2265 | result = hci_write(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE); | ||
2266 | |||
2257 | if (result == TOS_FAILURE) | 2267 | if (result == TOS_FAILURE) |
2258 | return -EIO; | 2268 | return -EIO; |
2259 | else if (result == TOS_NOT_SUPPORTED) | 2269 | else if (result == TOS_NOT_SUPPORTED) |
@@ -2262,20 +2272,6 @@ static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev) | |||
2262 | return 0; | 2272 | return 0; |
2263 | } | 2273 | } |
2264 | 2274 | ||
2265 | static void toshiba_acpi_enable_special_functions(struct toshiba_acpi_dev *dev) | ||
2266 | { | ||
2267 | u32 result; | ||
2268 | |||
2269 | /* | ||
2270 | * Re-activate the hotkeys, but this time, we are using the | ||
2271 | * "Special Functions" mode. | ||
2272 | */ | ||
2273 | result = hci_write(dev, HCI_HOTKEY_EVENT, | ||
2274 | HCI_HOTKEY_SPECIAL_FUNCTIONS); | ||
2275 | if (result != TOS_SUCCESS) | ||
2276 | pr_err("Could not enable the Special Function mode\n"); | ||
2277 | } | ||
2278 | |||
2279 | static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str, | 2275 | static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str, |
2280 | struct serio *port) | 2276 | struct serio *port) |
2281 | { | 2277 | { |
@@ -2631,7 +2627,6 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev) | |||
2631 | { | 2627 | { |
2632 | struct toshiba_acpi_dev *dev; | 2628 | struct toshiba_acpi_dev *dev; |
2633 | const char *hci_method; | 2629 | const char *hci_method; |
2634 | u32 special_functions; | ||
2635 | u32 dummy; | 2630 | u32 dummy; |
2636 | int ret = 0; | 2631 | int ret = 0; |
2637 | 2632 | ||
@@ -2673,7 +2668,7 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev) | |||
2673 | * with the new keyboard layout, query for its presence to help | 2668 | * with the new keyboard layout, query for its presence to help |
2674 | * determine the keymap layout to use. | 2669 | * determine the keymap layout to use. |
2675 | */ | 2670 | */ |
2676 | ret = toshiba_function_keys_get(dev, &special_functions); | 2671 | ret = toshiba_function_keys_get(dev, &dev->special_functions); |
2677 | dev->kbd_function_keys_supported = !ret; | 2672 | dev->kbd_function_keys_supported = !ret; |
2678 | 2673 | ||
2679 | if (toshiba_acpi_setup_keyboard(dev)) | 2674 | if (toshiba_acpi_setup_keyboard(dev)) |
@@ -2748,13 +2743,6 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev) | |||
2748 | 2743 | ||
2749 | print_supported_features(dev); | 2744 | print_supported_features(dev); |
2750 | 2745 | ||
2751 | /* | ||
2752 | * Enable the "Special Functions" mode only if they are | ||
2753 | * supported and if they are activated. | ||
2754 | */ | ||
2755 | if (dev->kbd_function_keys_supported && special_functions) | ||
2756 | toshiba_acpi_enable_special_functions(dev); | ||
2757 | |||
2758 | ret = sysfs_create_group(&dev->acpi_dev->dev.kobj, | 2746 | ret = sysfs_create_group(&dev->acpi_dev->dev.kobj, |
2759 | &toshiba_attr_group); | 2747 | &toshiba_attr_group); |
2760 | if (ret) { | 2748 | if (ret) { |