mfd: axp20x: Mark AXP20X_VBUS_IPSOUT_MGMT as volatile
authorSamuel Holland <samuel@sholland.org>
Sun, 5 Jan 2020 01:24:08 +0000 (19:24 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 Feb 2020 12:34:01 +0000 (04:34 -0800)
commit dc91c3b6fe66a13ac76f6cb3b2100c0779cd3350 upstream.

On AXP288 and newer PMICs, bit 7 of AXP20X_VBUS_IPSOUT_MGMT can be set
to prevent using the VBUS input. However, when the VBUS unplugged and
plugged back in, the bit automatically resets to zero.

We need to set the register as volatile to prevent regmap from caching
that bit. Otherwise, regcache will think the bit is already set and not
write the register.

Fixes: cd53216625a0 ("mfd: axp20x: Fix axp288 volatile ranges")
Cc: stable@vger.kernel.org
Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mfd/axp20x.c

index f8e0fa97bb31e9ad097ea66039aa6d7cd37bd5a6..aa65931142ba7d35b292e65a1bed854908941d90 100644 (file)
@@ -128,7 +128,7 @@ static const struct regmap_range axp288_writeable_ranges[] = {
 static const struct regmap_range axp288_volatile_ranges[] = {
        regmap_reg_range(AXP20X_PWR_INPUT_STATUS, AXP288_POWER_REASON),
        regmap_reg_range(AXP288_BC_GLOBAL, AXP288_BC_GLOBAL),
-       regmap_reg_range(AXP288_BC_DET_STAT, AXP288_BC_DET_STAT),
+       regmap_reg_range(AXP288_BC_DET_STAT, AXP20X_VBUS_IPSOUT_MGMT),
        regmap_reg_range(AXP20X_CHRG_BAK_CTRL, AXP20X_CHRG_BAK_CTRL),
        regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IPSOUT_V_HIGH_L),
        regmap_reg_range(AXP20X_TIMER_CTRL, AXP20X_TIMER_CTRL),