On Wed, 22 Feb 2017, Rask Ingemann Lambertsen wrote: > commit b101829a029a ("mfd: axp20x: Fix AXP806 access errors on cold boot") > was intended to fix the case where a board uses an AXP806 in slave mode, > but the boot loader leaves it in master mode for lack of AXP806 support. > But now the driver breaks on boards where the PMIC is operating in master > mode. This patch lets the driver use the new device tree property > "xpowers,master-mode" to set the correct operating mode for the board. > > Fixes: 8824ee857348 ("mfd: axp20x: Add support for AXP806 PMIC") > Signed-off-by: Rask Ingemann Lambertsen <rask@xxxxxxxxxxxx> > --- > Changes from v1 to v2: > Changed the commit message such that Fixes: points to the commit which added > the AXP806 driver because the property should have been included from the > beginning of the AXP806 support. > > drivers/mfd/axp20x.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) Applied, thanks. > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > index 25115fe..0512900 100644 > --- a/drivers/mfd/axp20x.c > +++ b/drivers/mfd/axp20x.c > @@ -31,6 +31,7 @@ > > #define AXP20X_OFF 0x80 > > +#define AXP806_REG_ADDR_EXT_ADDR_MASTER_MODE 0 > #define AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE BIT(4) > > static const char * const axp20x_model_names[] = { > @@ -877,15 +878,19 @@ int axp20x_device_probe(struct axp20x_dev *axp20x) > * the these device addressing bits (in the upper 4 bits of the > * registers) match. > * > - * Since we only support an AXP806 chained to an AXP809 in slave > - * mode, and there isn't any existing hardware which uses AXP806 > - * in master mode, or has 2 AXP806s in the same system, we can > - * just program the register address extension to the slave mode > - * address. > + * By default we support an AXP806 chained to an AXP809 in slave > + * mode. Boards which use an AXP806 in master mode can set the > + * property "x-powers,master-mode" to override the default. > */ > - if (axp20x->variant == AXP806_ID) > - regmap_write(axp20x->regmap, AXP806_REG_ADDR_EXT, > - AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE); > + if (axp20x->variant == AXP806_ID) { > + if (of_property_read_bool(axp20x->dev->of_node, > + "x-powers,master-mode")) > + regmap_write(axp20x->regmap, AXP806_REG_ADDR_EXT, > + AXP806_REG_ADDR_EXT_ADDR_MASTER_MODE); > + else > + regmap_write(axp20x->regmap, AXP806_REG_ADDR_EXT, > + AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE); > + } > > ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq, > IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags, -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html