Thread (15 messages) 15 messages, 3 authors, 2021-04-27

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help