All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] Input: st1232 - Support power supply regulators
@ 2022-06-03  5:09 Mike Looijmans
  0 siblings, 0 replies; only message in thread
From: Mike Looijmans @ 2022-06-03  5:09 UTC (permalink / raw)
  To: linux-input
  Cc: linux-kernel, dmitry.torokhov, john, geert+renesas, Mike Looijmans

Add support for the VDD and IOVDD power supply inputs. This allows the
chip to share its supplies with other components (e.g. panel) and manage
them.

Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
---
v2: Split devicetree and code parts

 drivers/input/touchscreen/st1232.c | 54 +++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 8 deletions(-)

diff --git a/drivers/input/touchscreen/st1232.c b/drivers/input/touchscreen/st1232.c
index e38ba3e4f183..d9c9f6f1f11a 100644
--- a/drivers/input/touchscreen/st1232.c
+++ b/drivers/input/touchscreen/st1232.c
@@ -44,6 +44,11 @@
 #define REG_XY_COORDINATES	0x12
 #define ST_TS_MAX_FINGERS	10
 
+enum st1232_regulators {
+	ST1232_REGULATOR_VDD,
+	ST1232_REGULATOR_IOVDD,
+};
+
 struct st_chip_info {
 	bool	have_z;
 	u16	max_area;
@@ -56,6 +61,7 @@ struct st1232_ts_data {
 	struct touchscreen_properties prop;
 	struct dev_pm_qos_request low_latency_req;
 	struct gpio_desc *reset_gpio;
+	struct regulator_bulk_data regulators[2];
 	const struct st_chip_info *chip_info;
 	int read_buf_len;
 	u8 *read_buf;
@@ -197,17 +203,36 @@ static irqreturn_t st1232_ts_irq_handler(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
-static void st1232_ts_power(struct st1232_ts_data *ts, bool poweron)
+static int st1232_ts_power_on(struct st1232_ts_data *ts)
+{
+	int err;
+
+	err = regulator_bulk_enable(ARRAY_SIZE(ts->regulators), ts->regulators);
+	if (err)
+		return err;
+
+	usleep_range(5000, 6000);
+
+	if (ts->reset_gpio)
+		gpiod_set_value_cansleep(ts->reset_gpio, 0);
+
+	return 0;
+}
+
+static void st1232_ts_power_off(struct st1232_ts_data *ts)
 {
 	if (ts->reset_gpio)
-		gpiod_set_value_cansleep(ts->reset_gpio, !poweron);
+		gpiod_set_value_cansleep(ts->reset_gpio, 1);
+	usleep_range(100, 150);
+	regulator_bulk_disable(ARRAY_SIZE(ts->regulators), ts->regulators);
 }
 
-static void st1232_ts_power_off(void *data)
+static void st1232_ts_power_off_action(void *data)
 {
-	st1232_ts_power(data, false);
+	st1232_ts_power_off(data);
 }
 
+
 static const struct st_chip_info st1232_chip_info = {
 	.have_z		= true,
 	.max_area	= 0xff,
@@ -266,6 +291,14 @@ static int st1232_ts_probe(struct i2c_client *client,
 	ts->client = client;
 	ts->input_dev = input_dev;
 
+	ts->regulators[ST1232_REGULATOR_VDD].supply = "vdd";
+	ts->regulators[ST1232_REGULATOR_IOVDD].supply = "iovdd";
+	error = devm_regulator_bulk_get(&client->dev,
+					ARRAY_SIZE(ts->regulators),
+					ts->regulators);
+	if (error)
+		return error;
+
 	ts->reset_gpio = devm_gpiod_get_optional(&client->dev, NULL,
 						 GPIOD_OUT_HIGH);
 	if (IS_ERR(ts->reset_gpio)) {
@@ -275,9 +308,14 @@ static int st1232_ts_probe(struct i2c_client *client,
 		return error;
 	}
 
-	st1232_ts_power(ts, true);
+	error = st1232_ts_power_on(ts);
+	if (error) {
+		dev_err(&client->dev, "Failed to power on: %d\n", error);
+		return error;
+	}
 
-	error = devm_add_action_or_reset(&client->dev, st1232_ts_power_off, ts);
+	error = devm_add_action_or_reset(&client->dev,
+					 st1232_ts_power_off_action, ts);
 	if (error) {
 		dev_err(&client->dev,
 			"Failed to install power off action: %d\n", error);
@@ -348,7 +386,7 @@ static int __maybe_unused st1232_ts_suspend(struct device *dev)
 	disable_irq(client->irq);
 
 	if (!device_may_wakeup(&client->dev))
-		st1232_ts_power(ts, false);
+		st1232_ts_power_off(ts);
 
 	return 0;
 }
@@ -359,7 +397,7 @@ static int __maybe_unused st1232_ts_resume(struct device *dev)
 	struct st1232_ts_data *ts = i2c_get_clientdata(client);
 
 	if (!device_may_wakeup(&client->dev))
-		st1232_ts_power(ts, true);
+		st1232_ts_power_on(ts);
 
 	enable_irq(client->irq);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-06-03  5:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-03  5:09 [PATCH v2 1/2] Input: st1232 - Support power supply regulators Mike Looijmans

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.