Blame view
drivers/clk/clk_sandbox.c
2.05 KB
6a1c7cef1 dm: test: Add tes... |
1 2 3 4 5 6 7 |
/* * (C) Copyright 2015 Google, Inc * * SPDX-License-Identifier: GPL-2.0 */ #include <common.h> |
135aa9500 clk: convert API ... |
8 |
#include <clk-uclass.h> |
6a1c7cef1 dm: test: Add tes... |
9 10 |
#include <dm.h> #include <errno.h> |
135aa9500 clk: convert API ... |
11 |
#include <asm/clk.h> |
6a1c7cef1 dm: test: Add tes... |
12 13 |
struct sandbox_clk_priv { |
135aa9500 clk: convert API ... |
14 15 |
ulong rate[SANDBOX_CLK_ID_COUNT]; bool enabled[SANDBOX_CLK_ID_COUNT]; |
6a1c7cef1 dm: test: Add tes... |
16 |
}; |
135aa9500 clk: convert API ... |
17 |
static ulong sandbox_clk_get_rate(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
18 |
{ |
135aa9500 clk: convert API ... |
19 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
df8b0a037 clk: sandbox: don... |
20 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
21 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
22 |
|
135aa9500 clk: convert API ... |
23 |
return priv->rate[clk->id]; |
6a1c7cef1 dm: test: Add tes... |
24 |
} |
135aa9500 clk: convert API ... |
25 |
static ulong sandbox_clk_set_rate(struct clk *clk, ulong rate) |
6a1c7cef1 dm: test: Add tes... |
26 |
{ |
135aa9500 clk: convert API ... |
27 28 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); ulong old_rate; |
df8b0a037 clk: sandbox: don... |
29 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
30 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
31 32 33 |
if (!rate) return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
34 |
|
135aa9500 clk: convert API ... |
35 36 |
old_rate = priv->rate[clk->id]; priv->rate[clk->id] = rate; |
6a1c7cef1 dm: test: Add tes... |
37 |
|
135aa9500 clk: convert API ... |
38 |
return old_rate; |
6a1c7cef1 dm: test: Add tes... |
39 |
} |
135aa9500 clk: convert API ... |
40 |
static int sandbox_clk_enable(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
41 |
{ |
135aa9500 clk: convert API ... |
42 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
6a1c7cef1 dm: test: Add tes... |
43 |
|
df8b0a037 clk: sandbox: don... |
44 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
6a1c7cef1 dm: test: Add tes... |
45 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
46 |
|
135aa9500 clk: convert API ... |
47 48 49 |
priv->enabled[clk->id] = true; return 0; |
6a1c7cef1 dm: test: Add tes... |
50 |
} |
135aa9500 clk: convert API ... |
51 |
static int sandbox_clk_disable(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
52 |
{ |
135aa9500 clk: convert API ... |
53 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
df8b0a037 clk: sandbox: don... |
54 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
55 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
56 |
|
135aa9500 clk: convert API ... |
57 |
priv->enabled[clk->id] = false; |
6a1c7cef1 dm: test: Add tes... |
58 59 60 61 62 63 64 |
return 0; } static struct clk_ops sandbox_clk_ops = { .get_rate = sandbox_clk_get_rate, .set_rate = sandbox_clk_set_rate, |
135aa9500 clk: convert API ... |
65 66 |
.enable = sandbox_clk_enable, .disable = sandbox_clk_disable, |
6a1c7cef1 dm: test: Add tes... |
67 68 69 70 71 72 73 74 75 76 77 78 79 |
}; static const struct udevice_id sandbox_clk_ids[] = { { .compatible = "sandbox,clk" }, { } }; U_BOOT_DRIVER(clk_sandbox) = { .name = "clk_sandbox", .id = UCLASS_CLK, .of_match = sandbox_clk_ids, .ops = &sandbox_clk_ops, .priv_auto_alloc_size = sizeof(struct sandbox_clk_priv), |
6a1c7cef1 dm: test: Add tes... |
80 |
}; |
135aa9500 clk: convert API ... |
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
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]; } |