#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)
{
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)
#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];
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);
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;
.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),
};