extern void wacom_report_key(void *wcombo, unsigned int key_type, int key_data);
extern void wacom_input_event(void *wcombo, unsigned int type, unsigned int code, int value);
extern void wacom_input_sync(void *wcombo);
+extern void wacom_input_mt_sync(void *wcombo);
extern void wacom_init_input_dev(struct input_dev *input_dev, struct wacom_wac *wacom_wac);
extern void input_dev_g4(struct input_dev *input_dev, struct wacom_wac *wacom_wac);
extern void input_dev_g(struct input_dev *input_dev, struct wacom_wac *wacom_wac);
input_sync(get_input_dev((struct wacom_combo *)wcombo));
}
+void wacom_input_mt_sync(void *wcombo)
+{
+ input_mt_sync(get_input_dev((struct wacom_combo *)wcombo));
+}
+
static int wacom_open(struct input_dev *dev)
{
struct wacom *wacom = input_get_drvdata(dev);
}
input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+ input_dev->keybit[BIT_WORD(BTN_TOUCH)] |= BIT_MASK(BTN_TOUCH);
+#if 0 //convert device type for emulator
input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) |
BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS);
+#endif
+
input_set_abs_params(input_dev, ABS_X, 0, features->x_max, 4, 0);
input_set_abs_params(input_dev, ABS_Y, 0, features->y_max, 4, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max, 0, 0);
}
input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC);
+ /* for multitouch */
+ input_set_abs_params(input_dev, ABS_MT_TRACKING_ID, 0, 1, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, features->pressure_max, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, features->touch_x_max, 0, 0);
+ input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, features->touch_y_max, 0, 0);
+
wacom_init_input_dev(input_dev, wacom_wac);
usb_fill_int_urb(wacom->irq, dev,
}
break;
case 2:
+#if 0
wacom_report_key(wcombo, BTN_TOOL_PEN, 1);
wacom_report_abs(wcombo, ABS_MISC, STYLUS_DEVICE_ID); /* report tool id */
wacom_report_abs(wcombo, ABS_X, wacom_le16_to_cpu(&data[1]));
wacom_report_abs(wcombo, ABS_PRESSURE, (signed char)data[6] + 127);
wacom_report_key(wcombo, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] & 0x20));
wacom_report_key(wcombo, BTN_STYLUS, (data[5] & 0x40));
+#else
+ if ((signed char)data[6] > -127) { //pressed
+ wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, data[5]);
+ wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 5);
+ wacom_report_abs(wcombo, ABS_MT_POSITION_X, wacom_le16_to_cpu(&data[1]));
+ wacom_report_abs(wcombo, ABS_MT_POSITION_Y, wacom_le16_to_cpu(&data[3]));
+ wacom_input_mt_sync(wcombo);
+ } else { //release
+ if (data[5] == 1) {
+ wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, 1);
+ wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 0);
+ wacom_input_mt_sync(wcombo);
+ }
+ wacom_report_abs(wcombo, ABS_MT_TRACKING_ID, 0);
+ wacom_report_abs(wcombo, ABS_MT_TOUCH_MAJOR, 0);
+ wacom_input_mt_sync(wcombo);
+ }
+#endif
break;
default:
printk(KERN_INFO "wacom_penpartner_irq: received unknown report #%d\n", data[0]);
input_dev_pl(input_dev, wacom_wac);
/* fall through */
case PENPARTNER:
- input_dev_pt(input_dev, wacom_wac);
+ //input_dev_pt(input_dev, wacom_wac);
break;
}
return;