regulator: tps6524x: Convert to regulator_list_voltage_table()
PATCH 1/2 regulator: tps6524x: Convert to regulator_list_voltage_table()
This patch adds fixed_5000000_voltage table for fixed voltage, so we can convert regulator_ops to regulator_list_voltage_table.
We can differentiate fixed voltage by checking rdev->desc->n_voltages == 1, thus remove the FIXED_VOLTAGE flag usage.
--- drivers/regulator/tps6524x-regulator.c | 52 ++++++++++++-------------------- 1 file changed, 19 insertions(+), 33 deletions(-)
drivers/regulator/tps6524x-regulator.c +19 -33
@@ -111,7 +111,6 @@#define N_REGULATORS (N_DCDC + N_LDO + N_SWITCH)#define FIXED_ILIMSEL BIT(0) -#define FIXED_VOLTAGE BIT(1)#define CMD_READ (reg) ((reg) << 6)#define CMD_WRITE (reg) (BIT(5) | (reg) << 6)
@@ -129,8 +128,7 @@ struct field {struct supply_info {const char *name;int n_voltages; -const int *voltages; -int fixed_voltage; +const unsigned int *voltages;int n_ilimsels;const int *ilimsels;int fixed_ilimsel;
@@ -307,7 +305,7 @@ static int write_field(struct tps6524x *hw, const struct field *field, val << field->shift); } -static const int dcdc1_voltages[] = { +static const unsigned int dcdc1_voltages[] = {800000 ,825000 ,850000 ,875000 ,900000 ,925000 ,950000 ,975000 ,1000000 ,1025000 ,1050000 ,1075000 ,
@@ -318,7 +316,7 @@ static const int dcdc1_voltages[] = { 1500000, 1525000, 1550000, 1575000, }; -static const int dcdc2_voltages[] = { +static const unsigned int dcdc2_voltages[] = {1400000 ,1450000 ,1500000 ,1550000 ,1600000 ,1650000 ,1700000 ,1750000 ,1800000 ,1850000 ,1900000 ,1950000 ,
@@ -329,7 +327,7 @@ static const int dcdc2_voltages[] = { 2800000, 2850000, 2900000, 2950000, }; -static const int dcdc3_voltages[] = { +static const unsigned int dcdc3_voltages[] = {2400000 ,2450000 ,2500000 ,2550000 ,2600000 ,2650000 ,2700000 ,2750000 ,2800000 ,2850000 ,2900000 ,2950000 ,3000000 ,3050000 ,3100000 ,
@@ -337,20 +335,24 @@ static const int dcdc3_voltages[] = { 3400000, 3450000, 3500000, 3550000, 3600000, }; -static const int ldo1_voltages[] = { +static const unsigned int ldo1_voltages[] = {4300000 ,4350000 ,4400000 ,4450000 ,4500000 ,4550000 ,4600000 ,4650000 ,4700000 ,4750000 ,4800000 ,4850000 ,4900000 ,4950000 ,5000000 ,5050000 , }; -static const int ldo2_voltages[] = { +static const unsigned int ldo2_voltages[] = {1100000 ,1150000 ,1200000 ,1250000 ,1300000 ,1700000 ,1750000 ,1800000 ,1850000 ,1900000 ,3150000 ,3200000 ,3250000 ,3300000 ,3350000 ,3400000 , }; +static const unsigned int fixed_5000000_voltage[] = { +5000000 +}; +static const int ldo_ilimsel[] = {400000 ,1500000 };
@@ -424,8 +426,8 @@ static const struct supply_info supply_info[N_REGULATORS] = { }, { .name = "USB", - .flags = FIXED_VOLTAGE, - .fixed_voltage = 5000000, + .n_voltages = ARRAY_SIZE(fixed_5000000_voltage), + .voltages = fixed_5000000_voltage, .n_ilimsels = ARRAY_SIZE(usb_ilimsel), .ilimsels = usb_ilimsel, .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK,
@@ -435,29 +437,15 @@ static const struct supply_info supply_info[N_REGULATORS] = { }, { .name = "LCD", - .flags = FIXED_VOLTAGE | FIXED_ILIMSEL, - .fixed_voltage = 5000000, + .n_voltages = ARRAY_SIZE(fixed_5000000_voltage), + .voltages = fixed_5000000_voltage, + .flags = FIXED_ILIMSEL, .fixed_ilimsel = 400000, .enable = __MK_FIELD(REG_BLOCK_EN, BLOCK_MASK, BLOCK_LCD_SHIFT), }, }; -static int list_voltage (struct regulator_dev *rdev,unsigned selector) -{ -const struct supply_info *info; -struct tps6524x *hw; - - hw =rdev_get_drvdata (rdev); - info = &supply_info[rdev_get_id (rdev)]; - -if (info->flags &FIXED_VOLTAGE ) -return selector ? -EINVAL : info->fixed_voltage; - -return ((selector < info->n_voltages) ? - info->voltages[selector] : -EINVAL ); -} -static int set_voltage_sel (struct regulator_dev *rdev,unsigned selector) {const struct supply_info *info;
@@ -466,7 +454,7 @@ static int set_voltage_sel(struct regulator_dev *rdev, unsigned selector) hw =rdev_get_drvdata (rdev); info = &supply_info[rdev_get_id (rdev)]; -if (info->flags &FIXED_VOLTAGE ) +if (rdev->desc->n_voltages ==1 )return -EINVAL ;return write_field (hw, &info->voltage, selector);
@@ -481,7 +469,7 @@ static int get_voltage_sel(struct regulator_dev *rdev) hw =rdev_get_drvdata (rdev); info = &supply_info[rdev_get_id (rdev)]; -if (info->flags &FIXED_VOLTAGE ) +if (rdev->desc->n_voltages ==1 )return 0 ; ret =read_field (hw, &info->voltage);
@@ -577,7 +565,7 @@ static struct regulator_ops regulator_ops = { .disable = disable_supply, .get_voltage_sel = get_voltage_sel, .set_voltage_sel = set_voltage_sel, - .list_voltage = list_voltage, + .list_voltage = regulator_list_voltage_table, .set_current_limit = set_current_limit, .get_current_limit = get_current_limit, };
@@ -629,13 +617,11 @@ static int __devinit pmic_probe(struct spi_device *spi) hw->desc[i].name = info->name; hw->desc[i].id = i; hw->desc[i].n_voltages = info->n_voltages; + hw->desc[i].volt_table = info->voltages; hw->desc[i].ops = ®ulator_ops; hw->desc[i].type =REGULATOR_VOLTAGE ; hw->desc[i].owner =THIS_MODULE ; -if (info->flags &FIXED_VOLTAGE ) - hw->desc[i].n_voltages =1 ; - config.dev = dev; config.init_data = init_data; config.driver_data = hw;
Signature · 1 line
1.7.9.5
PATCH 2/2 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.
--- drivers/regulator/tps6524x-regulator.c | 44 +++++++++++++++++++------------- 1 file changed, 26 insertions(+), 18 deletions(-)
drivers/regulator/tps6524x-regulator.c +26 -18
@@ -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 )
Signature · 1 line
1.7.9.5
Mark Brown
AppliedQuoted 2 lines · Axel Lin
This patch adds
fixed_5000000_voltagetable for fixed voltage, so we can convertregulator_opstoregulator_list_voltage_table.
Applied both, thanks.