staging: nvec: ps2: add some more debug functions
[cascardo/linux.git] / drivers / staging / nvec / nvec_ps2.c
index 742f5cc..7f470ba 100644 (file)
 
 #include "nvec.h"
 
-#define START_STREAMING        {'\x06', '\x03', '\x04'}
+#define START_STREAMING        {'\x06', '\x03', '\x06'}
 #define STOP_STREAMING {'\x06', '\x04'}
 #define SEND_COMMAND   {'\x06', '\x01', '\xf4', '\x01'}
 
+#ifdef NVEC_PS2_DEBUG
+#define NVEC_PHD(str, buf, len) \
+       print_hex_dump(KERN_DEBUG, str, DUMP_PREFIX_NONE, \
+                       16, 1, buf, len, false)
+#else
+#define NVEC_PHD(str, buf, len)
+#endif
+
 static const unsigned char MOUSE_RESET[] = {'\x06', '\x01', '\xff', '\x03'};
 
 struct nvec_ps2 {
@@ -67,18 +75,18 @@ static int nvec_ps2_notifier(struct notifier_block *nb,
        case NVEC_PS2_EVT:
                for (i = 0; i < msg[1]; i++)
                        serio_interrupt(ps2_dev.ser_dev, msg[2 + i], 0);
+               NVEC_PHD("ps/2 mouse event: ", &msg[2], msg[1]);
                return NOTIFY_STOP;
 
        case NVEC_PS2:
-               if (msg[2] == 1)
+               if (msg[2] == 1) {
                        for (i = 0; i < (msg[1] - 2); i++)
                                serio_interrupt(ps2_dev.ser_dev, msg[i + 4], 0);
-               else if (msg[1] != 2) { /* !ack */
-                       print_hex_dump(KERN_WARNING, "unhandled mouse event: ",
-                               DUMP_PREFIX_NONE, 16, 1,
-                               msg, msg[1] + 2, true);
+                       NVEC_PHD("ps/2 mouse reply: ", &msg[4], msg[1] - 2);
                }
 
+               else if (msg[1] != 2) /* !ack */
+                       NVEC_PHD("unhandled mouse event: ", msg, msg[1] + 2);
                return NOTIFY_STOP;
        }
 
@@ -92,8 +100,8 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev)
 
        ser_dev->id.type = SERIO_8042;
        ser_dev->write = ps2_sendcommand;
-       ser_dev->open = ps2_startstreaming;
-       ser_dev->close = ps2_stopstreaming;
+       ser_dev->start = ps2_startstreaming;
+       ser_dev->stop = ps2_stopstreaming;
 
        strlcpy(ser_dev->name, "nvec mouse", sizeof(ser_dev->name));
        strlcpy(ser_dev->phys, "nvec", sizeof(ser_dev->phys));
@@ -111,8 +119,27 @@ static int __devinit nvec_mouse_probe(struct platform_device *pdev)
        return 0;
 }
 
+static int nvec_mouse_suspend(struct platform_device *pdev, pm_message_t state)
+{
+       struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
+
+       /* send cancel autoreceive */
+       nvec_write_async(nvec, "\x06\x04", 2);
+
+       return 0;
+}
+
+static int nvec_mouse_resume(struct platform_device *pdev)
+{
+       ps2_startstreaming(ps2_dev.ser_dev);
+
+       return 0;
+}
+
 static struct platform_driver nvec_mouse_driver = {
        .probe  = nvec_mouse_probe,
+       .suspend = nvec_mouse_suspend,
+       .resume = nvec_mouse_resume,
        .driver = {
                .name = "nvec-mouse",
                .owner = THIS_MODULE,