[media] imon: fix Knob event interpretation issues on ARM
authorAlexandre Lissy <alexandrelissy@free.fr>
Sun, 2 Sep 2012 18:35:20 +0000 (15:35 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 1 Feb 2013 09:13:59 +0000 (07:13 -0200)
Events for the iMon Knob pad where not correctly interpreted on ARM,
resulting in buggy mouse movements (cursor going straight out of the
screen), key pad only generating KEY_RIGHT and KEY_DOWN events.
A reproducer is:
int main(int argc, char ** argv)
{
        char rel_x = 0x00; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
        rel_x = 0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
        rel_x |= ~0x0f; printf("rel_x:%d @%s:%d\n", rel_x, __FILE__, __LINE__);
        return 0;
}
(running on x86 or amd64)
$ ./test
rel_x:0 @test.c:6
rel_x:15 @test.c:7
rel_x:-1 @test.c:8
(running on armv6)
rel_x:0 @test.c:6
rel_x:15 @test.c:7
rel_x:255 @test.c:8
Forcing the rel_x and rel_y variables as signed char fixes the issue.

Reference: http://www.arm.linux.org.uk/docs/faqs/signedchar.php

Signed-off-by: Alexandre Lissy <alexandrelissy@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/rc/imon.c

index 78d109b..dec203b 100644 (file)
@@ -1221,7 +1221,7 @@ static u32 imon_panel_key_lookup(u64 code)
 static bool imon_mouse_event(struct imon_context *ictx,
                             unsigned char *buf, int len)
 {
-       char rel_x = 0x00, rel_y = 0x00;
+       signed char rel_x = 0x00, rel_y = 0x00;
        u8 right_shift = 1;
        bool mouse_input = true;
        int dir = 0;
@@ -1297,7 +1297,7 @@ static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
 static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
 {
        int dir = 0;
-       char rel_x = 0x00, rel_y = 0x00;
+       signed char rel_x = 0x00, rel_y = 0x00;
        u16 timeout, threshold;
        u32 scancode = KEY_RESERVED;
        unsigned long flags;