[PATCH v3 06/19] clk: at91: Allow enabling main_rc_osc through DT
Claudiu Beznea
claudiu.beznea at tuxon.dev
Sat Jan 31 07:45:37 PST 2026
On 1/20/26 16:37, Alexander Dahl wrote:
> SAM9X60 Datasheet (DS60001579G) Section "23.4 Product Dependencies"
> says:
s/says/states
>
> "The OTPC is clocked through the Power Management Controller (PMC).
> The user must power on the main RC oscillator and enable the
> peripheral clock of the OTPC prior to reading or writing the OTP
> memory."
>
> The code for enabling/disabling that clock is already present
s/that clock/the main RC oscillator clock
> it was
> just not possible to hook into DT anymore, after at91 clk devicetree
> binding rework back in 2018 for kernel v4.19.
I would re-write this as:
however, after the at91 clock device tree binding rework in 2018
(kernel v4.19), it was no longer possible to hook it up via DT.
>
> Do it for all controllers with an OTPC controller, where the main rc
> oscillator is required for proper operation.
I would re-write it as:
Export the main RC oscillator for all SoCs featuring an OTPC controller where
the main RC oscillator is required for proper operation.
>
> Signed-off-by: Alexander Dahl <ada at thorsis.com>
The code LGTM.
> ---
>
> Notes:
> v3:
> - no changes
>
> v2:
> - split out dt-bindings changes into separate patch
> - extend to drivers for other SoCs providing the OTPC
>
> drivers/clk/at91/sam9x60.c | 1 +
> drivers/clk/at91/sam9x7.c | 1 +
> drivers/clk/at91/sama7d65.c | 1 +
> drivers/clk/at91/sama7g5.c | 1 +
> 4 files changed, 4 insertions(+)
>
> diff --git a/drivers/clk/at91/sam9x60.c b/drivers/clk/at91/sam9x60.c
> index dbcdb1d2161a9..a9f293a8e3b26 100644
> --- a/drivers/clk/at91/sam9x60.c
> +++ b/drivers/clk/at91/sam9x60.c
> @@ -227,6 +227,7 @@ static void __init sam9x60_pmc_setup(struct device_node *np)
> 50000000);
> if (IS_ERR(hw))
> goto err_free;
> + sam9x60_pmc->chws[SAM9X60_PMC_MAIN_RC] = hw;
>
> hw = at91_clk_register_main_osc(regmap, "main_osc", mainxtal_name, NULL, 0);
> if (IS_ERR(hw))
> diff --git a/drivers/clk/at91/sam9x7.c b/drivers/clk/at91/sam9x7.c
> index 07eadb712a1e4..9a5afd258cb86 100644
> --- a/drivers/clk/at91/sam9x7.c
> +++ b/drivers/clk/at91/sam9x7.c
> @@ -764,6 +764,7 @@ static void __init sam9x7_pmc_setup(struct device_node *np)
> 50000000);
> if (IS_ERR(hw))
> goto err_free;
> + sam9x7_pmc->chws[SAM9X7_PMC_MAIN_RC] = hw;
>
> hw = at91_clk_register_main_osc(regmap, "main_osc", mainxtal_name, NULL, 0);
> if (IS_ERR(hw))
> diff --git a/drivers/clk/at91/sama7d65.c b/drivers/clk/at91/sama7d65.c
> index 4ccffa8db43a5..5d8973aa50a53 100644
> --- a/drivers/clk/at91/sama7d65.c
> +++ b/drivers/clk/at91/sama7d65.c
> @@ -1135,6 +1135,7 @@ static void __init sama7d65_pmc_setup(struct device_node *np)
> 50000000);
> if (IS_ERR(main_rc_hw))
> goto err_free;
> + sama7d65_pmc->chws[SAMA7D65_PMC_MAIN_RC] = hw;
>
> bypass = of_property_read_bool(np, "atmel,osc-bypass");
>
> diff --git a/drivers/clk/at91/sama7g5.c b/drivers/clk/at91/sama7g5.c
> index 99b4c1d9bdcca..9a6f0f30b2b7e 100644
> --- a/drivers/clk/at91/sama7g5.c
> +++ b/drivers/clk/at91/sama7g5.c
> @@ -1014,6 +1014,7 @@ static void __init sama7g5_pmc_setup(struct device_node *np)
> 50000000);
> if (IS_ERR(main_rc_hw))
> goto err_free;
> + sama7g5_pmc->chws[SAMA7G5_PMC_MAIN_RC] = hw;
>
> bypass = of_property_read_bool(np, "atmel,osc-bypass");
>
More information about the linux-arm-kernel
mailing list