Re: [PATCH v4 07/10] Input: wacom_i2c - Add support for reset control
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2021-03-29 20:34:43
Also in:
lkml
Hi Alistair, On Thu, Mar 25, 2021 at 09:52:27PM -0400, Alistair Francis wrote:
quoted hunk ↗ jump to hunk
From: Alistair Francis <redacted> Signed-off-by: Alistair Francis <redacted> --- v4: - Initial commit drivers/input/touchscreen/wacom_i2c.c | 11 +++++++++++ 1 file changed, 11 insertions(+)diff --git a/drivers/input/touchscreen/wacom_i2c.c b/drivers/input/touchscreen/wacom_i2c.c index 84c7ccb737bd..28004b1180c9 100644 --- a/drivers/input/touchscreen/wacom_i2c.c +++ b/drivers/input/touchscreen/wacom_i2c.c@@ -55,6 +55,7 @@ struct wacom_features { struct wacom_i2c { struct i2c_client *client; struct input_dev *input; + struct reset_control *rstc; struct touchscreen_properties props; u8 data[WACOM_QUERY_SIZE]; bool prox;@@ -175,6 +176,8 @@ static int wacom_i2c_open(struct input_dev *dev) struct wacom_i2c *wac_i2c = input_get_drvdata(dev); struct i2c_client *client = wac_i2c->client; + reset_control_reset(wac_i2c->rstc);
Why does this device need to be reset on every open compared to doing it in probe?
quoted hunk ↗ jump to hunk
+ enable_irq(client->irq); return 0;@@ -193,6 +196,7 @@ static int wacom_i2c_probe(struct i2c_client *client, { struct wacom_i2c *wac_i2c; struct input_dev *input; + struct reset_control *rstc; struct wacom_features features = { 0 }; int error;@@ -201,6 +205,12 @@ static int wacom_i2c_probe(struct i2c_client *client, return -EIO; } + rstc = devm_reset_control_get_optional_exclusive(&client->dev, NULL); + if (IS_ERR(rstc)) { + dev_err(&client->dev, "Failed to get reset control before init\n"); + return PTR_ERR(rstc); + }
I think majority users will have this controller reset line connected to a GPIO. I briefly looked into reset controller code and I do not see it supporting this case. How is this device connected on your board?
quoted hunk ↗ jump to hunk
+ error = wacom_query_device(client, &features); if (error) return error;@@ -214,6 +224,7 @@ static int wacom_i2c_probe(struct i2c_client *client, wac_i2c->client = client; wac_i2c->input = input; + wac_i2c->rstc = rstc; input->name = "Wacom I2C Digitizer"; input->id.bustype = BUS_I2C;-- 2.31.0
Thanks. -- Dmitry