From: Hans de Goede Date: Sun, 17 Nov 2013 13:00:21 +0000 (+0100) Subject: dell-laptop: Don't read-back sw_state on machines with a hardware switch X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=3f56588a79a06a0499db0077cad6675762ddc40e;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git dell-laptop: Don't read-back sw_state on machines with a hardware switch On machines with a hardware switch, the blocking settings can not be changed through a Fn + wireless-key combo, so there is no reason to read back the blocking state from the BIOS. Reading back is not only not necessary it is actually harmful, since on some machines the blocking state will be cleared to all 0 after a wireless switch toggle, even for radios not controlled by the hw-switch (yeah firmware bugs). This causes "magic" changes to the sw_state. This is inconsistent with other rfkill drivers which preserve the sw_state over a hw kill on / off. Signed-off-by: Hans de Goede Signed-off-by: Matthew Garrett --- diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c index 7f47396846d1..80de0cca1dfa 100644 --- a/drivers/platform/x86/dell-laptop.c +++ b/drivers/platform/x86/dell-laptop.c @@ -428,7 +428,10 @@ out: static void dell_rfkill_update_sw_state(struct rfkill *rfkill, int radio, int status) { - rfkill_set_sw_state(rfkill, !!(status & BIT(radio + 16))); + if (!(status & BIT(0))) { + /* No hw-switch, sync BIOS state to sw_state */ + rfkill_set_sw_state(rfkill, !!(status & BIT(radio + 16))); + } } static void dell_rfkill_update_hw_state(struct rfkill *rfkill, int radio,