diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/clk/clk-uclass.c | 10 | ||||
| -rw-r--r-- | drivers/clk/clk_sandbox.c | 17 |
2 files changed, 22 insertions, 5 deletions
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index ae787b88510..4a438181ba9 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -199,7 +199,7 @@ static struct clk *clk_set_default_get_by_id(struct clk *clk) if (ret) { debug("%s(): could not get parent clock pointer, id %lu\n", __func__, clk->id); - ERR_PTR(ret); + return ERR_PTR(ret); } } @@ -338,7 +338,7 @@ static int clk_set_default_rates(struct udevice *dev, continue; } - return ret; + goto fail; } /* This is clk provider device trying to program itself @@ -354,7 +354,7 @@ static int clk_set_default_rates(struct udevice *dev, c = clk_set_default_get_by_id(&clk); if (IS_ERR(c)) - return PTR_ERR(c); + continue; ret = clk_set_rate(c, rates[index]); @@ -662,7 +662,7 @@ int clk_enable(struct clk *clk) struct clk *clkp = NULL; int ret; - debug("%s(clk=%p name=%s)\n", __func__, clk, clk->dev->name); + debug("%s(clk=%p name=%s)\n", __func__, clk, clk ? clk->dev->name : "NULL"); if (!clk_valid(clk)) return 0; ops = clk_dev_ops(clk->dev); @@ -723,7 +723,7 @@ int clk_disable(struct clk *clk) struct clk *clkp = NULL; int ret; - debug("%s(clk=%p name=%s)\n", __func__, clk, clk->dev->name); + debug("%s(clk=%p name=%s)\n", __func__, clk, clk ? clk->dev->name : "NULL"); if (!clk_valid(clk)) return 0; ops = clk_dev_ops(clk->dev); diff --git a/drivers/clk/clk_sandbox.c b/drivers/clk/clk_sandbox.c index c8c5a88c52d..cd92a6a29f5 100644 --- a/drivers/clk/clk_sandbox.c +++ b/drivers/clk/clk_sandbox.c @@ -8,8 +8,23 @@ #include <errno.h> #include <malloc.h> #include <asm/clk.h> +#include <dm/device-internal.h> #include <linux/clk-provider.h> +static int sandbox_clk_of_to_plat(struct udevice *dev) +{ + struct clk *clk; + struct sandbox_clk_priv *priv = dev_get_priv(dev); + + clk = &priv->clk; + + /* FIXME: This is not allowed */ + dev_set_uclass_priv(dev, clk); + + clk->dev = dev; + return 0; +} + static ulong sandbox_clk_get_rate(struct clk *clk) { struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); @@ -102,6 +117,7 @@ static int sandbox_clk_request(struct clk *clk) if (id >= SANDBOX_CLK_ID_COUNT) return -EINVAL; + priv->clk.id = id; priv->requested[id] = true; return 0; } @@ -132,6 +148,7 @@ U_BOOT_DRIVER(sandbox_clk) = { .name = "sandbox_clk", .id = UCLASS_CLK, .of_match = sandbox_clk_ids, + .of_to_plat = sandbox_clk_of_to_plat, .ops = &sandbox_clk_ops, .probe = sandbox_clk_probe, .priv_auto = sizeof(struct sandbox_clk_priv), |
