diff options
Diffstat (limited to 'drivers/input/touchscreen/egalax_ts.c')
| -rw-r--r-- | drivers/input/touchscreen/egalax_ts.c | 23 | 
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c index c1e3460f119..13fa62fdfb0 100644 --- a/drivers/input/touchscreen/egalax_ts.c +++ b/drivers/input/touchscreen/egalax_ts.c @@ -28,6 +28,7 @@  #include <linux/slab.h>  #include <linux/bitops.h>  #include <linux/input/mt.h> +#include <linux/of_gpio.h>  /*   * Mouse Mode: some panel may configure the controller to mouse mode, @@ -122,9 +123,17 @@ static irqreturn_t egalax_ts_interrupt(int irq, void *dev_id)  /* wake up controller by an falling edge of interrupt gpio.  */  static int egalax_wake_up_device(struct i2c_client *client)  { -	int gpio = irq_to_gpio(client->irq); +	struct device_node *np = client->dev.of_node; +	int gpio;  	int ret; +	if (!np) +		return -ENODEV; + +	gpio = of_get_named_gpio(np, "wakeup-gpios", 0); +	if (!gpio_is_valid(gpio)) +		return -ENODEV; +  	ret = gpio_request(gpio, "egalax_irq");  	if (ret < 0) {  		dev_err(&client->dev, @@ -181,7 +190,11 @@ static int __devinit egalax_ts_probe(struct i2c_client *client,  	ts->input_dev = input_dev;  	/* controller may be in sleep, wake it up. */ -	egalax_wake_up_device(client); +	error = egalax_wake_up_device(client); +	if (error) { +		dev_err(&client->dev, "Failed to wake up the controller\n"); +		goto err_free_dev; +	}  	ret = egalax_firmware_version(client);  	if (ret < 0) { @@ -274,11 +287,17 @@ static int egalax_ts_resume(struct device *dev)  static SIMPLE_DEV_PM_OPS(egalax_ts_pm_ops, egalax_ts_suspend, egalax_ts_resume); +static struct of_device_id egalax_ts_dt_ids[] = { +	{ .compatible = "eeti,egalax_ts" }, +	{ /* sentinel */ } +}; +  static struct i2c_driver egalax_ts_driver = {  	.driver = {  		.name	= "egalax_ts",  		.owner	= THIS_MODULE,  		.pm	= &egalax_ts_pm_ops, +		.of_match_table	= of_match_ptr(egalax_ts_dt_ids),  	},  	.id_table	= egalax_ts_id,  	.probe		= egalax_ts_probe,  |