On Mon, 28 Mar 2016, Krzysztof Kozlowski wrote: > The buck9 regulator of S2MPS11 PMIC lacked minimal selector for linear > mapping. The mapping starts from 0x40 (3 V). > > This buck9 provides power to other regulators, including LDO13 and LDO19 > which supply the MMC2 (SD card). > > Bootloader initializes the regulator with value of 0xff (5 V) which is > outside of supported voltage range. When (during boot) constraints to > buck9 were applied, the driver wrote value counting from 0x00, not 0x40. > Effectively driver set lower voltage than required leading to SD card > detection errors on Odroid XU3/XU4: > mmc1: card never left busy state > mmc1: error -110 whilst initialising SD card > > Fixes: cb74685ecb39 ("regulator: s2mps11: Add samsung s2mps11 regulator driver") > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> > > --- > > The issue can be reproduced on next-20160324 with > bae4fdc88d7f7dda1 (regulator: core: Ensure we are at least in bounds > for our constraints). > --- > drivers/regulator/s2mps11.c | 19 ++++++++++++++++++- > include/linux/mfd/samsung/s2mps11.h | 9 +++++++++ > 2 files changed, 27 insertions(+), 1 deletion(-) [...] > diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h > index b288965e8101..3937a932bfe0 100644 > --- a/include/linux/mfd/samsung/s2mps11.h > +++ b/include/linux/mfd/samsung/s2mps11.h > @@ -173,10 +173,19 @@ enum s2mps11_regulators { > > #define S2MPS11_LDO_VSEL_MASK 0x3F > #define S2MPS11_BUCK_VSEL_MASK 0xFF > +#define S2MPS11_BUCK9_MIN_VSEL 0x40 > #define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT) > #define S2MPS11_ENABLE_SHIFT 0x06 > #define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1) > #define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1) > +/* > + * Buck9 supports only 32 voltages (values from 0x40 to 0x5F) but bootloader > + * initializes the register with value of 0xff so when probing this would > + * cause a failure (Odroid XU3): > + * vdd_2.8v_ldo: failed to get the current voltage(-22) > + * Instead pretend we support up to 0xff (5 V). > + */ > +#define S2MPS11_BUCK9_N_VOLTAGES 192 Err... NACK. Please go and fix the bootloader instead of hacking the kernel. > #define S2MPS11_RAMP_DELAY 25000 /* uV/us */ > > #define S2MPS11_CTRL1_PWRHOLD_MASK BIT(4) -- 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 linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html