10
10
#include <linux/delay.h>
11
11
#include <linux/err.h>
12
12
#include <linux/io.h>
13
+ #include <linux/module.h>
13
14
#include <linux/of.h>
14
15
#include <linux/of_address.h>
16
+ #include <linux/platform_device.h>
15
17
#include <linux/slab.h>
16
18
#include <linux/spinlock.h>
17
19
@@ -469,7 +471,7 @@ static const struct clk_ops mp1_gate_clk_ops = {
469
471
.is_enabled = clk_gate_is_enabled ,
470
472
};
471
473
472
- static struct clk_hw * _get_stm32_mux (void __iomem * base ,
474
+ static struct clk_hw * _get_stm32_mux (struct device * dev , void __iomem * base ,
473
475
const struct stm32_mux_cfg * cfg ,
474
476
spinlock_t * lock )
475
477
{
@@ -478,7 +480,7 @@ static struct clk_hw *_get_stm32_mux(void __iomem *base,
478
480
struct clk_hw * mux_hw ;
479
481
480
482
if (cfg -> mmux ) {
481
- mmux = kzalloc ( sizeof (* mmux ), GFP_KERNEL );
483
+ mmux = devm_kzalloc ( dev , sizeof (* mmux ), GFP_KERNEL );
482
484
if (!mmux )
483
485
return ERR_PTR (- ENOMEM );
484
486
@@ -493,7 +495,7 @@ static struct clk_hw *_get_stm32_mux(void __iomem *base,
493
495
cfg -> mmux -> hws [cfg -> mmux -> nbr_clk ++ ] = mux_hw ;
494
496
495
497
} else {
496
- mux = kzalloc ( sizeof (* mux ), GFP_KERNEL );
498
+ mux = devm_kzalloc ( dev , sizeof (* mux ), GFP_KERNEL );
497
499
if (!mux )
498
500
return ERR_PTR (- ENOMEM );
499
501
@@ -509,13 +511,13 @@ static struct clk_hw *_get_stm32_mux(void __iomem *base,
509
511
return mux_hw ;
510
512
}
511
513
512
- static struct clk_hw * _get_stm32_div (void __iomem * base ,
514
+ static struct clk_hw * _get_stm32_div (struct device * dev , void __iomem * base ,
513
515
const struct stm32_div_cfg * cfg ,
514
516
spinlock_t * lock )
515
517
{
516
518
struct clk_divider * div ;
517
519
518
- div = kzalloc ( sizeof (* div ), GFP_KERNEL );
520
+ div = devm_kzalloc ( dev , sizeof (* div ), GFP_KERNEL );
519
521
520
522
if (!div )
521
523
return ERR_PTR (- ENOMEM );
@@ -530,16 +532,16 @@ static struct clk_hw *_get_stm32_div(void __iomem *base,
530
532
return & div -> hw ;
531
533
}
532
534
533
- static struct clk_hw *
534
- _get_stm32_gate ( void __iomem * base ,
535
- const struct stm32_gate_cfg * cfg , spinlock_t * lock )
535
+ static struct clk_hw * _get_stm32_gate ( struct device * dev , void __iomem * base ,
536
+ const struct stm32_gate_cfg * cfg ,
537
+ spinlock_t * lock )
536
538
{
537
539
struct stm32_clk_mgate * mgate ;
538
540
struct clk_gate * gate ;
539
541
struct clk_hw * gate_hw ;
540
542
541
543
if (cfg -> mgate ) {
542
- mgate = kzalloc ( sizeof (* mgate ), GFP_KERNEL );
544
+ mgate = devm_kzalloc ( dev , sizeof (* mgate ), GFP_KERNEL );
543
545
if (!mgate )
544
546
return ERR_PTR (- ENOMEM );
545
547
@@ -554,7 +556,7 @@ _get_stm32_gate(void __iomem *base,
554
556
gate_hw = & mgate -> gate .hw ;
555
557
556
558
} else {
557
- gate = kzalloc ( sizeof (* gate ), GFP_KERNEL );
559
+ gate = devm_kzalloc ( dev , sizeof (* gate ), GFP_KERNEL );
558
560
if (!gate )
559
561
return ERR_PTR (- ENOMEM );
560
562
@@ -592,7 +594,7 @@ clk_stm32_register_gate_ops(struct device *dev,
592
594
if (cfg -> ops )
593
595
init .ops = cfg -> ops ;
594
596
595
- hw = _get_stm32_gate (base , cfg , lock );
597
+ hw = _get_stm32_gate (dev , base , cfg , lock );
596
598
if (IS_ERR (hw ))
597
599
return ERR_PTR (- ENOMEM );
598
600
@@ -623,7 +625,7 @@ clk_stm32_register_composite(struct device *dev,
623
625
gate_ops = NULL ;
624
626
625
627
if (cfg -> mux ) {
626
- mux_hw = _get_stm32_mux (base , cfg -> mux , lock );
628
+ mux_hw = _get_stm32_mux (dev , base , cfg -> mux , lock );
627
629
628
630
if (!IS_ERR (mux_hw )) {
629
631
mux_ops = & clk_mux_ops ;
@@ -634,7 +636,7 @@ clk_stm32_register_composite(struct device *dev,
634
636
}
635
637
636
638
if (cfg -> div ) {
637
- div_hw = _get_stm32_div (base , cfg -> div , lock );
639
+ div_hw = _get_stm32_div (dev , base , cfg -> div , lock );
638
640
639
641
if (!IS_ERR (div_hw )) {
640
642
div_ops = & clk_divider_ops ;
@@ -645,7 +647,7 @@ clk_stm32_register_composite(struct device *dev,
645
647
}
646
648
647
649
if (cfg -> gate ) {
648
- gate_hw = _get_stm32_gate (base , cfg -> gate , lock );
650
+ gate_hw = _get_stm32_gate (dev , base , cfg -> gate , lock );
649
651
650
652
if (!IS_ERR (gate_hw )) {
651
653
gate_ops = & clk_gate_ops ;
@@ -890,7 +892,7 @@ static struct clk_hw *clk_register_pll(struct device *dev, const char *name,
890
892
struct clk_hw * hw ;
891
893
int err ;
892
894
893
- element = kzalloc ( sizeof (* element ), GFP_KERNEL );
895
+ element = devm_kzalloc ( dev , sizeof (* element ), GFP_KERNEL );
894
896
if (!element )
895
897
return ERR_PTR (- ENOMEM );
896
898
@@ -914,10 +916,8 @@ static struct clk_hw *clk_register_pll(struct device *dev, const char *name,
914
916
hw = & element -> hw ;
915
917
err = clk_hw_register (dev , hw );
916
918
917
- if (err ) {
918
- kfree (element );
919
+ if (err )
919
920
return ERR_PTR (err );
920
- }
921
921
922
922
return hw ;
923
923
}
@@ -1028,7 +1028,7 @@ static struct clk_hw *clk_register_cktim(struct device *dev, const char *name,
1028
1028
struct clk_hw * hw ;
1029
1029
int err ;
1030
1030
1031
- tim_ker = kzalloc ( sizeof (* tim_ker ), GFP_KERNEL );
1031
+ tim_ker = devm_kzalloc ( dev , sizeof (* tim_ker ), GFP_KERNEL );
1032
1032
if (!tim_ker )
1033
1033
return ERR_PTR (- ENOMEM );
1034
1034
@@ -1046,10 +1046,8 @@ static struct clk_hw *clk_register_cktim(struct device *dev, const char *name,
1046
1046
hw = & tim_ker -> hw ;
1047
1047
err = clk_hw_register (dev , hw );
1048
1048
1049
- if (err ) {
1050
- kfree (tim_ker );
1049
+ if (err )
1051
1050
return ERR_PTR (err );
1052
- }
1053
1051
1054
1052
return hw ;
1055
1053
}
@@ -2076,6 +2074,7 @@ static const struct of_device_id stm32mp1_match_data[] = {
2076
2074
},
2077
2075
{ }
2078
2076
};
2077
+ MODULE_DEVICE_TABLE (of , stm32mp1_match_data );
2079
2078
2080
2079
static int stm32_register_hw_clk (struct device * dev ,
2081
2080
struct clk_hw_onecell_data * clk_data ,
@@ -2101,8 +2100,7 @@ static int stm32_register_hw_clk(struct device *dev,
2101
2100
return 0 ;
2102
2101
}
2103
2102
2104
- static int stm32_rcc_init (struct device_node * np ,
2105
- void __iomem * base ,
2103
+ static int stm32_rcc_init (struct device * dev , void __iomem * base ,
2106
2104
const struct of_device_id * match_data )
2107
2105
{
2108
2106
struct clk_hw_onecell_data * clk_data ;
@@ -2111,18 +2109,18 @@ static int stm32_rcc_init(struct device_node *np,
2111
2109
const struct stm32_clock_match_data * data ;
2112
2110
int err , n , max_binding ;
2113
2111
2114
- match = of_match_node (match_data , np );
2112
+ match = of_match_node (match_data , dev_of_node ( dev ) );
2115
2113
if (!match ) {
2116
- pr_err ( "%s: match data not found\n", __func__ );
2114
+ dev_err ( dev , " match data not found\n" );
2117
2115
return - ENODEV ;
2118
2116
}
2119
2117
2120
2118
data = match -> data ;
2121
2119
2122
2120
max_binding = data -> maxbinding ;
2123
2121
2124
- clk_data = kzalloc ( struct_size (clk_data , hws , max_binding ),
2125
- GFP_KERNEL );
2122
+ clk_data = devm_kzalloc ( dev , struct_size (clk_data , hws , max_binding ),
2123
+ GFP_KERNEL );
2126
2124
if (!clk_data )
2127
2125
return - ENOMEM ;
2128
2126
@@ -2134,36 +2132,73 @@ static int stm32_rcc_init(struct device_node *np,
2134
2132
hws [n ] = ERR_PTR (- ENOENT );
2135
2133
2136
2134
for (n = 0 ; n < data -> num ; n ++ ) {
2137
- err = stm32_register_hw_clk (NULL , clk_data , base , & rlock ,
2135
+ err = stm32_register_hw_clk (dev , clk_data , base , & rlock ,
2138
2136
& data -> cfg [n ]);
2139
2137
if (err ) {
2140
- pr_err ("%s: can't register %s\n" , __func__ ,
2141
- data -> cfg [n ].name );
2142
-
2143
- kfree (clk_data );
2138
+ dev_err (dev , "Can't register clk %s: %d\n" ,
2139
+ data -> cfg [n ].name , err );
2144
2140
2145
2141
return err ;
2146
2142
}
2147
2143
}
2148
2144
2149
- return of_clk_add_hw_provider (np , of_clk_hw_onecell_get , clk_data );
2145
+ return of_clk_add_hw_provider (dev_of_node ( dev ) , of_clk_hw_onecell_get , clk_data );
2150
2146
}
2151
2147
2152
- static void stm32mp1_rcc_init (struct device_node * np )
2148
+ static int stm32mp1_rcc_init (struct device * dev )
2153
2149
{
2154
2150
void __iomem * base ;
2151
+ int ret ;
2155
2152
2156
- base = of_iomap (np , 0 );
2153
+ base = of_iomap (dev_of_node ( dev ) , 0 );
2157
2154
if (!base ) {
2158
- pr_err ("%pOFn: unable to map resource" , np );
2159
- of_node_put ( np ) ;
2160
- return ;
2155
+ pr_err ("%pOFn: unable to map resource" , dev_of_node ( dev ) );
2156
+ ret = - ENOMEM ;
2157
+ goto out ;
2161
2158
}
2162
2159
2163
- if (stm32_rcc_init (np , base , stm32mp1_match_data )) {
2164
- iounmap (base );
2165
- of_node_put (np );
2160
+ ret = stm32_rcc_init (dev , base , stm32mp1_match_data );
2161
+
2162
+ out :
2163
+ if (ret ) {
2164
+ if (base )
2165
+ iounmap (base );
2166
+
2167
+ of_node_put (dev_of_node (dev ));
2166
2168
}
2169
+
2170
+ return ret ;
2171
+ }
2172
+
2173
+ static int stm32mp1_rcc_clocks_probe (struct platform_device * pdev )
2174
+ {
2175
+ struct device * dev = & pdev -> dev ;
2176
+
2177
+ return stm32mp1_rcc_init (dev );
2178
+ }
2179
+
2180
+ static int stm32mp1_rcc_clocks_remove (struct platform_device * pdev )
2181
+ {
2182
+ struct device * dev = & pdev -> dev ;
2183
+ struct device_node * child , * np = dev_of_node (dev );
2184
+
2185
+ for_each_available_child_of_node (np , child )
2186
+ of_clk_del_provider (child );
2187
+
2188
+ return 0 ;
2167
2189
}
2168
2190
2169
- CLK_OF_DECLARE_DRIVER (stm32mp1_rcc , "st,stm32mp1-rcc" , stm32mp1_rcc_init );
2191
+ static struct platform_driver stm32mp1_rcc_clocks_driver = {
2192
+ .driver = {
2193
+ .name = "stm32mp1_rcc" ,
2194
+ .of_match_table = stm32mp1_match_data ,
2195
+ },
2196
+ .probe = stm32mp1_rcc_clocks_probe ,
2197
+ .remove = stm32mp1_rcc_clocks_remove ,
2198
+ };
2199
+
2200
+ static int __init stm32mp1_clocks_init (void )
2201
+ {
2202
+ return platform_driver_register (& stm32mp1_rcc_clocks_driver );
2203
+ }
2204
+ core_initcall (stm32mp1_clocks_init );
0 commit comments