Buck1 and buck6 share the field (offset 4) in ramp delay register (S2MPA01_REG_RAMP1). The buck3 uses its own field in S2MPA01_REG_RAMP2 register, also at offset 4. The driver interchanged the registers for ramp delay of buck3 and buck6. This lead to updating ramp delay for wrong buck (buck3 instead of buck6 and vice versa). Cc: <stable@xxxxxxxxxxxxxxx> Fixes: f18792714608 ("regulator: Add support for S2MPA01 regulator") Signed-off-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> --- drivers/regulator/s2mpa01.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/regulator/s2mpa01.c b/drivers/regulator/s2mpa01.c index f19a30f0fb42..67a5ab335dae 100644 --- a/drivers/regulator/s2mpa01.c +++ b/drivers/regulator/s2mpa01.c @@ -137,17 +137,16 @@ static int s2mpa01_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) enable_shift = S2MPA01_BUCK3_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } s2mpa01->ramp_delay3 = ramp_delay; ramp_shift = S2MPA01_BUCK3_RAMP_SHIFT; - ramp_reg = S2MPA01_REG_RAMP1; break; case S2MPA01_BUCK4: enable_shift = S2MPA01_BUCK4_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } @@ -165,16 +164,17 @@ static int s2mpa01_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) break; case S2MPA01_BUCK6: if (ramp_delay > s2mpa01->ramp_delay16) s2mpa01->ramp_delay16 = ramp_delay; else ramp_delay = s2mpa01->ramp_delay16; ramp_shift = S2MPA01_BUCK16_RAMP_SHIFT; + ramp_reg = S2MPA01_REG_RAMP1; break; case S2MPA01_BUCK7: s2mpa01->ramp_delay7 = ramp_delay; ramp_shift = S2MPA01_BUCK7_RAMP_SHIFT; break; case S2MPA01_BUCK8: case S2MPA01_BUCK9: case S2MPA01_BUCK10: -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html