On Thu, 17 Mar 2022 23:52:36 -0500
Samuel Holland <sam...@sholland.org> wrote:

> Currently, clock/reset setup for this device is handled by a
> platform-specific function and is intermixed with non-DM pinctrl
> setup. Use the devicetree to get clocks/resets, which disentagles
> it from the pinctrl setup in preparation for moving to DM_PINCTRL.
> 
> This also has the added benefit of picking the right clock/reset
> bits for H6 and new SoCs that have a rearranged PRCM MMIO space.

So does this actually work right now with the A23/A33? They have specific
clocks for the RSB gates/resets, and I don't see support for that in the
tree right now? Or this is just fine because those clocks are treated
optional and their enabling is actually redundant, in practice?

Cheers,
Andre

> 
> Signed-off-by: Samuel Holland <sam...@sholland.org>
> ---
> 
>  drivers/i2c/sun8i_rsb.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/i2c/sun8i_rsb.c b/drivers/i2c/sun8i_rsb.c
> index 0681e398f7..e3a44e6a1b 100644
> --- a/drivers/i2c/sun8i_rsb.c
> +++ b/drivers/i2c/sun8i_rsb.c
> @@ -9,10 +9,12 @@
>   */
>  
>  #include <axp_pmic.h>
> +#include <clk.h>
>  #include <common.h>
>  #include <dm.h>
>  #include <errno.h>
>  #include <i2c.h>
> +#include <reset.h>
>  #include <time.h>
>  #include <asm/arch/cpu.h>
>  #include <asm/arch/gpio.h>
> @@ -243,9 +245,19 @@ static int sun8i_rsb_probe_chip(struct udevice *bus, 
> uint chip_addr,
>  static int sun8i_rsb_probe(struct udevice *bus)
>  {
>       struct sun8i_rsb_priv *priv = dev_get_priv(bus);
> +     struct reset_ctl *reset;
> +     struct clk *clk;
>  
>       priv->base = dev_read_addr_ptr(bus);
>  
> +     reset = devm_reset_control_get(bus, NULL);
> +     if (!IS_ERR(reset))
> +             reset_deassert(reset);
> +
> +     clk = devm_clk_get(bus, NULL);
> +     if (!IS_ERR(clk))
> +             clk_enable(clk);
> +
>       return sun8i_rsb_init(priv->base);
>  }
>  

Reply via email to