]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
reset: sunxi: Reuse the platform data from the clock driver
authorSamuel Holland <samuel@sholland.org>
Mon, 9 May 2022 05:29:37 +0000 (00:29 -0500)
committerAndre Przywara <andre.przywara@arm.com>
Mon, 18 Jul 2022 08:37:50 +0000 (09:37 +0100)
The clock and reset drivers use the exact same platform data. Simplify
them by sharing the object. This is safe because the parent device
(the clock device) always gets its driver model callbacks run first.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Acked-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
drivers/clk/sunxi/clk_sunxi.c
drivers/reset/reset-sunxi.c
include/clk/sunxi.h

index 5b208c9b34b17619163aff3d491f17c3547b5f1e..ec02a2d0370dbf33591ada61c2f2daf7ba914aea 100644 (file)
 #include <reset.h>
 #include <asm/io.h>
 #include <clk/sunxi.h>
+#include <dm/device-internal.h>
 #include <linux/bitops.h>
 #include <linux/log2.h>
 
+extern U_BOOT_DRIVER(sunxi_reset);
+
 static const struct ccu_clk_gate *plat_to_gate(struct ccu_plat *plat,
                                               unsigned long id)
 {
@@ -69,7 +72,9 @@ struct clk_ops sunxi_clk_ops = {
 
 static int sunxi_clk_bind(struct udevice *dev)
 {
-       return sunxi_reset_bind(dev);
+       /* Reuse the platform data for the reset driver. */
+       return device_bind(dev, DM_DRIVER_REF(sunxi_reset), "reset",
+                          dev_get_plat(dev), dev_ofnode(dev), NULL);
 }
 
 static int sunxi_clk_probe(struct udevice *dev)
index f5c66dde43a22eee8097900b063764145b7511a1..e484d1fff449ff22063eaf0b9ee53e33e963ebe3 100644 (file)
 #include <reset-uclass.h>
 #include <asm/io.h>
 #include <clk/sunxi.h>
-#include <dm/device-internal.h>
-#include <dm/lists.h>
 #include <linux/bitops.h>
 #include <linux/log2.h>
 
-struct sunxi_reset_plat {
-       void *base;
-       const struct ccu_desc *desc;
-};
-
-static const struct ccu_reset *plat_to_reset(struct sunxi_reset_plat *plat,
+static const struct ccu_reset *plat_to_reset(struct ccu_plat *plat,
                                             unsigned long id)
 {
        return  &plat->desc->resets[id];
@@ -30,7 +23,7 @@ static const struct ccu_reset *plat_to_reset(struct sunxi_reset_plat *plat,
 
 static int sunxi_reset_request(struct reset_ctl *reset_ctl)
 {
-       struct sunxi_reset_plat *plat = dev_get_plat(reset_ctl->dev);
+       struct ccu_plat *plat = dev_get_plat(reset_ctl->dev);
 
        debug("%s: (RST#%ld)\n", __func__, reset_ctl->id);
 
@@ -42,7 +35,7 @@ static int sunxi_reset_request(struct reset_ctl *reset_ctl)
 
 static int sunxi_set_reset(struct reset_ctl *reset_ctl, bool on)
 {
-       struct sunxi_reset_plat *plat = dev_get_plat(reset_ctl->dev);
+       struct ccu_plat *plat = dev_get_plat(reset_ctl->dev);
        const struct ccu_reset *reset = plat_to_reset(plat, reset_ctl->id);
        u32 reg;
 
@@ -81,38 +74,8 @@ struct reset_ops sunxi_reset_ops = {
        .rst_deassert = sunxi_reset_deassert,
 };
 
-static int sunxi_reset_of_to_plat(struct udevice *dev)
-{
-       struct sunxi_reset_plat *plat = dev_get_plat(dev);
-
-       plat->base = dev_read_addr_ptr(dev);
-
-       return 0;
-}
-
-int sunxi_reset_bind(struct udevice *dev)
-{
-       struct udevice *rst_dev;
-       struct sunxi_reset_plat *plat;
-       int ret;
-
-       ret = device_bind_driver_to_node(dev, "sunxi_reset", "reset",
-                                        dev_ofnode(dev), &rst_dev);
-       if (ret) {
-               debug("failed to bind sunxi_reset driver (ret=%d)\n", ret);
-               return ret;
-       }
-       plat = malloc(sizeof(struct sunxi_reset_plat));
-       plat->desc = (const struct ccu_desc *)dev_get_driver_data(dev);
-       dev_set_plat(rst_dev, plat);
-
-       return 0;
-}
-
 U_BOOT_DRIVER(sunxi_reset) = {
        .name           = "sunxi_reset",
        .id             = UCLASS_RESET,
        .ops            = &sunxi_reset_ops,
-       .of_to_plat     = sunxi_reset_of_to_plat,
-       .plat_auto      = sizeof(struct sunxi_reset_plat),
 };
index 640b5cfc331253c705b7be3bd5a1a9e1e37a6df2..c298195c51e6ed07257c7b008a8ae714d82787d2 100644 (file)
@@ -87,12 +87,4 @@ struct ccu_plat {
 
 extern struct clk_ops sunxi_clk_ops;
 
-/**
- * sunxi_reset_bind() - reset binding
- *
- * @dev:       reset device
- * Return: 0 success, or error value
- */
-int sunxi_reset_bind(struct udevice *dev);
-
 #endif /* _CLK_SUNXI_H */