Skip to contentSkip to conversation

Getting touchscreen to work on Fujitsu B6210

PATCH In review Stephen Hemminger 4 participants 13 messages Feb 22, 2007 – Jul 10, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

I did a little investigation and the touchscreen on B6210 is attached via the 8250 serial port. I tried enabling it with inputattach but seem to get garbage.

I can extract the initialization code from the evtouch driver to a usermode program and read information from /dev/ttyS0.

The lifebook psmouse extension won't work because it tries to grab the 8042 (touchpad) rather than the touch screen.

Ideas?

#1 lore raw

Hi Stephen,

Quoted 4 lines · Stephen Hemminger

I did a little investigation and the touchscreen on B6210 is attached via the 8250 serial port. I tried enabling it with inputattach but seem to get garbage.

Quoted 8 lines

I can extract the initialization code from the evtouch driver to a usermode program and read information from /dev/ttyS0.

The lifebook psmouse extension won't work because it tries to grab the 8042 (touchpad) rather than the touch screen.

Ideas?

Please try the patch below. You will need to load 8250_pnp, serport and fujitsu_ts modules, then do

inputattach -fjt /dev/ttyS0

You can find patched version of inputattach here:

http://www.kernel.org/pub/linux/kernel/people/dtor/

Please let me know if it works for you.

Signature · 271 lines
Dmitry


Input: add driver for Fujitsu serial touchscreens

Such touchscreen are found in Fujitsu lifebook P-series laptops.

Signed-off-by: Dmitry Torokhov <[email protected]>
---
 drivers/input/touchscreen/Kconfig      |   17 ++
 drivers/input/touchscreen/Makefile     |   15 +-
 drivers/input/touchscreen/fujitsu_ts.c |  191 +++++++++++++++++++++++++++++++++
 3 files changed, 214 insertions(+), 9 deletions(-)

Index: linux/drivers/input/touchscreen/Kconfig
===================================================================
--- linux.orig/drivers/input/touchscreen/Kconfig
+++ linux/drivers/input/touchscreen/Kconfig
@@ -44,9 +44,9 @@ config TOUCHSCREEN_BITSY
 config TOUCHSCREEN_CORGI
 	tristate "SharpSL (Corgi and Spitz series) touchscreen driver"
 	depends on PXA_SHARPSL
-	default y	
+	default y
 	help
-	  Say Y here to enable the driver for the touchscreen on the 
+	  Say Y here to enable the driver for the touchscreen on the
 	  Sharp SL-C7xx and SL-Cxx00 series of PDAs.
 
 	  If unsure, say N.
@@ -54,6 +54,19 @@ config TOUCHSCREEN_CORGI
 	  To compile this driver as a module, choose M here: the
 	  module will be called corgi_ts.
 
+config TOUCHSCREEN_FUJITSU
+	tristate "Fujitsu serial touchscreen"
+	select SERIO
+	help
+	  Say Y here if you have the Fujitsu touchscreen (such as one
+	  installed in Lifebook P series laptop) connected to your
+	  system.
+
+	  If unsure, say N.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called fujitsu-ts.
+
 config TOUCHSCREEN_GUNZE
 	tristate "Gunze AHL-51S touchscreen"
 	select SERIO
Index: linux/drivers/input/touchscreen/Makefile
===================================================================
--- linux.orig/drivers/input/touchscreen/Makefile
+++ linux/drivers/input/touchscreen/Makefile
@@ -5,13 +5,14 @@
 # Each configuration option enables a list of files.
 
 obj-$(CONFIG_TOUCHSCREEN_ADS7846)	+= ads7846.o
