Messages in this thread Patch in this message |  | | From | Krzysztof Kozlowski <> | Subject | [PATCH] regulator: s5m8767: Disable OVCB in probe | Date | Tue, 12 Nov 2013 14:41:55 +0100 |
| |
According to SW Guide the Over-Voltage Clamp may malfunction at VBatt 5.25V and 110'C temperature. This may result in overshooting or undershooting LDO's voltage outputs. Disable the Over-Voltage Clamp in probe by updating proper bit in all LDO registers.
The patch uses sec_bulk_read/write() API with reordered buf and count parameters so it depends on: "mfd: sec: reorder params in API for regmap consistency" http://www.spinics.net/lists/kernel/msg1632519.html
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> --- drivers/regulator/s5m8767.c | 26 ++++++++++++++++++++++++++ include/linux/mfd/samsung/s5m8767.h | 1 + 2 files changed, 27 insertions(+)
diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c index ac10db4..7c6fb97 100644 --- a/drivers/regulator/s5m8767.c +++ b/drivers/regulator/s5m8767.c @@ -478,6 +478,26 @@ static struct regulator_desc regulators[] = { s5m8767_regulator_desc(BUCK9), }; +/* + * Disables Over-Voltage Clamp for all LDO-s. + */ +static int s5m8767_reg_disable_ldo_ovcb(struct s5m8767_info *s5m8767) +{ + u8 data[28]; + int i, ret; + + ret = sec_bulk_read(s5m8767->iodev, S5M8767_REG_LDO1, data, + ARRAY_SIZE(data)); + if (ret) + return ret; + + for (i = 0; i < ARRAY_SIZE(data); i++) + data[i] |= (1 << S5M8767_REG_LDO_SHIFT); + + return sec_bulk_write(s5m8767->iodev, S5M8767_REG_LDO1, data, + ARRAY_SIZE(data)); +} + #ifdef CONFIG_OF static int s5m8767_pmic_dt_parse_dvs_gpio(struct sec_pmic_dev *iodev, struct sec_platform_data *pdata, @@ -886,6 +906,12 @@ static int s5m8767_pmic_probe(struct platform_device *pdev) } } + /* + * Disable Over-Voltage Clamp, + * possible malfunction at VBatt 5.25V and 110'C temperature + */ + s5m8767_reg_disable_ldo_ovcb(s5m8767); + for (i = 0; i < pdata->num_regulators; i++) { const struct sec_voltage_desc *desc; int id = pdata->regulators[i].id; diff --git a/include/linux/mfd/samsung/s5m8767.h b/include/linux/mfd/samsung/s5m8767.h index 306a95f..d6c09a0 100644 --- a/include/linux/mfd/samsung/s5m8767.h +++ b/include/linux/mfd/samsung/s5m8767.h @@ -184,5 +184,6 @@ enum s5m8767_regulators { }; #define S5M8767_ENCTRL_SHIFT 6 +#define S5M8767_REG_LDO_SHIFT 7 #endif /* __LINUX_MFD_S5M8767_H */ -- 1.7.9.5
|  |