diff mbox

[U-Boot,v3,42/72] dm: pmic: Convert uclass to livetree

Message ID 20170519021002.1098-43-sjg@chromium.org
State Accepted
Commit 7a869e6cd15e012c7b5cde9b8bd5ea7691546a08
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass May 19, 2017, 2:09 a.m. UTC
Update the pmic uclass and all pmics to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3: None
Changes in v2: None

 drivers/power/pmic/act8846.c     |  8 +++-----
 drivers/power/pmic/lp873x.c      | 12 +++++-------
 drivers/power/pmic/max77686.c    |  8 +++-----
 drivers/power/pmic/palmas.c      | 16 +++++++---------
 drivers/power/pmic/pfuze100.c    |  8 +++-----
 drivers/power/pmic/pmic-uclass.c | 22 ++++++++++------------
 drivers/power/pmic/rk8xx.c       |  8 +++-----
 drivers/power/pmic/s5m8767.c     |  7 +++----
 drivers/power/pmic/sandbox.c     |  2 +-
 drivers/power/pmic/tps65090.c    |  8 +++-----
 include/power/pmic.h             |  2 +-
 11 files changed, 42 insertions(+), 59 deletions(-)

Comments

Simon Glass May 25, 2017, 12:06 a.m. UTC | #1
Update the pmic uclass and all pmics to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3: None
Changes in v2: None

 drivers/power/pmic/act8846.c     |  8 +++-----
 drivers/power/pmic/lp873x.c      | 12 +++++-------
 drivers/power/pmic/max77686.c    |  8 +++-----
 drivers/power/pmic/palmas.c      | 16 +++++++---------
 drivers/power/pmic/pfuze100.c    |  8 +++-----
 drivers/power/pmic/pmic-uclass.c | 22 ++++++++++------------
 drivers/power/pmic/rk8xx.c       |  8 +++-----
 drivers/power/pmic/s5m8767.c     |  7 +++----
 drivers/power/pmic/sandbox.c     |  2 +-
 drivers/power/pmic/tps65090.c    |  8 +++-----
 include/power/pmic.h             |  2 +-
 11 files changed, 42 insertions(+), 59 deletions(-)

Applied to u-boot-dm
diff mbox

Patch

diff --git a/drivers/power/pmic/act8846.c b/drivers/power/pmic/act8846.c
index 15da12edea..a6b0940956 100644
--- a/drivers/power/pmic/act8846.c
+++ b/drivers/power/pmic/act8846.c
@@ -48,13 +48,11 @@  static int act8846_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int act8846_bind(struct udevice *dev)
 {
-	const void *blob = gd->fdt_blob;
-	int regulators_node;
+	ofnode regulators_node;
 	int children;
 
-	regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-					     "regulators");
-	if (regulators_node <= 0) {
+	regulators_node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 		      dev->name);
 		return -ENXIO;
