22
22
#include <dt-bindings/clock/exynos-audss-clk.h>
23
23
24
24
static DEFINE_SPINLOCK (lock );
25
- static struct clk * * clk_table ;
26
25
static void __iomem * reg_base ;
27
- static struct clk_onecell_data clk_data ;
26
+ static struct clk_hw_onecell_data * clk_data ;
28
27
/*
29
28
* On Exynos5420 this will be a clock which has to be enabled before any
30
29
* access to audss registers. Typically a child of EPLL.
@@ -110,18 +109,18 @@ static void exynos_audss_clk_teardown(void)
110
109
int i ;
111
110
112
111
for (i = EXYNOS_MOUT_AUDSS ; i < EXYNOS_DOUT_SRP ; i ++ ) {
113
- if (!IS_ERR (clk_table [i ]))
114
- clk_unregister_mux ( clk_table [i ]);
112
+ if (!IS_ERR (clk_data -> hws [i ]))
113
+ clk_hw_unregister_mux ( clk_data -> hws [i ]);
115
114
}
116
115
117
116
for (; i < EXYNOS_SRP_CLK ; i ++ ) {
118
- if (!IS_ERR (clk_table [i ]))
119
- clk_unregister_divider ( clk_table [i ]);
117
+ if (!IS_ERR (clk_data -> hws [i ]))
118
+ clk_hw_unregister_divider ( clk_data -> hws [i ]);
120
119
}
121
120
122
- for (; i < clk_data . clk_num ; i ++ ) {
123
- if (!IS_ERR (clk_table [i ]))
124
- clk_unregister_gate ( clk_table [i ]);
121
+ for (; i < clk_data -> num ; i ++ ) {
122
+ if (!IS_ERR (clk_data -> hws [i ]))
123
+ clk_hw_unregister_gate ( clk_data -> hws [i ]);
125
124
}
126
125
}
127
126
@@ -133,6 +132,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
133
132
const char * sclk_pcm_p = "sclk_pcm0" ;
134
133
struct clk * pll_ref , * pll_in , * cdclk , * sclk_audio , * sclk_pcm_in ;
135
134
const struct exynos_audss_clk_drvdata * variant ;
135
+ struct clk_hw * * clk_table ;
136
136
struct resource * res ;
137
137
int i , ret = 0 ;
138
138
@@ -149,14 +149,15 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
149
149
150
150
epll = ERR_PTR (- ENODEV );
151
151
152
- clk_table = devm_kzalloc (& pdev -> dev ,
153
- sizeof (struct clk * ) * EXYNOS_AUDSS_MAX_CLKS ,
152
+ clk_data = devm_kzalloc (& pdev -> dev ,
153
+ sizeof (* clk_data ) +
154
+ sizeof (* clk_data -> hws ) * EXYNOS_AUDSS_MAX_CLKS ,
154
155
GFP_KERNEL );
155
- if (!clk_table )
156
+ if (!clk_data )
156
157
return - ENOMEM ;
157
158
158
- clk_data . clks = clk_table ;
159
- clk_data . clk_num = variant -> num_clks ;
159
+ clk_data -> num = variant -> num_clks ;
160
+ clk_table = clk_data -> hws ;
160
161
161
162
pll_ref = devm_clk_get (& pdev -> dev , "pll_ref" );
162
163
pll_in = devm_clk_get (& pdev -> dev , "pll_in" );
@@ -176,7 +177,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
176
177
}
177
178
}
178
179
}
179
- clk_table [EXYNOS_MOUT_AUDSS ] = clk_register_mux (NULL , "mout_audss" ,
180
+ clk_table [EXYNOS_MOUT_AUDSS ] = clk_hw_register_mux (NULL , "mout_audss" ,
180
181
mout_audss_p , ARRAY_SIZE (mout_audss_p ),
181
182
CLK_SET_RATE_NO_REPARENT ,
182
183
reg_base + ASS_CLK_SRC , 0 , 1 , 0 , & lock );
@@ -187,62 +188,62 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
187
188
mout_i2s_p [1 ] = __clk_get_name (cdclk );
188
189
if (!IS_ERR (sclk_audio ))
189
190
mout_i2s_p [2 ] = __clk_get_name (sclk_audio );
190
- clk_table [EXYNOS_MOUT_I2S ] = clk_register_mux (NULL , "mout_i2s" ,
191
+ clk_table [EXYNOS_MOUT_I2S ] = clk_hw_register_mux (NULL , "mout_i2s" ,
191
192
mout_i2s_p , ARRAY_SIZE (mout_i2s_p ),
192
193
CLK_SET_RATE_NO_REPARENT ,
193
194
reg_base + ASS_CLK_SRC , 2 , 2 , 0 , & lock );
194
195
195
- clk_table [EXYNOS_DOUT_SRP ] = clk_register_divider (NULL , "dout_srp" ,
196
+ clk_table [EXYNOS_DOUT_SRP ] = clk_hw_register_divider (NULL , "dout_srp" ,
196
197
"mout_audss" , 0 , reg_base + ASS_CLK_DIV , 0 , 4 ,
197
198
0 , & lock );
198
199
199
- clk_table [EXYNOS_DOUT_AUD_BUS ] = clk_register_divider (NULL ,
200
+ clk_table [EXYNOS_DOUT_AUD_BUS ] = clk_hw_register_divider (NULL ,
200
201
"dout_aud_bus" , "dout_srp" , 0 ,
201
202
reg_base + ASS_CLK_DIV , 4 , 4 , 0 , & lock );
202
203
203
- clk_table [EXYNOS_DOUT_I2S ] = clk_register_divider (NULL , "dout_i2s" ,
204
+ clk_table [EXYNOS_DOUT_I2S ] = clk_hw_register_divider (NULL , "dout_i2s" ,
204
205
"mout_i2s" , 0 , reg_base + ASS_CLK_DIV , 8 , 4 , 0 ,
205
206
& lock );
206
207
207
- clk_table [EXYNOS_SRP_CLK ] = clk_register_gate (NULL , "srp_clk" ,
208
+ clk_table [EXYNOS_SRP_CLK ] = clk_hw_register_gate (NULL , "srp_clk" ,
208
209
"dout_srp" , CLK_SET_RATE_PARENT ,
209
210
reg_base + ASS_CLK_GATE , 0 , 0 , & lock );
210
211
211
- clk_table [EXYNOS_I2S_BUS ] = clk_register_gate (NULL , "i2s_bus" ,
212
+ clk_table [EXYNOS_I2S_BUS ] = clk_hw_register_gate (NULL , "i2s_bus" ,
212
213
"dout_aud_bus" , CLK_SET_RATE_PARENT ,
213
214
reg_base + ASS_CLK_GATE , 2 , 0 , & lock );
214
215
215
- clk_table [EXYNOS_SCLK_I2S ] = clk_register_gate (NULL , "sclk_i2s" ,
216
+ clk_table [EXYNOS_SCLK_I2S ] = clk_hw_register_gate (NULL , "sclk_i2s" ,
216
217
"dout_i2s" , CLK_SET_RATE_PARENT ,
217
218
reg_base + ASS_CLK_GATE , 3 , 0 , & lock );
218
219
219
- clk_table [EXYNOS_PCM_BUS ] = clk_register_gate (NULL , "pcm_bus" ,
220
+ clk_table [EXYNOS_PCM_BUS ] = clk_hw_register_gate (NULL , "pcm_bus" ,
220
221
"sclk_pcm" , CLK_SET_RATE_PARENT ,
221
222
reg_base + ASS_CLK_GATE , 4 , 0 , & lock );
222
223
223
224
sclk_pcm_in = devm_clk_get (& pdev -> dev , "sclk_pcm_in" );
224
225
if (!IS_ERR (sclk_pcm_in ))
225
226
sclk_pcm_p = __clk_get_name (sclk_pcm_in );
226
- clk_table [EXYNOS_SCLK_PCM ] = clk_register_gate (NULL , "sclk_pcm" ,
227
+ clk_table [EXYNOS_SCLK_PCM ] = clk_hw_register_gate (NULL , "sclk_pcm" ,
227
228
sclk_pcm_p , CLK_SET_RATE_PARENT ,
228
229
reg_base + ASS_CLK_GATE , 5 , 0 , & lock );
229
230
230
231
if (variant -> has_adma_clk ) {
231
- clk_table [EXYNOS_ADMA ] = clk_register_gate (NULL , "adma" ,
232
+ clk_table [EXYNOS_ADMA ] = clk_hw_register_gate (NULL , "adma" ,
232
233
"dout_srp" , CLK_SET_RATE_PARENT ,
233
234
reg_base + ASS_CLK_GATE , 9 , 0 , & lock );
234
235
}
235
236
236
- for (i = 0 ; i < clk_data . clk_num ; i ++ ) {
237
+ for (i = 0 ; i < clk_data -> num ; i ++ ) {
237
238
if (IS_ERR (clk_table [i ])) {
238
239
dev_err (& pdev -> dev , "failed to register clock %d\n" , i );
239
240
ret = PTR_ERR (clk_table [i ]);
240
241
goto unregister ;
241
242
}
242
243
}
243
244
244
- ret = of_clk_add_provider (pdev -> dev .of_node , of_clk_src_onecell_get ,
245
- & clk_data );
245
+ ret = of_clk_add_hw_provider (pdev -> dev .of_node , of_clk_hw_onecell_get ,
246
+ clk_data );
246
247
if (ret ) {
247
248
dev_err (& pdev -> dev , "failed to add clock provider\n" );
248
249
goto unregister ;
0 commit comments