Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Yuji Ishikawa and committed by
Stephen Boyd
b65e179b beeff790

+73 -2
+73 -2
drivers/clk/visconti/clkc-tmpv770x.c
··· 18 18 #include "reset.h" 19 19 20 20 /* 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) 23 23 24 24 static DEFINE_SPINLOCK(tmpv770x_clk_lock); 25 25 static DEFINE_SPINLOCK(tmpv770x_rst_lock); ··· 30 30 31 31 static const struct clk_parent_data pietherplls_parent_data[] = { 32 32 { .fw_name = "pietherpll", .name = "pietherpll", }, 33 + }; 34 + 35 + static const struct clk_parent_data pidnnplls_parent_data[] = { 36 + { .fw_name = "pidnnpll", .name = "pidnnpll", }, 33 37 }; 34 38 35 39 static const struct visconti_fixed_clk fixed_clk_tables[] = { ··· 70 66 pietherplls_parent_data, ARRAY_SIZE(pietherplls_parent_data), 71 67 CLK_SET_RATE_PARENT, 0x34, 0x134, 7, 4, 72 68 TMPV770X_RESET_PIETHER_125M, }, 69 + }; 70 + 71 + static const struct visconti_clk_gate_table pidnnpll_clk_gate_tables[] = { 72 + { TMPV770X_CLK_VIIFBS0, "viifbs0", 73 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 74 + 0, 0x58, 0x158, 1, 1, 75 + NO_RESET, }, 76 + { TMPV770X_CLK_VIIFBS0_PROC, "viifbs0_proc", 77 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 78 + 0, 0x58, 0x158, 18, 1, 79 + NO_RESET, }, 80 + { TMPV770X_CLK_VIIFBS0_L1ISP, "viifbs0_l1isp", 81 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 82 + 0, 0x58, 0x158, 17, 1, 83 + NO_RESET, }, 84 + { TMPV770X_CLK_VIIFBS0_L2ISP, "viifbs0_l2isp", 85 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 86 + 0, 0x58, 0x158, 16, 1, 87 + NO_RESET, }, 88 + { TMPV770X_CLK_VIIFBS1, "viifbs1", 89 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 90 + 0, 0x58, 0x158, 5, 1, 91 + NO_RESET, }, 92 + { TMPV770X_CLK_VIIFBS1_PROC, "viifbs1_proc", 93 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 94 + 0, 0x58, 0x158, 22, 1, 95 + NO_RESET, }, 96 + { TMPV770X_CLK_VIIFBS1_L1ISP, "viifbs1_l1isp", 97 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 98 + 0, 0x58, 0x158, 21, 1, 99 + NO_RESET, }, 100 + { TMPV770X_CLK_VIIFBS1_L2ISP, "viifbs1_l2isp", 101 + pidnnplls_parent_data, ARRAY_SIZE(pidnnplls_parent_data), 102 + 0, 0x58, 0x158, 20, 1, 103 + NO_RESET, }, 73 104 }; 74 105 75 106 static const struct visconti_clk_gate_table clk_gate_tables[] = { ··· 228 189 clks_parent_data, ARRAY_SIZE(clks_parent_data), 229 190 0, 0x14, 0x114, 0, 4, 230 191 TMPV770X_RESET_SBUSCLK, }, 192 + { TMPV770X_CLK_VIIF0_CFGCLK, "csi2rx0cfg", 193 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 194 + 0, 0x58, 0x158, 0, 24, 195 + NO_RESET, }, 196 + { TMPV770X_CLK_VIIF0_APBCLK, "csi2rx0apb", 197 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 198 + 0, 0x58, 0x158, 2, 4, 199 + NO_RESET, }, 200 + { TMPV770X_CLK_VIIF1_CFGCLK, "csi2rx1cfg", 201 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 202 + 0, 0x58, 0x158, 4, 24, 203 + NO_RESET, }, 204 + { TMPV770X_CLK_VIIF1_APBCLK, "csi2rx1apb", 205 + clks_parent_data, ARRAY_SIZE(clks_parent_data), 206 + 0, 0x58, 0x158, 6, 4, 207 + NO_RESET, }, 231 208 }; 232 209 233 210 static const struct visconti_reset_data clk_reset_data[] = { ··· 279 224 [TMPV770X_RESET_PIPCMIF] = { 0x464, 0x564, 0, }, 280 225 [TMPV770X_RESET_PICKMON] = { 0x410, 0x510, 8, }, 281 226 [TMPV770X_RESET_SBUSCLK] = { 0x414, 0x514, 0, }, 227 + [TMPV770X_RESET_VIIFBS0] = { 0x458, 0x558, 0, }, 228 + [TMPV770X_RESET_VIIFBS0_APB] = { 0x458, 0x558, 1, }, 229 + [TMPV770X_RESET_VIIFBS0_L2ISP] = { 0x458, 0x558, 16, }, 230 + [TMPV770X_RESET_VIIFBS0_L1ISP] = { 0x458, 0x558, 17, }, 231 + [TMPV770X_RESET_VIIFBS1] = { 0x458, 0x558, 4, }, 232 + [TMPV770X_RESET_VIIFBS1_APB] = { 0x458, 0x558, 5, }, 233 + [TMPV770X_RESET_VIIFBS1_L2ISP] = { 0x458, 0x558, 20, }, 234 + [TMPV770X_RESET_VIIFBS1_L1ISP] = { 0x458, 0x558, 21, }, 282 235 }; 283 236 284 237 static int visconti_clk_probe(struct platform_device *pdev) ··· 336 273 clk_reset_data, &tmpv770x_clk_lock); 337 274 if (ret) { 338 275 dev_err(dev, "Failed to register pietherpll clock gate: %d\n", ret); 276 + return ret; 277 + } 278 + 279 + ret = visconti_clk_register_gates(ctx, pidnnpll_clk_gate_tables, 280 + ARRAY_SIZE(pidnnpll_clk_gate_tables), 281 + clk_reset_data, &tmpv770x_clk_lock); 282 + if (ret) { 283 + dev_err(dev, "Failed to register pidnnpll clock gate: %d\n", ret); 339 284 return ret; 340 285 } 341 286