Commit 4f73ccad authored by Axel Lin's avatar Axel Lin Committed by Mark Brown

regulator: lp3972: Use regulator_list_voltage_table()

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent ec1cc4d9
...@@ -74,54 +74,40 @@ struct lp3972 { ...@@ -74,54 +74,40 @@ struct lp3972 {
#define LP3972_OVER2_LDO4_EN BIT(4) #define LP3972_OVER2_LDO4_EN BIT(4)
#define LP3972_OVER1_S_EN BIT(2) #define LP3972_OVER1_S_EN BIT(2)
static const int ldo1_voltage_map[] = { static const unsigned int ldo1_voltage_map[] = {
1700, 1725, 1750, 1775, 1800, 1825, 1850, 1875, 1700000, 1725000, 1750000, 1775000, 1800000, 1825000, 1850000, 1875000,
1900, 1925, 1950, 1975, 2000, 1900000, 1925000, 1950000, 1975000, 2000000,
}; };
static const int ldo23_voltage_map[] = { static const unsigned int ldo23_voltage_map[] = {
1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, 2600000, 2700000, 2800000, 2900000, 3000000, 3100000, 3200000, 3300000,
}; };
static const int ldo4_voltage_map[] = { static const unsigned int ldo4_voltage_map[] = {
1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1000000, 1050000, 1100000, 1150000, 1200000, 1250000, 1300000, 1350000,
1400, 1500, 1800, 1900, 2500, 2800, 3000, 3300, 1400000, 1500000, 1800000, 1900000, 2500000, 2800000, 3000000, 3300000,
}; };
static const int ldo5_voltage_map[] = { static const unsigned int ldo5_voltage_map[] = {
0, 0, 0, 0, 0, 850, 875, 900, 0, 0, 0, 0, 0, 850000, 875000, 900000,
925, 950, 975, 1000, 1025, 1050, 1075, 1100, 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000,
1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
}; };
static const int buck1_voltage_map[] = { static const unsigned int buck1_voltage_map[] = {
725, 750, 775, 800, 825, 850, 875, 900, 725000, 750000, 775000, 800000, 825000, 850000, 875000, 900000,
925, 950, 975, 1000, 1025, 1050, 1075, 1100, 925000, 950000, 975000, 1000000, 1025000, 1050000, 1075000, 1100000,
1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
}; };
static const int buck23_voltage_map[] = { static const unsigned int buck23_voltage_map[] = {
0, 800, 850, 900, 950, 1000, 1050, 1100, 0, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000,
1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000,
1550, 1600, 1650, 1700, 1800, 1900, 2500, 2800, 1550000, 1600000, 1650000, 1700000, 1800000, 1900000, 2500000, 2800000,
3000, 3300, 3000000, 3300000,
};
static const int *ldo_voltage_map[] = {
ldo1_voltage_map,
ldo23_voltage_map,
ldo23_voltage_map,
ldo4_voltage_map,
ldo5_voltage_map,
};
static const int *buck_voltage_map[] = {
buck1_voltage_map,
buck23_voltage_map,
buck23_voltage_map,
}; };
static const int ldo_output_enable_mask[] = { static const int ldo_output_enable_mask[] = {
...@@ -160,7 +146,6 @@ static const int buck_base_addr[] = { ...@@ -160,7 +146,6 @@ static const int buck_base_addr[] = {
LP3972_B3TV_REG, LP3972_B3TV_REG,
}; };
#define LP3972_LDO_VOL_VALUE_MAP(x) (ldo_voltage_map[x])
#define LP3972_LDO_OUTPUT_ENABLE_MASK(x) (ldo_output_enable_mask[x]) #define LP3972_LDO_OUTPUT_ENABLE_MASK(x) (ldo_output_enable_mask[x])
#define LP3972_LDO_OUTPUT_ENABLE_REG(x) (ldo_output_enable_addr[x]) #define LP3972_LDO_OUTPUT_ENABLE_REG(x) (ldo_output_enable_addr[x])
...@@ -177,7 +162,6 @@ static const int buck_base_addr[] = { ...@@ -177,7 +162,6 @@ static const int buck_base_addr[] = {
#define LP3972_LDO_VOL_MIN_IDX(x) (((x) == 4) ? 0x05 : 0x00) #define LP3972_LDO_VOL_MIN_IDX(x) (((x) == 4) ? 0x05 : 0x00)
#define LP3972_LDO_VOL_MAX_IDX(x) ((x) ? (((x) == 4) ? 0x1f : 0x0f) : 0x0c) #define LP3972_LDO_VOL_MAX_IDX(x) ((x) ? (((x) == 4) ? 0x1f : 0x0f) : 0x0c)
#define LP3972_BUCK_VOL_VALUE_MAP(x) (buck_voltage_map[x])
#define LP3972_BUCK_VOL_ENABLE_REG(x) (buck_vol_enable_addr[x]) #define LP3972_BUCK_VOL_ENABLE_REG(x) (buck_vol_enable_addr[x])
#define LP3972_BUCK_VOL1_REG(x) (buck_base_addr[x]) #define LP3972_BUCK_VOL1_REG(x) (buck_base_addr[x])
#define LP3972_BUCK_VOL_MASK 0x1f #define LP3972_BUCK_VOL_MASK 0x1f
...@@ -242,17 +226,6 @@ static int lp3972_set_bits(struct lp3972 *lp3972, u8 reg, u16 mask, u16 val) ...@@ -242,17 +226,6 @@ static int lp3972_set_bits(struct lp3972 *lp3972, u8 reg, u16 mask, u16 val)
return ret; return ret;
} }
static int lp3972_ldo_list_voltage(struct regulator_dev *dev, unsigned index)
{
int ldo = rdev_get_id(dev) - LP3972_LDO1;
if (index < LP3972_LDO_VOL_MIN_IDX(ldo) ||
index > LP3972_LDO_VOL_MAX_IDX(ldo))
return -EINVAL;
return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[index];
}
static int lp3972_ldo_is_enabled(struct regulator_dev *dev) static int lp3972_ldo_is_enabled(struct regulator_dev *dev)
{ {
struct lp3972 *lp3972 = rdev_get_drvdata(dev); struct lp3972 *lp3972 = rdev_get_drvdata(dev);
...@@ -294,7 +267,7 @@ static int lp3972_ldo_get_voltage(struct regulator_dev *dev) ...@@ -294,7 +267,7 @@ static int lp3972_ldo_get_voltage(struct regulator_dev *dev)
reg = lp3972_reg_read(lp3972, LP3972_LDO_VOL_CONTR_REG(ldo)); reg = lp3972_reg_read(lp3972, LP3972_LDO_VOL_CONTR_REG(ldo));
val = (reg >> LP3972_LDO_VOL_CONTR_SHIFT(ldo)) & mask; val = (reg >> LP3972_LDO_VOL_CONTR_SHIFT(ldo)) & mask;
return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[val]; return dev->desc->volt_table[val];
} }
static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev, static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev,
...@@ -337,7 +310,7 @@ static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev, ...@@ -337,7 +310,7 @@ static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev,
} }
static struct regulator_ops lp3972_ldo_ops = { static struct regulator_ops lp3972_ldo_ops = {
.list_voltage = lp3972_ldo_list_voltage, .list_voltage = regulator_list_voltage_table,
.is_enabled = lp3972_ldo_is_enabled, .is_enabled = lp3972_ldo_is_enabled,
.enable = lp3972_ldo_enable, .enable = lp3972_ldo_enable,
.disable = lp3972_ldo_disable, .disable = lp3972_ldo_disable,
...@@ -345,17 +318,6 @@ static struct regulator_ops lp3972_ldo_ops = { ...@@ -345,17 +318,6 @@ static struct regulator_ops lp3972_ldo_ops = {
.set_voltage_sel = lp3972_ldo_set_voltage_sel, .set_voltage_sel = lp3972_ldo_set_voltage_sel,
}; };
static int lp3972_dcdc_list_voltage(struct regulator_dev *dev, unsigned index)
{
int buck = rdev_get_id(dev) - LP3972_DCDC1;
if (index < LP3972_BUCK_VOL_MIN_IDX(buck) ||
index > LP3972_BUCK_VOL_MAX_IDX(buck))
return -EINVAL;
return 1000 * buck_voltage_map[buck][index];
}
static int lp3972_dcdc_is_enabled(struct regulator_dev *dev) static int lp3972_dcdc_is_enabled(struct regulator_dev *dev)
{ {
struct lp3972 *lp3972 = rdev_get_drvdata(dev); struct lp3972 *lp3972 = rdev_get_drvdata(dev);
...@@ -401,7 +363,7 @@ static int lp3972_dcdc_get_voltage(struct regulator_dev *dev) ...@@ -401,7 +363,7 @@ static int lp3972_dcdc_get_voltage(struct regulator_dev *dev)
reg = lp3972_reg_read(lp3972, LP3972_BUCK_VOL1_REG(buck)); reg = lp3972_reg_read(lp3972, LP3972_BUCK_VOL1_REG(buck));
reg &= LP3972_BUCK_VOL_MASK; reg &= LP3972_BUCK_VOL_MASK;
if (reg <= LP3972_BUCK_VOL_MAX_IDX(buck)) if (reg <= LP3972_BUCK_VOL_MAX_IDX(buck))
val = 1000 * buck_voltage_map[buck][reg]; val = dev->desc->volt_table[reg];
else { else {
val = 0; val = 0;
dev_warn(&dev->dev, "chip reported incorrect voltage value." dev_warn(&dev->dev, "chip reported incorrect voltage value."
...@@ -436,7 +398,7 @@ static int lp3972_dcdc_set_voltage_sel(struct regulator_dev *dev, ...@@ -436,7 +398,7 @@ static int lp3972_dcdc_set_voltage_sel(struct regulator_dev *dev,
} }
static struct regulator_ops lp3972_dcdc_ops = { static struct regulator_ops lp3972_dcdc_ops = {
.list_voltage = lp3972_dcdc_list_voltage, .list_voltage = regulator_list_voltage_table,
.is_enabled = lp3972_dcdc_is_enabled, .is_enabled = lp3972_dcdc_is_enabled,
.enable = lp3972_dcdc_enable, .enable = lp3972_dcdc_enable,
.disable = lp3972_dcdc_disable, .disable = lp3972_dcdc_disable,
...@@ -450,6 +412,7 @@ static const struct regulator_desc regulators[] = { ...@@ -450,6 +412,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_LDO1, .id = LP3972_LDO1,
.ops = &lp3972_ldo_ops, .ops = &lp3972_ldo_ops,
.n_voltages = ARRAY_SIZE(ldo1_voltage_map), .n_voltages = ARRAY_SIZE(ldo1_voltage_map),
.volt_table = ldo1_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -458,6 +421,7 @@ static const struct regulator_desc regulators[] = { ...@@ -458,6 +421,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_LDO2, .id = LP3972_LDO2,
.ops = &lp3972_ldo_ops, .ops = &lp3972_ldo_ops,
.n_voltages = ARRAY_SIZE(ldo23_voltage_map), .n_voltages = ARRAY_SIZE(ldo23_voltage_map),
.volt_table = ldo23_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -466,6 +430,7 @@ static const struct regulator_desc regulators[] = { ...@@ -466,6 +430,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_LDO3, .id = LP3972_LDO3,
.ops = &lp3972_ldo_ops, .ops = &lp3972_ldo_ops,
.n_voltages = ARRAY_SIZE(ldo23_voltage_map), .n_voltages = ARRAY_SIZE(ldo23_voltage_map),
.volt_table = ldo23_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -474,6 +439,7 @@ static const struct regulator_desc regulators[] = { ...@@ -474,6 +439,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_LDO4, .id = LP3972_LDO4,
.ops = &lp3972_ldo_ops, .ops = &lp3972_ldo_ops,
.n_voltages = ARRAY_SIZE(ldo4_voltage_map), .n_voltages = ARRAY_SIZE(ldo4_voltage_map),
.volt_table = ldo4_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -482,6 +448,7 @@ static const struct regulator_desc regulators[] = { ...@@ -482,6 +448,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_LDO5, .id = LP3972_LDO5,
.ops = &lp3972_ldo_ops, .ops = &lp3972_ldo_ops,
.n_voltages = ARRAY_SIZE(ldo5_voltage_map), .n_voltages = ARRAY_SIZE(ldo5_voltage_map),
.volt_table = ldo5_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -490,6 +457,7 @@ static const struct regulator_desc regulators[] = { ...@@ -490,6 +457,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_DCDC1, .id = LP3972_DCDC1,
.ops = &lp3972_dcdc_ops, .ops = &lp3972_dcdc_ops,
.n_voltages = ARRAY_SIZE(buck1_voltage_map), .n_voltages = ARRAY_SIZE(buck1_voltage_map),
.volt_table = buck1_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -498,6 +466,7 @@ static const struct regulator_desc regulators[] = { ...@@ -498,6 +466,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_DCDC2, .id = LP3972_DCDC2,
.ops = &lp3972_dcdc_ops, .ops = &lp3972_dcdc_ops,
.n_voltages = ARRAY_SIZE(buck23_voltage_map), .n_voltages = ARRAY_SIZE(buck23_voltage_map),
.volt_table = buck23_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
...@@ -506,6 +475,7 @@ static const struct regulator_desc regulators[] = { ...@@ -506,6 +475,7 @@ static const struct regulator_desc regulators[] = {
.id = LP3972_DCDC3, .id = LP3972_DCDC3,
.ops = &lp3972_dcdc_ops, .ops = &lp3972_dcdc_ops,
.n_voltages = ARRAY_SIZE(buck23_voltage_map), .n_voltages = ARRAY_SIZE(buck23_voltage_map),
.volt_table = buck23_voltage_map,
.type = REGULATOR_VOLTAGE, .type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment