Input: sentelic - improve packet debugging information
authorOskari Saarenmaa <os@ohmu.fi>
Mon, 26 Mar 2012 00:17:27 +0000 (17:17 -0700)
committerTim Gardner <tim.gardner@canonical.com>
Fri, 13 Apr 2012 12:42:27 +0000 (06:42 -0600)
BugLink: http://bugs.launchpad.net/bugs/969334

Signed-off-by: Oskari Saarenmaa <os@ohmu.fi>
Signed-off-by: Tai-hwa Liang <avatar@sentelic.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
(cherry picked from commit 727f9b480754dfcb82e36d431e85984893011b79)

Signed-off-by: Eric Miao <eric.miao@canonical.com>
Acked-by: Leann Ogasawara <leann.ogasawara@canonical.com>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>

drivers/input/mouse/sentelic.c

index 63b55b4..869efb3 100644 (file)
@@ -37,6 +37,9 @@
 #define        FSP_CMD_TIMEOUT         200
 #define        FSP_CMD_TIMEOUT2        30
 
+#define        GET_ABS_X(packet)       ((packet[1] << 2) | ((packet[3] >> 2) & 0x03))
+#define        GET_ABS_Y(packet)       ((packet[2] << 2) | (packet[3] & 0x03))
+
 /** Driver version. */
 static const char fsp_drv_ver[] = "1.0.0-K";
 
@@ -598,18 +601,40 @@ static struct attribute_group fsp_attribute_group = {
        .attrs = fsp_attributes,
 };
 
-#ifdef FSP_DEBUG
-static void fsp_packet_debug(unsigned char packet[])
+#ifdef FSP_DEBUG
+static void fsp_packet_debug(struct psmouse *psmouse, unsigned char packet[])
 {
        static unsigned int ps2_packet_cnt;
        static unsigned int ps2_last_second;
        unsigned int jiffies_msec;
+       const char *packet_type = "UNKNOWN";
+       unsigned short abs_x = 0, abs_y = 0;
+
+       /* Interpret & dump the packet data. */
+       switch (packet[0] >> FSP_PKT_TYPE_SHIFT) {
+       case FSP_PKT_TYPE_ABS:
+               packet_type = "Absolute";
+               abs_x = GET_ABS_X(packet);
+               abs_y = GET_ABS_Y(packet);
+               break;
+       case FSP_PKT_TYPE_NORMAL:
+               packet_type = "Normal";
+               break;
+       case FSP_PKT_TYPE_NOTIFY:
+               packet_type = "Notify";
+               break;
+       case FSP_PKT_TYPE_NORMAL_OPC:
+               packet_type = "Normal-OPC";
+               break;
+       }
 
        ps2_packet_cnt++;
        jiffies_msec = jiffies_to_msecs(jiffies);
        psmouse_dbg(psmouse,
-                   "%08dms PS/2 packets: %02x, %02x, %02x, %02x\n",
-                   jiffies_msec, packet[0], packet[1], packet[2], packet[3]);
+                   "%08dms %s packets: %02x, %02x, %02x, %02x; "
+                   "abs_x: %d, abs_y: %d\n",
+                   jiffies_msec, packet_type,
+                   packet[0], packet[1], packet[2], packet[3], abs_x, abs_y);
 
        if (jiffies_msec - ps2_last_second > 1000) {
                psmouse_dbg(psmouse, "PS/2 packets/sec = %d\n", ps2_packet_cnt);
@@ -618,7 +643,7 @@ static void fsp_packet_debug(unsigned char packet[])
        }
 }
 #else
-static void fsp_packet_debug(unsigned char packet[])
+static void fsp_packet_debug(struct psmouse *psmouse, unsigned char packet[])
 {
 }
 #endif
@@ -650,10 +675,12 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse)
         * Full packet accumulated, process it
         */
 
+       fsp_packet_debug(psmouse, packet);
+
        switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) {
        case FSP_PKT_TYPE_ABS:
-               abs_x = (packet[1] << 2) | ((packet[3] >> 2) & 0x03);
-               abs_y = (packet[2] << 2) | (packet[3] & 0x03);
+               abs_x = GET_ABS_X(packet);
+               abs_y = GET_ABS_Y(packet);
 
                if (packet[0] & FSP_PB0_MFMC) {
                        /*
@@ -764,8 +791,6 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse)
 
        input_sync(dev);
 
-       fsp_packet_debug(packet);
-
        return PSMOUSE_FULL_PACKET;
 }