[PATCH v2 09/12] sunxi: pmic_bus: Clean up preprocessor conditions

Andre Przywara andre.przywara at arm.com
Tue Oct 12 12:49:34 CEST 2021


On Fri,  8 Oct 2021 00:17:22 -0500
Samuel Holland <samuel at sholland.org> wrote:

> Instead of using the SoC symbols to decide the bus type, use whichever
> bus driver is actually enabled. This allows collapsing all of the AXP2xx
> and AXP8xx variants into one "else" case. It also has the advantage of
> falling back to I2C when the other bus drivers are disabled; this works
> because all of the PMICs support I2C in addition to other interfaces.

Many many thanks for cleaning up this #ifdef mess! I couldn't be bothered
to double check all variants (did I mention that it's a mess?), but I
glanced over it, and it looks alright.

> Signed-off-by: Samuel Holland <samuel at sholland.org>

Reviewed-by: Andre Przywara <andre.przywara at arm.com>

Cheers,
Andre

> ---
> 
> Changes in v2:
> - Update IS_ENABLEDs in pmic_bus.c to match chages to previous patches
> 
>  arch/arm/mach-sunxi/pmic_bus.c | 90 +++++++++++++++-------------------
>  1 file changed, 39 insertions(+), 51 deletions(-)
> 
> diff --git a/arch/arm/mach-sunxi/pmic_bus.c
> b/arch/arm/mach-sunxi/pmic_bus.c index 827797249ea..20ded436cd2 100644
> --- a/arch/arm/mach-sunxi/pmic_bus.c
> +++ b/arch/arm/mach-sunxi/pmic_bus.c
> @@ -23,75 +23,63 @@
>  
>  #define AXP221_CHIP_ADDR		0x68
>  
> +static int pmic_i2c_address(void)
> +{
> +	if (IS_ENABLED(CONFIG_AXP152_POWER))
> +		return AXP152_I2C_ADDR;
> +	if (IS_ENABLED(CONFIG_AXP305_POWER))
> +		return AXP305_I2C_ADDR;
> +
> +	/* Other AXP2xx and AXP8xx variants */
> +	return AXP209_I2C_ADDR;
> +}
> +
>  int pmic_bus_init(void)
>  {
>  	/* This cannot be 0 because it is used in SPL before BSS is
> ready */ static int needs_init = 1;
> -	__maybe_unused int ret;
> +	int ret = 0;
>  
>  	if (!needs_init)
>  		return 0;
>  
> -#if defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER ||
> defined CONFIG_AXP818_POWER -# ifdef CONFIG_MACH_SUN6I
> -	p2wi_init();
> -	ret = p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR,
> AXP_PMIC_MODE_REG,
> -				       AXP_PMIC_MODE_P2WI);
> -# elif defined CONFIG_MACH_SUN8I_R40
> -	/* Nothing. R40 uses the AXP221s in I2C mode */
> -	ret = 0;
> -# else
> -	ret = rsb_init();
> -	if (ret)
> -		return ret;
> +	if (IS_ENABLED(CONFIG_SYS_I2C_SUN6I_P2WI)) {
> +		p2wi_init();
> +		ret = p2wi_change_to_p2wi_mode(AXP221_CHIP_ADDR,
> +					       AXP_PMIC_MODE_REG,
> +					       AXP_PMIC_MODE_P2WI);
> +	} else if (IS_ENABLED(CONFIG_SYS_I2C_SUN8I_RSB)) {
> +		ret = rsb_init();
> +		if (ret)
> +			return ret;
>  
> -	ret = rsb_set_device_address(AXP_PMIC_PRI_DEVICE_ADDR,
> -				     AXP_PMIC_PRI_RUNTIME_ADDR);
> -# endif
> -	if (ret)
> -		return ret;
> -#endif
> +		ret = rsb_set_device_address(AXP_PMIC_PRI_DEVICE_ADDR,
> +					     AXP_PMIC_PRI_RUNTIME_ADDR);
> +	}
> +
> +	needs_init = ret;
>  
> -	needs_init = 0;
> -	return 0;
> +	return ret;
>  }
>  
>  int pmic_bus_read(u8 reg, u8 *data)
>  {
> -#ifdef CONFIG_AXP152_POWER
> -	return i2c_read(AXP152_I2C_ADDR, reg, 1, data, 1);
> -#elif defined CONFIG_AXP209_POWER
> -	return i2c_read(AXP209_I2C_ADDR, reg, 1, data, 1);
> -#elif defined CONFIG_AXP305_POWER
> -	return i2c_read(AXP305_I2C_ADDR, reg, 1, data, 1);
> -#elif defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER ||
> defined CONFIG_AXP818_POWER -# ifdef CONFIG_MACH_SUN6I
> -	return p2wi_read(reg, data);
> -# elif defined CONFIG_MACH_SUN8I_R40
> -	return i2c_read(AXP209_I2C_ADDR, reg, 1, data, 1);
> -# else
> -	return rsb_read(AXP_PMIC_PRI_RUNTIME_ADDR, reg, data);
> -# endif
> -#endif
> +	if (IS_ENABLED(CONFIG_SYS_I2C_SUN6I_P2WI))
> +		return p2wi_read(reg, data);
> +	if (IS_ENABLED(CONFIG_SYS_I2C_SUN8I_RSB))
> +		return rsb_read(AXP_PMIC_PRI_RUNTIME_ADDR, reg, data);
> +
> +	return i2c_read(pmic_i2c_address(), reg, 1, data, 1);
>  }
>  
>  int pmic_bus_write(u8 reg, u8 data)
>  {
> -#ifdef CONFIG_AXP152_POWER
> -	return i2c_write(AXP152_I2C_ADDR, reg, 1, &data, 1);
> -#elif defined CONFIG_AXP209_POWER
> -	return i2c_write(AXP209_I2C_ADDR, reg, 1, &data, 1);
> -#elif defined CONFIG_AXP305_POWER
> -	return i2c_write(AXP305_I2C_ADDR, reg, 1, &data, 1);
> -#elif defined CONFIG_AXP221_POWER || defined CONFIG_AXP809_POWER ||
> defined CONFIG_AXP818_POWER -# ifdef CONFIG_MACH_SUN6I
> -	return p2wi_write(reg, data);
> -# elif defined CONFIG_MACH_SUN8I_R40
> -	return i2c_write(AXP209_I2C_ADDR, reg, 1, &data, 1);
> -# else
> -	return rsb_write(AXP_PMIC_PRI_RUNTIME_ADDR, reg, data);
> -# endif
> -#endif
> +	if (IS_ENABLED(CONFIG_SYS_I2C_SUN6I_P2WI))
> +		return p2wi_write(reg, data);
> +	if (IS_ENABLED(CONFIG_SYS_I2C_SUN8I_RSB))
> +		return rsb_write(AXP_PMIC_PRI_RUNTIME_ADDR, reg, data);
> +
> +	return i2c_write(pmic_i2c_address(), reg, 1, &data, 1);
>  }
>  
>  int pmic_bus_setbits(u8 reg, u8 bits)



More information about the U-Boot mailing list