summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/sunxi/clk_sunxi.c7
-rw-r--r--drivers/reset/reset-sunxi.c43
-rw-r--r--include/clk/sunxi.h8
3 files changed, 9 insertions, 49 deletions
diff --git a/drivers/clk/sunxi/clk_sunxi.c b/drivers/clk/sunxi/clk_sunxi.c
index 5b208c9b34b..ec02a2d0370 100644
--- a/drivers/clk/sunxi/clk_sunxi.c
+++ b/drivers/clk/sunxi/clk_sunxi.c
@@ -12,9 +12,12 @@
#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)
diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
index f5c66dde43a..e484d1fff44 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 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),
};
diff --git a/include/clk/sunxi.h b/include/clk/sunxi.h
index 640b5cfc331..c298195c51e 100644
--- a/include/clk/sunxi.h
+++ b/include/clk/sunxi.h
@@ -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 */