summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/clk/clk-uclass.c10
-rw-r--r--drivers/clk/clk_sandbox.c17
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),