aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/touchscreen/wacom_i2c.c41
1 files changed, 4 insertions, 37 deletions
diff --git a/drivers/input/touchscreen/wacom_i2c.c b/drivers/input/touchscreen/wacom_i2c.c
index b8ca4a6bc91a..35572575d34a 100644
--- a/drivers/input/touchscreen/wacom_i2c.c
+++ b/drivers/input/touchscreen/wacom_i2c.c
@@ -39,7 +39,6 @@ struct wacom_features {
39struct wacom_i2c { 39struct wacom_i2c {
40 struct i2c_client *client; 40 struct i2c_client *client;
41 struct input_dev *input; 41 struct input_dev *input;
42 unsigned int gpio;
43 u8 data[WACOM_QUERY_SIZE]; 42 u8 data[WACOM_QUERY_SIZE];
44}; 43};
45 44
@@ -91,23 +90,6 @@ static int wacom_query_device(struct i2c_client *client,
91 return 0; 90 return 0;
92} 91}
93 92
94static int wacom_i2c_fetch_data(struct wacom_i2c *wac_i2c)
95{
96 int retries = 0;
97 int ret;
98
99 do {
100 ret = i2c_master_recv(wac_i2c->client,
101 wac_i2c->data, sizeof(wac_i2c->data));
102 } while (gpio_get_value(wac_i2c->gpio) == 0 &&
103 retries++ < WACOM_RETRY_CNT);
104
105 if (retries >= WACOM_RETRY_CNT)
106 ret = -EIO;
107
108 return ret < 0 ? ret : 0;
109}
110
111static irqreturn_t wacom_i2c_irq(int irq, void *dev_id) 93static irqreturn_t wacom_i2c_irq(int irq, void *dev_id)
112{ 94{
113 struct wacom_i2c *wac_i2c = dev_id; 95 struct wacom_i2c *wac_i2c = dev_id;
@@ -117,8 +99,9 @@ static irqreturn_t wacom_i2c_irq(int irq, void *dev_id)
117 unsigned char tsw, f1, f2, ers; 99 unsigned char tsw, f1, f2, ers;
118 int error; 100 int error;
119 101
120 error = wacom_i2c_fetch_data(wac_i2c); 102 error = i2c_master_recv(wac_i2c->client,
121 if (error) 103 wac_i2c->data, sizeof(wac_i2c->data));
104 if (error < 0)
122 goto out; 105 goto out;
123 106
124 tsw = data[3] & 0x01; 107 tsw = data[3] & 0x01;
@@ -147,12 +130,6 @@ static int wacom_i2c_open(struct input_dev *dev)
147{ 130{
148 struct wacom_i2c *wac_i2c = input_get_drvdata(dev); 131 struct wacom_i2c *wac_i2c = input_get_drvdata(dev);
149 struct i2c_client *client = wac_i2c->client; 132 struct i2c_client *client = wac_i2c->client;
150 int error;
151
152 /* Clear the device buffer */
153 error = wacom_i2c_fetch_data(wac_i2c);
154 if (error)
155 return error;
156 133
157 enable_irq(client->irq); 134 enable_irq(client->irq);
158 135
@@ -173,7 +150,6 @@ static int __devinit wacom_i2c_probe(struct i2c_client *client,
173 struct wacom_i2c *wac_i2c; 150 struct wacom_i2c *wac_i2c;
174 struct input_dev *input; 151 struct input_dev *input;
175 struct wacom_features features; 152 struct wacom_features features;
176 int gpio;
177 int error; 153 int error;
178 154
179 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 155 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
@@ -181,14 +157,6 @@ static int __devinit wacom_i2c_probe(struct i2c_client *client,
181 return -EIO; 157 return -EIO;
182 } 158 }
183 159
184 gpio = irq_to_gpio(client->irq);
185 if (gpio < 0) {
186 error = gpio;
187 dev_err(&client->dev,
188 "irq_to_gpio() failed, error: %d\n", error);
189 return error;
190 }
191
192 error = wacom_query_device(client, &features); 160 error = wacom_query_device(client, &features);
193 if (error) 161 if (error)
194 return error; 162 return error;
@@ -202,7 +170,6 @@ static int __devinit wacom_i2c_probe(struct i2c_client *client,
202 170
203 wac_i2c->client = client; 171 wac_i2c->client = client;
204 wac_i2c->input = input; 172 wac_i2c->input = input;
205 wac_i2c->gpio = gpio;
206 173
207 input->name = "Wacom I2C Digitizer"; 174 input->name = "Wacom I2C Digitizer";
208 input->id.bustype = BUS_I2C; 175 input->id.bustype = BUS_I2C;
@@ -228,7 +195,7 @@ static int __devinit wacom_i2c_probe(struct i2c_client *client,
228 input_set_drvdata(input, wac_i2c); 195 input_set_drvdata(input, wac_i2c);
229 196
230 error = request_threaded_irq(client->irq, NULL, wacom_i2c_irq, 197 error = request_threaded_irq(client->irq, NULL, wacom_i2c_irq,
231 IRQF_TRIGGER_FALLING, 198 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
232 "wacom_i2c", wac_i2c); 199 "wacom_i2c", wac_i2c);
233 if (error) { 200 if (error) {
234 dev_err(&client->dev, 201 dev_err(&client->dev,