[PATCH 07/10] i2c/aspeed: Fix reset control
Ryan Chen
ryan_chen at aspeedtech.com
Tue Jun 21 10:14:48 CEST 2022
> -----Original Message-----
> From: joel.stan at gmail.com <joel.stan at gmail.com> On Behalf Of Joel Stanley
> Sent: Monday, June 20, 2022 3:25 PM
> To: Ryan Chen <ryan_chen at aspeedtech.com>; BMC-SW
> <BMC-SW at aspeedtech.com>; Heiko Schocher <hs at denx.de>
> Cc: u-boot at lists.denx.de; Cédric Le Goater <clg at 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 <joel at jms.id.au>
Reviewed-by: Ryan Chen <ryan_chen at 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
More information about the U-Boot
mailing list