Skip to content

Commit b65e179

Browse files
ishikawa-yjrtbebarino
authored andcommitted
clk: visconti: Add VIIF clocks
Add the control sequence of register bits to handle the clocks and the resets of Video Input Interface. Signed-off-by: Yuji Ishikawa <yuji2.ishikawa@toshiba.co.jp> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
1 parent beeff79 commit b65e179

1 file changed

Lines changed: 73 additions & 2 deletions

File tree

drivers/clk/visconti/clkc-tmpv770x.c

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
#include "reset.h"
1919

2020
/* Must be equal to the last clock/reset ID increased by one */
21-
#define CLKS_NR (TMPV770X_CLK_BUSLCK + 1)
22-
#define RESETS_NR (TMPV770X_RESET_SBUSCLK + 1)
21+
#define CLKS_NR (TMPV770X_CLK_VIIFBS1_PROC + 1)
22+
#define RESETS_NR (TMPV770X_RESET_VIIFBS1_L1ISP + 1)
2323

2424
static DEFINE_SPINLOCK(tmpv770x_clk_lock);
2525
static DEFINE_SPINLOCK(tmpv770x_rst_lock);
@@ -32,6 +32,10 @@ static const struct clk_parent_data pietherplls_parent_data[] = {
3232
{ .fw_name = "pietherpll", .name = "pietherpll", },
3333
};
3434

35+
static const struct clk_parent_data pidnnplls_parent_data[] = {
36+
{ .fw_name = "pidnnpll", .name = "pidnnpll", },
37+
};
38+
3539
static const struct visconti_fixed_clk fixed_clk_tables[] = {
3640
/* PLL1 */
3741
/* PICMPT0/1, PITSC, PIUWDT, PISWDT, PISBUS, PIPMU, PIGPMU, PITMU */
@@ -68,6 +72,41 @@ static const struct visconti_clk_gate_table pietherpll_clk_gate_tables[] = {
6872
TMPV770X_RESET_PIETHER_125M, },
6973
};
7074

75+
static const struct visconti_clk_gate_table pidnnpll_clk_gate_tables[] = {
76+
{ TMPV770X_CLK_VIIFBS0, "viifbs0",
77+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
78+
0, 0x58, 0x158, 1, 1,
79+
NO_RESET, },
80+
{ TMPV770X_CLK_VIIFBS0_PROC, "viifbs0_proc",
81+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
82+
0, 0x58, 0x158, 18, 1,
83+
NO_RESET, },
84+
{ TMPV770X_CLK_VIIFBS0_L1ISP, "viifbs0_l1isp",
85+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
86+
0, 0x58, 0x158, 17, 1,
87+
NO_RESET, },
88+
{ TMPV770X_CLK_VIIFBS0_L2ISP, "viifbs0_l2isp",
89+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
90+
0, 0x58, 0x158, 16, 1,
91+
NO_RESET, },
92+
{ TMPV770X_CLK_VIIFBS1, "viifbs1",
93+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
94+
0, 0x58, 0x158, 5, 1,
95+
NO_RESET, },
96+
{ TMPV770X_CLK_VIIFBS1_PROC, "viifbs1_proc",
97+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
98+
0, 0x58, 0x158, 22, 1,
99+
NO_RESET, },
100+
{ TMPV770X_CLK_VIIFBS1_L1ISP, "viifbs1_l1isp",
101+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
102+
0, 0x58, 0x158, 21, 1,
103+
NO_RESET, },
104+
{ TMPV770X_CLK_VIIFBS1_L2ISP, "viifbs1_l2isp",
105+
pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data),
106+
0, 0x58, 0x158, 20, 1,
107+
NO_RESET, },
108+
};
109+
71110
static const struct visconti_clk_gate_table clk_gate_tables[] = {
72111
{ TMPV770X_CLK_HOX, "hox",
73112
clks_parent_data, ARRAY_SIZE(clks_parent_data),
@@ -189,6 +228,22 @@ static const struct visconti_clk_gate_table clk_gate_tables[] = {
189228
clks_parent_data, ARRAY_SIZE(clks_parent_data),
190229
0, 0x14, 0x114, 0, 4,
191230
TMPV770X_RESET_SBUSCLK, },
231+
{ TMPV770X_CLK_VIIF0_CFGCLK, "csi2rx0cfg",
232+
clks_parent_data, ARRAY_SIZE(clks_parent_data),
233+
0, 0x58, 0x158, 0, 24,
234+
NO_RESET, },
235+
{ TMPV770X_CLK_VIIF0_APBCLK, "csi2rx0apb",
236+
clks_parent_data, ARRAY_SIZE(clks_parent_data),
237+
0, 0x58, 0x158, 2, 4,
238+
NO_RESET, },
239+
{ TMPV770X_CLK_VIIF1_CFGCLK, "csi2rx1cfg",
240+
clks_parent_data, ARRAY_SIZE(clks_parent_data),
241+
0, 0x58, 0x158, 4, 24,
242+
NO_RESET, },
243+
{ TMPV770X_CLK_VIIF1_APBCLK, "csi2rx1apb",
244+
clks_parent_data, ARRAY_SIZE(clks_parent_data),
245+
0, 0x58, 0x158, 6, 4,
246+
NO_RESET, },
192247
};
193248

194249
static const struct visconti_reset_data clk_reset_data[] = {
@@ -224,6 +279,14 @@ static const struct visconti_reset_data clk_reset_data[] = {
224279
[TMPV770X_RESET_PIPCMIF] = { 0x464, 0x564, 0, },
225280
[TMPV770X_RESET_PICKMON] = { 0x410, 0x510, 8, },
226281
[TMPV770X_RESET_SBUSCLK] = { 0x414, 0x514, 0, },
282+
[TMPV770X_RESET_VIIFBS0] = { 0x458, 0x558, 0, },
283+
[TMPV770X_RESET_VIIFBS0_APB] = { 0x458, 0x558, 1, },
284+
[TMPV770X_RESET_VIIFBS0_L2ISP] = { 0x458, 0x558, 16, },
285+
[TMPV770X_RESET_VIIFBS0_L1ISP] = { 0x458, 0x558, 17, },
286+
[TMPV770X_RESET_VIIFBS1] = { 0x458, 0x558, 4, },
287+
[TMPV770X_RESET_VIIFBS1_APB] = { 0x458, 0x558, 5, },
288+
[TMPV770X_RESET_VIIFBS1_L2ISP] = { 0x458, 0x558, 20, },
289+
[TMPV770X_RESET_VIIFBS1_L1ISP] = { 0x458, 0x558, 21, },
227290
};
228291

229292
static int visconti_clk_probe(struct platform_device *pdev)
@@ -276,6 +339,14 @@ static int visconti_clk_probe(struct platform_device *pdev)
276339
return ret;
277340
}
278341

342+
ret = visconti_clk_register_gates(ctx, pidnnpll_clk_gate_tables,
343+
ARRAY_SIZE(pidnnpll_clk_gate_tables),
344+
clk_reset_data, &tmpv770x_clk_lock);
345+
if (ret) {
346+
dev_err(dev, "Failed to register pidnnpll clock gate: %d\n", ret);
347+
return ret;
348+
}
349+
279350
return of_clk_add_hw_provider(np, of_clk_hw_onecell_get, &ctx->clk_data);
280351
}
281352

0 commit comments

Comments
 (0)