> -----Original Message-----
> From: joel.s...@gmail.com <joel.s...@gmail.com> On Behalf Of Joel Stanley
> Sent: Monday, June 20, 2022 3:25 PM
> To: Ryan Chen <ryan_c...@aspeedtech.com>; BMC-SW
> <bmc...@aspeedtech.com>; Heiko Schocher <h...@denx.de>
> Cc: u-boot@lists.denx.de; Cédric Le Goater <c...@kaod.org>
> Subject: [PATCH 07/10] i2c/aspeed: Fix reset control
> 
> The reset control was written for the ast2500 and directly programs the
> clocking register.
> 
> So we can share the code with other SoC generations use the reset device to
> deassert the I2C reset line.
> 
> Signed-off-by: Joel Stanley <j...@jms.id.au>
Reviewed-by: Ryan Chen <ryan_c...@aspeedtech.com>
> ---
>  drivers/i2c/ast_i2c.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c index
> 2d3fecaa14ea..0a93d7c82911 100644
> --- a/drivers/i2c/ast_i2c.c
> +++ b/drivers/i2c/ast_i2c.c
> @@ -16,6 +16,7 @@
>  #include <asm/arch/scu_ast2500.h>
>  #include <linux/delay.h>
>  #include <linux/err.h>
> +#include <reset.h>
> 
>  #include "ast_i2c.h"
> 
> @@ -108,19 +109,26 @@ static int ast_i2c_of_to_plat(struct udevice *dev)
> 
>  static int ast_i2c_probe(struct udevice *dev)  {
> -     struct ast2500_scu *scu;
> +     struct reset_ctl reset_ctl;
> +     int rc;
> 
>       debug("Enabling I2C%u\n", dev_seq(dev));
> 
>       /*
>        * Get all I2C devices out of Reset.
> -      * Only needs to be done once, but doing it for every
> -      * device does not hurt.
> +      *
> +      * Only needs to be done once so test before performing reset.
>        */
> -     scu = ast_get_scu();
> -     ast_scu_unlock(scu);
> -     clrbits_le32(&scu->sysreset_ctrl1, SCU_SYSRESET_I2C);
> -     ast_scu_lock(scu);
> +     rc = reset_get_by_index(dev, 0, &reset_ctl);
> +     if (rc) {
> +             printf("%s: Failed to get reset signal\n", __func__);
> +             return rc;
> +     }
> +
> +     if (reset_status(&reset_ctl) > 0) {
> +             reset_assert(&reset_ctl);
> +             reset_deassert(&reset_ctl);
> +     }
> 
>       ast_i2c_init_bus(dev);
> 
> --
> 2.35.1

Reply via email to