reset: sunxi: Reuse the platform data from the clock driver
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>
diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
index f5c66dd..e484d1f 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
@@ -12,17 +12,10 @@
#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 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_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 @@
.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),
};