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