[PATCH AUTOSEL 6.1 27/27] i2c: rk3x: Adjust mask/value offset for i2c2 on rv1126

Tim Lunn tim at feathertop.org
Sun Jan 28 15:19:35 PST 2024


Hi Sasha,

   Support for the rv1126 SoC was only added around linux 6.2 and 6.3, 
thus doesnt make sense to pick this patch up in 6.1

Regards
   Tim

On 1/29/24 03:14, Sasha Levin wrote:
> From: Tim Lunn <tim at feathertop.org>
>
> [ Upstream commit 92a85b7c6262f19c65a1c115cf15f411ba65a57c ]
>
> Rockchip RV1126 is using old style i2c controller, the i2c2
> bus uses a non-sequential offset in the grf register for the
> mask/value bits for this bus.
>
> This patch fixes i2c2 bus on rv1126 SoCs.
>
> Signed-off-by: Tim Lunn <tim at feathertop.org>
> Acked-by: Heiko Stuebner <heiko at sntech.de>
> Reviewed-by: Andi Shyti <andi.shyti at kernel.org>
> Signed-off-by: Wolfram Sang <wsa at kernel.org>
> Signed-off-by: Sasha Levin <sashal at kernel.org>
> ---
>   drivers/i2c/busses/i2c-rk3x.c | 8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
> index 6aa4f1f06240..c8cd5cadcf56 100644
> --- a/drivers/i2c/busses/i2c-rk3x.c
> +++ b/drivers/i2c/busses/i2c-rk3x.c
> @@ -1295,8 +1295,12 @@ static int rk3x_i2c_probe(struct platform_device *pdev)
>   			return -EINVAL;
>   		}
>   
> -		/* 27+i: write mask, 11+i: value */
> -		value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
> +		/* rv1126 i2c2 uses non-sequential write mask 20, value 4 */
> +		if (i2c->soc_data == &rv1126_soc_data && bus_nr == 2)
> +			value = BIT(20) | BIT(4);
> +		else
> +			/* 27+i: write mask, 11+i: value */
> +			value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
>   
>   		ret = regmap_write(grf, i2c->soc_data->grf_offset, value);
>   		if (ret != 0) {



More information about the Linux-rockchip mailing list