]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
Decode mouse event packet dz value and passes it as a wheel event into
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 10 Dec 2007 13:52:47 +0000 (13:52 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 10 Dec 2007 13:52:47 +0000 (13:52 +0000)
the input stream.

Signed-off-by: Pat Campbell <plc@novell.com>
drivers/xen/fbfront/xenkbd.c

index 9b5935f5a893587117e9d60904fa2633a792c495..ab1f17de56923387f0b89eccb576c4cec82ee787 100644 (file)
@@ -64,8 +64,13 @@ static irqreturn_t input_handler(int rq, void *dev_id, struct pt_regs *regs)
                dev = info->ptr;
                switch (event->type) {
                case XENKBD_TYPE_MOTION:
-                       input_report_rel(dev, REL_X, event->motion.rel_x);
-                       input_report_rel(dev, REL_Y, event->motion.rel_y);
+                       if ( event->motion.rel_z == 1 || event->motion.rel_z == -1 ) {
+                               input_report_rel(dev, REL_WHEEL, 0 - event->motion.rel_z);
+                       }           
+                       else {
+                               input_report_rel(dev, REL_X, event->motion.rel_x);
+                               input_report_rel(dev, REL_Y, event->motion.rel_y);
+                       }
                        break;
                case XENKBD_TYPE_KEY:
                        dev = NULL;
@@ -81,8 +86,13 @@ static irqreturn_t input_handler(int rq, void *dev_id, struct pt_regs *regs)
                                       event->key.keycode);
                        break;
                case XENKBD_TYPE_POS:
-                       input_report_abs(dev, ABS_X, event->pos.abs_x);
-                       input_report_abs(dev, ABS_Y, event->pos.abs_y);
+                       if ( event->pos.abs_z == 1 || event->pos.abs_z == -1 ) {
+                               input_report_rel(dev, REL_WHEEL, 0 - event->pos.abs_z);
+                       }
+                       else {
+                               input_report_abs(dev, ABS_X, event->pos.abs_x);
+                               input_report_abs(dev, ABS_Y, event->pos.abs_y);
+                       }
                        break;
                }
                if (dev)
@@ -152,7 +162,7 @@ int __devinit xenkbd_probe(struct xenbus_device *dev,
        ptr->evbit[0] = BIT(EV_KEY) | BIT(EV_REL) | BIT(EV_ABS);
        for (i = BTN_LEFT; i <= BTN_TASK; i++)
                set_bit(i, ptr->keybit);
-       ptr->relbit[0] = BIT(REL_X) | BIT(REL_Y);
+       ptr->relbit[0] = BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL);
        input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
        input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);