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:
parent
cac87fd34e
commit
1e12dfc968
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue