aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Welling <mwelling@ieee.org>2015-11-03 01:54:23 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2015-11-03 17:54:22 -0500
commita748941c95d2cd8f1a23e4e716b3178179c7fdbe (patch)
treeeeee688fb74cf193a4223a27d1d01fdd8b998c9f
parentef3b98c2c3fc6a73ec1e98a463c38329e66c6b95 (diff)
Input: tsc2004 - add support for tsc2004
This adds support for the i2c based tsc2004 touchscreen controller. Signed-off-by: Michael Welling <mwelling@ieee.org> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt34
-rw-r--r--drivers/input/touchscreen/Kconfig13
-rw-r--r--drivers/input/touchscreen/Makefile1
-rw-r--r--drivers/input/touchscreen/tsc2004.c83
4 files changed, 125 insertions, 6 deletions
diff --git a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
index 09089a6d69ed..b80c04b0e5c0 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
+++ b/Documentation/devicetree/bindings/input/touchscreen/tsc2005.txt
@@ -1,14 +1,15 @@
1* Texas Instruments tsc2005 touchscreen controller 1* Texas Instruments tsc2004 and tsc2005 touchscreen controllers
2 2
3Required properties: 3Required properties:
4 - compatible : "ti,tsc2005" 4 - compatible : "ti,tsc2004" or "ti,tsc2005"
5 - reg : SPI device address 5 - reg : Device address
6 - spi-max-frequency : Maximal SPI speed
7 - interrupts : IRQ specifier 6 - interrupts : IRQ specifier
8 - reset-gpios : GPIO specifier 7 - spi-max-frequency : Maximum SPI clocking speed of the device
9 - vio-supply : Regulator specifier 8 (for tsc2005)
10 9
11Optional properties: 10Optional properties:
11 - vio-supply : Regulator specifier
12 - reset-gpios : GPIO specifier for the controller reset line
12 - ti,x-plate-ohms : integer, resistance of the touchscreen's X plates 13 - ti,x-plate-ohms : integer, resistance of the touchscreen's X plates
13 in ohm (defaults to 280) 14 in ohm (defaults to 280)
14 - ti,esd-recovery-timeout-ms : integer, if the touchscreen does not respond after 15 - ti,esd-recovery-timeout-ms : integer, if the touchscreen does not respond after
@@ -18,6 +19,27 @@ Optional properties:
18 19
19Example: 20Example:
20 21
22&i2c3 {
23 tsc2004@48 {
24 compatible = "ti,tsc2004";
25 reg = <0x48>;
26 vio-supply = <&vio>;
27
28 reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>;
29 interrupts-extended = <&gpio1 27 IRQ_TYPE_EDGE_RISING>;
30
31 touchscreen-fuzz-x = <4>;
32 touchscreen-fuzz-y = <7>;
33 touchscreen-fuzz-pressure = <2>;
34 touchscreen-size-x = <4096>;
35 touchscreen-size-y = <4096>;
36 touchscreen-max-pressure = <2048>;
37
38 ti,x-plate-ohms = <280>;
39 ti,esd-recovery-timeout-ms = <8000>;
40 };
41}
42
21&mcspi1 { 43&mcspi1 {
22 tsc2005@0 { 44 tsc2005@0 {
23 compatible = "ti,tsc2005"; 45 compatible = "ti,tsc2005";
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 6b2de5345e66..2ccc52236c15 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -942,6 +942,19 @@ config TOUCHSCREEN_TSC_SERIO
942config TOUCHSCREEN_TSC200X_CORE 942config TOUCHSCREEN_TSC200X_CORE
943 tristate 943 tristate
944 944
945config TOUCHSCREEN_TSC2004
946 tristate "TSC2004 based touchscreens"
947 depends on I2C
948 select REGMAP_I2C
949 select TOUCHSCREEN_TSC200X_CORE
950 help
951 Say Y here if you have a TSC2004 based touchscreen.
952
953 If unsure, say N.
954
955 To compile this driver as a module, choose M here: the
956 module will be called tsc2004.
957
945config TOUCHSCREEN_TSC2005 958config TOUCHSCREEN_TSC2005
946 tristate "TSC2005 based touchscreens" 959 tristate "TSC2005 based touchscreens"
947 depends on SPI_MASTER 960 depends on SPI_MASTER
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 03179f28c259..cbaa6abb08da 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -70,6 +70,7 @@ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
70obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o 70obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
71obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO) += tsc40.o 71obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO) += tsc40.o
72obj-$(CONFIG_TOUCHSCREEN_TSC200X_CORE) += tsc200x-core.o 72obj-$(CONFIG_TOUCHSCREEN_TSC200X_CORE) += tsc200x-core.o
73obj-$(CONFIG_TOUCHSCREEN_TSC2004) += tsc2004.o
73obj-$(CONFIG_TOUCHSCREEN_TSC2005) += tsc2005.o 74obj-$(CONFIG_TOUCHSCREEN_TSC2005) += tsc2005.o
74obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o 75obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o
75obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o 76obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
diff --git a/drivers/input/touchscreen/tsc2004.c b/drivers/input/touchscreen/tsc2004.c
new file mode 100644
index 000000000000..7295c198aa08
--- /dev/null
+++ b/drivers/input/touchscreen/tsc2004.c
@@ -0,0 +1,83 @@
1/*
2 * TSC2004 touchscreen driver
3 *
4 * Copyright (C) 2015 QWERTY Embedded Design
5 * Copyright (C) 2015 EMAC Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 */
17
18#include <linux/module.h>
19#include <linux/input.h>
20#include <linux/of.h>
21#include <linux/i2c.h>
22#include <linux/regmap.h>
23#include "tsc200x-core.h"
24
25static int tsc2004_cmd(struct device *dev, u8 cmd)
26{
27 u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd;
28 s32 data;
29 struct i2c_client *i2c = to_i2c_client(dev);
30
31 data = i2c_smbus_write_byte(i2c, tx);
32 if (data < 0) {
33 dev_err(dev, "%s: failed, command: %x i2c error: %d\n",
34 __func__, cmd, data);
35 return data;
36 }
37
38 return 0;
39}
40
41static int tsc2004_probe(struct i2c_client *i2c,
42 const struct i2c_device_id *id)
43
44{
45 return tsc200x_probe(&i2c->dev, i2c->irq, BUS_I2C,
46 devm_regmap_init_i2c(i2c, &tsc200x_regmap_config),
47 tsc2004_cmd);
48}
49
50static int tsc2004_remove(struct i2c_client *i2c)
51{
52 return tsc200x_remove(&i2c->dev);
53}
54
55static const struct i2c_device_id tsc2004_idtable[] = {
56 { "tsc2004", 0 },
57 { }
58};
59MODULE_DEVICE_TABLE(i2c, tsc2004_idtable);
60
61#ifdef CONFIG_OF
62static const struct of_device_id tsc2004_of_match[] = {
63 { .compatible = "ti,tsc2004" },
64 { /* sentinel */ }
65};
66MODULE_DEVICE_TABLE(of, tsc2004_of_match);
67#endif
68
69static struct i2c_driver tsc2004_driver = {
70 .driver = {
71 .name = "tsc2004",
72 .of_match_table = of_match_ptr(tsc2004_of_match),
73 .pm = &tsc200x_pm_ops,
74 },
75 .id_table = tsc2004_idtable,
76 .probe = tsc2004_probe,
77 .remove = tsc2004_remove,
78};
79module_i2c_driver(tsc2004_driver);
80
81MODULE_AUTHOR("Michael Welling <mwelling@ieee.org>");
82MODULE_DESCRIPTION("TSC2004 Touchscreen Driver");
83MODULE_LICENSE("GPL");