[PATCH v3 26/32] clk: at91: at91sam9x5: switch to parent_hw and parent_data
Claudiu Beznea
claudiu.beznea at tuxon.dev
Sat Sep 6 11:52:04 PDT 2025
On 9/3/25 18:16, claudiu beznea wrote:
>
>
> On 7/10/25 23:07, Ryan.Wanner at microchip.com wrote:
>> From: Claudiu Beznea <claudiu.beznea at tuxon.dev>
>>
>> Switch AT91SAM9X5 clocks to use parent_hw and parent_data. Having
>> parent_hw instead of parent names improves to clock registration
>> speed and re-parenting.
>>
>> Signed-off-by: Claudiu Beznea <claudiu.beznea at tuxon.dev>
>> Signed-off-by: Ryan Wanner <Ryan.Wanner at microchip.com>
>> ---
>> drivers/clk/at91/at91sam9x5.c | 125 ++++++++++++++++++----------------
>> 1 file changed, 65 insertions(+), 60 deletions(-)
>>
>> diff --git a/drivers/clk/at91/at91sam9x5.c b/drivers/clk/at91/at91sam9x5.c
>> index 13331e015dd7..f6138622ab50 100644
>> --- a/drivers/clk/at91/at91sam9x5.c
>> +++ b/drivers/clk/at91/at91sam9x5.c
>> @@ -38,9 +38,9 @@ static const struct clk_pll_characteristics
>> plla_characteristics = {
>> .out = plla_out,
>> };
>> -static const struct {
>> +static struct {
>> char *n;
>> - char *p;
>> + struct clk_hw *parent_hw;
>> unsigned long flags;
>> u8 id;
>> } at91sam9x5_systemck[] = {
>> @@ -48,12 +48,12 @@ static const struct {
>> * ddrck feeds DDR controller and is enabled by bootloader thus we
>> need
>> * to keep it enabled in case there is no Linux consumer for it.
>> */
>> - { .n = "ddrck", .p = "masterck_div", .id = 2, .flags =
>> CLK_IS_CRITICAL },
>> - { .n = "smdck", .p = "smdclk", .id = 4 },
>> - { .n = "uhpck", .p = "usbck", .id = 6 },
>> - { .n = "udpck", .p = "usbck", .id = 7 },
>> - { .n = "pck0", .p = "prog0", .id = 8 },
>> - { .n = "pck1", .p = "prog1", .id = 9 },
>> + { .n = "ddrck", .id = 2, .flags = CLK_IS_CRITICAL },
>> + { .n = "smdck", .id = 4 },
>> + { .n = "uhpck", .id = 6 },
>> + { .n = "udpck", .id = 7 },
>> + { .n = "pck0", .id = 8 },
>> + { .n = "pck1", .id = 9 },
>> };
>> static const struct clk_pcr_layout at91sam9x5_pcr_layout = {
>> @@ -133,25 +133,16 @@ static void __init at91sam9x5_pmc_setup(struct
>> device_node *np,
>> const struct pck *extra_pcks,
>> bool has_lcdck)
>> {
>> + const char *slow_clk_name = "slowck", *main_xtal_name = "main_xtal";
>> + struct clk_hw *main_rc_hw, *main_osc_hw, *hw;
>> + u8 slow_clk_index = 0, main_xtal_index = 0;
>> struct clk_range range = CLK_RANGE(0, 0);
>> - const char *slck_name, *mainxtal_name;
>> + struct clk_parent_data parent_data[6];
>> + struct clk_hw *smdck_hw, *usbck_hw;
>> struct pmc_data *at91sam9x5_pmc;
>> - const char *parent_names[6];
>> struct regmap *regmap;
>> - struct clk_hw *hw;
>> - int i;
>> bool bypass;
>> -
>> - i = of_property_match_string(np, "clock-names", "slow_clk");
>> - if (i < 0)
>> - return;
>> -
>> - slck_name = of_clk_get_parent_name(np, i);
>> -
>> - i = of_property_match_string(np, "clock-names", "main_xtal");
>> - if (i < 0)
>> - return;
>> - mainxtal_name = of_clk_get_parent_name(np, i);
Same here, and same for the rest of conversion patches.
More information about the linux-arm-kernel
mailing list