]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/clk/clk_sandbox.c
clk: convert API to match reset/mailbox style
[people/ms/u-boot.git] / drivers / clk / clk_sandbox.c
index 367130f8b76b12a662d41086932e165bfb185390..c6bd7c64e2916c84f14404f50dd20ab56372d622 100644 (file)
@@ -5,61 +5,63 @@
  */
 
 #include <common.h>
-#include <clk.h>
+#include <clk-uclass.h>
 #include <dm.h>
 #include <errno.h>
-#include <asm/test.h>
+#include <asm/clk.h>
 
 struct sandbox_clk_priv {
-       ulong rate;
-       ulong periph_rate[PERIPH_ID_COUNT];
+       ulong rate[SANDBOX_CLK_ID_COUNT];
+       bool enabled[SANDBOX_CLK_ID_COUNT];
 };
 
-static ulong sandbox_clk_get_rate(struct udevice *dev)
+static ulong sandbox_clk_get_rate(struct clk *clk)
 {
-       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+       struct sandbox_clk_priv *priv = dev_get_priv(clk->dev);
+
+       if (clk->id < 0 || clk->id >= SANDBOX_CLK_ID_COUNT)
+               return -EINVAL;
 
-       return priv->rate;
+       return priv->rate[clk->id];
 }
 
-static ulong sandbox_clk_set_rate(struct udevice *dev, ulong rate)
+static ulong sandbox_clk_set_rate(struct clk *clk, ulong rate)
 {
-       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+       struct sandbox_clk_priv *priv = dev_get_priv(clk->dev);
+       ulong old_rate;
+
+       if (clk->id < 0 || clk->id >= SANDBOX_CLK_ID_COUNT)
+               return -EINVAL;
 
        if (!rate)
                return -EINVAL;
-       priv->rate = rate;
-       return 0;
-}
 
-static ulong sandbox_get_periph_rate(struct udevice *dev, int periph)
-{
-       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+       old_rate = priv->rate[clk->id];
+       priv->rate[clk->id] = rate;
 
-       if (periph < PERIPH_ID_FIRST || periph >= PERIPH_ID_COUNT)
-               return -EINVAL;
-       return priv->periph_rate[periph];
+       return old_rate;
 }
 
-static ulong sandbox_set_periph_rate(struct udevice *dev, int periph,
-                                    ulong rate)
+static int sandbox_clk_enable(struct clk *clk)
 {
-       struct sandbox_clk_priv *priv = dev_get_priv(dev);
-       ulong old_rate;
+       struct sandbox_clk_priv *priv = dev_get_priv(clk->dev);
 
-       if (periph < PERIPH_ID_FIRST || periph >= PERIPH_ID_COUNT)
+       if (clk->id < 0 || clk->id >= SANDBOX_CLK_ID_COUNT)
                return -EINVAL;
-       old_rate = priv->periph_rate[periph];
-       priv->periph_rate[periph] = rate;
 
-       return old_rate;
+       priv->enabled[clk->id] = true;
+
+       return 0;
 }
 
-static int sandbox_clk_probe(struct udevice *dev)
+static int sandbox_clk_disable(struct clk *clk)
 {
-       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+       struct sandbox_clk_priv *priv = dev_get_priv(clk->dev);
+
+       if (clk->id < 0 || clk->id >= SANDBOX_CLK_ID_COUNT)
+               return -EINVAL;
 
-       priv->rate = SANDBOX_CLK_RATE;
+       priv->enabled[clk->id] = false;
 
        return 0;
 }
@@ -67,8 +69,8 @@ static int sandbox_clk_probe(struct udevice *dev)
 static struct clk_ops sandbox_clk_ops = {
        .get_rate       = sandbox_clk_get_rate,
        .set_rate       = sandbox_clk_set_rate,
-       .get_periph_rate = sandbox_get_periph_rate,
-       .set_periph_rate = sandbox_set_periph_rate,
+       .enable         = sandbox_clk_enable,
+       .disable        = sandbox_clk_disable,
 };
 
 static const struct udevice_id sandbox_clk_ids[] = {
@@ -82,5 +84,24 @@ U_BOOT_DRIVER(clk_sandbox) = {
        .of_match       = sandbox_clk_ids,
        .ops            = &sandbox_clk_ops,
        .priv_auto_alloc_size = sizeof(struct sandbox_clk_priv),
-       .probe          = sandbox_clk_probe,
 };
+
+ulong sandbox_clk_query_rate(struct udevice *dev, int id)
+{
+       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+
+       if (id < 0 || id >= SANDBOX_CLK_ID_COUNT)
+               return -EINVAL;
+
+       return priv->rate[id];
+}
+
+int sandbox_clk_query_enable(struct udevice *dev, int id)
+{
+       struct sandbox_clk_priv *priv = dev_get_priv(dev);
+
+       if (id < 0 || id >= SANDBOX_CLK_ID_COUNT)
+               return -EINVAL;
+
+       return priv->enabled[id];
+}