misc: imx8: scu: simplify code to make it extendable
authorPeng Fan <peng.fan@nxp.com>
Mon, 2 Sep 2019 10:20:17 +0000 (10:20 +0000)
committerStefano Babic <sbabic@denx.de>
Tue, 5 Nov 2019 09:27:18 +0000 (10:27 +0100)
clk and pinctrl will be get(probed) during each device probe,
we don't need to probe them in scu driver. Only need to bind the sub-nodes
(clk and iomuxc) of MU node with their drivers.

So drop the code to probe the clk/pinctrl, and this patch will make it
easy to add more subnodes.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/misc/imx8/scu.c

index 9ec00457b8b5bf14835817724420aee5047f8a97..a7654a781733385807fed52e20a928961f7c8491 100644 (file)
@@ -26,8 +26,6 @@ struct mu_type {
 
 struct imx8_scu {
        struct mu_type *base;
-       struct udevice *clk;
-       struct udevice *pinclk;
 };
 
 #define MU_CR_GIE_MASK         0xF0000000u
@@ -202,9 +200,6 @@ static int imx8_scu_probe(struct udevice *dev)
 
        gd->arch.scu_dev = dev;
 
-       device_probe(plat->clk);
-       device_probe(plat->pinclk);
-
        return 0;
 }
 
@@ -215,44 +210,17 @@ static int imx8_scu_remove(struct udevice *dev)
 
 static int imx8_scu_bind(struct udevice *dev)
 {
-       struct imx8_scu *plat = dev_get_platdata(dev);
        int ret;
        struct udevice *child;
-       int node;
-       char *clk_compatible, *iomuxc_compatible;
-
-       if (IS_ENABLED(CONFIG_IMX8QXP)) {
-               clk_compatible = "fsl,imx8qxp-clk";
-               iomuxc_compatible = "fsl,imx8qxp-iomuxc";
-       } else if (IS_ENABLED(CONFIG_IMX8QM)) {
-               clk_compatible = "fsl,imx8qm-clk";
-               iomuxc_compatible = "fsl,imx8qm-iomuxc";
-       } else {
-               return -EINVAL;
-       }
+       ofnode node;
 
        debug("%s(dev=%p)\n", __func__, dev);
-
-       node = fdt_node_offset_by_compatible(gd->fdt_blob, -1, clk_compatible);
-       if (node < 0)
-               panic("No clk node found\n");
-
-       ret = lists_bind_fdt(dev, offset_to_ofnode(node), &child, true);
-       if (ret)
-               return ret;
-
-       plat->clk = child;
-
-       node = fdt_node_offset_by_compatible(gd->fdt_blob, -1,
-                                            iomuxc_compatible);
-       if (node < 0)
-               panic("No iomuxc node found\n");
-
-       ret = lists_bind_fdt(dev, offset_to_ofnode(node), &child, true);
-       if (ret)
-               return ret;
-
-       plat->pinclk = child;
+       ofnode_for_each_subnode(node, dev_ofnode(dev)) {
+               ret = lists_bind_fdt(dev, node, &child, true);
+               if (ret)
+                       return ret;
+               debug("bind child dev %s\n", child->name);
+       }
 
        return 0;
 }