aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoger Quadros <rogerq@ti.com>2014-05-19 01:46:43 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-05-19 02:25:57 -0400
commit0dfc8d41bfa091a61354eea73199a5af0eaae9c0 (patch)
treeb251f6c4742b622a5b5229a5f2bd2f97cdcdc267
parent3b36fbb01dc50f58e7803006f5a99683daf26c8c (diff)
Input: pixcir_i2c_ts - get rid of pdata->attb_read_val()
Get rid of the attb_read_val() platform hook. Instead, read the ATTB gpio directly from the driver. Fail if valid ATTB gpio is not provided by patform data. Signed-off-by: Roger Quadros <rogerq@ti.com> Acked-by: Mugunthan V N <mugunthanvnm@ti.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/touchscreen/pixcir_i2c_ts.c16
-rw-r--r--include/linux/input/pixcir_ts.h2
2 files changed, 16 insertions, 2 deletions
diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c
index 6c6f6dacb858..f2c0ae18e24a 100644
--- a/drivers/input/touchscreen/pixcir_i2c_ts.c
+++ b/drivers/input/touchscreen/pixcir_i2c_ts.c
@@ -24,6 +24,7 @@
24#include <linux/i2c.h> 24#include <linux/i2c.h>
25#include <linux/input.h> 25#include <linux/input.h>
26#include <linux/input/pixcir_ts.h> 26#include <linux/input/pixcir_ts.h>
27#include <linux/gpio.h>
27 28
28struct pixcir_i2c_ts_data { 29struct pixcir_i2c_ts_data {
29 struct i2c_client *client; 30 struct i2c_client *client;
@@ -87,11 +88,12 @@ static void pixcir_ts_poscheck(struct pixcir_i2c_ts_data *data)
87static irqreturn_t pixcir_ts_isr(int irq, void *dev_id) 88static irqreturn_t pixcir_ts_isr(int irq, void *dev_id)
88{ 89{
89 struct pixcir_i2c_ts_data *tsdata = dev_id; 90 struct pixcir_i2c_ts_data *tsdata = dev_id;
91 const struct pixcir_ts_platform_data *pdata = tsdata->chip;
90 92
91 while (tsdata->running) { 93 while (tsdata->running) {
92 pixcir_ts_poscheck(tsdata); 94 pixcir_ts_poscheck(tsdata);
93 95
94 if (tsdata->chip->attb_read_val()) 96 if (gpio_get_value(pdata->gpio_attb))
95 break; 97 break;
96 98
97 msleep(20); 99 msleep(20);
@@ -298,6 +300,11 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
298 return -EINVAL; 300 return -EINVAL;
299 } 301 }
300 302
303 if (!gpio_is_valid(pdata->gpio_attb)) {
304 dev_err(dev, "Invalid gpio_attb in pdata\n");
305 return -EINVAL;
306 }
307
301 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL); 308 tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL);
302 if (!tsdata) 309 if (!tsdata)
303 return -ENOMEM; 310 return -ENOMEM;
@@ -328,6 +335,13 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
328 335
329 input_set_drvdata(input, tsdata); 336 input_set_drvdata(input, tsdata);
330 337
338 error = devm_gpio_request_one(dev, pdata->gpio_attb,
339 GPIOF_DIR_IN, "pixcir_i2c_attb");
340 if (error) {
341 dev_err(dev, "Failed to request ATTB gpio\n");
342 return error;
343 }
344
331 error = devm_request_threaded_irq(dev, client->irq, NULL, pixcir_ts_isr, 345 error = devm_request_threaded_irq(dev, client->irq, NULL, pixcir_ts_isr,
332 IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 346 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
333 client->name, tsdata); 347 client->name, tsdata);
diff --git a/include/linux/input/pixcir_ts.h b/include/linux/input/pixcir_ts.h
index 7942804464d3..160cf353aa39 100644
--- a/include/linux/input/pixcir_ts.h
+++ b/include/linux/input/pixcir_ts.h
@@ -44,9 +44,9 @@ enum pixcir_int_mode {
44#define PIXCIR_INT_POL_HIGH (1UL << 2) 44#define PIXCIR_INT_POL_HIGH (1UL << 2)
45 45
46struct pixcir_ts_platform_data { 46struct pixcir_ts_platform_data {
47 int (*attb_read_val)(void);
48 int x_max; 47 int x_max;
49 int y_max; 48 int y_max;
49 int gpio_attb; /* GPIO connected to ATTB line */
50}; 50};
51 51
52#endif 52#endif