regulator: lm363x: Add support for LM36274
Adding regulator support for the LM36274 backlight driver. This device can leverage this existing code as the functionality and registers are common enough between the LM36274 and the LM363x series of devices. Signed-off-by: Dan Murphy <dmurphy@ti.com> Acked-by: Mark Brown <broonie@kernel.org> Acked-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
This commit is contained in:
parent
9c523efb74
commit
bff5e80715
|
@ -363,7 +363,7 @@ config REGULATOR_LM363X
|
||||||
tristate "TI LM363X voltage regulators"
|
tristate "TI LM363X voltage regulators"
|
||||||
depends on MFD_TI_LMU
|
depends on MFD_TI_LMU
|
||||||
help
|
help
|
||||||
This driver supports LM3631 and LM3632 voltage regulators for
|
This driver supports LM3631, LM3632 and LM36274 voltage regulators for
|
||||||
the LCD bias.
|
the LCD bias.
|
||||||
One boost output voltage is configurable and always on.
|
One boost output voltage is configurable and always on.
|
||||||
Other LDOs are used for the display module.
|
Other LDOs are used for the display module.
|
||||||
|
|
|
@ -37,6 +37,11 @@
|
||||||
#define LM3632_VBOOST_MIN 4500000
|
#define LM3632_VBOOST_MIN 4500000
|
||||||
#define LM3632_VLDO_MIN 4000000
|
#define LM3632_VLDO_MIN 4000000
|
||||||
|
|
||||||
|
/* LM36274 */
|
||||||
|
#define LM36274_BOOST_VSEL_MAX 0x3f
|
||||||
|
#define LM36274_LDO_VSEL_MAX 0x34
|
||||||
|
#define LM36274_VOLTAGE_MIN 4000000
|
||||||
|
|
||||||
/* Common */
|
/* Common */
|
||||||
#define LM363X_STEP_50mV 50000
|
#define LM363X_STEP_50mV 50000
|
||||||
#define LM363X_STEP_500mV 500000
|
#define LM363X_STEP_500mV 500000
|
||||||
|
@ -217,6 +222,51 @@ static const struct regulator_desc lm363x_regulator_desc[] = {
|
||||||
.enable_reg = LM3632_REG_BIAS_CONFIG,
|
.enable_reg = LM3632_REG_BIAS_CONFIG,
|
||||||
.enable_mask = LM3632_EN_VNEG_MASK,
|
.enable_mask = LM3632_EN_VNEG_MASK,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* LM36274 */
|
||||||
|
{
|
||||||
|
.name = "vboost",
|
||||||
|
.of_match = "vboost",
|
||||||
|
.id = LM36274_BOOST,
|
||||||
|
.ops = &lm363x_boost_voltage_table_ops,
|
||||||
|
.n_voltages = LM36274_BOOST_VSEL_MAX,
|
||||||
|
.min_uV = LM36274_VOLTAGE_MIN,
|
||||||
|
.uV_step = LM363X_STEP_50mV,
|
||||||
|
.type = REGULATOR_VOLTAGE,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.vsel_reg = LM36274_REG_VOUT_BOOST,
|
||||||
|
.vsel_mask = LM36274_VOUT_MASK,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "ldo_vpos",
|
||||||
|
.of_match = "vpos",
|
||||||
|
.id = LM36274_LDO_POS,
|
||||||
|
.ops = &lm363x_regulator_voltage_table_ops,
|
||||||
|
.n_voltages = LM36274_LDO_VSEL_MAX,
|
||||||
|
.min_uV = LM36274_VOLTAGE_MIN,
|
||||||
|
.uV_step = LM363X_STEP_50mV,
|
||||||
|
.type = REGULATOR_VOLTAGE,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.vsel_reg = LM36274_REG_VOUT_POS,
|
||||||
|
.vsel_mask = LM36274_VOUT_MASK,
|
||||||
|
.enable_reg = LM36274_REG_BIAS_CONFIG_1,
|
||||||
|
.enable_mask = LM36274_EN_VPOS_MASK,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "ldo_vneg",
|
||||||
|
.of_match = "vneg",
|
||||||
|
.id = LM36274_LDO_NEG,
|
||||||
|
.ops = &lm363x_regulator_voltage_table_ops,
|
||||||
|
.n_voltages = LM36274_LDO_VSEL_MAX,
|
||||||
|
.min_uV = LM36274_VOLTAGE_MIN,
|
||||||
|
.uV_step = LM363X_STEP_50mV,
|
||||||
|
.type = REGULATOR_VOLTAGE,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.vsel_reg = LM36274_REG_VOUT_NEG,
|
||||||
|
.vsel_mask = LM36274_VOUT_MASK,
|
||||||
|
.enable_reg = LM36274_REG_BIAS_CONFIG_1,
|
||||||
|
.enable_mask = LM36274_EN_VNEG_MASK,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gpio_desc *lm363x_regulator_of_get_enable_gpio(struct device *dev, int id)
|
static struct gpio_desc *lm363x_regulator_of_get_enable_gpio(struct device *dev, int id)
|
||||||
|
@ -229,9 +279,11 @@ static struct gpio_desc *lm363x_regulator_of_get_enable_gpio(struct device *dev,
|
||||||
*/
|
*/
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case LM3632_LDO_POS:
|
case LM3632_LDO_POS:
|
||||||
|
case LM36274_LDO_POS:
|
||||||
return gpiod_get_index_optional(dev, "enable", 0,
|
return gpiod_get_index_optional(dev, "enable", 0,
|
||||||
GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
|
GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
|
||||||
case LM3632_LDO_NEG:
|
case LM3632_LDO_NEG:
|
||||||
|
case LM36274_LDO_NEG:
|
||||||
return gpiod_get_index_optional(dev, "enable", 1,
|
return gpiod_get_index_optional(dev, "enable", 1,
|
||||||
GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
|
GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
|
||||||
default:
|
default:
|
||||||
|
@ -239,6 +291,27 @@ static struct gpio_desc *lm363x_regulator_of_get_enable_gpio(struct device *dev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lm363x_regulator_set_ext_en(struct regmap *regmap, int id)
|
||||||
|
{
|
||||||
|
int ext_en_mask = 0;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case LM3632_LDO_POS:
|
||||||
|
case LM3632_LDO_NEG:
|
||||||
|
ext_en_mask = LM3632_EXT_EN_MASK;
|
||||||
|
break;
|
||||||
|
case LM36274_LDO_POS:
|
||||||
|
case LM36274_LDO_NEG:
|
||||||
|
ext_en_mask = LM36274_EXT_EN_MASK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
return regmap_update_bits(regmap, lm363x_regulator_desc[id].enable_reg,
|
||||||
|
ext_en_mask, ext_en_mask);
|
||||||
|
}
|
||||||
|
|
||||||
static int lm363x_regulator_probe(struct platform_device *pdev)
|
static int lm363x_regulator_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct ti_lmu *lmu = dev_get_drvdata(pdev->dev.parent);
|
struct ti_lmu *lmu = dev_get_drvdata(pdev->dev.parent);
|
||||||
|
@ -263,10 +336,7 @@ static int lm363x_regulator_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
if (gpiod) {
|
if (gpiod) {
|
||||||
cfg.ena_gpiod = gpiod;
|
cfg.ena_gpiod = gpiod;
|
||||||
|
ret = lm363x_regulator_set_ext_en(regmap, id);
|
||||||
ret = regmap_update_bits(regmap, LM3632_REG_BIAS_CONFIG,
|
|
||||||
LM3632_EXT_EN_MASK,
|
|
||||||
LM3632_EXT_EN_MASK);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
gpiod_put(gpiod);
|
gpiod_put(gpiod);
|
||||||
dev_err(dev, "External pin err: %d\n", ret);
|
dev_err(dev, "External pin err: %d\n", ret);
|
||||||
|
|
Loading…
Reference in New Issue