31
31
32
32
#define A2W_PLL_FRAC_BITS 20
33
33
34
+ #define NUM_FW_CLKS 16
35
+
34
36
struct raspberrypi_clk {
35
37
struct device * dev ;
36
38
struct rpi_firmware * firmware ;
@@ -282,11 +284,13 @@ static struct clk_hw *raspberrypi_register_pllb_arm(struct raspberrypi_clk *rpi)
282
284
283
285
static int raspberrypi_clk_probe (struct platform_device * pdev )
284
286
{
287
+ struct clk_hw_onecell_data * clk_data ;
285
288
struct device_node * firmware_node ;
286
289
struct device * dev = & pdev -> dev ;
287
290
struct rpi_firmware * firmware ;
288
291
struct raspberrypi_clk * rpi ;
289
292
struct clk_hw * hw ;
293
+ int ret ;
290
294
291
295
/*
292
296
* We can be probed either through the an old-fashioned
@@ -316,6 +320,11 @@ static int raspberrypi_clk_probe(struct platform_device *pdev)
316
320
rpi -> firmware = firmware ;
317
321
platform_set_drvdata (pdev , rpi );
318
322
323
+ clk_data = devm_kzalloc (dev , struct_size (clk_data , hws , NUM_FW_CLKS ),
324
+ GFP_KERNEL );
325
+ if (!clk_data )
326
+ return - ENOMEM ;
327
+
319
328
hw = raspberrypi_register_pllb (rpi );
320
329
if (IS_ERR (hw )) {
321
330
dev_err (dev , "Failed to initialize pllb, %ld\n" , PTR_ERR (hw ));
@@ -325,6 +334,13 @@ static int raspberrypi_clk_probe(struct platform_device *pdev)
325
334
hw = raspberrypi_register_pllb_arm (rpi );
326
335
if (IS_ERR (hw ))
327
336
return PTR_ERR (hw );
337
+ clk_data -> hws [RPI_FIRMWARE_ARM_CLK_ID ] = hw ;
338
+ clk_data -> num = RPI_FIRMWARE_ARM_CLK_ID + 1 ;
339
+
340
+ ret = devm_of_clk_add_hw_provider (dev , of_clk_hw_onecell_get ,
341
+ clk_data );
342
+ if (ret )
343
+ return ret ;
328
344
329
345
rpi -> cpufreq = platform_device_register_data (dev , "raspberrypi-cpufreq" ,
330
346
-1 , NULL , 0 );
0 commit comments