diff --git a/drivers/power/pmic/lp873x.c b/drivers/power/pmic/lp873x.c
index d8f30df371..f505468313 100644
--- a/drivers/power/pmic/lp873x.c
+++ b/drivers/power/pmic/lp873x.c
@@ -46,15 +46,13 @@  static int lp873x_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int lp873x_bind(struct udevice *dev)
 {
-	int regulators_node;
-	const void *blob = gd->fdt_blob;
+	ofnode regulators_node;
 	int children;
-	int node = dev_of_offset(dev);
 
-	regulators_node = fdt_subnode_offset(blob, node, "regulators");
-
-	if (regulators_node <= 0) {
-		printf("%s: %s reg subnode not found!", __func__, dev->name);
+	regulators_node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(regulators_node)) {
+		debug("%s: %s regulators subnode not found!", __func__,
+		      dev->name);
 		return -ENXIO;
 	}
 
diff --git a/drivers/power/pmic/max77686.c b/drivers/power/pmic/max77686.c
index 8295fab3f0..ceca9f96a7 100644
--- a/drivers/power/pmic/max77686.c
+++ b/drivers/power/pmic/max77686.c
@@ -50,13 +50,11 @@  static int max77686_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int max77686_bind(struct udevice *dev)
 {
-	int regulators_node;
-	const void *blob = gd->fdt_blob;
+	ofnode regulators_node;
 	int children;
 
-	regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-					     "voltage-regulators");
-	if (regulators_node <= 0) {
+	regulators_node = dev_read_subnode(dev, "voltage-regulators");
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 							     dev->name);
 		return -ENXIO;
diff --git a/drivers/power/pmic/palmas.c b/drivers/power/pmic/palmas.c
index f5a23073c4..804c0d13a0 100644
--- a/drivers/power/pmic/palmas.c
+++ b/drivers/power/pmic/palmas.c
@@ -46,17 +46,15 @@  static int palmas_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int palmas_bind(struct udevice *dev)
 {
-	int pmic_node = -1, regulators_node;
-	const void *blob = gd->fdt_blob;
+	ofnode pmic_node = ofnode_null(), regulators_node;
+	ofnode subnode;
 	int children;
-	int node = dev_of_offset(dev);
-	int subnode, len;
 
-	fdt_for_each_subnode(subnode, blob, node) {
+	dev_for_each_subnode(subnode, dev) {
 		const char *name;
 		char *temp;
 
-		name = fdt_get_name(blob, subnode, &len);
+		name = ofnode_get_name(subnode);
 		temp = strstr(name, "pmic");
 		if (temp) {
 			pmic_node = subnode;
@@ -64,14 +62,14 @@  static int palmas_bind(struct udevice *dev)
 		}
 	}
 
-	if (pmic_node <= 0) {
+	if (!ofnode_valid(pmic_node)) {
 		debug("%s: %s pmic subnode not found!", __func__, dev->name);
 		return -ENXIO;
 	}
 
-	regulators_node = fdt_subnode_offset(blob, pmic_node, "regulators");
+	regulators_node = ofnode_find_subnode(pmic_node, "regulators");
 
-	if (regulators_node <= 0) {
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s reg subnode not found!", __func__, dev->name);
 		return -ENXIO;
 	}
diff --git a/drivers/power/pmic/pfuze100.c b/drivers/power/pmic/pfuze100.c
index 90a43f2fe5..5f361c7696 100644
--- a/drivers/power/pmic/pfuze100.c
+++ b/drivers/power/pmic/pfuze100.c
@@ -52,13 +52,11 @@  static int pfuze100_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int pfuze100_bind(struct udevice *dev)
 {
+	ofnode regulators_node;
 	int children;
-	int regulators_node;
-	const void *blob = gd->fdt_blob;
 
-	regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-					     "regulators");
-	if (regulators_node <= 0) {
+	regulators_node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 		      dev->name);
 		return -ENXIO;
diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c
index 0f7fa517f9..953bbe5026 100644
--- a/drivers/power/pmic/pmic-uclass.c
+++ b/drivers/power/pmic/pmic-uclass.c
@@ -19,29 +19,27 @@ 
 DECLARE_GLOBAL_DATA_PTR;
 
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
-int pmic_bind_children(struct udevice *pmic, int offset,
+int pmic_bind_children(struct udevice *pmic, ofnode parent,
 		       const struct pmic_child_info *child_info)
 {
 	const struct pmic_child_info *info;
-	const void *blob = gd->fdt_blob;
 	struct driver *drv;
 	struct udevice *child;
 	const char *node_name;
 	int bind_count = 0;
-	int node;
+	ofnode node;
 	int prefix_len;
 	int ret;
 
 	debug("%s for '%s' at node offset: %d\n", __func__, pmic->name,
 	      dev_of_offset(pmic));
 
-	for (node = fdt_first_subnode(blob, offset);
-	     node > 0;
-	     node = fdt_next_subnode(blob, node)) {
-		node_name = fdt_get_name(blob, node, NULL);
+	for (node = ofnode_first_subnode(parent);
+	     ofnode_valid(node);
+	     node = ofnode_next_subnode(node)) {
+		node_name = ofnode_get_name(node);
 
-		debug("* Found child node: '%s' at offset:%d\n", node_name,
-								 node);
+		debug("* Found child node: '%s'\n", node_name);
 
 		child = NULL;
 		for (info = child_info; info->prefix && info->driver; info++) {
@@ -60,8 +58,8 @@  int pmic_bind_children(struct udevice *pmic, int offset,
 
 			debug("  - found child driver: '%s'\n", drv->name);
 
-			ret = device_bind(pmic, drv, node_name, NULL,
-					  node, &child);
+			ret = device_bind_with_driver_data(pmic, drv, node_name,
+							   0, node, &child);
 			if (ret) {
 				debug("  - child binding error: %d\n", ret);
 				continue;
@@ -82,7 +80,7 @@  int pmic_bind_children(struct udevice *pmic, int offset,
 			debug("  - compatible prefix not found\n");
 	}
 
-	debug("Bound: %d childs for PMIC: '%s'\n", bind_count, pmic->name);
+	debug("Bound: %d children for PMIC: '%s'\n", bind_count, pmic->name);
 	return bind_count;
 }
 #endif
diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c
index 394e2ff9db..09b9b54c62 100644
--- a/drivers/power/pmic/rk8xx.c
+++ b/drivers/power/pmic/rk8xx.c
@@ -57,13 +57,11 @@  static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
 static int rk8xx_bind(struct udevice *dev)
 {
-	const void *blob = gd->fdt_blob;
-	int regulators_node;
+	ofnode regulators_node;
 	int children;
 
-	regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-					     "regulators");
-	if (regulators_node <= 0) {
+	regulators_node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 		      dev->name);
 		return -ENXIO;
diff --git a/drivers/power/pmic/s5m8767.c b/drivers/power/pmic/s5m8767.c
index 25d673b998..f8ae5ea2db 100644
--- a/drivers/power/pmic/s5m8767.c
+++ b/drivers/power/pmic/s5m8767.c
@@ -54,12 +54,11 @@  int s5m8767_enable_32khz_cp(struct udevice *dev)
 
 static int s5m8767_bind(struct udevice *dev)
 {
-	int node;
-	const void *blob = gd->fdt_blob;
 	int children;
+	ofnode node;
 
-	node = fdt_subnode_offset(blob, dev_of_offset(dev), "regulators");
-	if (node <= 0) {
+	node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 		      dev->name);
 		return -ENXIO;
diff --git a/drivers/power/pmic/sandbox.c b/drivers/power/pmic/sandbox.c
index b4e412eb3e..6763303c66 100644
--- a/drivers/power/pmic/sandbox.c
+++ b/drivers/power/pmic/sandbox.c
@@ -51,7 +51,7 @@  static int sandbox_pmic_read(struct udevice *dev, uint reg,
 
 static int sandbox_pmic_bind(struct udevice *dev)
 {
-	if (!pmic_bind_children(dev, dev_of_offset(dev), pmic_children_info))
+	if (!pmic_bind_children(dev, dev_ofnode(dev), pmic_children_info))
 		error("%s:%d PMIC: %s - no child found!", __func__, __LINE__,
 							  dev->name);
 
diff --git a/drivers/power/pmic/tps65090.c b/drivers/power/pmic/tps65090.c
index b30a7f08e9..4565e3b54c 100644
--- a/drivers/power/pmic/tps65090.c
+++ b/drivers/power/pmic/tps65090.c
@@ -52,13 +52,11 @@  static int tps65090_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
 
 static int tps65090_bind(struct udevice *dev)
 {
-	int regulators_node;
-	const void *blob = gd->fdt_blob;
+	ofnode regulators_node;
 	int children;
 
-	regulators_node = fdt_subnode_offset(blob, dev_of_offset(dev),
-					     "regulators");
-	if (regulators_node <= 0) {
+	regulators_node = dev_read_subnode(dev, "regulators");
+	if (!ofnode_valid(regulators_node)) {
 		debug("%s: %s regulators subnode not found!", __func__,
 		      dev->name);
 		return -ENXIO;
diff --git a/include/power/pmic.h b/include/power/pmic.h
index e0b2e129dd..4b34316427 100644
--- a/include/power/pmic.h
+++ b/include/power/pmic.h
@@ -226,7 +226,7 @@  struct pmic_child_info {
  *     buck2 { ... };
  * };
  */
-int pmic_bind_children(struct udevice *pmic, int offset,
+int pmic_bind_children(struct udevice *pmic, ofnode parent,
 		       const struct pmic_child_info *child_info);
 
 /**