Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754262Ab2B2TzB (ORCPT ); Wed, 29 Feb 2012 14:55:01 -0500 Received: from mailout-de.gmx.net ([213.165.64.22]:47307 "HELO mailout-de.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753591Ab2B2TzA (ORCPT ); Wed, 29 Feb 2012 14:55:00 -0500 X-Authenticated: #2813124 X-Provags-ID: V01U2FsdGVkX1+z/idyGbGzIrYIg28gOdhl9o184UQiH/CyUNmP9b dBLTvwJdZiO9vd Message-ID: <4F4E828F.2060105@gmx.ch> Date: Wed, 29 Feb 2012 20:54:55 +0100 From: Daniel Ritz User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 MIME-Version: 1.0 To: Viresh Kumar CC: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org, armando.visconti@st.com, shiraz.hashim@st.com, vipin.kumar@st.com, rajeev-dlh.kumar@st.com, deepak.sikri@st.com, vipulkumar.samar@st.com, amit.virdi@st.com, pratyush.anand@st.com, bhupesh.sharma@st.com, viresh.linux@gmail.com, bhavna.yadav@st.com, vincenzo.frascino@st.com, mirko.gardi@st.com, salvatore.dedominicis@st.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH V2] Input: usbtouchscreen: add support for Data Modul EasyTouch TP 72037 References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5289 Lines: 166 On 2012-02-29 11:07 , Viresh Kumar wrote: > From: Armando Visconti > > The Data Modul TP 72037 EasyTouch controller is derived from EGALAX > controller and is capable of detecting dual contacts. Packets can be 5 > bytes or 10 bytes long, depending whether one or two contacts are > detected. Format is same as EGALAX touch controller, but with x and y > coordinates inverted. > > Signed-off-by: Armando Visconti > Signed-off-by: Viresh Kumar > --- > Changes since V1: > - defined MULTI_PACKET if not defined earlier > - EGALAX replaced with ETOUCH > > drivers/input/touchscreen/Kconfig | 9 ++++ > drivers/input/touchscreen/usbtouchscreen.c | 63 ++++++++++++++++++++++++++++ > 2 files changed, 72 insertions(+), 0 deletions(-) > > diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig > index 2b21a70..2acf16f 100644 > --- a/drivers/input/touchscreen/Kconfig > +++ b/drivers/input/touchscreen/Kconfig > @@ -607,6 +607,7 @@ config TOUCHSCREEN_USB_COMPOSITE > - JASTEC USB Touch Controller/DigiTech DTR-02U > - Zytronic controllers > - Elo TouchSystems 2700 IntelliTouch > + - EasyTouch USB Touch Controller from Data Modul > > Have a look at for > a usage description and the required user-space stuff. > @@ -711,6 +712,14 @@ config TOUCHSCREEN_USB_NEXIO > bool "NEXIO/iNexio device support" if EXPERT > depends on TOUCHSCREEN_USB_COMPOSITE > > +config TOUCHSCREEN_USB_EASYTOUCH > + default y > + bool "EasyTouch USB Touch controller device support" if EMBEDDED > + depends on TOUCHSCREEN_USB_COMPOSITE > + help > + Say Y here if you have a EasyTouch USB Touch controller device support. > + If unsure, say N. > + > config TOUCHSCREEN_TOUCHIT213 > tristate "Sahara TouchIT-213 touchscreen" > select SERIO > diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c > index 3a5ebf4..22cd96f 100644 > --- a/drivers/input/touchscreen/usbtouchscreen.c > +++ b/drivers/input/touchscreen/usbtouchscreen.c > @@ -17,6 +17,7 @@ > * - Zytronic capacitive touchscreen > * - NEXIO/iNexio > * - Elo TouchSystems 2700 IntelliTouch > + * - EasyTouch USB Dual/Multi touch controller from Data Modul > * > * Copyright (C) 2004-2007 by Daniel Ritz > * Copyright (C) by Todd E. Johnson (mtouchusb.c) > @@ -140,6 +141,7 @@ enum { > DEVTYPE_TC45USB, > DEVTYPE_NEXIO, > DEVTYPE_ELO, > + DEVTYPE_ETOUCH, > }; > > #define USB_DEVICE_HID_CLASS(vend, prod) \ > @@ -245,6 +247,10 @@ static const struct usb_device_id usbtouch_devices[] = { > {USB_DEVICE(0x04e7, 0x0020), .driver_info = DEVTYPE_ELO}, > #endif > > +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH > + {USB_DEVICE(0x7374, 0x0001), .driver_info = DEVTYPE_ETOUCH}, > +#endif > + > {} > }; > > @@ -326,6 +332,51 @@ static int egalax_get_pkt_len(unsigned char *buf, int len) > } > #endif > > +/***************************************************************************** > + * EasyTouch part > + */ > + > +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH > + > +#ifndef MULTI_PACKET > +#define MULTI_PACKET > +#endif > + > +#define ETOUCH_PKT_TYPE_MASK 0xFE > +#define ETOUCH_PKT_TYPE_REPT 0x80 > +#define ETOUCH_PKT_TYPE_REPT2 0xB0 > +#define ETOUCH_PKT_TYPE_DIAG 0x0A > + > +static int etouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt) > +{ > + if ((pkt[0] & ETOUCH_PKT_TYPE_MASK) != ETOUCH_PKT_TYPE_REPT && > + (pkt[0] & ETOUCH_PKT_TYPE_MASK) != ETOUCH_PKT_TYPE_REPT2) If the second packet has values too different from the first one you will get a jumpy cursor. If this is the case, simply drop the line above, to ignore the second packet, leaving etouch_get_pkt_len() unchanged. But otherwise it shouldn't be much of a problem, so I guess it's ok as-is. > + return 0; > + > + dev->x = ((pkt[1] & 0x1F) << 7) | (pkt[2] & 0x7F); > + dev->y = ((pkt[3] & 0x1F) << 7) | (pkt[4] & 0x7F); > + dev->touch = pkt[0] & 0x01; > + > + return 1; > +} > + > +static int etouch_get_pkt_len(unsigned char *buf, int len) > +{ > + switch (buf[0] & ETOUCH_PKT_TYPE_MASK) { > + case ETOUCH_PKT_TYPE_REPT: > + case ETOUCH_PKT_TYPE_REPT2: > + return 5; > + > + case ETOUCH_PKT_TYPE_DIAG: > + if (len < 2) > + return -1; > + > + return buf[1] + 2; > + } > + > + return 0; > +} > +#endif > > /***************************************************************************** > * PanJit Part > @@ -1175,6 +1226,18 @@ static struct usbtouch_device_info usbtouch_dev_info[] = { > .exit = nexio_exit, > }, > #endif > +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH > + [DEVTYPE_ETOUCH] = { > + .min_xc = 0x0, > + .max_xc = 0x07ff, > + .min_yc = 0x0, > + .max_yc = 0x07ff, > + .rept_size = 16, > + .process_pkt = usbtouch_process_multi, > + .get_pkt_len = etouch_get_pkt_len, > + .read_data = etouch_read_data, > + }, > +#endif > }; > Looks good, thanks. Signed-off-by: Daniel Ritz -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/