|
@@ -37,6 +37,7 @@
|
|
|
* @voltage_bank: bank to control regulator voltage
|
|
|
* @voltage_reg: register to control regulator voltage
|
|
|
* @voltage_mask: mask to control regulator voltage
|
|
|
+ * @voltage_shift: shift to control regulator voltage
|
|
|
* @delay: startup/set voltage delay in us
|
|
|
*/
|
|
|
struct ab8500_regulator_info {
|
|
@@ -50,6 +51,7 @@ struct ab8500_regulator_info {
|
|
|
u8 voltage_bank;
|
|
|
u8 voltage_reg;
|
|
|
u8 voltage_mask;
|
|
|
+ u8 voltage_shift;
|
|
|
unsigned int delay;
|
|
|
};
|
|
|
|
|
@@ -195,17 +197,14 @@ static int ab8500_regulator_get_voltage_sel(struct regulator_dev *rdev)
|
|
|
}
|
|
|
|
|
|
dev_vdbg(rdev_get_dev(rdev),
|
|
|
- "%s-get_voltage (bank, reg, mask, value): 0x%x, 0x%x, 0x%x,"
|
|
|
- " 0x%x\n",
|
|
|
- info->desc.name, info->voltage_bank, info->voltage_reg,
|
|
|
- info->voltage_mask, regval);
|
|
|
+ "%s-get_voltage (bank, reg, mask, shift, value): "
|
|
|
+ "0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",
|
|
|
+ info->desc.name, info->voltage_bank,
|
|
|
+ info->voltage_reg, info->voltage_mask,
|
|
|
+ info->voltage_shift, regval);
|
|
|
|
|
|
- /* vintcore has a different layout */
|
|
|
val = regval & info->voltage_mask;
|
|
|
- if (info->desc.id == AB8500_LDO_INTCORE)
|
|
|
- return val >> 0x3;
|
|
|
- else
|
|
|
- return val;
|
|
|
+ return val >> info->voltage_shift;
|
|
|
}
|
|
|
|
|
|
static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev,
|
|
@@ -221,7 +220,7 @@ static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev,
|
|
|
}
|
|
|
|
|
|
/* set the registers for the request */
|
|
|
- regval = (u8)selector;
|
|
|
+ regval = (u8)selector << info->voltage_shift;
|
|
|
ret = abx500_mask_and_set_register_interruptible(info->dev,
|
|
|
info->voltage_bank, info->voltage_reg,
|
|
|
info->voltage_mask, regval);
|
|
@@ -343,6 +342,7 @@ static struct ab8500_regulator_info
|
|
|
.voltage_bank = 0x03,
|
|
|
.voltage_reg = 0x80,
|
|
|
.voltage_mask = 0x38,
|
|
|
+ .voltage_shift = 3,
|
|
|
},
|
|
|
|
|
|
/*
|