On Fri, 8 Oct 2021 00:17:22 -0500 Samuel Holland <sam...@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 <sam...@sholland.org> Reviewed-by: Andre Przywara <andre.przyw...@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)