[PATCH] HID: hid-steam: Fix Lizard Mode disabling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Disable Lizard Mode by setting the lizard_mode option.
Set lizard_mode to 0 to disable switching between Desktop and Gamepad
using the Options button, and use Gamepad input.

Signed-off-by: Eugeny Shcheglov <eugenyshcheglov@xxxxxxxxx>
---
 drivers/hid/hid-steam.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
index 6439913372a8..c64f716c9c14 100644
--- a/drivers/hid/hid-steam.c
+++ b/drivers/hid/hid-steam.c
@@ -10,7 +10,7 @@
  * This controller has a builtin emulation of mouse and keyboard: the right pad
  * can be used as a mouse, the shoulder buttons are mouse buttons, A and B
  * buttons are ENTER and ESCAPE, and so on. This is implemented as additional
- * HID interfaces.
+ * HID interfaces. Joystick input is blocked when Lizard Mode is active.
  *
  * This is known as the "lizard mode", because apparently lizards like to use
  * the computer from the coach, without a proper mouse and keyboard.
@@ -555,9 +555,6 @@ static int steam_play_effect(struct input_dev *dev, void *data,
 
 static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
 {
-	if (steam->gamepad_mode)
-		enable = false;
-
 	if (enable) {
 		mutex_lock(&steam->report_mutex);
 		/* enable esc, enter, cursors */
@@ -566,6 +563,7 @@ static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
 		steam_send_report_byte(steam, ID_LOAD_DEFAULT_SETTINGS);
 		mutex_unlock(&steam->report_mutex);
 	} else {
+		steam->gamepad_mode = true;
 		mutex_lock(&steam->report_mutex);
 		/* disable esc, enter, cursor */
 		steam_send_report_byte(steam, ID_CLEAR_DIGITAL_MAPPINGS);
@@ -1590,12 +1588,14 @@ static void steam_do_deck_input_event(struct steam_device *steam,
 	b13 = data[13];
 	b14 = data[14];
 
-	if (!(b9 & BIT(6)) && steam->did_mode_switch) {
-		steam->did_mode_switch = false;
-		cancel_delayed_work_sync(&steam->mode_switch);
-	} else if (!steam->client_opened && (b9 & BIT(6)) && !steam->did_mode_switch) {
-		steam->did_mode_switch = true;
-		schedule_delayed_work(&steam->mode_switch, 45 * HZ / 100);
+	if (lizard_mode) {
+		if (!(b9 & BIT(6)) && steam->did_mode_switch) {
+			steam->did_mode_switch = false;
+			cancel_delayed_work_sync(&steam->mode_switch);
+		} else if (!steam->client_opened && (b9 & BIT(6)) && !steam->did_mode_switch) {
+			steam->did_mode_switch = true;
+			schedule_delayed_work(&steam->mode_switch, 45 * HZ / 100);
+		}
 	}
 
 	if (!steam->gamepad_mode)
-- 
2.45.2





[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux