regulator: tps6524x: Convert fixed ilimsel to table based

This patch refactors the code to get rid of the fixed_ilimsel and FIXED_ILIMSEL
flag usage, and convert all the fixed ilimsel to table based (with one entry in
the table).

We can differentiate fixed ilimsel by checking info->n_ilimsels == 1,
thus FIXED_ILIMSEL flag can be removed.

This change makes the logic of the code simpler as all the ilimsels are table
based now.

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Axel Lin 2012-06-20 22:32:08 +08:00 committed by Mark Brown
parent cac87fd34e
commit 1e12dfc968
1 changed files with 26 additions and 18 deletions

View File

@ -110,8 +110,6 @@
#define N_SWITCH 2 #define N_SWITCH 2
#define N_REGULATORS (N_DCDC + N_LDO + N_SWITCH) #define N_REGULATORS (N_DCDC + N_LDO + N_SWITCH)
#define FIXED_ILIMSEL BIT(0)
#define CMD_READ(reg) ((reg) << 6) #define CMD_READ(reg) ((reg) << 6)
#define CMD_WRITE(reg) (BIT(5) | (reg) << 6) #define CMD_WRITE(reg) (BIT(5) | (reg) << 6)
#define STAT_CLK BIT(3) #define STAT_CLK BIT(3)
@ -130,9 +128,7 @@ struct supply_info {
int n_voltages; int n_voltages;
const unsigned int *voltages; const unsigned int *voltages;
int n_ilimsels; int n_ilimsels;
const int *ilimsels; const unsigned int *ilimsels;
int fixed_ilimsel;
int flags;
struct field enable, voltage, ilimsel; struct field enable, voltage, ilimsel;
}; };
@ -353,24 +349,36 @@ static const unsigned int fixed_5000000_voltage[] = {
5000000 5000000
}; };
static const int ldo_ilimsel[] = { static const unsigned int ldo_ilimsel[] = {
400000, 1500000 400000, 1500000
}; };
static const int usb_ilimsel[] = { static const unsigned int usb_ilimsel[] = {
200000, 400000, 800000, 1000000 200000, 400000, 800000, 1000000
}; };
static const unsigned int fixed_2400000_ilimsel[] = {
2400000
};
static const unsigned int fixed_1200000_ilimsel[] = {
1200000
};
static const unsigned int fixed_400000_ilimsel[] = {
400000
};
#define __MK_FIELD(_reg, _mask, _shift) \ #define __MK_FIELD(_reg, _mask, _shift) \
{ .reg = (_reg), .mask = (_mask), .shift = (_shift), } { .reg = (_reg), .mask = (_mask), .shift = (_shift), }
static const struct supply_info supply_info[N_REGULATORS] = { static const struct supply_info supply_info[N_REGULATORS] = {
{ {
.name = "DCDC1", .name = "DCDC1",
.flags = FIXED_ILIMSEL,
.n_voltages = ARRAY_SIZE(dcdc1_voltages), .n_voltages = ARRAY_SIZE(dcdc1_voltages),
.voltages = dcdc1_voltages, .voltages = dcdc1_voltages,
.fixed_ilimsel = 2400000, .n_ilimsels = ARRAY_SIZE(fixed_2400000_ilimsel),
.ilimsels = fixed_2400000_ilimsel,
.enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
DCDCDCDC1_EN_SHIFT), DCDCDCDC1_EN_SHIFT),
.voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@ -378,10 +386,10 @@ static const struct supply_info supply_info[N_REGULATORS] = {
}, },
{ {
.name = "DCDC2", .name = "DCDC2",
.flags = FIXED_ILIMSEL,
.n_voltages = ARRAY_SIZE(dcdc2_voltages), .n_voltages = ARRAY_SIZE(dcdc2_voltages),
.voltages = dcdc2_voltages, .voltages = dcdc2_voltages,
.fixed_ilimsel = 1200000, .n_ilimsels = ARRAY_SIZE(fixed_1200000_ilimsel),
.ilimsels = fixed_1200000_ilimsel,
.enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
DCDCDCDC2_EN_SHIFT), DCDCDCDC2_EN_SHIFT),
.voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@ -389,10 +397,10 @@ static const struct supply_info supply_info[N_REGULATORS] = {
}, },
{ {
.name = "DCDC3", .name = "DCDC3",
.flags = FIXED_ILIMSEL,
.n_voltages = ARRAY_SIZE(dcdc3_voltages), .n_voltages = ARRAY_SIZE(dcdc3_voltages),
.voltages = dcdc3_voltages, .voltages = dcdc3_voltages,
.fixed_ilimsel = 1200000, .n_ilimsels = ARRAY_SIZE(fixed_1200000_ilimsel),
.ilimsels = fixed_1200000_ilimsel,
.enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK, .enable = __MK_FIELD(REG_DCDC_EN, DCDCDCDC_EN_MASK,
DCDCDCDC3_EN_SHIFT), DCDCDCDC3_EN_SHIFT),
.voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK, .voltage = __MK_FIELD(REG_DCDC_SET, DCDC_VDCDC_MASK,
@ -439,8 +447,8 @@ static const struct supply_info supply_info[N_REGULATORS] = {
.name = "LCD", .name = "LCD",
.n_voltages = ARRAY_SIZE(fixed_5000000_voltage), .n_voltages = ARRAY_SIZE(fixed_5000000_voltage),
.voltages = fixed_5000000_voltage, .voltages = fixed_5000000_voltage,
.flags = FIXED_ILIMSEL, .n_ilimsels = ARRAY_SIZE(fixed_400000_ilimsel),
.fixed_ilimsel = 400000, .ilimsels = fixed_400000_ilimsel,
.enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK, .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK,
BLOCK_LCD_SHIFT), BLOCK_LCD_SHIFT),
}, },
@ -491,7 +499,7 @@ static int set_current_limit(struct regulator_dev *rdev, int min_uA,
hw = rdev_get_drvdata(rdev); hw = rdev_get_drvdata(rdev);
info = &supply_info[rdev_get_id(rdev)]; info = &supply_info[rdev_get_id(rdev)];
if (info->flags & FIXED_ILIMSEL) if (info->n_ilimsels == 1)
return -EINVAL; return -EINVAL;
for (i = 0; i < info->n_ilimsels; i++) for (i = 0; i < info->n_ilimsels; i++)
@ -514,8 +522,8 @@ static int get_current_limit(struct regulator_dev *rdev)
hw = rdev_get_drvdata(rdev); hw = rdev_get_drvdata(rdev);
info = &supply_info[rdev_get_id(rdev)]; info = &supply_info[rdev_get_id(rdev)];
if (info->flags & FIXED_ILIMSEL) if (info->n_ilimsels == 1)
return info->fixed_ilimsel; return info->ilimsels[0];
ret = read_field(hw, &info->ilimsel); ret = read_field(hw, &info->ilimsel);
if (ret < 0) if (ret < 0)