diff mbox series

[v2] clk: at91: dt-compat: Hold reference returned by of_get_parent()

Message ID 20220628132256.164120-1-windhl@126.com (mailing list archive)
State Superseded, archived
Headers show
Series [v2] clk: at91: dt-compat: Hold reference returned by of_get_parent() | expand

Commit Message

Liang He June 28, 2022, 1:22 p.m. UTC
We need to hold the reference returned by of_get_parent() and use
it to call of_node_put() for refcount balance.

Signed-off-by: Liang He <windhl@126.com>
---
 changelog:

 v2: use 'parent_np' to replace 'tp' and use xx:yy:zz title format
 v1: hold references returned by of_get_parent() and put them

 drivers/clk/at91/dt-compat.c | 112 +++++++++++++++++++++++++++--------
 1 file changed, 86 insertions(+), 26 deletions(-)

Comments

Claudiu Beznea June 30, 2022, 8:39 a.m. UTC | #1
On 28.06.2022 16:22, Liang He wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> We need to hold the reference returned by of_get_parent() and use
> it to call of_node_put() for refcount balance.
> 
> Signed-off-by: Liang He <windhl@126.com>
> ---
>  changelog:
> 
>  v2: use 'parent_np' to replace 'tp' and use xx:yy:zz title format
>  v1: hold references returned by of_get_parent() and put them
> 
>  drivers/clk/at91/dt-compat.c | 112 +++++++++++++++++++++++++++--------
>  1 file changed, 86 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/clk/at91/dt-compat.c b/drivers/clk/at91/dt-compat.c
> index 8ca8bcacf66d..0d36b4e7fd6e 100644
> --- a/drivers/clk/at91/dt-compat.c
> +++ b/drivers/clk/at91/dt-compat.c
> @@ -33,8 +33,11 @@ static void __init of_sama5d2_clk_audio_pll_frac_setup(struct device_node *np)
>         const char *name = np->name;
>         const char *parent_name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -56,8 +59,11 @@ static void __init of_sama5d2_clk_audio_pll_pad_setup(struct device_node *np)
>         const char *name = np->name;
>         const char *parent_name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -79,8 +85,11 @@ static void __init of_sama5d2_clk_audio_pll_pmc_setup(struct device_node *np)
>         const char *name = np->name;
>         const char *parent_name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -120,7 +129,7 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
>         struct clk_hw *hw;
>         unsigned int num_parents;
>         const char *parent_names[GENERATED_SOURCE_MAX];
> -       struct device_node *gcknp;
> +       struct device_node *gcknp, *parent_np;
>         struct clk_range range = CLK_RANGE(0, 0);
>         struct regmap *regmap;
> 
> @@ -134,7 +143,9 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
>         if (!num || num > PERIPHERAL_MAX)
>                 return;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -180,8 +191,11 @@ static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
>         const char *name = np->name;
>         const char *parent_name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -243,12 +257,15 @@ static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np)
>         const char *parent_name;
>         struct regmap *regmap;
>         bool bypass;
> +       struct device_node *parent_np;
> 
>         of_property_read_string(np, "clock-output-names", &name);
>         bypass = of_property_read_bool(np, "atmel,osc-bypass");
>         parent_name = of_clk_get_parent_name(np, 0);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -268,12 +285,15 @@ static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np)
>         u32 accuracy = 0;
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         of_property_read_string(np, "clock-output-names", &name);
>         of_property_read_u32(np, "clock-frequency", &frequency);
>         of_property_read_u32(np, "clock-accuracy", &accuracy);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -292,11 +312,14 @@ static void __init of_at91rm9200_clk_main_setup(struct device_node *np)
>         const char *parent_name;
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         parent_name = of_clk_get_parent_name(np, 0);
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -316,13 +339,16 @@ static void __init of_at91sam9x5_clk_main_setup(struct device_node *np)
>         unsigned int num_parents;
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents == 0 || num_parents > 2)
>                 return;
> 
>         of_clk_parent_fill(np, parent_names, num_parents);
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -373,6 +399,7 @@ of_at91_clk_master_setup(struct device_node *np,
>         const char *name = np->name;
>         struct clk_master_characteristics *characteristics;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents == 0 || num_parents > MASTER_SOURCE_MAX)
> @@ -386,7 +413,9 @@ of_at91_clk_master_setup(struct device_node *np,
>         if (!characteristics)
>                 return;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -433,6 +462,7 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
>         const char *name;
>         struct device_node *periphclknp;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         parent_name = of_clk_get_parent_name(np, 0);
>         if (!parent_name)
> @@ -442,7 +472,9 @@ of_at91_clk_periph_setup(struct device_node *np, u8 type)
>         if (!num || num > PERIPHERAL_MAX)
>                 return;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -601,6 +633,7 @@ of_at91_clk_pll_setup(struct device_node *np,
>         struct regmap *regmap;
>         const char *parent_name;
>         const char *name = np->name;
> +       struct device_node *parent_np;
>         struct clk_pll_characteristics *characteristics;
> 
>         if (of_property_read_u32(np, "reg", &id))
> @@ -610,7 +643,9 @@ of_at91_clk_pll_setup(struct device_node *np,
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -665,12 +700,15 @@ of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
>         const char *parent_name;
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         parent_name = of_clk_get_parent_name(np, 0);
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>         unsigned int num_parents;
>         const char *parent_names[PROG_SOURCE_MAX];
>         const char *name;
> -       struct device_node *progclknp;
>         struct regmap *regmap;
> +       struct device_node *progclknp, *parent_np;

Is there a reason you chosed to move this on a new line?

> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents == 0 || num_parents > PROG_SOURCE_MAX)
> @@ -707,7 +745,9 @@ of_at91_clk_prog_setup(struct device_node *np,
>         if (!num || num > (PROG_ID_MAX + 1))
>                 return;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -756,13 +796,16 @@ static void __init of_at91sam9260_clk_slow_setup(struct device_node *np)
>         unsigned int num_parents;
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents != 2)
>                 return;
> 
>         of_clk_parent_fill(np, parent_names, num_parents);
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -788,6 +831,7 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
>         const char *parent_names[SMD_SOURCE_MAX];
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents == 0 || num_parents > SMD_SOURCE_MAX)
> @@ -797,7 +841,9 @@ static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -818,15 +864,17 @@ static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
>         u32 id;
>         struct clk_hw *hw;
>         const char *name;
> -       struct device_node *sysclknp;
>         const char *parent_name;
>         struct regmap *regmap;
> +       struct device_node *sysclknp, *parent_np;

Same here.

> 
>         num = of_get_child_count(np);
>         if (num > (SYSTEM_MAX_ID + 1))
>                 return;
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -859,6 +907,7 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
>         const char *parent_names[USB_SOURCE_MAX];
>         const char *name = np->name;
>         struct regmap *regmap;
> +       struct device_node *parent_np;
> 
>         num_parents = of_clk_get_parent_count(np);
>         if (num_parents == 0 || num_parents > USB_SOURCE_MAX)
> @@ -868,7 +917,9 @@ static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>  {
>         struct clk_hw *hw;
> +       struct regmap *regmap;
>         const char *parent_name;
>         const char *name = np->name;
> -       struct regmap *regmap;
> +       struct device_node *parent_np;

You moved around the declarations.

> 
>         parent_name = of_clk_get_parent_name(np, 0);
>         if (!parent_name)
> @@ -895,7 +947,9 @@ static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
> 
> @@ -911,10 +965,11 @@ CLK_OF_DECLARE(at91sam9n12_clk_usb, "atmel,at91sam9n12-clk-usb",
>  static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>  {
>         struct clk_hw *hw;
> +       struct regmap *regmap;
>         const char *parent_name;
>         const char *name = np->name;
> +       struct device_node *parent_np;
>         u32 divisors[4] = {0, 0, 0, 0};
> -       struct regmap *regmap;

Same here.

> 
>         parent_name = of_clk_get_parent_name(np, 0);
>         if (!parent_name)
> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap))
>                 return;
>         hw = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
> @@ -945,13 +1002,16 @@ static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
>         struct clk_hw *hw;
>         const char *parent_name;
>         const char *name = np->name;
> +       struct device_node *parent_np;
>         struct regmap *regmap_pmc, *regmap_sfr;
> 
>         parent_name = of_clk_get_parent_name(np, 0);
> 
>         of_property_read_string(np, "clock-output-names", &name);
> 
> -       regmap_pmc = syscon_node_to_regmap(of_get_parent(np));
> +       parent_np = of_get_parent(np);
> +       regmap_pmc = syscon_node_to_regmap(parent_np);
> +       of_node_put(parent_np);
>         if (IS_ERR(regmap_pmc))
>                 return;
> 
> --
> 2.25.1
>
Liang He June 30, 2022, 8:59 a.m. UTC | #2
Hi,  Claudiu.Beznea,

At 2022-06-30 16:39:26, Claudiu.Beznea@microchip.com wrote:
>On 28.06.2022 16:22, Liang He wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>> [...]
>> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>>         unsigned int num_parents;
>>         const char *parent_names[PROG_SOURCE_MAX];
>>         const char *name;
>> -       struct device_node *progclknp;
>>         struct regmap *regmap;
>> +       struct device_node *progclknp, *parent_np;
>
>Is there a reason you chosed to move this on a new line?

>

In fact, I just want to keep long declaration on bottom.

However, this modification maybe useless. 


>> [...]
>>         struct clk_hw *hw;
>>         const char *name;
>> -       struct device_node *sysclknp;
>>         const char *parent_name;
>>         struct regmap *regmap;
>> +       struct device_node *sysclknp, *parent_np;
>
>Same here.

>


Same reason as above.

>> 
>>         num = of_get_child_count(np);
>>         if (num > (SYSTEM_MAX_ID + 1))

>> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>  {
>>         struct clk_hw *hw;
>> +       struct regmap *regmap;
>>         const char *parent_name;
>>         const char *name = np->name;
>> -       struct regmap *regmap;
>> +       struct device_node *parent_np;
>
>You moved around the declarations.

>


Sorry, I have been told to keep reverse christmas tree.


So this look like a normal christmas tree?


>> >>         parent_name = of_clk_get_parent_name(np, 0);
[...]
>> +       struct regmap *regmap;
>>         const char *parent_name;
>>         const char *name = np->name;
>> +       struct device_node *parent_np;
>>         u32 divisors[4] = {0, 0, 0, 0};
>> -       struct regmap *regmap;
>
>Same here.

>


Same reason as above.

>> 
>>         parent_name = of_clk_get_parent_name(np, 0);
>>         if (!parent_name)
>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)

>> 


If these declaration chages are not needed, I can resend a new patch keeping the original order of declarations.


Thanks.


Liang
Claudiu Beznea June 30, 2022, 10:20 a.m. UTC | #3
On 30.06.2022 11:59, Liang He wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi,  Claudiu.Beznea,
> 
> At 2022-06-30 16:39:26, Claudiu.Beznea@microchip.com wrote:
>> On 28.06.2022 16:22, Liang He wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>> [...]
>>> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>>>         unsigned int num_parents;
>>>         const char *parent_names[PROG_SOURCE_MAX];
>>>         const char *name;
>>> -       struct device_node *progclknp;
>>>         struct regmap *regmap;
>>> +       struct device_node *progclknp, *parent_np;
>>
>> Is there a reason you chosed to move this on a new line?
> 
>>
> 
> In fact, I just want to keep long declaration on bottom.
> 
> However, this modification maybe useless.
> 
> 
>>> [...]
>>>         struct clk_hw *hw;
>>>         const char *name;
>>> -       struct device_node *sysclknp;
>>>         const char *parent_name;
>>>         struct regmap *regmap;
>>> +       struct device_node *sysclknp, *parent_np;
>>
>> Same here.
> 
>>
> 
> 
> Same reason as above.
> 
>>>
>>>         num = of_get_child_count(np);
>>>         if (num > (SYSTEM_MAX_ID + 1))
> 
>>> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>>>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>>  {
>>>         struct clk_hw *hw;
>>> +       struct regmap *regmap;
>>>         const char *parent_name;
>>>         const char *name = np->name;
>>> -       struct regmap *regmap;
>>> +       struct device_node *parent_np;
>>
>> You moved around the declarations.
> 
>>
> 
> 
> Sorry, I have been told to keep reverse christmas tree.

I thought this rule is only for networking subsystem.

> 
> 
> So this look like a normal christmas tree?
> 
> 
>>>>>         parent_name = of_clk_get_parent_name(np, 0);
> [...]
>>> +       struct regmap *regmap;
>>>         const char *parent_name;
>>>         const char *name = np->name;
>>> +       struct device_node *parent_np;
>>>         u32 divisors[4] = {0, 0, 0, 0};
>>> -       struct regmap *regmap;
>>
>> Same here.
> 
>>
> 
> 
> Same reason as above.
> 
>>>
>>>         parent_name = of_clk_get_parent_name(np, 0);
>>>         if (!parent_name)
>>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
> 
>>>
> 
> 
> If these declaration chages are not needed, I can resend a new patch keeping the original order of declarations.
> 
> 
> Thanks.
> 
> 
> Liang
Liang He June 30, 2022, 12:58 p.m. UTC | #4
At 2022-06-30 18:20:36, Claudiu.Beznea@microchip.com wrote:
>On 30.06.2022 11:59, Liang He wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>> 
>> Hi,  Claudiu.Beznea,
>> 
>> At 2022-06-30 16:39:26, Claudiu.Beznea@microchip.com wrote:
>>> On 28.06.2022 16:22, Liang He wrote:
>>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>> [...]
>>>> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>>>>         unsigned int num_parents;
>>>>         const char *parent_names[PROG_SOURCE_MAX];
>>>>         const char *name;
>>>> -       struct device_node *progclknp;
>>>>         struct regmap *regmap;
>>>> +       struct device_node *progclknp, *parent_np;
>>>
>>> Is there a reason you chosed to move this on a new line?
>> 
>>>
>> 
>> In fact, I just want to keep long declaration on bottom.
>> 
>> However, this modification maybe useless.
>> 
>> 
>>>> [...]
>>>>         struct clk_hw *hw;
>>>>         const char *name;
>>>> -       struct device_node *sysclknp;
>>>>         const char *parent_name;
>>>>         struct regmap *regmap;
>>>> +       struct device_node *sysclknp, *parent_np;
>>>
>>> Same here.
>> 
>>>
>> 
>> 
>> Same reason as above.
>> 
>>>>
>>>>         num = of_get_child_count(np);
>>>>         if (num > (SYSTEM_MAX_ID + 1))
>> 
>>>> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>>>>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>>>  {
>>>>         struct clk_hw *hw;
>>>> +       struct regmap *regmap;
>>>>         const char *parent_name;
>>>>         const char *name = np->name;
>>>> -       struct regmap *regmap;
>>>> +       struct device_node *parent_np;
>>>
>>> You moved around the declarations.
>> 
>>>
>> 
>> 
>> Sorry, I have been told to keep reverse christmas tree.
>
>I thought this rule is only for networking subsystem.
>

OK, thanks, I will keep the rule only when I fix bugs in networking subsystem.

So  it needs to send a v3 to restore the order of the declarations?

If yes, I will resend it soon. 

Thanks.

Liang


>> 
>> 
>> So this look like a normal christmas tree?
>> 
>> 
>>>>>>         parent_name = of_clk_get_parent_name(np, 0);
>> [...]
>>>> +       struct regmap *regmap;
>>>>         const char *parent_name;
>>>>         const char *name = np->name;
>>>> +       struct device_node *parent_np;
>>>>         u32 divisors[4] = {0, 0, 0, 0};
>>>> -       struct regmap *regmap;
>>>
>>> Same here.
>> 
>>>
>> 
>> 
>> Same reason as above.
>> 
>>>>
>>>>         parent_name = of_clk_get_parent_name(np, 0);
>>>>         if (!parent_name)
>>>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>> 
>>>>
>> 
>> 
>> If these declaration chages are not needed, I can resend a new patch keeping the original order of declarations.
>> 
>> 
>> Thanks.
>> 
>> 
>> Liang
>
Claudiu Beznea June 30, 2022, 2:19 p.m. UTC | #5
On 30.06.2022 15:58, Liang He wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> At 2022-06-30 18:20:36, Claudiu.Beznea@microchip.com wrote:
>> On 30.06.2022 11:59, Liang He wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>
>>> Hi,  Claudiu.Beznea,
>>>
>>> At 2022-06-30 16:39:26, Claudiu.Beznea@microchip.com wrote:
>>>> On 28.06.2022 16:22, Liang He wrote:
>>>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>>> [...]
>>>>> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>>>>>         unsigned int num_parents;
>>>>>         const char *parent_names[PROG_SOURCE_MAX];
>>>>>         const char *name;
>>>>> -       struct device_node *progclknp;
>>>>>         struct regmap *regmap;
>>>>> +       struct device_node *progclknp, *parent_np;
>>>>
>>>> Is there a reason you chosed to move this on a new line?
>>>
>>>>
>>>
>>> In fact, I just want to keep long declaration on bottom.
>>>
>>> However, this modification maybe useless.
>>>
>>>
>>>>> [...]
>>>>>         struct clk_hw *hw;
>>>>>         const char *name;
>>>>> -       struct device_node *sysclknp;
>>>>>         const char *parent_name;
>>>>>         struct regmap *regmap;
>>>>> +       struct device_node *sysclknp, *parent_np;
>>>>
>>>> Same here.
>>>
>>>>
>>>
>>>
>>> Same reason as above.
>>>
>>>>>
>>>>>         num = of_get_child_count(np);
>>>>>         if (num > (SYSTEM_MAX_ID + 1))
>>>
>>>>> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>>>>>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>>>>  {
>>>>>         struct clk_hw *hw;
>>>>> +       struct regmap *regmap;
>>>>>         const char *parent_name;
>>>>>         const char *name = np->name;
>>>>> -       struct regmap *regmap;
>>>>> +       struct device_node *parent_np;
>>>>
>>>> You moved around the declarations.
>>>
>>>>
>>>
>>>
>>> Sorry, I have been told to keep reverse christmas tree.
>>
>> I thought this rule is only for networking subsystem.
>>
> 
> OK, thanks, I will keep the rule only when I fix bugs in networking subsystem.
> 
> So  it needs to send a v3 to restore the order of the declarations?

Yes, please.

> 
> If yes, I will resend it soon.
> 
> Thanks.
> 
> Liang
> 
> 
>>>
>>>
>>> So this look like a normal christmas tree?
>>>
>>>
>>>>>>>         parent_name = of_clk_get_parent_name(np, 0);
>>> [...]
>>>>> +       struct regmap *regmap;
>>>>>         const char *parent_name;
>>>>>         const char *name = np->name;
>>>>> +       struct device_node *parent_np;
>>>>>         u32 divisors[4] = {0, 0, 0, 0};
>>>>> -       struct regmap *regmap;
>>>>
>>>> Same here.
>>>
>>>>
>>>
>>>
>>> Same reason as above.
>>>
>>>>>
>>>>>         parent_name = of_clk_get_parent_name(np, 0);
>>>>>         if (!parent_name)
>>>>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>>>
>>>>>
>>>
>>>
>>> If these declaration chages are not needed, I can resend a new patch keeping the original order of declarations.
>>>
>>>
>>> Thanks.
>>>
>>>
>>> Liang
>>
Liang He June 30, 2022, 2:27 p.m. UTC | #6
At 2022-06-30 22:19:45, Claudiu.Beznea@microchip.com wrote:
>On 30.06.2022 15:58, Liang He wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>> 
>> At 2022-06-30 18:20:36, Claudiu.Beznea@microchip.com wrote:
>>> On 30.06.2022 11:59, Liang He wrote:
>>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>>
>>>> Hi,  Claudiu.Beznea,
>>>>
>>>> At 2022-06-30 16:39:26, Claudiu.Beznea@microchip.com wrote:
>>>>> On 28.06.2022 16:22, Liang He wrote:
>>>>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>>>> [...]
>>>>>> @@ -694,8 +732,8 @@ of_at91_clk_prog_setup(struct device_node *np,
>>>>>>         unsigned int num_parents;
>>>>>>         const char *parent_names[PROG_SOURCE_MAX];
>>>>>>         const char *name;
>>>>>> -       struct device_node *progclknp;
>>>>>>         struct regmap *regmap;
>>>>>> +       struct device_node *progclknp, *parent_np;
>>>>>
>>>>> Is there a reason you chosed to move this on a new line?
>>>>
>>>>>
>>>>
>>>> In fact, I just want to keep long declaration on bottom.
>>>>
>>>> However, this modification maybe useless.
>>>>
>>>>
>>>>>> [...]
>>>>>>         struct clk_hw *hw;
>>>>>>         const char *name;
>>>>>> -       struct device_node *sysclknp;
>>>>>>         const char *parent_name;
>>>>>>         struct regmap *regmap;
>>>>>> +       struct device_node *sysclknp, *parent_np;
>>>>>
>>>>> Same here.
>>>>
>>>>>
>>>>
>>>>
>>>> Same reason as above.
>>>>
>>>>>>
>>>>>>         num = of_get_child_count(np);
>>>>>>         if (num > (SYSTEM_MAX_ID + 1))
>>>>
>>>>>> @@ -885,9 +936,10 @@ CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
>>>>>>  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
>>>>>>  {
>>>>>>         struct clk_hw *hw;
>>>>>> +       struct regmap *regmap;
>>>>>>         const char *parent_name;
>>>>>>         const char *name = np->name;
>>>>>> -       struct regmap *regmap;
>>>>>> +       struct device_node *parent_np;
>>>>>
>>>>> You moved around the declarations.
>>>>
>>>>>
>>>>
>>>>
>>>> Sorry, I have been told to keep reverse christmas tree.
>>>
>>> I thought this rule is only for networking subsystem.
>>>
>> 
>> OK, thanks, I will keep the rule only when I fix bugs in networking subsystem.
>> 
>> So  it needs to send a v3 to restore the order of the declarations?
>
>Yes, please.

OK, soon.
>
>> 
>> If yes, I will resend it soon.
>> 
>> Thanks.
>> 
>> Liang
>> 
>> 
>>>>
>>>>
>>>> So this look like a normal christmas tree?
>>>>
>>>>
>>>>>>>>         parent_name = of_clk_get_parent_name(np, 0);
>>>> [...]
>>>>>> +       struct regmap *regmap;
>>>>>>         const char *parent_name;
>>>>>>         const char *name = np->name;
>>>>>> +       struct device_node *parent_np;
>>>>>>         u32 divisors[4] = {0, 0, 0, 0};
>>>>>> -       struct regmap *regmap;
>>>>>
>>>>> Same here.
>>>>
>>>>>
>>>>
>>>>
>>>> Same reason as above.
>>>>
>>>>>>
>>>>>>         parent_name = of_clk_get_parent_name(np, 0);
>>>>>>         if (!parent_name)
>>>>>> @@ -926,7 +981,9 @@ static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
>>>>
>>>>>>
>>>>
>>>>
>>>> If these declaration chages are not needed, I can resend a new patch keeping the original order of declarations.
>>>>
>>>>
>>>> Thanks.
>>>>
>>>>
>>>> Liang
>>>
>
diff mbox series

Patch

diff --git a/drivers/clk/at91/dt-compat.c b/drivers/clk/at91/dt-compat.c
index 8ca8bcacf66d..0d36b4e7fd6e 100644
--- a/drivers/clk/at91/dt-compat.c
+++ b/drivers/clk/at91/dt-compat.c
@@ -33,8 +33,11 @@  static void __init of_sama5d2_clk_audio_pll_frac_setup(struct device_node *np)
 	const char *name = np->name;
 	const char *parent_name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -56,8 +59,11 @@  static void __init of_sama5d2_clk_audio_pll_pad_setup(struct device_node *np)
 	const char *name = np->name;
 	const char *parent_name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -79,8 +85,11 @@  static void __init of_sama5d2_clk_audio_pll_pmc_setup(struct device_node *np)
 	const char *name = np->name;
 	const char *parent_name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -120,7 +129,7 @@  static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
 	struct clk_hw *hw;
 	unsigned int num_parents;
 	const char *parent_names[GENERATED_SOURCE_MAX];
-	struct device_node *gcknp;
+	struct device_node *gcknp, *parent_np;
 	struct clk_range range = CLK_RANGE(0, 0);
 	struct regmap *regmap;
 
@@ -134,7 +143,9 @@  static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
 	if (!num || num > PERIPHERAL_MAX)
 		return;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -180,8 +191,11 @@  static void __init of_sama5d4_clk_h32mx_setup(struct device_node *np)
 	const char *name = np->name;
 	const char *parent_name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -243,12 +257,15 @@  static void __init of_at91rm9200_clk_main_osc_setup(struct device_node *np)
 	const char *parent_name;
 	struct regmap *regmap;
 	bool bypass;
+	struct device_node *parent_np;
 
 	of_property_read_string(np, "clock-output-names", &name);
 	bypass = of_property_read_bool(np, "atmel,osc-bypass");
 	parent_name = of_clk_get_parent_name(np, 0);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -268,12 +285,15 @@  static void __init of_at91sam9x5_clk_main_rc_osc_setup(struct device_node *np)
 	u32 accuracy = 0;
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	of_property_read_string(np, "clock-output-names", &name);
 	of_property_read_u32(np, "clock-frequency", &frequency);
 	of_property_read_u32(np, "clock-accuracy", &accuracy);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -292,11 +312,14 @@  static void __init of_at91rm9200_clk_main_setup(struct device_node *np)
 	const char *parent_name;
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -316,13 +339,16 @@  static void __init of_at91sam9x5_clk_main_setup(struct device_node *np)
 	unsigned int num_parents;
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents == 0 || num_parents > 2)
 		return;
 
 	of_clk_parent_fill(np, parent_names, num_parents);
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -373,6 +399,7 @@  of_at91_clk_master_setup(struct device_node *np,
 	const char *name = np->name;
 	struct clk_master_characteristics *characteristics;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents == 0 || num_parents > MASTER_SOURCE_MAX)
@@ -386,7 +413,9 @@  of_at91_clk_master_setup(struct device_node *np,
 	if (!characteristics)
 		return;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -433,6 +462,7 @@  of_at91_clk_periph_setup(struct device_node *np, u8 type)
 	const char *name;
 	struct device_node *periphclknp;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 	if (!parent_name)
@@ -442,7 +472,9 @@  of_at91_clk_periph_setup(struct device_node *np, u8 type)
 	if (!num || num > PERIPHERAL_MAX)
 		return;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -601,6 +633,7 @@  of_at91_clk_pll_setup(struct device_node *np,
 	struct regmap *regmap;
 	const char *parent_name;
 	const char *name = np->name;
+	struct device_node *parent_np;
 	struct clk_pll_characteristics *characteristics;
 
 	if (of_property_read_u32(np, "reg", &id))
@@ -610,7 +643,9 @@  of_at91_clk_pll_setup(struct device_node *np,
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -665,12 +700,15 @@  of_at91sam9x5_clk_plldiv_setup(struct device_node *np)
 	const char *parent_name;
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -694,8 +732,8 @@  of_at91_clk_prog_setup(struct device_node *np,
 	unsigned int num_parents;
 	const char *parent_names[PROG_SOURCE_MAX];
 	const char *name;
-	struct device_node *progclknp;
 	struct regmap *regmap;
+	struct device_node *progclknp, *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents == 0 || num_parents > PROG_SOURCE_MAX)
@@ -707,7 +745,9 @@  of_at91_clk_prog_setup(struct device_node *np,
 	if (!num || num > (PROG_ID_MAX + 1))
 		return;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -756,13 +796,16 @@  static void __init of_at91sam9260_clk_slow_setup(struct device_node *np)
 	unsigned int num_parents;
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents != 2)
 		return;
 
 	of_clk_parent_fill(np, parent_names, num_parents);
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -788,6 +831,7 @@  static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
 	const char *parent_names[SMD_SOURCE_MAX];
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents == 0 || num_parents > SMD_SOURCE_MAX)
@@ -797,7 +841,9 @@  static void __init of_at91sam9x5_clk_smd_setup(struct device_node *np)
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -818,15 +864,17 @@  static void __init of_at91rm9200_clk_sys_setup(struct device_node *np)
 	u32 id;
 	struct clk_hw *hw;
 	const char *name;
-	struct device_node *sysclknp;
 	const char *parent_name;
 	struct regmap *regmap;
+	struct device_node *sysclknp, *parent_np;
 
 	num = of_get_child_count(np);
 	if (num > (SYSTEM_MAX_ID + 1))
 		return;
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -859,6 +907,7 @@  static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
 	const char *parent_names[USB_SOURCE_MAX];
 	const char *name = np->name;
 	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	num_parents = of_clk_get_parent_count(np);
 	if (num_parents == 0 || num_parents > USB_SOURCE_MAX)
@@ -868,7 +917,9 @@  static void __init of_at91sam9x5_clk_usb_setup(struct device_node *np)
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -885,9 +936,10 @@  CLK_OF_DECLARE(at91sam9x5_clk_usb, "atmel,at91sam9x5-clk-usb",
 static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
 {
 	struct clk_hw *hw;
+	struct regmap *regmap;
 	const char *parent_name;
 	const char *name = np->name;
-	struct regmap *regmap;
+	struct device_node *parent_np;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 	if (!parent_name)
@@ -895,7 +947,9 @@  static void __init of_at91sam9n12_clk_usb_setup(struct device_node *np)
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 
@@ -911,10 +965,11 @@  CLK_OF_DECLARE(at91sam9n12_clk_usb, "atmel,at91sam9n12-clk-usb",
 static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
 {
 	struct clk_hw *hw;
+	struct regmap *regmap;
 	const char *parent_name;
 	const char *name = np->name;
+	struct device_node *parent_np;
 	u32 divisors[4] = {0, 0, 0, 0};
-	struct regmap *regmap;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 	if (!parent_name)
@@ -926,7 +981,9 @@  static void __init of_at91rm9200_clk_usb_setup(struct device_node *np)
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap))
 		return;
 	hw = at91rm9200_clk_register_usb(regmap, name, parent_name, divisors);
@@ -945,13 +1002,16 @@  static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
 	struct clk_hw *hw;
 	const char *parent_name;
 	const char *name = np->name;
+	struct device_node *parent_np;
 	struct regmap *regmap_pmc, *regmap_sfr;
 
 	parent_name = of_clk_get_parent_name(np, 0);
 
 	of_property_read_string(np, "clock-output-names", &name);
 
-	regmap_pmc = syscon_node_to_regmap(of_get_parent(np));
+	parent_np = of_get_parent(np);
+	regmap_pmc = syscon_node_to_regmap(parent_np);
+	of_node_put(parent_np);
 	if (IS_ERR(regmap_pmc))
 		return;