]> git.sur5r.net Git - u-boot/blobdiff - drivers/power/pmic/pmic-uclass.c
imx6: icorem6: Add ENET support
[u-boot] / drivers / power / pmic / pmic-uclass.c
index dbab3e3ff9fced25d7d8fe36a5962ed29d3d2eed..7211026aecbea883c7ad42a0262d9d9f8cb56306 100644 (file)
@@ -9,6 +9,7 @@
 #include <fdtdec.h>
 #include <errno.h>
 #include <dm.h>
+#include <vsprintf.h>
 #include <dm/lists.h>
 #include <dm/device-internal.h>
 #include <dm/uclass-internal.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static ulong str_get_num(const char *ptr, const char *maxptr)
-{
-       if (!ptr || !maxptr)
-               return 0;
-
-       while (!isdigit(*ptr) && ptr++ < maxptr);
-
-       return simple_strtoul(ptr, NULL, 0);
-}
-
+#if CONFIG_IS_ENABLED(PMIC_CHILDREN)
 int pmic_bind_children(struct udevice *pmic, int offset,
                       const struct pmic_child_info *child_info)
 {
@@ -35,7 +27,6 @@ int pmic_bind_children(struct udevice *pmic, int offset,
        struct driver *drv;
        struct udevice *child;
        const char *node_name;
-       int node_name_len;
        int bind_count = 0;
        int node;
        int prefix_len;
@@ -47,19 +38,19 @@ int pmic_bind_children(struct udevice *pmic, int offset,
        for (node = fdt_first_subnode(blob, offset);
             node > 0;
             node = fdt_next_subnode(blob, node)) {
-               node_name = fdt_get_name(blob, node, &node_name_len);
+               node_name = fdt_get_name(blob, node, NULL);
 
                debug("* Found child node: '%s' at offset:%d\n", node_name,
                                                                 node);
 
                child = NULL;
                for (info = child_info; info->prefix && info->driver; info++) {
+                       debug("  - compatible prefix: '%s'\n", info->prefix);
+
                        prefix_len = strlen(info->prefix);
                        if (strncmp(info->prefix, node_name, prefix_len))
                                continue;
 
-                       debug("  - compatible prefix: '%s'\n", info->prefix);
-
                        drv = lists_driver_lookup_name(info->driver);
                        if (!drv) {
                                debug("  - driver: '%s' not found!\n",
@@ -78,10 +69,7 @@ int pmic_bind_children(struct udevice *pmic, int offset,
 
                        debug("  - bound child device: '%s'\n", child->name);
 
-                       child->driver_data = str_get_num(node_name +
-                                                        prefix_len,
-                                                        node_name +
-                                                        node_name_len);
+                       child->driver_data = trailing_strtol(node_name);
 
                        debug("  - set 'child->driver_data': %lu\n",
                              child->driver_data);
@@ -97,6 +85,7 @@ int pmic_bind_children(struct udevice *pmic, int offset,
        debug("Bound: %d childs for PMIC: '%s'\n", bind_count, pmic->name);
        return bind_count;
 }
+#endif
 
 int pmic_get(const char *name, struct udevice **devp)
 {
@@ -144,8 +133,9 @@ int pmic_reg_read(struct udevice *dev, uint reg)
        u8 byte;
        int ret;
 
+       debug("%s: reg=%x", __func__, reg);
        ret = pmic_read(dev, reg, &byte, 1);
-       debug("%s: reg=%x, value=%x\n", __func__, reg, byte);
+       debug(", value=%x, ret=%d\n", byte, ret);
 
        return ret ? ret : byte;
 }
@@ -153,9 +143,13 @@ int pmic_reg_read(struct udevice *dev, uint reg)
 int pmic_reg_write(struct udevice *dev, uint reg, uint value)
 {
        u8 byte = value;
+       int ret;
+
+       debug("%s: reg=%x, value=%x", __func__, reg, value);
+       ret = pmic_write(dev, reg, &byte, 1);
+       debug(", ret=%d\n", ret);
 
-       debug("%s: reg=%x, value=%x\n", __func__, reg, value);
-       return pmic_read(dev, reg, &byte, 1);
+       return ret;
 }
 
 int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set)