platform/x86: ideapad-laptop: Fix rfkill invert
PATCH 1/1 platform/x86: ideapad-laptop: Fix rfkill invert
There are a lot of reports on the Internet about rfkill lock on modern Yoga Ideapad laptops while loading ideapad_laptop platform module. This patch offers the fix. Obviously it's impossible for me to test this patch on all ideapad laptops, so i've made an module parameter init_rfkill_inverted to keep old behavior. Comments are welcome.
--- drivers/platform/x86/ideapad-laptop.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/platform/x86/ideapad-laptop.c +7 -1
@@ -110,6 +110,10 @@ static bool no_bt_rfkill;module_param (no_bt_rfkill, bool,0444 );MODULE_PARM_DESC (no_bt_rfkill,"No rfkill for bluetooth." ); +static bool init_rfkill_inverted; +module_param (init_rfkill_inverted, bool,0444 ); +MODULE_PARM_DESC (init_rfkill_inverted,"Invert rfkill on initialization" ); +/* * ACPI Helpers */
@@ -604,7 +608,9 @@ static int ideapad_register_rfkill(struct ideapad_private *priv, int dev) &sw_blocked)) { rfkill_init_sw_state(priv->rfk[dev], 0); } else { - sw_blocked = !sw_blocked; +/* Do not apply invert for ideapads which haven't hw switch */ +if (priv->has_hw_rfkill_switch || init_rfkill_inverted) + sw_blocked = !sw_blocked;rfkill_init_sw_state (priv->rfk[dev], sw_blocked); }
Signature · 1 line
2.17.0
Quoted 8 lines · Oleg Keri
There are a lot of reports on the Internet about rfkill lock on modern Yoga Ideapad laptops while loading
ideapad_laptopplatform module. This patch offers the fix. Obviously it's impossible for me to test this patch on all ideapad laptops, so i've made an module parameterinit_rfkill_invertedto keep old behavior.Comments are
welcome.
So, it should have RFC in the Subject.
drivers/platform/x86/ideapad-laptop.c static bool no_bt_rfkill; · line 115
Quoted 3 lines
drivers/platform/x86/ideapad-laptop.c +3
-0+static bool init_rfkill_inverted; +module_param (init_rfkill_inverted, bool,0444 ); +MODULE_PARM_DESC (init_rfkill_inverted,"Invert rfkill on initialization" );
Module parameters are subject to not being added anymore (yes, there are some significantly rare cases when it makes sense).
drivers/platform/x86/ideapad-laptop.c static int ideapad_register_rfkill(struct ideapad_private *priv, int dev) · line 613
Quoted 3 lines
drivers/platform/x86/ideapad-laptop.c +3
-0+/* Do not apply invert for ideapads which haven't hw switch */ +if (priv->has_hw_rfkill_switch || init_rfkill_inverted) + sw_blocked = !sw_blocked;
Since this is under else branch of reading value from Embedded Controller, we need to understand what and why it returns.
For me a solution rather would be not to read EC value at all in case of no hw switch, but I also can't test that on many possible laptops.
Would be good to get a comment from Ike.
Signature · 2 lines
With Best Regards, Andy Shevchenko