struct sandbox_clk_priv {
bool probed;
+ struct clk clk;
ulong rate[SANDBOX_CLK_ID_COUNT];
bool enabled[SANDBOX_CLK_ID_COUNT];
bool requested[SANDBOX_CLK_ID_COUNT];
if (ret) {
debug("%s(): could not get parent clock pointer, id %lu\n",
__func__, clk->id);
- ERR_PTR(ret);
+ return ERR_PTR(ret);
}
}
c = clk_set_default_get_by_id(&clk);
if (IS_ERR(c))
- return PTR_ERR(c);
+ continue;
ret = clk_set_rate(c, rates[index]);
#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);
if (id >= SANDBOX_CLK_ID_COUNT)
return -EINVAL;
+ priv->clk.id = id;
priv->requested[id] = true;
return 0;
}
.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),
SANDBOX_CLK_TEST_ID_SPI));
ut_asserteq(0, sandbox_clk_test_get_rate(dev_test,
SANDBOX_CLK_TEST_ID_I2C));
- ut_asserteq(321, sandbox_clk_test_get_rate(dev_test,
- SANDBOX_CLK_TEST_ID_DEVM1));
+ if (!CONFIG_IS_ENABLED(CLK_AUTO_ID))
+ ut_asserteq(321, sandbox_clk_test_get_rate(dev_test,
+ SANDBOX_CLK_TEST_ID_DEVM1));
ut_asserteq(0, sandbox_clk_test_get_rate(dev_test,
SANDBOX_CLK_TEST_ID_DEVM2));