24
24
#include <dt-bindings/clock/s5pv210-audss.h>
25
25
26
26
static DEFINE_SPINLOCK (lock );
27
- static struct clk * * clk_table ;
28
27
static void __iomem * reg_base ;
29
- static struct clk_onecell_data clk_data ;
28
+ static struct clk_hw_onecell_data * clk_data ;
30
29
31
30
#define ASS_CLK_SRC 0x0
32
31
#define ASS_CLK_DIV 0x4
@@ -71,6 +70,7 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev)
71
70
const char * mout_audss_p [2 ];
72
71
const char * mout_i2s_p [3 ];
73
72
const char * hclk_p ;
73
+ struct clk_hw * * clk_table ;
74
74
struct clk * hclk , * pll_ref , * pll_in , * cdclk , * sclk_audio ;
75
75
76
76
res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
@@ -80,14 +80,16 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev)
80
80
return PTR_ERR (reg_base );
81
81
}
82
82
83
- clk_table = devm_kzalloc (& pdev -> dev ,
84
- sizeof (struct clk * ) * AUDSS_MAX_CLKS ,
83
+ clk_data = devm_kzalloc (& pdev -> dev ,
84
+ sizeof (* clk_data ) +
85
+ sizeof (* clk_data -> hws ) * AUDSS_MAX_CLKS ,
85
86
GFP_KERNEL );
86
- if (!clk_table )
87
+
88
+ if (!clk_data )
87
89
return - ENOMEM ;
88
90
89
- clk_data . clks = clk_table ;
90
- clk_data . clk_num = AUDSS_MAX_CLKS ;
91
+ clk_data -> num = AUDSS_MAX_CLKS ;
92
+ clk_table = clk_data -> hws ;
91
93
92
94
hclk = devm_clk_get (& pdev -> dev , "hclk" );
93
95
if (IS_ERR (hclk )) {
@@ -116,7 +118,7 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev)
116
118
else
117
119
mout_audss_p [0 ] = "xxti" ;
118
120
mout_audss_p [1 ] = __clk_get_name (pll_in );
119
- clk_table [CLK_MOUT_AUDSS ] = clk_register_mux (NULL , "mout_audss" ,
121
+ clk_table [CLK_MOUT_AUDSS ] = clk_hw_register_mux (NULL , "mout_audss" ,
120
122
mout_audss_p , ARRAY_SIZE (mout_audss_p ),
121
123
CLK_SET_RATE_NO_REPARENT ,
122
124
reg_base + ASS_CLK_SRC , 0 , 1 , 0 , & lock );
@@ -127,53 +129,53 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev)
127
129
else
128
130
mout_i2s_p [1 ] = "iiscdclk0" ;
129
131
mout_i2s_p [2 ] = __clk_get_name (sclk_audio );
130
- clk_table [CLK_MOUT_I2S_A ] = clk_register_mux (NULL , "mout_i2s_audss" ,
132
+ clk_table [CLK_MOUT_I2S_A ] = clk_hw_register_mux (NULL , "mout_i2s_audss" ,
131
133
mout_i2s_p , ARRAY_SIZE (mout_i2s_p ),
132
134
CLK_SET_RATE_NO_REPARENT ,
133
135
reg_base + ASS_CLK_SRC , 2 , 2 , 0 , & lock );
134
136
135
- clk_table [CLK_DOUT_AUD_BUS ] = clk_register_divider (NULL ,
137
+ clk_table [CLK_DOUT_AUD_BUS ] = clk_hw_register_divider (NULL ,
136
138
"dout_aud_bus" , "mout_audss" , 0 ,
137
139
reg_base + ASS_CLK_DIV , 0 , 4 , 0 , & lock );
138
- clk_table [CLK_DOUT_I2S_A ] = clk_register_divider (NULL , "dout_i2s_audss" ,
139
- "mout_i2s_audss " , 0 , reg_base + ASS_CLK_DIV ,
140
- 4 , 4 , 0 , & lock );
140
+ clk_table [CLK_DOUT_I2S_A ] = clk_hw_register_divider (NULL ,
141
+ "dout_i2s_audss " , "mout_i2s_audss" , 0 ,
142
+ reg_base + ASS_CLK_DIV , 4 , 4 , 0 , & lock );
141
143
142
- clk_table [CLK_I2S ] = clk_register_gate (NULL , "i2s_audss" ,
144
+ clk_table [CLK_I2S ] = clk_hw_register_gate (NULL , "i2s_audss" ,
143
145
"dout_i2s_audss" , CLK_SET_RATE_PARENT ,
144
146
reg_base + ASS_CLK_GATE , 6 , 0 , & lock );
145
147
146
148
hclk_p = __clk_get_name (hclk );
147
149
148
- clk_table [CLK_HCLK_I2S ] = clk_register_gate (NULL , "hclk_i2s_audss" ,
150
+ clk_table [CLK_HCLK_I2S ] = clk_hw_register_gate (NULL , "hclk_i2s_audss" ,
149
151
hclk_p , CLK_IGNORE_UNUSED ,
150
152
reg_base + ASS_CLK_GATE , 5 , 0 , & lock );
151
- clk_table [CLK_HCLK_UART ] = clk_register_gate (NULL , "hclk_uart_audss" ,
153
+ clk_table [CLK_HCLK_UART ] = clk_hw_register_gate (NULL , "hclk_uart_audss" ,
152
154
hclk_p , CLK_IGNORE_UNUSED ,
153
155
reg_base + ASS_CLK_GATE , 4 , 0 , & lock );
154
- clk_table [CLK_HCLK_HWA ] = clk_register_gate (NULL , "hclk_hwa_audss" ,
156
+ clk_table [CLK_HCLK_HWA ] = clk_hw_register_gate (NULL , "hclk_hwa_audss" ,
155
157
hclk_p , CLK_IGNORE_UNUSED ,
156
158
reg_base + ASS_CLK_GATE , 3 , 0 , & lock );
157
- clk_table [CLK_HCLK_DMA ] = clk_register_gate (NULL , "hclk_dma_audss" ,
159
+ clk_table [CLK_HCLK_DMA ] = clk_hw_register_gate (NULL , "hclk_dma_audss" ,
158
160
hclk_p , CLK_IGNORE_UNUSED ,
159
161
reg_base + ASS_CLK_GATE , 2 , 0 , & lock );
160
- clk_table [CLK_HCLK_BUF ] = clk_register_gate (NULL , "hclk_buf_audss" ,
162
+ clk_table [CLK_HCLK_BUF ] = clk_hw_register_gate (NULL , "hclk_buf_audss" ,
161
163
hclk_p , CLK_IGNORE_UNUSED ,
162
164
reg_base + ASS_CLK_GATE , 1 , 0 , & lock );
163
- clk_table [CLK_HCLK_RP ] = clk_register_gate (NULL , "hclk_rp_audss" ,
165
+ clk_table [CLK_HCLK_RP ] = clk_hw_register_gate (NULL , "hclk_rp_audss" ,
164
166
hclk_p , CLK_IGNORE_UNUSED ,
165
167
reg_base + ASS_CLK_GATE , 0 , 0 , & lock );
166
168
167
- for (i = 0 ; i < clk_data . clk_num ; i ++ ) {
169
+ for (i = 0 ; i < clk_data -> num ; i ++ ) {
168
170
if (IS_ERR (clk_table [i ])) {
169
171
dev_err (& pdev -> dev , "failed to register clock %d\n" , i );
170
172
ret = PTR_ERR (clk_table [i ]);
171
173
goto unregister ;
172
174
}
173
175
}
174
176
175
- ret = of_clk_add_provider (pdev -> dev .of_node , of_clk_src_onecell_get ,
176
- & clk_data );
177
+ ret = of_clk_add_hw_provider (pdev -> dev .of_node , of_clk_hw_onecell_get ,
178
+ clk_data );
177
179
if (ret ) {
178
180
dev_err (& pdev -> dev , "failed to add clock provider\n" );
179
181
goto unregister ;
@@ -186,9 +188,9 @@ static int s5pv210_audss_clk_probe(struct platform_device *pdev)
186
188
return 0 ;
187
189
188
190
unregister :
189
- for (i = 0 ; i < clk_data . clk_num ; i ++ ) {
191
+ for (i = 0 ; i < clk_data -> num ; i ++ ) {
190
192
if (!IS_ERR (clk_table [i ]))
191
- clk_unregister (clk_table [i ]);
193
+ clk_hw_unregister (clk_table [i ]);
192
194
}
193
195
194
196
return ret ;
0 commit comments