|
@@ -166,6 +166,7 @@ struct fujitsu_hotkey_t {
|
|
|
struct platform_device *pf_device;
|
|
|
struct kfifo *fifo;
|
|
|
spinlock_t fifo_lock;
|
|
|
+ int rfkill_supported;
|
|
|
int rfkill_state;
|
|
|
int logolamp_registered;
|
|
|
int kblamps_registered;
|
|
@@ -526,7 +527,7 @@ static ssize_t
|
|
|
show_lid_state(struct device *dev,
|
|
|
struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
- if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD)
|
|
|
+ if (!(fujitsu_hotkey->rfkill_supported & 0x100))
|
|
|
return sprintf(buf, "unknown\n");
|
|
|
if (fujitsu_hotkey->rfkill_state & 0x100)
|
|
|
return sprintf(buf, "open\n");
|
|
@@ -538,7 +539,7 @@ static ssize_t
|
|
|
show_dock_state(struct device *dev,
|
|
|
struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
- if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD)
|
|
|
+ if (!(fujitsu_hotkey->rfkill_supported & 0x200))
|
|
|
return sprintf(buf, "unknown\n");
|
|
|
if (fujitsu_hotkey->rfkill_state & 0x200)
|
|
|
return sprintf(buf, "docked\n");
|
|
@@ -550,7 +551,7 @@ static ssize_t
|
|
|
show_radios_state(struct device *dev,
|
|
|
struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
- if (fujitsu_hotkey->rfkill_state == UNSUPPORTED_CMD)
|
|
|
+ if (!(fujitsu_hotkey->rfkill_supported & 0x20))
|
|
|
return sprintf(buf, "unknown\n");
|
|
|
if (fujitsu_hotkey->rfkill_state & 0x20)
|
|
|
return sprintf(buf, "on\n");
|
|
@@ -928,8 +929,17 @@ static int acpi_fujitsu_hotkey_add(struct acpi_device *device)
|
|
|
; /* No action, result is discarded */
|
|
|
vdbg_printk(FUJLAPTOP_DBG_INFO, "Discarded %i ringbuffer entries\n", i);
|
|
|
|
|
|
- fujitsu_hotkey->rfkill_state =
|
|
|
- call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0);
|
|
|
+ fujitsu_hotkey->rfkill_supported =
|
|
|
+ call_fext_func(FUNC_RFKILL, 0x0, 0x0, 0x0);
|
|
|
+
|
|
|
+ /* Make sure our bitmask of supported functions is cleared if the
|
|
|
+ RFKILL function block is not implemented, like on the S7020. */
|
|
|
+ if (fujitsu_hotkey->rfkill_supported == UNSUPPORTED_CMD)
|
|
|
+ fujitsu_hotkey->rfkill_supported = 0;
|
|
|
+
|
|
|
+ if (fujitsu_hotkey->rfkill_supported)
|
|
|
+ fujitsu_hotkey->rfkill_state =
|
|
|
+ call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0);
|
|
|
|
|
|
/* Suspect this is a keymap of the application panel, print it */
|
|
|
printk(KERN_INFO "fujitsu-laptop: BTNI: [0x%x]\n",
|
|
@@ -1005,8 +1015,9 @@ static void acpi_fujitsu_hotkey_notify(acpi_handle handle, u32 event,
|
|
|
|
|
|
input = fujitsu_hotkey->input;
|
|
|
|
|
|
- fujitsu_hotkey->rfkill_state =
|
|
|
- call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0);
|
|
|
+ if (fujitsu_hotkey->rfkill_supported)
|
|
|
+ fujitsu_hotkey->rfkill_state =
|
|
|
+ call_fext_func(FUNC_RFKILL, 0x4, 0x0, 0x0);
|
|
|
|
|
|
switch (event) {
|
|
|
case ACPI_FUJITSU_NOTIFY_CODE1:
|