https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a14019b219048647871b88fa0f2d4c66b6f69224

commit a14019b219048647871b88fa0f2d4c66b6f69224
Author:     Dmitry Borisov <[email protected]>
AuthorDate: Tue Jul 25 21:32:13 2023 +0600
Commit:     Stanislav Motylkov <[email protected]>
CommitDate: Sat Aug 5 16:40:07 2023 +0300

    [INPORT] Fix swapped buttons for the inport bus mouse
    
    Also don't read the delta state when there is no mouse movement.
---
 drivers/input/inport/hardware.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/drivers/input/inport/hardware.c b/drivers/input/inport/hardware.c
index 33103f25311..0cbd9f62800 100644
--- a/drivers/input/inport/hardware.c
+++ b/drivers/input/inport/hardware.c
@@ -71,12 +71,13 @@
     #define INPORT_MODE_IRQ    0x01
     #define INPORT_MODE_BASE   0x10
     #define INPORT_MODE_HOLD   0x20
+    #define INPORT_HAS_MOVED   0x40
 
 #define MS_INPORT_SIGNATURE  0x02
 
-#define MS_BUTTON_MIDDLE   0x01
-#define MS_BUTTON_LEFT     0x02
-#define MS_BUTTON_RIGHT    0x04
+#define MS_BUTTON_RIGHT    0x01
+#define MS_BUTTON_MIDDLE   0x02
+#define MS_BUTTON_LEFT     0x04
 
 /*
  * Logitech
@@ -270,14 +271,23 @@ InPortIsr(
             WRITE_MOUSE(DeviceExtension, MS_INPORT_DATA,
                         INPORT_MODE_HOLD | INPORT_MODE_IRQ | INPORT_MODE_BASE);
 
-            WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_X);
-            DeltaX = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
-
-            WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_Y);
-            DeltaY = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
-
             WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_BTNS);
             Buttons = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
+
+            if (Buttons & INPORT_HAS_MOVED)
+            {
+                WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_X);
+                DeltaX = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
+
+                WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_Y);
+                DeltaY = READ_MOUSE(DeviceExtension, MS_INPORT_DATA);
+            }
+            else
+            {
+                DeltaX = 0;
+                DeltaY = 0;
+            }
+
             Buttons &= (MS_BUTTON_MIDDLE | MS_BUTTON_LEFT | MS_BUTTON_RIGHT);
 
             WRITE_MOUSE(DeviceExtension, MS_INPORT_CONTROL, INPORT_REG_MODE);

Reply via email to