]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Input: alps - fix compatibility with -funsigned-char
authormsizanoen <msizanoen@qtmlabs.xyz>
Mon, 20 Mar 2023 06:02:56 +0000 (23:02 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Apr 2023 10:10:50 +0000 (12:10 +0200)
commit 754ff5060daf5a1cf4474eff9b4edeb6c17ef7ab upstream.

The AlpsPS/2 code previously relied on the assumption that `char` is a
signed type, which was true on x86 platforms (the only place where this
driver is used) before kernel 6.2. However, on 6.2 and later, this
assumption is broken due to the introduction of -funsigned-char as a new
global compiler flag.

Fix this by explicitly specifying the signedness of `char` when sign
extending the values received from the device.

Fixes: f3f33c677699 ("Input: alps - Rushmore and v7 resolution support")
Signed-off-by: msizanoen <msizanoen@qtmlabs.xyz>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230320045228.182259-1-msizanoen@qtmlabs.xyz
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/input/mouse/alps.c

index 4a6b33bbe7eafa37e338333237287504c1a505fd..dd08ce97e7c90d44d99006dc4f172f6d5d7080ba 100644 (file)
@@ -852,8 +852,8 @@ static void alps_process_packet_v6(struct psmouse *psmouse)
                        x = y = z = 0;
 
                /* Divide 4 since trackpoint's speed is too fast */
-               input_report_rel(dev2, REL_X, (char)x / 4);
-               input_report_rel(dev2, REL_Y, -((char)y / 4));
+               input_report_rel(dev2, REL_X, (s8)x / 4);
+               input_report_rel(dev2, REL_Y, -((s8)y / 4));
 
                psmouse_report_standard_buttons(dev2, packet[3]);
 
@@ -1104,8 +1104,8 @@ static void alps_process_trackstick_packet_v7(struct psmouse *psmouse)
            ((packet[3] & 0x20) << 1);
        z = (packet[5] & 0x3f) | ((packet[3] & 0x80) >> 1);
 
-       input_report_rel(dev2, REL_X, (char)x);
-       input_report_rel(dev2, REL_Y, -((char)y));
+       input_report_rel(dev2, REL_X, (s8)x);
+       input_report_rel(dev2, REL_Y, -((s8)y));
        input_report_abs(dev2, ABS_PRESSURE, z);
 
        psmouse_report_standard_buttons(dev2, packet[1]);
@@ -2294,20 +2294,20 @@ static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch)
        if (reg < 0)
                return reg;
 
-       x_pitch = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
+       x_pitch = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */
        x_pitch = 50 + 2 * x_pitch; /* In 0.1 mm units */
 
-       y_pitch = (char)reg >> 4; /* sign extend upper 4 bits */
+       y_pitch = (s8)reg >> 4; /* sign extend upper 4 bits */
        y_pitch = 36 + 2 * y_pitch; /* In 0.1 mm units */
 
        reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1);
        if (reg < 0)
                return reg;
 
-       x_electrode = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
+       x_electrode = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */
        x_electrode = 17 + x_electrode;
 
-       y_electrode = (char)reg >> 4; /* sign extend upper 4 bits */
+       y_electrode = (s8)reg >> 4; /* sign extend upper 4 bits */
        y_electrode = 13 + y_electrode;
 
        x_phys = x_pitch * (x_electrode - 1); /* In 0.1 mm units */