diff -r 69d413abd6c0 drivers/xen/fbfront/xenkbd.c --- a/drivers/xen/fbfront/xenkbd.c Fri Dec 07 00:38:40 2007 +0000 +++ b/drivers/xen/fbfront/xenkbd.c Sat Dec 08 13:18:18 2007 -0700 @@ -64,8 +64,13 @@ static irqreturn_t input_handler(int rq, 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, 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 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);