From 22a2065b9a3fa6ad458e3100b66c4acaa05f2466 Mon Sep 17 00:00:00 2001 From: Dominik Sliwa Date: Thu, 22 Mar 2018 13:08:22 +0100 Subject: input: atmel_mxt_ts: support reset gpio line Signed-off-by: Dominik Sliwa Acked-by: Marcel Ziswiler --- drivers/input/touchscreen/atmel_mxt_ts.c | 23 +++++++++++++++++++++++ include/linux/platform_data/atmel_mxt_ts.h | 1 + 2 files changed, 24 insertions(+) diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index c50620255888..5d00742cf5c8 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -2941,6 +2942,8 @@ static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client) if (!pdata) return ERR_PTR(-ENOMEM); + pdata->gpio_reset = of_get_named_gpio(np, "reset-gpio", 0); + if (of_find_property(np, "linux,gpio-keymap", &proplen)) { pdata->t19_num_keys = proplen / sizeof(u32); @@ -3150,6 +3153,21 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) goto err_free_mem; } + if (pdata->gpio_reset >= 0) { + error = gpio_request(pdata->gpio_reset, "atmel-mxt-ts-reset"); + if (error < 0 ) { + dev_err(&client->dev, "Failure %d requesting reset " + "gpio\n", error); + goto err_free_mem; + } + error = gpio_direction_output(pdata->gpio_reset, 1); + if (error < 0 ) { + dev_err(&client->dev, "Failure %d setting reset gpio" + "direction\n", error); + goto err_free_gpio; + } + } + disable_irq(client->irq); error = mxt_initialize(data); @@ -3170,6 +3188,9 @@ err_free_object: mxt_free_object_table(data); err_free_irq: free_irq(client->irq, data); +err_free_gpio: + if (pdata->gpio_reset >= 0) + gpio_free(pdata->gpio_reset); err_free_mem: kfree(data); return error; @@ -3181,6 +3202,8 @@ static int mxt_remove(struct i2c_client *client) sysfs_remove_group(&client->dev.kobj, &mxt_attr_group); free_irq(data->irq, data); + if (data->pdata->gpio_reset >= 0) + gpio_free(data->pdata->gpio_reset); mxt_free_input_device(data); mxt_free_object_table(data); kfree(data); diff --git a/include/linux/platform_data/atmel_mxt_ts.h b/include/linux/platform_data/atmel_mxt_ts.h index 695035a8d7fb..c59fc18118aa 100644 --- a/include/linux/platform_data/atmel_mxt_ts.h +++ b/include/linux/platform_data/atmel_mxt_ts.h @@ -26,6 +26,7 @@ struct mxt_platform_data { u8 t19_num_keys; const unsigned int *t19_keymap; enum mxt_suspend_mode suspend_mode; + int gpio_reset; }; #endif /* __LINUX_PLATFORM_DATA_ATMEL_MXT_TS_H */ -- cgit v1.2.3