-obj-$(CONFIG_TOUCHSCREEN_BITSY)	+= h3600_ts_input.o
-obj-$(CONFIG_TOUCHSCREEN_CORGI)	+= corgi_ts.o
-obj-$(CONFIG_TOUCHSCREEN_GUNZE)	+= gunze.o
-obj-$(CONFIG_TOUCHSCREEN_ELO)	+= elo.o
-obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
-obj-$(CONFIG_TOUCHSCREEN_MK712)	+= mk712.o
-obj-$(CONFIG_TOUCHSCREEN_HP600)	+= hp680_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_CORGI)		+= corgi_ts.o
+obj-$(CONFIG_TOUCHSCREEN_ELO)		+= elo.o
+obj-$(CONFIG_TOUCHSCREEN_FUJITSU)	+= fujitsu_ts.o
+obj-$(CONFIG_TOUCHSCREEN_GUNZE)		+= gunze.o
+obj-$(CONFIG_TOUCHSCREEN_BITSY)		+= h3600_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_HP600)		+= hp680_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_MTOUCH)	+= mtouch.o
+obj-$(CONFIG_TOUCHSCREEN_MK712)		+= mk712.o
 obj-$(CONFIG_TOUCHSCREEN_PENMOUNT)	+= penmount.o
 obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)	+= touchright.o
 obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)	+= touchwin.o
Index: linux/drivers/input/touchscreen/fujitsu_ts.c
===================================================================
--- /dev/null
+++ linux/drivers/input/touchscreen/fujitsu_ts.c
@@ -0,0 +1,190 @@
+/*
+ * Fujitsu serial touchscreen driver
+ *
+ * Copyright (c) Dmitry Torokhov <[email protected]>
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/errno.h>
+#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 DRIVER_DESC	"Fujitsu serial touchscreen driver"
+
+MODULE_AUTHOR("Dmitry Torokhov <[email protected]>");
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL");
+
+#define FUJITSU_PACKET_LENGTH 5
+
+#define FUJITSU_MIN_X	0
+#define FUJITSU_MAX_X	4095
+#define FUJITSU_MIN_Y	0
+#define FUJITSU_MAX_Y	4095
+
+/*
+ * Per-touchscreen data.
+ */
+
+struct fujitsu {
+	struct input_dev *dev;
+	struct serio *serio;
+	int idx;
+	unsigned char data[FUJITSU_LENGTH];
+	char phys[32];
+};
+
+static irqreturn_t fujitsu_interrupt(struct serio *serio,
+		unsigned char data, unsigned int flags)
+{
+	struct fujitsu *fujitsu = serio_get_drvdata(serio);
+	struct input_dev *dev = fujitsu->dev;
+
+	if (fujitsu->idx == 0) {
+		if ((data & 0xf8) != 0x80)
+			return IRQ_HANDLED;
+	} else {
+		if ((data & 0x80) != 0x00) {
+			fujitsu->idx = 0;
+			return IRQ_HANDLED;
+		}
+	}
+
+	fujitsu->data[fujitsu->idx++] = data;
+
+	if (fujitsu->idx == FUJITSU_PACKET_LENGTH) {
+
+		input_report_abs(dev, ABS_X,
+			(fujitsu->data[2] << 7) | fujitsu->data[1]);
+		input_report_abs(dev, ABS_Y,
+			(fujitsu->data[4] << 7) | fujitsu->data[3]);
+		input_report_key(dev, BTN_TOUCH,
+				 (fujitsu->data[0] & 0x03) != 2);
+		input_sync(dev);
+	}
+
+	return IRQ_HANDLED;
+}
+
+/*
+ * fujitsu_disconnect() is the opposite of fujitsu_connect()
+ */
+
+static void fujitsu_disconnect(struct serio *serio)
+{
+	struct fujitsu *fujitsu = serio_get_drvdata(serio);
+
+	input_get_device(fujitsu->dev);
+	input_unregister_device(fujitsu->dev);
+	serio_close(serio);
+	serio_set_drvdata(serio, NULL);
+	input_put_device(fujitsu->dev);
+	kfree(fujitsu);
+}
+
+/*
+ * fujitsu_connect() is the routine that is called when someone adds a
+ * new serio device that supports the Fujitsu protocol and registers it
+ * as input device.
+ */
+
+static int fujitsu_connect(struct serio *serio, struct serio_driver *drv)
+{
+	struct fujitsu *fujitsu;
+	struct input_dev *input_dev;
+	int err;
+
+	fujitsu = kzalloc(sizeof(struct fujitsu), GFP_KERNEL);
+	input_dev = input_allocate_device();
+	if (!fujitsu || !input_dev) {
+		err = -ENOMEM;
+		goto fail1;
+	}
+
+	fujitsu->serio = serio;
+	fujitsu->dev = input_dev;
+	snprintf(fujitsu->phys, sizeof(fujitsu->phys),
+		 "%s/input0", serio->phys);
+
+	input_dev->name = "Fujitsu Serial Touchscreen";
+	input_dev->phys = fujitsu->phys;
+	input_dev->id.bustype = BUS_RS232;
+	input_dev->id.vendor = SERIO_FUJITSU;
+	input_dev->id.product = 0;
+	input_dev->id.version = 0x0100;
+	input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
+	input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
+	input_set_abs_params(tw->dev, ABS_X, TW_MIN_XC, TW_MAX_XC, 0, 0);
+	input_set_abs_params(tw->dev, ABS_Y, TW_MIN_YC, TW_MAX_YC, 0, 0);
+
+	serio_set_drvdata(serio, fujitsu);
+
+	err = serio_open(serio, drv);
+	if (err)
+		goto fail2;
+
+	err = input_register_device(fujitsu->dev);
+	if (err)
+		goto fail3;
+
+	return 0;
+
+ fail3:	serio_close(serio);
+ fail2:	serio_set_drvdata(serio, NULL);
+ fail1:	input_free_device(input_dev);
+	kfree(fujitsu);
+	return err;
+}
+
+/*
+ * The serio driver structure.
+ */
+
+static struct serio_device_id fujitsu_serio_ids[] = {
+	{
+		.type	= SERIO_RS232,
+		.proto	= SERIO_FUJITSU,
+		.id	= SERIO_ANY,
+		.extra	= SERIO_ANY,
+	},
+	{ 0 }
+};
+
+MODULE_DEVICE_TABLE(serio, fujitsu_serio_ids);
+
+static struct serio_driver fujitsu_drv = {
+	.driver		= {
+		.name	= "fujitsu_ts",
+	},
+	.description	= DRIVER_DESC,
+	.id_table	= fujitsu_serio_ids,
+	.interrupt	= fujitsu_interrupt,
+	.connect	= fujitsu_connect,
+	.disconnect	= fujitsu_disconnect,
+};
+
+/*
+ * The functions for inserting/removing us as a module.
+ */
+
+static int __init fujitsu_init(void)
+{
+	return serio_register_driver(&fujitsu_drv);
+}
+
+static void __exit fujitsu_exit(void)
+{
+	serio_unregister_driver(&fujitsu_drv);
+}
+
+module_init(fujitsu_init);
+module_exit(fujitsu_exit);
#2 lore raw

Here is a cleaned up version of the patch that at least builds....
----------------------------------------------------------------------
Input: add driver for Fujitsu serial touchscreens

Such touchscreen are found in Fujitsu lifebook P-series laptops.

---
 drivers/input/touchscreen/Kconfig      |   13 ++
 drivers/input/touchscreen/Makefile     |   15 +-
 drivers/input/touchscreen/fujitsu_ts.c |  194 +++++++++++++++++++++++++++++++++
 include/linux/serio.h                  |    1 
 4 files changed, 216 insertions(+), 7 deletions(-)
drivers/input/touchscreen/Kconfig +13 -0
@@ -54,6 +54,19 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called corgi_ts.
 
+config TOUCHSCREEN_FUJITSU
+	tristate "Fujitsu serial touchscreen"
+	select SERIO
+	help
+	  Say Y here if you have the Fujitsu touchscreen (such as one
+	  installed in Lifebook P series laptop) connected to your
+	  system.
+
+	  If unsure, say N.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called fujitsu-ts.
+
 config TOUCHSCREEN_GUNZE
 	tristate "Gunze AHL-51S touchscreen"
 	select SERIO
drivers/input/touchscreen/Makefile +8 -7
@@ -5,13 +5,14 @@
 # Each configuration option enables a list of files.
 
 obj-$(CONFIG_TOUCHSCREEN_ADS7846)	+= ads7846.o
-obj-$(CONFIG_TOUCHSCREEN_BITSY)	+= h3600_ts_input.o
-obj-$(CONFIG_TOUCHSCREEN_CORGI)	+= corgi_ts.o
-obj-$(CONFIG_TOUCHSCREEN_GUNZE)	+= gunze.o
-obj-$(CONFIG_TOUCHSCREEN_ELO)	+= elo.o
-obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
-obj-$(CONFIG_TOUCHSCREEN_MK712)	+= mk712.o
-obj-$(CONFIG_TOUCHSCREEN_HP600)	+= hp680_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_CORGI)		+= corgi_ts.o
+obj-$(CONFIG_TOUCHSCREEN_ELO)		+= elo.o
+obj-$(CONFIG_TOUCHSCREEN_FUJITSU)	+= fujitsu_ts.o
+obj-$(CONFIG_TOUCHSCREEN_GUNZE)		+= gunze.o
+obj-$(CONFIG_TOUCHSCREEN_BITSY)		+= h3600_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_HP600)		+= hp680_ts_input.o
+obj-$(CONFIG_TOUCHSCREEN_MTOUCH)	+= mtouch.o
+obj-$(CONFIG_TOUCHSCREEN_MK712)		+= mk712.o
 obj-$(CONFIG_TOUCHSCREEN_PENMOUNT)	+= penmount.o
 obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)	+= touchright.o
 obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)	+= touchwin.o
drivers/input/touchscreen/fujitsu_ts.c new file +194 -0

194 lines not on this page · raw message

include/linux/serio.h +1 -0
@@ -209,5 +209,6 @@
 #define SERIO_PENMOUNT	0x31
 #define SERIO_TOUCHRIGHT	0x32
 #define SERIO_TOUCHWIN	0x33
+#define SERIO_FUJITSU	0x34
 
 #endif
maintainer
#3 lore raw
Quoted 1 line · Stephen Hemminger

Here is a cleaned up version of the patch that at least builds....

Ahem, that will teach me to do "quilt refersh" before sending off patches... Still, more important question - does it work?

Signature · 1 line
Dmitry
#4 lore raw
In reply to Dmitry Torokhov
Quoted 13 lines · On Wed, 4 Apr 2007 01:16:57 -0400 Dmitry Torokhov <[email protected]> wrote:

Hi Stephen,

Quoted 10 lines · Stephen Hemminger

I did a little investigation and the touchscreen on B6210 is attached via the 8250 serial port. I tried enabling it with inputattach but seem to get garbage.

I can extract the initialization code from the evtouch driver to a usermode program and read information from /dev/ttyS0.

The lifebook psmouse extension won't work because it tries to grab the 8042 (touchpad) rather than the touch screen.

Quoted 8 lines
Quoted 2 lines

Ideas?

Please try the patch below. You will need to load 8250_pnp, serport and fujitsu_ts modules, then do

inputattach -fjt /dev/ttyS0

inputattach runs (then waits). Data is arriving when I touch the screen. Now what? Do I need an Xorg driver for it?

#5 lore raw
Quoted 19 lines · Stephen Hemminger
Quoted 16 lines · On Wed, 4 Apr 2007 01:16:57 -0400 Dmitry Torokhov <[email protected]> wrote:

Hi Stephen,

Quoted 12 lines · Stephen Hemminger

I did a little investigation and the touchscreen on B6210 is attached via the 8250 serial port. I tried enabling it with inputattach but seem to get garbage.

I can extract the initialization code from the evtouch driver to a usermode program and read information from /dev/ttyS0.

The lifebook psmouse extension won't work because it tries to grab the 8042 (touchpad) rather than the touch screen.

Ideas?

Quoted 8 lines
Quoted 5 lines

Please try the patch below. You will need to load 8250_pnp, serport and fujitsu_ts modules, then do

inputattach -fjt /dev/ttyS0

inputattach runs (then waits). Data is arriving when I touch the screen. Now what?

Could ypou please load evbug module or run evtest utility and verify that the driver produces reasonable events?

Quoted 1 line

Do I need an Xorg driver for it?

Mousedev (i.e. /dev/input/{mouseX|mice} will provide crude emulation of normal mouse; there is evtouch X driver that should work better. You may also try evdev X driver from recent releases of x.org; as far as I know they want it to supesede evtouch eventually.

There are also solutions based on tslib library that allows touchscreen calibrating, etc. but I am not familiar with it so I am CCing Richard Purdie.

Signature · 1 line
Dmitry
#6 lore raw
Quoted 22 lines · Dmitry Torokhov
Quoted 10 lines
Quoted 10 lines · Stephen Hemminger
Quoted 9 lines

I did a little investigation and the touchscreen on B6210 is attached via the 8250 serial port. I tried enabling it with inputattach but seem to get garbage.

I can extract the initialization code from the evtouch driver to a usermode program and read information from /dev/ttyS0.

The lifebook psmouse extension won't work because it tries to grab the 8042 (touchpad) rather than the touch screen.

Could ypou please load evbug module or run evtest utility and verify that the driver produces reasonable events?

Quoted 1 line

Do I need an Xorg driver for it?

Mousedev (i.e. /dev/input/{mouseX|mice} will provide crude emulation of normal mouse; there is evtouch X driver that should work better. You may also try evdev X driver from recent releases of x.org; as far as I know they want it to supesede evtouch eventually.

Quoted 3 lines

There are also solutions based on tslib library that allows touchscreen calibrating, etc. but I am not familiar with it so I am CCing Richard Purdie.

http://tslib.berlios.de/

It has some test routines (ts_print, ts_test) and a calibration routine (ts_calibrate) which should let you see what's going on. I've found them invaluable for testing kernel touchscreen drivers.

Regards,

Richard

maintainer
#7 lore raw
In reply to Dmitry Torokhov

Hi Stephen,

Quoted 4 lines · Dmitry Torokhov

Could ypou please load evbug module or run evtest utility and verify that the driver produces reasonable events?

Quoted 8 lines
Quoted 1 line

Do I need an Xorg driver for it?

Mousedev (i.e. /dev/input/{mouseX|mice} will provide crude emulation of normal mouse; there is evtouch X driver that should work better. You may also try evdev X driver from recent releases of x.org; as far as I know they want it to supesede evtouch eventually.

Did you have any luck with fujitsu_ts module? Is it busted or is it ok for -mm?

Signature · 1 line
Dmitry
#8 lore raw
Quoted 9 lines · On Tue, 1 May 2007 11:49:38 -0400 "Dmitry Torokhov"…

Hi Stephen,

Quoted 6 lines · Dmitry Torokhov

Could ypou please load evbug module or run evtest utility and verify that the driver produces reasonable events?

Quoted 1 line

Do I need an Xorg driver for it?

Quoted 9 lines
Quoted 6 lines

Mousedev (i.e. /dev/input/{mouseX|mice} will provide crude emulation of normal mouse; there is evtouch X driver that should work better. You may also try evdev X driver from recent releases of x.org; as far as I know they want it to supesede evtouch eventually.

Did you have any luck with fujitsu_ts module? Is it busted or is it ok for -mm?

Yes and no. I got the touchscreen to function, but the input is all off. Cursor doesn't line up with stylus etc. Either there is a calibration issue or maybe the data isn't being interpreted correctly.

maintainer
#9 lore raw
Quoted 19 lines · Stephen Hemminger
Quoted 16 lines · On Tue, 1 May 2007 11:49:38 -0400 "Dmitry Torokhov"…

Hi Stephen,

Quoted 12 lines · Dmitry Torokhov

Could ypou please load evbug module or run evtest utility and verify that the driver produces reasonable events?

Quoted 1 line

Do I need an Xorg driver for it?

Mousedev (i.e. /dev/input/{mouseX|mice} will provide crude emulation of normal mouse; there is evtouch X driver that should work better. You may also try evdev X driver from recent releases of x.org; as far as I know they want it to supesede evtouch eventually.

Quoted 7 lines
Quoted 2 lines

Did you have any luck with fujitsu_ts module? Is it busted or is it ok for -mm?

Yes and no. I got the touchscreen to function, but the input is all off. Cursor doesn't line up with stylus etc. Either there is a calibration issue or maybe the data isn't being interpreted correctly.

Hopefully it is the former. Could you please compile and load evbug module or locate evtest utility and run your stylus around the perimeter of your screen, clockwise, starting with upper left corner. This will give us an idea whether the decoding work correctly or not.

Thanks!

Signature · 1 line
Dmitry
#10 lore raw

PATCH 1/1 touchscreen: Fujitsu touchscreen driver

Dmitry wrote this, I just cleaned it up and tried on a B6210 laptop. Serial touchscreen are found on some Fujitsu lifebook P-series laptops, and the B6210. The data stream looks correct but there appear to be calibration issues with both mouse emulation and the evtouch driver.

Using this requires a new version of inputattach and doing
inputattach -fjt /dev/ttyS0

It should be possible to automatically do this with udev rules.

---
 drivers/input/touchscreen/Kconfig      |   13 ++
 drivers/input/touchscreen/Makefile     |    1 +
 drivers/input/touchscreen/fujitsu_ts.c |  195 ++++++++++++++++++++++++++++++++
 include/linux/serio.h                  |    1 +
 4 files changed, 210 insertions(+), 0 deletions(-)
drivers/input/touchscreen/Kconfig +13 -0
index 5e640ae..8ab916b 100644
@@ -54,6 +54,19 @@ config TOUCHSCREEN_CORGI
 	  To compile this driver as a module, choose M here: the
 	  module will be called corgi_ts.
 
+config TOUCHSCREEN_FUJITSU
+	tristate "Fujitsu serial touchscreen"
+	select SERIO
+	help
+	  Say Y here if you have the Fujitsu touchscreen (such as one
+	  installed in Lifebook P series laptop) connected to your
+	  system.
+
+	  If unsure, say N.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called fujitsu-ts.
+
 config TOUCHSCREEN_GUNZE
 	tristate "Gunze AHL-51S touchscreen"
 	select SERIO
drivers/input/touchscreen/Makefile +1 -0
index 2f86d6a..5de8933 100644
@@ -9,6 +9,7 @@ obj-$(CONFIG_TOUCHSCREEN_BITSY)		+= h3600_ts_input.o
 obj-$(CONFIG_TOUCHSCREEN_CORGI)		+= corgi_ts.o
 obj-$(CONFIG_TOUCHSCREEN_GUNZE)		+= gunze.o
 obj-$(CONFIG_TOUCHSCREEN_ELO)		+= elo.o
+obj-$(CONFIG_TOUCHSCREEN_FUJITSU)	+= fujitsu_ts.o
 obj-$(CONFIG_TOUCHSCREEN_MTOUCH)	+= mtouch.o
 obj-$(CONFIG_TOUCHSCREEN_MK712)		+= mk712.o
 obj-$(CONFIG_TOUCHSCREEN_HP600)		+= hp680_ts_input.o
drivers/input/touchscreen/fujitsu_ts.c new file +195 -0

195 lines not on this page · raw message

include/linux/serio.h +1 -0
index 1ebf045..fbd3fa0 100644
@@ -209,5 +209,6 @@ static inline void serio_unpin_driver(struct serio *serio)
 #define SERIO_PENMOUNT	0x31
 #define SERIO_TOUCHRIGHT	0x32
 #define SERIO_TOUCHWIN	0x33
+#define SERIO_FUJITSU	0x34
 
 #endif
Signature · 1 line
1.4.4.2
maintainer
#11 lore raw

Re: [PATCH] touchscreen: Fujitsu touchscreen driver

Hi Stephen,

Thank you for looking at the patch and working out quirks...

drivers/input/touchscreen/fujitsu_ts.c line 32

Quoted 5 lines · Stephen Hemminger
drivers/input/touchscreen/fujitsu_ts.c new file +5 -0
+
+#define X_AXIS_MIN     90
+#define X_AXIS_MAX     4000
+#define Y_AXIS_MIN     185
+#define Y_AXIS_MAX     4000

I am not sure that we want to use data from one particular laptop here. Since we don't know a way to query the thouchscreen on a particular box I'd stick with physical protocol limits (0 - 4095) and have user calibrate the screen.

Have you tried going through the calibration procedure with evtouch driver? Does it not work or works incorrectly (I have no idea since I don't have the hardware)?

drivers/input/touchscreen/fujitsu_ts.c line 59

Quoted 10 lines
drivers/input/touchscreen/fujitsu_ts.c new file +10 -0
+static irqreturn_t fujitsu_interrupt(struct serio *serio,
+                                    unsigned char data, unsigned int flags)
+{
+       struct fujitsu *fujitsu = serio_get_drvdata(serio);
+       struct input_dev *dev = fujitsu->dev;
+
+       if (fujitsu->idx == 0) {
+               /* resync skip until start of frame */
+               if (!(data & 0x80))
+                       return IRQ_HANDLED;

The data sheet that I have shows the following for the first byte:

1 C 0 0 R S S S

Where C is 1 while in calibration mode (which we don't use) and R is 1 when no coordinate corection was done. My original patch had the check "(data & 0xf8) != 80", did it give you issues with the data stream coming out of the touchscreen? Or the missing fujitsu->idx = 0 is all that is really needed?

Thanks.

Signature · 1 line
Dmitry
#12 lore raw

Re: [PATCH] touchscreen: Fujitsu touchscreen driver

Quoted 5 lines · On Tue, 22 May 2007 09:24:20 -0400 "Dmitry Torokhov"…

Hi Stephen,

Thank you for looking at the patch and working out quirks...

On 5/21/07, Stephen Hemminger <[email protected]> wrote:

Quoted 10 lines

drivers/input/touchscreen/fujitsu_ts.c line 32

Quoted 5 lines
drivers/input/touchscreen/fujitsu_ts.c new file +5 -0
+
+#define X_AXIS_MIN     90
+#define X_AXIS_MAX     4000
+#define Y_AXIS_MIN     185
+#define Y_AXIS_MAX     4000

I am not sure that we want to use data from one particular laptop here. Since we don't know a way to query the thouchscreen on a particular box I'd stick with physical protocol limits (0 - 4095) and have user calibrate the screen.

Went back to 0 by 4096 on followup versions

Quoted 3 lines

Have you tried going through the calibration procedure with evtouch driver? Does it not work or works incorrectly (I have no idea since I don't have the hardware)?

I tried it, and it corrects for offsets.

Quoted 13 lines

drivers/input/touchscreen/fujitsu_ts.c line 59

Quoted 10 lines
drivers/input/touchscreen/fujitsu_ts.c new file +10 -0
+static irqreturn_t fujitsu_interrupt(struct serio *serio,
+                                    unsigned char data, unsigned int flags)
+{
+       struct fujitsu *fujitsu = serio_get_drvdata(serio);
+       struct input_dev *dev = fujitsu->dev;
+
+       if (fujitsu->idx == 0) {
+               /* resync skip until start of frame */
+               if (!(data & 0x80))
+                       return IRQ_HANDLED;

The data sheet that I have shows the following for the first byte:

Quoted 8 lines

1 C 0 0 R S S S

Where C is 1 while in calibration mode (which we don't use) and R is 1 when no coordinate corection was done. My original patch had the check "(data & 0xf8) != 80", did it give you issues with the data stream coming out of the touchscreen? Or the missing fujitsu->idx = 0 is all that is really needed?

The first byte is always: 0x88

Sample touch in middle is

	88 72 11 4b 0f
        89 71 11 4c 0f
	89 72 11 4b 0f
	8a 71 11 48 0f

So original code that checks for (data & 0xf8) == 0x80 wouldn't work