Skip to content

Commit

Permalink
sony-laptop: use soft rfkill status stored in hw
Browse files Browse the repository at this point in the history
The SNC device on recent Vaio laptops also stores the soft status and
leaves it available after reboot. Use it and always set the last soft
and hard status on module load.

[malattia@linux.it: patch taken from a largely modified sony-laptop.c,
smaller modifications to the original code to simplify it]

Signed-off-by: Mattia Dongili <malattia@linux.it>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
  • Loading branch information
Marco Chiappero authored and Matthew Garrett committed May 31, 2012
1 parent dd258c0 commit d6f15ed
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions drivers/platform/x86/sony-laptop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1213,7 +1213,7 @@ static int sony_nc_rfkill_set(void *data, bool blocked)
int argument = sony_rfkill_address[(long) data] + 0x100;

if (!blocked)
argument |= 0xff0000;
argument |= 0x030000;

return sony_call_snc_handle(sony_rfkill_handle, argument, &result);
}
Expand All @@ -1230,7 +1230,7 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
enum rfkill_type type;
const char *name;
int result;
bool hwblock;
bool hwblock, swblock;

switch (nc_type) {
case SONY_WIFI:
Expand Down Expand Up @@ -1258,8 +1258,21 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
if (!rfk)
return -ENOMEM;

sony_call_snc_handle(sony_rfkill_handle, 0x200, &result);
if (sony_call_snc_handle(sony_rfkill_handle, 0x200, &result) < 0) {
rfkill_destroy(rfk);
return -1;
}
hwblock = !(result & 0x1);

if (sony_call_snc_handle(sony_rfkill_handle,
sony_rfkill_address[nc_type],
&result) < 0) {
rfkill_destroy(rfk);
return -1;
}
swblock = !(result & 0x2);

rfkill_init_sw_state(rfk, swblock);
rfkill_set_hw_state(rfk, hwblock);

err = rfkill_register(rfk);
Expand Down Expand Up @@ -1295,7 +1308,7 @@ static void sony_nc_rfkill_update(void)

sony_call_snc_handle(sony_rfkill_handle, argument, &result);
rfkill_set_states(sony_rfkill_devices[i],
!(result & 0xf), false);
!(result & 0x2), false);
}
}

Expand Down

0 comments on commit d6f15ed

Please sign in to comment.