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
2424static DEFINE_SPINLOCK (tmpv770x_clk_lock );
2525static 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+
3539static 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+
71110static 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
194249static 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
229292static 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