summary refs log tree commit diff
path: root/gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch')
-rw-r--r--gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch b/gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch
new file mode 100644
index 0000000000..44f3d72e25
--- /dev/null
+++ b/gnu/packages/patches/linux-libre-yeeloong-rfkill-key-fix.patch
@@ -0,0 +1,48 @@
+From c49e2c1b1dbe95821f8134a48ca747e5161e75a6 Mon Sep 17 00:00:00 2001
+From: Mark H Weaver <mhw@netris.org>
+Date: Sun, 23 Aug 2015 17:06:18 -0400
+Subject: [PATCH] Yeeloong: Ignore the Fn + F5 (rfkill toggle) key combination.
+
+* drivers/platform/mips/yeeloong_laptop.c (yeeloong_keymap): Do not
+  generate a user-visible key press from the Fn + F5 key combination.
+---
+ drivers/platform/mips/yeeloong_laptop.c | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/platform/mips/yeeloong_laptop.c b/drivers/platform/mips/yeeloong_laptop.c
+index 9f2d81b..6d7cde6 100644
+--- a/drivers/platform/mips/yeeloong_laptop.c
++++ b/drivers/platform/mips/yeeloong_laptop.c
+@@ -803,7 +803,28 @@ static const struct key_entry yeeloong_keymap[] = {
+ 	{KE_KEY, EVENT_BLACK_SCREEN, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */
+ 	{KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */
+ 	{KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */
+-	{KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */
++
++	/* XXX Fn + F5 is handled at a lower level (presumably by the
++	   embedded controller) to toggle the state of the hardware
++	   rfkill switch of the internal RTL8187B wireless adapter.
++
++	   If we also map it to KEY_WLAN, as is done by the
++	   loongson-community kernel as of August 2015, that causes
++	   the generic rfkill input subsystem to toggle the state of
++	   the software rfkill switch for all wireless devices.
++
++	   At boot time, these two switch states start out
++	   out-of-sync, so rfkill is always blocked by one or the
++	   other: pressing Fn + F5 merely toggles whether it is the
++	   software or hardware rfkill switch that's causing the
++	   block.  Even if we arranged to start with these two switch
++	   states in sync, they might possibly get out of sync at some
++	   point.  It seems fragile.
++
++	   So, instead, we simply avoid the dual meaning of this key,
++	   by ignoring the key from software. */
++	{KE_IGNORE, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */
++
+ 	{KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */
+ 	{KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSDOWN } }, /* Fn + down */
+ 	{KE_KEY, EVENT_AUDIO_VOLUME, { KEY_VOLUMEUP } }, /* Fn + right */
+-- 
+2.5.0
+