Hi Jason,
On Thu, Aug 22, 2013 at 06:15:35PM -0700, Jason Gerecke wrote:
> Adds support for the sensors integrated in to the Cintiq Companion
> Hybrid. These sensors use by-and-large the same protocol as the
> Cintiq 24HD touch.
>
> NOTE: The ExpressKeys on the Cintiq Companion Hybrid are wired to
> both the EMR controller and CPU GPIO pins. It may be necessary to
> disable their functionality in this driver if building a custom
> Android kernel for this device (lest two events be sent to userspace
> for every button press).
>
> Signed-off-by: Jason Gerecke <[email protected]>
> ---
> drivers/input/tablet/wacom_sys.c | 2 +-
> drivers/input/tablet/wacom_wac.c | 49
> +++++++++++++++++++++++++++++++++++++++-
> drivers/input/tablet/wacom_wac.h | 1 +
> 3 files changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/tablet/wacom_sys.c
> b/drivers/input/tablet/wacom_sys.c
> index 1ad3e07..8fa7af7 100644
> --- a/drivers/input/tablet/wacom_sys.c
> +++ b/drivers/input/tablet/wacom_sys.c
> @@ -548,7 +548,7 @@ static int wacom_query_tablet_data(struct usb_interface
> *intf, struct wacom_feat
> /* MT Tablet PC touch */
> return wacom_set_device_mode(intf, 3, 4, 4);
> }
> - else if (features->type == WACOM_24HDT) {
> + else if (features->type == WACOM_24HDT || features->type ==
> ASTERIX) {
> return wacom_set_device_mode(intf, 18, 3, 2);
> }
> } else if (features->device_type == BTN_TOOL_PEN) {
> diff --git a/drivers/input/tablet/wacom_wac.c
> b/drivers/input/tablet/wacom_wac.c
> index 541197b..8ccfe91 100644
> --- a/drivers/input/tablet/wacom_wac.c
> +++ b/drivers/input/tablet/wacom_wac.c
> @@ -475,7 +475,7 @@ static void wacom_intuos_general(struct wacom_wac *wacom)
> /* general pen packet */
> if ((data[1] & 0xb8) == 0xa0) {
> t = (data[6] << 2) | ((data[7] >> 6) & 3);
> - if (features->type >= INTUOS4S && features->type <= WACOM_24HD)
> {
> + if (features->type >= INTUOS4S && features->type <= ASTERIX) {
> t = (t << 1) | (data[1] & 1);
> }
> input_report_abs(input, ABS_PRESSURE, t);
> @@ -619,6 +619,25 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
> } else {
> input_report_abs(input, ABS_MISC, 0);
> }
> + } else if (features->type == ASTERIX) {
> + /*
> + * Do not send hardware buttons under Android. They
> + * are already sent to the system through GPIO (and
> + * have different meaning).
> + */
> +
> +#if 1
Should this be removed.
> + input_report_key(input, BTN_1, (data[4] & 0x01));
> + input_report_key(input, BTN_2, (data[4] & 0x02));
> + input_report_key(input, BTN_3, (data[4] & 0x04));
> + input_report_key(input, BTN_4, (data[4] & 0x08));
> +
> + input_report_key(input, BTN_5, (data[4] & 0x10)); //
> Right
> + input_report_key(input, BTN_6, (data[4] & 0x20)); // Up
> + input_report_key(input, BTN_7, (data[4] & 0x40)); //
> Left
> + input_report_key(input, BTN_8, (data[4] & 0x80)); //
> Down
> + input_report_key(input, BTN_0, (data[3] & 0x01)); //
> Center
C-style comments are still preferred in the kernel.
> +#endif
> } else if (features->type >= INTUOS5S && features->type <=
> INTUOS5L) {
> int i;
>
> @@ -1325,6 +1344,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t
> len)
> case WACOM_22HD:
> case WACOM_24HD:
> case DTK:
> + case ASTERIX:
> sync = wacom_intuos_irq(wacom_wac);
> break;
>
> @@ -1763,6 +1783,24 @@ int wacom_setup_input_capabilities(struct input_dev
> *input_dev,
> 0, 0);
> }
> break;
> +
> + case ASTERIX:
> + __set_bit(BTN_1, input_dev->keybit);
> + __set_bit(BTN_2, input_dev->keybit);
> + __set_bit(BTN_3, input_dev->keybit);
> + __set_bit(BTN_4, input_dev->keybit);
> +
> + __set_bit(BTN_5, input_dev->keybit);
> + __set_bit(BTN_6, input_dev->keybit);
> + __set_bit(BTN_7, input_dev->keybit);
> + __set_bit(BTN_8, input_dev->keybit);
> + __set_bit(BTN_0, input_dev->keybit);
> +
> + input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
> + __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
> +
> + wacom_setup_cintiq(wacom_wac);
> + break;
> }
> return 0;
> }
> @@ -2117,6 +2155,13 @@ static const struct wacom_features wacom_features_0xDF
> =
> static const struct wacom_features wacom_features_0x6004 =
> { "ISD-V4", WACOM_PKGLEN_GRAPHIRE, 12800, 8000, 255,
> 0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
> +static const struct wacom_features wacom_features_0x0307 =
> + { "Wacom ISDv5 307", WACOM_PKGLEN_INTUOS, 59552, 33848, 2047,
> + 63, ASTERIX, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES,
> + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x309 };
> +static const struct wacom_features wacom_features_0x0309 =
> + { "Wacom ISDv5 309", .type = WACOM_24HDT, /* Touch */
> + .oVid = USB_VENDOR_ID_WACOM, .oPid = 0x0307, .touch_max = 10 };
>
> #define USB_DEVICE_WACOM(prod) \
> USB_DEVICE(USB_VENDOR_ID_WACOM, prod), \
> @@ -2247,6 +2292,8 @@ const struct usb_device_id wacom_ids[] = {
> { USB_DEVICE_WACOM(0xF8) },
> { USB_DEVICE_DETAILED(0xF6, USB_CLASS_HID, 0, 0) },
> { USB_DEVICE_WACOM(0xFA) },
> + { USB_DEVICE_WACOM(0x0307) },
> + { USB_DEVICE_DETAILED(0x0309, USB_CLASS_HID, 0, 0) },
> { USB_DEVICE_LENOVO(0x6004) },
> { }
> };
> diff --git a/drivers/input/tablet/wacom_wac.h
> b/drivers/input/tablet/wacom_wac.h
> index dfc9e08..f47a5c1 100644
> --- a/drivers/input/tablet/wacom_wac.h
> +++ b/drivers/input/tablet/wacom_wac.h
> @@ -80,6 +80,7 @@ enum {
> WACOM_22HD,
> DTK,
> WACOM_24HD,
> + ASTERIX,
> CINTIQ,
> WACOM_BEE,
> WACOM_13HD,
Thanks.
--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html