|
@@ -201,146 +201,30 @@ static unsigned long tps65912_vsel_to_uv_ldo(u8 vsel)
|
|
|
|
|
|
static int tps65912_get_ctrl_register(int id)
|
|
|
{
|
|
|
- switch (id) {
|
|
|
- case TPS65912_REG_DCDC1:
|
|
|
- return TPS65912_DCDC1_AVS;
|
|
|
- case TPS65912_REG_DCDC2:
|
|
|
- return TPS65912_DCDC2_AVS;
|
|
|
- case TPS65912_REG_DCDC3:
|
|
|
- return TPS65912_DCDC3_AVS;
|
|
|
- case TPS65912_REG_DCDC4:
|
|
|
- return TPS65912_DCDC4_AVS;
|
|
|
- case TPS65912_REG_LDO1:
|
|
|
- return TPS65912_LDO1_AVS;
|
|
|
- case TPS65912_REG_LDO2:
|
|
|
- return TPS65912_LDO2_AVS;
|
|
|
- case TPS65912_REG_LDO3:
|
|
|
- return TPS65912_LDO3_AVS;
|
|
|
- case TPS65912_REG_LDO4:
|
|
|
- return TPS65912_LDO4_AVS;
|
|
|
- case TPS65912_REG_LDO5:
|
|
|
- return TPS65912_LDO5;
|
|
|
- case TPS65912_REG_LDO6:
|
|
|
- return TPS65912_LDO6;
|
|
|
- case TPS65912_REG_LDO7:
|
|
|
- return TPS65912_LDO7;
|
|
|
- case TPS65912_REG_LDO8:
|
|
|
- return TPS65912_LDO8;
|
|
|
- case TPS65912_REG_LDO9:
|
|
|
- return TPS65912_LDO9;
|
|
|
- case TPS65912_REG_LDO10:
|
|
|
- return TPS65912_LDO10;
|
|
|
- default:
|
|
|
+ if (id >= TPS65912_REG_DCDC1 && id <= TPS65912_REG_LDO4)
|
|
|
+ return id * 3 + TPS65912_DCDC1_AVS;
|
|
|
+ else if (id >= TPS65912_REG_LDO5 && id <= TPS65912_REG_LDO10)
|
|
|
+ return id - TPS65912_REG_LDO5 + TPS65912_LDO5;
|
|
|
+ else
|
|
|
return -EINVAL;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
-static int tps65912_get_dcdc_sel_register(struct tps65912_reg *pmic, int id)
|
|
|
+static int tps65912_get_sel_register(struct tps65912_reg *pmic, int id)
|
|
|
{
|
|
|
struct tps65912 *mfd = pmic->mfd;
|
|
|
- int opvsel = 0, sr = 0;
|
|
|
+ int opvsel;
|
|
|
u8 reg = 0;
|
|
|
|
|
|
- if (id < TPS65912_REG_DCDC1 || id > TPS65912_REG_DCDC4)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- switch (id) {
|
|
|
- case TPS65912_REG_DCDC1:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_DCDC1_OP);
|
|
|
- sr = ((opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT);
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_DCDC1_AVS;
|
|
|
+ if (id >= TPS65912_REG_DCDC1 && id <= TPS65912_REG_LDO4) {
|
|
|
+ opvsel = tps65912_reg_read(mfd, id * 3 + TPS65912_DCDC1_OP);
|
|
|
+ if (opvsel & OP_SELREG_MASK)
|
|
|
+ reg = id * 3 + TPS65912_DCDC1_AVS;
|
|
|
else
|
|
|
- reg = TPS65912_DCDC1_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_DCDC2:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_DCDC2_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_DCDC2_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_DCDC2_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_DCDC3:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_DCDC3_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_DCDC3_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_DCDC3_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_DCDC4:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_DCDC4_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_DCDC4_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_DCDC4_OP;
|
|
|
- break;
|
|
|
- }
|
|
|
- return reg;
|
|
|
-}
|
|
|
-
|
|
|
-static int tps65912_get_ldo_sel_register(struct tps65912_reg *pmic, int id)
|
|
|
-{
|
|
|
- struct tps65912 *mfd = pmic->mfd;
|
|
|
- int opvsel = 0, sr = 0;
|
|
|
- u8 reg = 0;
|
|
|
-
|
|
|
- if (id < TPS65912_REG_LDO1 || id > TPS65912_REG_LDO10)
|
|
|
+ reg = id * 3 + TPS65912_DCDC1_OP;
|
|
|
+ } else if (id >= TPS65912_REG_LDO5 && id <= TPS65912_REG_LDO10) {
|
|
|
+ reg = id - TPS65912_REG_LDO5 + TPS65912_LDO5;
|
|
|
+ } else {
|
|
|
return -EINVAL;
|
|
|
-
|
|
|
- switch (id) {
|
|
|
- case TPS65912_REG_LDO1:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_LDO1_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_LDO1_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_LDO1_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO2:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_LDO2_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_LDO2_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_LDO2_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO3:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_LDO3_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_LDO3_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_LDO3_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO4:
|
|
|
- opvsel = tps65912_reg_read(mfd, TPS65912_LDO4_OP);
|
|
|
- sr = (opvsel & OP_SELREG_MASK) >> OP_SELREG_SHIFT;
|
|
|
- if (sr)
|
|
|
- reg = TPS65912_LDO4_AVS;
|
|
|
- else
|
|
|
- reg = TPS65912_LDO4_OP;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO5:
|
|
|
- reg = TPS65912_LDO5;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO6:
|
|
|
- reg = TPS65912_LDO6;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO7:
|
|
|
- reg = TPS65912_LDO7;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO8:
|
|
|
- reg = TPS65912_LDO8;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO9:
|
|
|
- reg = TPS65912_LDO9;
|
|
|
- break;
|
|
|
- case TPS65912_REG_LDO10:
|
|
|
- reg = TPS65912_LDO10;
|
|
|
- break;
|
|
|
}
|
|
|
|
|
|
return reg;
|
|
@@ -567,7 +451,7 @@ static int tps65912_set_voltage_dcdc_sel(struct regulator_dev *dev,
|
|
|
int value;
|
|
|
u8 reg;
|
|
|
|
|
|
- reg = tps65912_get_dcdc_sel_register(pmic, id);
|
|
|
+ reg = tps65912_get_sel_register(pmic, id);
|
|
|
value = tps65912_reg_read(mfd, reg);
|
|
|
value &= 0xC0;
|
|
|
return tps65912_reg_write(mfd, reg, selector | value);
|
|
@@ -581,7 +465,7 @@ static int tps65912_get_voltage_ldo(struct regulator_dev *dev)
|
|
|
int vsel = 0;
|
|
|
u8 reg;
|
|
|
|
|
|
- reg = tps65912_get_ldo_sel_register(pmic, id);
|
|
|
+ reg = tps65912_get_sel_register(pmic, id);
|
|
|
vsel = tps65912_reg_read(mfd, reg);
|
|
|
vsel &= 0x3F;
|
|
|
|
|
@@ -595,7 +479,7 @@ static int tps65912_set_voltage_ldo_sel(struct regulator_dev *dev,
|
|
|
struct tps65912 *mfd = pmic->mfd;
|
|
|
int id = rdev_get_id(dev), reg, value;
|
|
|
|
|
|
- reg = tps65912_get_ldo_sel_register(pmic, id);
|
|
|
+ reg = tps65912_get_sel_register(pmic, id);
|
|
|
value = tps65912_reg_read(mfd, reg);
|
|
|
value &= 0xC0;
|
|
|
return tps65912_reg_write(mfd, reg, selector | value);
|
|
@@ -718,22 +602,12 @@ static struct platform_driver tps65912_driver = {
|
|
|
.remove = __devexit_p(tps65912_remove),
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * tps65912_init
|
|
|
- *
|
|
|
- * Module init function
|
|
|
- */
|
|
|
static int __init tps65912_init(void)
|
|
|
{
|
|
|
return platform_driver_register(&tps65912_driver);
|
|
|
}
|
|
|
subsys_initcall(tps65912_init);
|
|
|
|
|
|
-/**
|
|
|
- * tps65912_cleanup
|
|
|
- *
|
|
|
- * Module exit function
|
|
|
- */
|
|
|
static void __exit tps65912_cleanup(void)
|
|
|
{
|
|
|
platform_driver_unregister(&tps65912_driver);
|