diff options
Diffstat (limited to 'drivers/platform/x86/fujitsu-laptop.c')
-rw-r--r-- | drivers/platform/x86/fujitsu-laptop.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index 65dc41540c62..45940f31fe9e 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c | |||
@@ -166,6 +166,7 @@ struct fujitsu_hotkey_t { | |||
166 | struct platform_device *pf_device; | 166 | struct platform_device *pf_device; |
167 | struct kfifo *fifo; | 167 | struct kfifo *fifo; |
168 | spinlock_t fifo_lock; | 168 | spinlock_t fifo_lock; |
169 | int rfkill_supported; | ||
169 | int rfkill_state; | 170 | int rfkill_state; |
170 | int logolamp_registered; | 171 | int logolamp_registered; |
171 | int kblamps_registered; | 172 | int kblamps_registered; |
@@ -526,7 +527,7 @@ static ssize_t | |||
526 | show_lid_state(struct device *dev, | 527 | show_lid_state(struct device *dev, |
527 | struct device_attribute *attr, char *buf) | 528 | struct device_attribute *attr, char *buf) |
528 | { | 529 | { |
529 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 530 | if (!(fujitsu_hotkey->rfkill_supported & 0x100)) |
530 | return sprintf(buf, "unknown\n"); | 531 | return sprintf(buf, "unknown\n"); |
531 | if (fujitsu_hotkey->rfkill_state & 0x100) | 532 | if (fujitsu_hotkey->rfkill_state & 0x100) |
532 | return sprintf(buf, "open\n"); | 533 | return sprintf(buf, "open\n"); |
@@ -538,7 +539,7 @@ static ssize_t | |||
538 | show_dock_state(struct device *dev, | 539 | show_dock_state(struct device *dev, |
539 | struct device_attribute *attr, char *buf) | 540 | struct device_attribute *attr, char *buf) |
540 | { | 541 | { |
541 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 542 | if (!(fujitsu_hotkey->rfkill_supported & 0x200)) |
542 | return sprintf(buf, "unknown\n"); | 543 | return sprintf(buf, "unknown\n"); |
543 | if (fujitsu_hotkey->rfkill_state & 0x200) | 544 | if (fujitsu_hotkey->rfkill_state & 0x200) |
544 | return sprintf(buf, "docked\n"); | 545 | return sprintf(buf, "docked\n"); |
@@ -550,7 +551,7 @@ static ssize_t | |||
550 | show_radios_state(struct device *dev, | 551 | show_radios_state(struct device *dev, |
551 | struct device_attribute *attr, char *buf) | 552 | struct device_attribute *attr, char *buf) |
552 | { | 553 | { |
553 | if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD) | 554 | if (!(fujitsu_hotkey->rfkill_supported & 0x20)) |
554 | return sprintf(buf, "unknown\n"); | 555 | return sprintf(buf, "unknown\n"); |
555 | if (fujitsu_hotkey->rfkill_state & 0x20) | 556 | if (fujitsu_hotkey->rfkill_state & 0x20) |
556 | return sprintf(buf, "on\n"); | 557 | return sprintf(buf, "on\n"); |
@@ -928,8 +929,17 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device) | |||
928 | ; /* No action, result is discarded */ | 929 | ; /* No action, result is discarded */ |
929 | vdbg_printk(FUJLAPTOP_DBG_INFO, "Discarded %i ringbuffer entries\n", i); | 930 | vdbg_printk(FUJLAPTOP_DBG_INFO, "Discarded %i ringbuffer entries\n", i); |
930 | 931 | ||
931 | fujitsu_hotkey->rfkill_state = | 932 | fujitsu_hotkey->rfkill_supported = |
932 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | 933 | call_fext_func(FUNC_RFKILL, 0x0, 0x0, 0x0); |
934 | |||
935 | /* Make sure our bitmask of supported functions is cleared if the | ||
936 | RFKILL function block is not implemented, like on the S7020. */ | ||
937 | if (fujitsu_hotkey->rfkill_supported == UNSUPPORTED_CMD) | ||
938 | fujitsu_hotkey->rfkill_supported = 0; | ||
939 | |||
940 | if (fujitsu_hotkey->rfkill_supported) | ||
941 | fujitsu_hotkey->rfkill_state = | ||
942 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | ||
933 | 943 | ||
934 | /* Suspect this is a keymap of the application panel, print it */ | 944 | /* Suspect this is a keymap of the application panel, print it */ |
935 | printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n", | 945 | printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n", |
@@ -1005,8 +1015,9 @@ static void acpi_fujitsu_hotkey_notify(acpi_handle handle, u32 event, | |||
1005 | 1015 | ||
1006 | input = fujitsu_hotkey->input; | 1016 | input = fujitsu_hotkey->input; |
1007 | 1017 | ||
1008 | fujitsu_hotkey->rfkill_state = | 1018 | if (fujitsu_hotkey->rfkill_supported) |
1009 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | 1019 | fujitsu_hotkey->rfkill_state = |
1020 | call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0); | ||
1010 | 1021 | ||
1011 | switch (event) { | 1022 | switch (event) { |
1012 | case ACPI_FUJITSU_NOTIFY_CODE1: | 1023 | case ACPI_FUJITSU_NOTIFY_CODE1: |