Re: [PATCH v2] input: Add a driver TSC-40 (serial)

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

 



Hi Dmitry,

2011/9/23 Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>:
> Hi Christian,
>
> On Fri, Sep 23, 2011 at 12:35:31PM +0200, Christian Gmeiner wrote:
>> From 7fc3295f1a4d987af846851f13d185e5f5877411 Mon Sep 17 00:00:00 2001
>> From: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
>> Date: Fri, 23 Sep 2011 14:22:18 +0200
>> Subject: [PATCH v2] input: Add a driver TSC40 (serial)
>>
>> This patch adds the TSC-40 serial touchscreen driver and
>> should be compatible with TSC-10 and TSC-25.
>>
>> The driver was written by Linutronix on behalf of
>> Bachmann electronic GmbH.
>>
>> Changes v1 -> v2:
>> - initialisation of the controller moved to inputattach
>
> Was the patch to inputattach posted here?

Not yet... will do it when I post a new version of the patch.

>
>> - incorporated feedback from Dmitry Torokhov and
>>   Sebastian Andrzej Siewior
>>
>> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
>> Signed-off-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx>
>> ---
>>  drivers/input/touchscreen/Kconfig  |    7 ++
>>  drivers/input/touchscreen/Makefile |    1 +
>>  drivers/input/touchscreen/tsc40.c  |  176 ++++++++++++++++++++++++++++++++++++
>>  include/linux/serio.h              |    1 +
>>  4 files changed, 185 insertions(+), 0 deletions(-)
>>  create mode 100644 drivers/input/touchscreen/tsc40.c
>>
>> diff --git a/drivers/input/touchscreen/Kconfig
>> b/drivers/input/touchscreen/Kconfig
>> index cabd9e5..c1b6ed9 100644
>> --- a/drivers/input/touchscreen/Kconfig
>> +++ b/drivers/input/touchscreen/Kconfig
>> @@ -651,6 +651,13 @@ config TOUCHSCREEN_TOUCHIT213
>>         To compile this driver as a module, choose M here: the
>>         module will be called touchit213.
>>
>> +config TOUCHSCREEN_TSC_SERIO
>> +     tristate "TSC-10/25/40 serial touchscreen"
>> +     select SERIO
>> +     help
>> +       Say Y here if you have a TSC-10, 25 or 40 serial touchscreen connected
>> +       to your system.
>> +
>
> "To compile this driver as a module..."

okay

>
>>  config TOUCHSCREEN_TSC2005
>>          tristate "TSC2005 based touchscreens"
>>          depends on SPI_MASTER && GENERIC_HARDIRQS
>> diff --git a/drivers/input/touchscreen/Makefile
>> b/drivers/input/touchscreen/Makefile
>> index 282d6f7..f957676 100644
>> --- a/drivers/input/touchscreen/Makefile
>> +++ b/drivers/input/touchscreen/Makefile
>> @@ -46,6 +46,7 @@ obj-$(CONFIG_TOUCHSCREEN_TNETV107X) += tnetv107x-ts.o
>>  obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213) += touchit213.o
>>  obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
>>  obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)   += touchwin.o
>> +obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO)  += tsc40.o
>>  obj-$(CONFIG_TOUCHSCREEN_TSC2005)    += tsc2005.o
>>  obj-$(CONFIG_TOUCHSCREEN_TSC2007)    += tsc2007.o
>>  obj-$(CONFIG_TOUCHSCREEN_UCB1400)    += ucb1400_ts.o
>> diff --git a/drivers/input/touchscreen/tsc40.c
>> b/drivers/input/touchscreen/tsc40.c
>> new file mode 100644
>> index 0000000..eeb53a8
>> --- /dev/null
>> +++ b/drivers/input/touchscreen/tsc40.c
>> @@ -0,0 +1,176 @@
>> +/*
>> + * TSC-40 serial touchscreen driver. It should be compatiible with
>> TSC-10 and 25.
>> + * Author: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
>> + * License: GPLv2 as published by the FSF.
>> + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/module.h>
>> +#include <linux/slab.h>
>> +#include <linux/input.h>
>> +#include <linux/serio.h>
>> +#include <linux/init.h>
>> +
>> +#define PACKET_LENGTH  5
>> +struct tsc_ser {
>> +     struct input_dev *dev;
>> +     struct serio *serio;
>> +     u32 idx;
>> +     unsigned char data[PACKET_LENGTH];
>> +     char phys[32];
>> +};
>> +
>> +static void tsc_process_data(struct tsc_ser *ptsc)
>> +{
>> +     struct input_dev *dev = ptsc->dev;
>> +     u8 *data = ptsc->data;
>> +     u32 x;
>> +     u32 y;
>> +     u32 touch;
>> +
>> +     x = ((data[1] & 0x03) << 8) | data[2];
>> +     y = ((data[3] & 0x03) << 8) | data[4];
>> +     touch = data[0] & 0x01;
>> +
>> +     input_report_abs(dev, ABS_X, x);
>> +     input_report_abs(dev, ABS_Y, y);
>> +     input_report_abs(dev, ABS_PRESSURE, touch << 7);
>
> The device does not seem to produce valud pressure readings so please do
> not fake ABS_PRESSURE events. Tslib has been updated several years ago
> so that it does not require ABS_PRESSURE.

fine.. will remove it

>
>> +     input_report_key(dev, BTN_TOUCH, touch);
>> +
>> +     input_sync(dev);
>> +
>> +     ptsc->idx = 0;
>> +}
>> +
>> +static int pen_is_up(u8 data)
>
> bool.

okay

>
>> +{
>> +     /* SW[01] are unknown */
>> +     u8 val = data & 0x3f;
>> +     u8 up_val = 1 << 4;
>> +
>> +     return val == up_val;
>> +}
>> +
>> +static irqreturn_t tsc_interrupt(struct serio *serio,
>> +             unsigned char data, unsigned int flags)
>> +{
>> +     struct tsc_ser *ptsc = serio_get_drvdata(serio);
>> +     struct input_dev *dev = ptsc->dev;
>> +
>> +     if (!ptsc->idx && pen_is_up(data)) {
>
> I am curious, does the device really transmit single byte when pen is
> lifted up?
>

Have a look at the datasheet page 17 "Data description"
http://www.distec.de/PDF/Drivers/DMC/TSC40_Protocol_Description.pdf

greets
--
Christian Gmeiner, MSc
--
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