Re: [PATCH 1/3] Input: wacom - Support EMR and MFT sensors of Cintiq Companion Hybrid

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <killertofu@xxxxxxxxx>
> ---
>  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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux