Skip to contentSkip to conversation

dt-bindings: iio: accel: kxcjk1013: Document regulator supplies

PATCH In review devajithvs 3 participants 4 messages Dec 13, 2020 – Dec 15, 2020

Subsystems (2)
lore
Share & tools
lore

devajithvs

author
#0 lore raw

PATCH 1/2 dt-bindings: iio: accel: kxcjk1013: Document regulator supplies

From: Devajith V S <[email protected]>

kxcjk1013 devices have VDD and VDDIO power lines. Need to make sure the regulators are enabled before any communication with kxcjk1013. Document support for vdd/vddio-supply to implement this.

---
 .../devicetree/bindings/iio/accel/kionix,kxcjk1013.yaml        | 3 +++
 1 file changed, 3 insertions(+)
Documentation/devicetree/bindings/iio/accel/kionix,kxcjk1013.yaml +3 -0
index 5667d09df..fbb714431 100644
@@ -20,6 +20,9 @@ properties:
   reg:
     maxItems: 1
 
+  vdd-supply: true
+  vddio-supply: true
+
   mount-matrix:
     description: an optional 3x3 mounting rotation matrix.
 
Signature · 1 line
2.17.1
author
#1 lore raw

PATCH 2/2 iio: accel: kxcjk1013: Add rudimentary regulator support

From: Devajith V S <[email protected]>

kxcjk1013 devices have VDD and VDDIO power lines. Need to make sure the regulators are enabled before any communication with kxcjk1013. This patch introduces vdd/vddio regulators for kxcjk1013.

---
 drivers/iio/accel/kxcjk-1013.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
drivers/iio/accel/kxcjk-1013.c +31 -0
index e92c7e676..67d3d8270 100644
@@ -14,6 +14,7 @@
 #include <linux/acpi.h>
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/buffer.h>
@@ -133,6 +134,7 @@ enum kx_acpi_type {
 };
 
 struct kxcjk1013_data {
+	struct regulator_bulk_data regulators[2];
 	struct i2c_client *client;
 	struct iio_trigger *dready_trig;
 	struct iio_trigger *motion_trig;
@@ -1300,6 +1302,13 @@ static const char *kxcjk1013_match_acpi_device(struct device *dev,
 	return dev_name(dev);
 }
 
+static void kxcjk1013_disable_regulators(void *d)
+{
+	struct kxcjk1013_data *data = d;
+
+	regulator_bulk_disable(ARRAY_SIZE(data->regulators), data->regulators);
+}
+
 static int kxcjk1013_probe(struct i2c_client *client,
 			   const struct i2c_device_id *id)
 {
@@ -1330,6 +1339,28 @@ static int kxcjk1013_probe(struct i2c_client *client,
 			return ret;
 	}
 
+	data->regulators[0].supply = "vdd";
+	data->regulators[1].supply = "vddio";
+	ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(data->regulators),
+				      data->regulators);
+	if (ret)
+		return dev_err_probe(&client->dev, ret, "Failed to get regulators\n");
+
+	ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
+				    data->regulators);
+	if (ret)
+		return ret;
+
+	ret = devm_add_action_or_reset(&client->dev, kxcjk1013_disable_regulators, data);
+	if (ret)
+		return ret;
+
+	/*
+	 * A typical delay of 10ms is required for powering up
+	 * according to the data sheets of supported chips.
+	 */
+	msleep(20);
+
 	if (id) {
 		data->chipset = (enum kx_chipset)(id->driver_data);
 		name = id->name;
Signature · 1 line
2.17.1
maintainer
#2 lore raw

Re: [PATCH 2/2] iio: accel: kxcjk1013: Add rudimentary regulator support

Quoted 8 lines · On Sun, 13 Dec 2020 22:54:36 +0530 devajithvs <[email protected]> wrote:

From: Devajith V S <[email protected]>

kxcjk1013 devices have VDD and VDDIO power lines. Need to make sure the regulators are enabled before any communication with kxcjk1013. This patch introduces vdd/vddio regulators for kxcjk1013.

Looks good to me. Trivial comment on the comment inline that I can fix whilst applying.

I'll let this sit on the list for a little while though in case anyone else spots something I have missed.

Thanks,

Jonathan

Quoted 51 lines
---
 drivers/iio/accel/kxcjk-1013.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)
drivers/iio/accel/kxcjk-1013.c +18 -0
index e92c7e676..67d3d8270 100644
@@ -14,6 +14,7 @@
 #include <linux/acpi.h>
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
+#include <linux/regulator/consumer.h>
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 #include <linux/iio/buffer.h>
@@ -133,6 +134,7 @@ enum kx_acpi_type {
 };
 
 struct kxcjk1013_data {
+	struct regulator_bulk_data regulators[2];
 	struct i2c_client *client;
 	struct iio_trigger *dready_trig;
 	struct iio_trigger *motion_trig;
@@ -1300,6 +1302,13 @@ static const char *kxcjk1013_match_acpi_device(struct device *dev,
 	return dev_name(dev);
 }
 
+static void kxcjk1013_disable_regulators(void *d)
+{
+	struct kxcjk1013_data *data = d;
+
+	regulator_bulk_disable(ARRAY_SIZE(data->regulators), data->regulators);
+}
+
 static int kxcjk1013_probe(struct i2c_client *client,
 			   const struct i2c_device_id *id)
 {
@@ -1330,6 +1339,28 @@ static int kxcjk1013_probe(struct i2c_client *client,
 			return ret;
 	}
 
+	data->regulators[0].supply = "vdd";
+	data->regulators[1].supply = "vddio";
+	ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(data->regulators),
+				      data->regulators);
+	if (ret)
+		return dev_err_probe(&client->dev, ret, "Failed to get regulators\n");
+
+	ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
+				    data->regulators);

drivers/iio/accel/kxcjk-1013.c static int kxcjk1013_probe(struct i2c_client *client, · line 1360

Quoted 10 lines
drivers/iio/accel/kxcjk-1013.c +10 -0
+	if (ret)
+		return ret;
+
+	ret = devm_add_action_or_reset(&client->dev, kxcjk1013_disable_regulators, data);
+	if (ret)
+		return ret;
+
+	/*
+	 * A typical delay of 10ms is required for powering up
+	 * according to the data sheets of supported chips.

Probably want to add something like "so double it to play safe."

Quoted 6 lines
drivers/iio/accel/kxcjk-1013.c +3 -0
+	 */
+	msleep(20);
+
 	if (id) {
 		data->chipset = (enum kx_chipset)(id->driver_data);
 		name = id->name;
maintainer Reviewed-by on v1 1/2
#3 lore raw
In reply to devajithvs
Quoted 7 lines · devajithvs

From: Devajith V S <[email protected]>

kxcjk1013 devices have VDD and VDDIO power lines. Need to make sure the regulators are enabled before any communication with kxcjk1013. Document support for vdd/vddio-supply to implement this.

Quoted 5 lines
---
 .../devicetree/bindings/iio/accel/kionix,kxcjk1013.yaml        | 3 +++
 1 file changed, 3 insertions(+)