diff options
Diffstat (limited to 'drivers/input/touchscreen/eeti_ts.c')
| -rw-r--r-- | drivers/input/touchscreen/eeti_ts.c | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/input/touchscreen/eeti_ts.c b/drivers/input/touchscreen/eeti_ts.c index 503c7096ed3..908407efc67 100644 --- a/drivers/input/touchscreen/eeti_ts.c +++ b/drivers/input/touchscreen/eeti_ts.c @@ -48,7 +48,7 @@ struct eeti_ts_priv {  	struct input_dev *input;  	struct work_struct work;  	struct mutex mutex; -	int irq, irq_active_high; +	int irq_gpio, irq, irq_active_high;  };  #define EETI_TS_BITDEPTH	(11) @@ -62,7 +62,7 @@ struct eeti_ts_priv {  static inline int eeti_ts_irq_active(struct eeti_ts_priv *priv)  { -	return gpio_get_value(irq_to_gpio(priv->irq)) == priv->irq_active_high; +	return gpio_get_value(priv->irq_gpio) == priv->irq_active_high;  }  static void eeti_ts_read(struct work_struct *work) @@ -157,7 +157,7 @@ static void eeti_ts_close(struct input_dev *dev)  static int __devinit eeti_ts_probe(struct i2c_client *client,  				   const struct i2c_device_id *idp)  { -	struct eeti_ts_platform_data *pdata; +	struct eeti_ts_platform_data *pdata = client->dev.platform_data;  	struct eeti_ts_priv *priv;  	struct input_dev *input;  	unsigned int irq_flags; @@ -199,9 +199,12 @@ static int __devinit eeti_ts_probe(struct i2c_client *client,  	priv->client = client;  	priv->input = input; -	priv->irq = client->irq; +	priv->irq_gpio = pdata->irq_gpio; +	priv->irq = gpio_to_irq(pdata->irq_gpio); -	pdata = client->dev.platform_data; +	err = gpio_request_one(pdata->irq_gpio, GPIOF_IN, client->name); +	if (err < 0) +		goto err1;  	if (pdata)  		priv->irq_active_high = pdata->irq_active_high; @@ -215,13 +218,13 @@ static int __devinit eeti_ts_probe(struct i2c_client *client,  	err = input_register_device(input);  	if (err) -		goto err1; +		goto err2;  	err = request_irq(priv->irq, eeti_ts_isr, irq_flags,  			  client->name, priv);  	if (err) {  		dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); -		goto err2; +		goto err3;  	}  	/* @@ -233,9 +236,11 @@ static int __devinit eeti_ts_probe(struct i2c_client *client,  	device_init_wakeup(&client->dev, 0);  	return 0; -err2: +err3:  	input_unregister_device(input);  	input = NULL; /* so we dont try to free it below */ +err2: +	gpio_free(pdata->irq_gpio);  err1:  	input_free_device(input);  	kfree(priv);  |