Blame view
drivers/clk/clk_sandbox.c
3.12 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
6a1c7cef1 dm: test: Add tes... |
2 3 |
/* * (C) Copyright 2015 Google, Inc |
6a1c7cef1 dm: test: Add tes... |
4 5 6 |
*/ #include <common.h> |
135aa9500 clk: convert API ... |
7 |
#include <clk-uclass.h> |
6a1c7cef1 dm: test: Add tes... |
8 9 |
#include <dm.h> #include <errno.h> |
336d4615f dm: core: Create ... |
10 |
#include <malloc.h> |
135aa9500 clk: convert API ... |
11 |
#include <asm/clk.h> |
6a1c7cef1 dm: test: Add tes... |
12 13 |
struct sandbox_clk_priv { |
9a52be129 test: clk: test c... |
14 |
bool probed; |
135aa9500 clk: convert API ... |
15 16 |
ulong rate[SANDBOX_CLK_ID_COUNT]; bool enabled[SANDBOX_CLK_ID_COUNT]; |
dd2e0ce2a test: clk: Update... |
17 |
bool requested[SANDBOX_CLK_ID_COUNT]; |
6a1c7cef1 dm: test: Add tes... |
18 |
}; |
135aa9500 clk: convert API ... |
19 |
static ulong sandbox_clk_get_rate(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
20 |
{ |
135aa9500 clk: convert API ... |
21 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
9a52be129 test: clk: test c... |
22 23 |
if (!priv->probed) return -ENODEV; |
df8b0a037 clk: sandbox: don... |
24 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
25 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
26 |
|
135aa9500 clk: convert API ... |
27 |
return priv->rate[clk->id]; |
6a1c7cef1 dm: test: Add tes... |
28 |
} |
135aa9500 clk: convert API ... |
29 |
static ulong sandbox_clk_set_rate(struct clk *clk, ulong rate) |
6a1c7cef1 dm: test: Add tes... |
30 |
{ |
135aa9500 clk: convert API ... |
31 32 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); ulong old_rate; |
9a52be129 test: clk: test c... |
33 34 |
if (!priv->probed) return -ENODEV; |
df8b0a037 clk: sandbox: don... |
35 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
36 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
37 38 39 |
if (!rate) return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
40 |
|
135aa9500 clk: convert API ... |
41 42 |
old_rate = priv->rate[clk->id]; priv->rate[clk->id] = rate; |
6a1c7cef1 dm: test: Add tes... |
43 |
|
135aa9500 clk: convert API ... |
44 |
return old_rate; |
6a1c7cef1 dm: test: Add tes... |
45 |
} |
135aa9500 clk: convert API ... |
46 |
static int sandbox_clk_enable(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
47 |
{ |
135aa9500 clk: convert API ... |
48 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
6a1c7cef1 dm: test: Add tes... |
49 |
|
9a52be129 test: clk: test c... |
50 51 |
if (!priv->probed) return -ENODEV; |
df8b0a037 clk: sandbox: don... |
52 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
6a1c7cef1 dm: test: Add tes... |
53 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
54 |
|
135aa9500 clk: convert API ... |
55 56 57 |
priv->enabled[clk->id] = true; return 0; |
6a1c7cef1 dm: test: Add tes... |
58 |
} |
135aa9500 clk: convert API ... |
59 |
static int sandbox_clk_disable(struct clk *clk) |
6a1c7cef1 dm: test: Add tes... |
60 |
{ |
135aa9500 clk: convert API ... |
61 |
struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); |
9a52be129 test: clk: test c... |
62 63 |
if (!priv->probed) return -ENODEV; |
df8b0a037 clk: sandbox: don... |
64 |
if (clk->id >= SANDBOX_CLK_ID_COUNT) |
135aa9500 clk: convert API ... |
65 |
return -EINVAL; |
6a1c7cef1 dm: test: Add tes... |
66 |
|
135aa9500 clk: convert API ... |
67 |
priv->enabled[clk->id] = false; |
6a1c7cef1 dm: test: Add tes... |
68 69 70 |
return 0; } |
dd2e0ce2a test: clk: Update... |
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
static int sandbox_clk_request(struct clk *clk) { struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); if (clk->id >= SANDBOX_CLK_ID_COUNT) return -EINVAL; priv->requested[clk->id] = true; return 0; } static int sandbox_clk_free(struct clk *clk) { struct sandbox_clk_priv *priv = dev_get_priv(clk->dev); if (clk->id >= SANDBOX_CLK_ID_COUNT) return -EINVAL; priv->requested[clk->id] = false; return 0; } |
6a1c7cef1 dm: test: Add tes... |
92 93 94 |
static struct clk_ops sandbox_clk_ops = { .get_rate = sandbox_clk_get_rate, .set_rate = sandbox_clk_set_rate, |
135aa9500 clk: convert API ... |
95 96 |
.enable = sandbox_clk_enable, .disable = sandbox_clk_disable, |
dd2e0ce2a test: clk: Update... |
97 |
.request = sandbox_clk_request, |
fb8c0d595 clk: Rename free(... |
98 |
.rfree = sandbox_clk_free, |
6a1c7cef1 dm: test: Add tes... |
99 |
}; |
9a52be129 test: clk: test c... |
100 101 102 103 104 105 106 |
static int sandbox_clk_probe(struct udevice *dev) { struct sandbox_clk_priv *priv = dev_get_priv(dev); priv->probed = true; return 0; } |
6a1c7cef1 dm: test: Add tes... |
107 108 109 110 111 112 113 114 115 116 |
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, |
9a52be129 test: clk: test c... |
117 |
.probe = sandbox_clk_probe, |
6a1c7cef1 dm: test: Add tes... |
118 |
.priv_auto_alloc_size = sizeof(struct sandbox_clk_priv), |
6a1c7cef1 dm: test: Add tes... |
119 |
}; |
135aa9500 clk: convert API ... |
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
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]; } |
dd2e0ce2a test: clk: Update... |
140 141 142 143 144 145 146 147 148 |
int sandbox_clk_query_requested(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->requested[id]; } |