diff options
-rw-r--r-- | arch/arm/mach-pxa/raumfeld.c | 2 | ||||
-rw-r--r-- | drivers/input/touchscreen/eeti_ts.c | 21 | ||||
-rw-r--r-- | include/linux/input/eeti_ts.h | 1 |
3 files changed, 15 insertions, 9 deletions
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c index 5905ed130e94..d89d87ae144c 100644 --- a/arch/arm/mach-pxa/raumfeld.c +++ b/arch/arm/mach-pxa/raumfeld.c | |||
@@ -953,12 +953,12 @@ static struct i2c_board_info raumfeld_connector_i2c_board_info __initdata = { | |||
953 | 953 | ||
954 | static struct eeti_ts_platform_data eeti_ts_pdata = { | 954 | static struct eeti_ts_platform_data eeti_ts_pdata = { |
955 | .irq_active_high = 1, | 955 | .irq_active_high = 1, |
956 | .irq_gpio = GPIO_TOUCH_IRQ, | ||
956 | }; | 957 | }; |
957 | 958 | ||
958 | static struct i2c_board_info raumfeld_controller_i2c_board_info __initdata = { | 959 | static struct i2c_board_info raumfeld_controller_i2c_board_info __initdata = { |
959 | .type = "eeti_ts", | 960 | .type = "eeti_ts", |
960 | .addr = 0x0a, | 961 | .addr = 0x0a, |
961 | .irq = PXA_GPIO_TO_IRQ(GPIO_TOUCH_IRQ), | ||
962 | .platform_data = &eeti_ts_pdata, | 962 | .platform_data = &eeti_ts_pdata, |
963 | }; | 963 | }; |
964 | 964 | ||
diff --git a/drivers/input/touchscreen/eeti_ts.c b/drivers/input/touchscreen/eeti_ts.c index 503c7096ed36..908407efc672 100644 --- a/drivers/input/touchscreen/eeti_ts.c +++ b/drivers/input/touchscreen/eeti_ts.c | |||
@@ -48,7 +48,7 @@ struct eeti_ts_priv { | |||
48 | struct input_dev *input; | 48 | struct input_dev *input; |
49 | struct work_struct work; | 49 | struct work_struct work; |
50 | struct mutex mutex; | 50 | struct mutex mutex; |
51 | int irq, irq_active_high; | 51 | int irq_gpio, irq, irq_active_high; |
52 | }; | 52 | }; |
53 | 53 | ||
54 | #define EETI_TS_BITDEPTH (11) | 54 | #define EETI_TS_BITDEPTH (11) |
@@ -62,7 +62,7 @@ struct eeti_ts_priv { | |||
62 | 62 | ||
63 | static inline int eeti_ts_irq_active(struct eeti_ts_priv *priv) | 63 | static inline int eeti_ts_irq_active(struct eeti_ts_priv *priv) |
64 | { | 64 | { |
65 | return gpio_get_value(irq_to_gpio(priv->irq)) == priv->irq_active_high; | 65 | return gpio_get_value(priv->irq_gpio) == priv->irq_active_high; |
66 | } | 66 | } |
67 | 67 | ||
68 | static void eeti_ts_read(struct work_struct *work) | 68 | static void eeti_ts_read(struct work_struct *work) |
@@ -157,7 +157,7 @@ static void eeti_ts_close(struct input_dev *dev) | |||
157 | static int __devinit eeti_ts_probe(struct i2c_client *client, | 157 | static int __devinit eeti_ts_probe(struct i2c_client *client, |
158 | const struct i2c_device_id *idp) | 158 | const struct i2c_device_id *idp) |
159 | { | 159 | { |
160 | struct eeti_ts_platform_data *pdata; | 160 | struct eeti_ts_platform_data *pdata = client->dev.platform_data; |
161 | struct eeti_ts_priv *priv; | 161 | struct eeti_ts_priv *priv; |
162 | struct input_dev *input; | 162 | struct input_dev *input; |
163 | unsigned int irq_flags; | 163 | unsigned int irq_flags; |
@@ -199,9 +199,12 @@ static int __devinit eeti_ts_probe(struct i2c_client *client, | |||
199 | 199 | ||
200 | priv->client = client; | 200 | priv->client = client; |
201 | priv->input = input; | 201 | priv->input = input; |
202 | priv->irq = client->irq; | 202 | priv->irq_gpio = pdata->irq_gpio; |
203 | priv->irq = gpio_to_irq(pdata->irq_gpio); | ||
203 | 204 | ||
204 | pdata = client->dev.platform_data; | 205 | err = gpio_request_one(pdata->irq_gpio, GPIOF_IN, client->name); |
206 | if (err < 0) | ||
207 | goto err1; | ||
205 | 208 | ||
206 | if (pdata) | 209 | if (pdata) |
207 | priv->irq_active_high = pdata->irq_active_high; | 210 | priv->irq_active_high = pdata->irq_active_high; |
@@ -215,13 +218,13 @@ static int __devinit eeti_ts_probe(struct i2c_client *client, | |||
215 | 218 | ||
216 | err = input_register_device(input); | 219 | err = input_register_device(input); |
217 | if (err) | 220 | if (err) |
218 | goto err1; | 221 | goto err2; |
219 | 222 | ||
220 | err = request_irq(priv->irq, eeti_ts_isr, irq_flags, | 223 | err = request_irq(priv->irq, eeti_ts_isr, irq_flags, |
221 | client->name, priv); | 224 | client->name, priv); |
222 | if (err) { | 225 | if (err) { |
223 | dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); | 226 | dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); |
224 | goto err2; | 227 | goto err3; |
225 | } | 228 | } |
226 | 229 | ||
227 | /* | 230 | /* |
@@ -233,9 +236,11 @@ static int __devinit eeti_ts_probe(struct i2c_client *client, | |||
233 | device_init_wakeup(&client->dev, 0); | 236 | device_init_wakeup(&client->dev, 0); |
234 | return 0; | 237 | return 0; |
235 | 238 | ||
236 | err2: | 239 | err3: |
237 | input_unregister_device(input); | 240 | input_unregister_device(input); |
238 | input = NULL; /* so we dont try to free it below */ | 241 | input = NULL; /* so we dont try to free it below */ |
242 | err2: | ||
243 | gpio_free(pdata->irq_gpio); | ||
239 | err1: | 244 | err1: |
240 | input_free_device(input); | 245 | input_free_device(input); |
241 | kfree(priv); | 246 | kfree(priv); |
diff --git a/include/linux/input/eeti_ts.h b/include/linux/input/eeti_ts.h index f875b316249d..16625d799b6f 100644 --- a/include/linux/input/eeti_ts.h +++ b/include/linux/input/eeti_ts.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define LINUX_INPUT_EETI_TS_H | 2 | #define LINUX_INPUT_EETI_TS_H |
3 | 3 | ||
4 | struct eeti_ts_platform_data { | 4 | struct eeti_ts_platform_data { |
5 | int irq_gpio; | ||
5 | unsigned int irq_active_high; | 6 | unsigned int irq_active_high; |
6 | }; | 7 | }; |
7 | 8 | ||