diff options
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/wm8350-regulator.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c index 261db94e0e7b..771eca1066b5 100644 --- a/drivers/regulator/wm8350-regulator.c +++ b/drivers/regulator/wm8350-regulator.c | |||
@@ -24,6 +24,9 @@ | |||
24 | #include <linux/regulator/driver.h> | 24 | #include <linux/regulator/driver.h> |
25 | #include <linux/regulator/machine.h> | 25 | #include <linux/regulator/machine.h> |
26 | 26 | ||
27 | /* Maximum value possible for VSEL */ | ||
28 | #define WM8350_DCDC_MAX_VSEL 0x66 | ||
29 | |||
27 | /* Microamps */ | 30 | /* Microamps */ |
28 | static const int isink_cur[] = { | 31 | static const int isink_cur[] = { |
29 | 4, | 32 | 4, |
@@ -385,6 +388,14 @@ static int wm8350_dcdc_get_voltage(struct regulator_dev *rdev) | |||
385 | return wm8350_dcdc_val_to_mvolts(val) * 1000; | 388 | return wm8350_dcdc_val_to_mvolts(val) * 1000; |
386 | } | 389 | } |
387 | 390 | ||
391 | static int wm8350_dcdc_list_voltage(struct regulator_dev *rdev, | ||
392 | unsigned selector) | ||
393 | { | ||
394 | if (selector > WM8350_DCDC_MAX_VSEL) | ||
395 | return -EINVAL; | ||
396 | return wm8350_dcdc_val_to_mvolts(selector) * 1000; | ||
397 | } | ||
398 | |||
388 | static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV) | 399 | static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV) |
389 | { | 400 | { |
390 | struct wm8350 *wm8350 = rdev_get_drvdata(rdev); | 401 | struct wm8350 *wm8350 = rdev_get_drvdata(rdev); |
@@ -775,6 +786,14 @@ static int wm8350_ldo_get_voltage(struct regulator_dev *rdev) | |||
775 | return wm8350_ldo_val_to_mvolts(val) * 1000; | 786 | return wm8350_ldo_val_to_mvolts(val) * 1000; |
776 | } | 787 | } |
777 | 788 | ||
789 | static int wm8350_ldo_list_voltage(struct regulator_dev *rdev, | ||
790 | unsigned selector) | ||
791 | { | ||
792 | if (selector > WM8350_LDO1_VSEL_MASK) | ||
793 | return -EINVAL; | ||
794 | return wm8350_ldo_val_to_mvolts(selector) * 1000; | ||
795 | } | ||
796 | |||
778 | int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start, | 797 | int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start, |
779 | u16 stop, u16 fault) | 798 | u16 stop, u16 fault) |
780 | { | 799 | { |
@@ -1162,6 +1181,7 @@ static int wm8350_ldo_is_enabled(struct regulator_dev *rdev) | |||
1162 | static struct regulator_ops wm8350_dcdc_ops = { | 1181 | static struct regulator_ops wm8350_dcdc_ops = { |
1163 | .set_voltage = wm8350_dcdc_set_voltage, | 1182 | .set_voltage = wm8350_dcdc_set_voltage, |
1164 | .get_voltage = wm8350_dcdc_get_voltage, | 1183 | .get_voltage = wm8350_dcdc_get_voltage, |
1184 | .list_voltage = wm8350_dcdc_list_voltage, | ||
1165 | .enable = wm8350_dcdc_enable, | 1185 | .enable = wm8350_dcdc_enable, |
1166 | .disable = wm8350_dcdc_disable, | 1186 | .disable = wm8350_dcdc_disable, |
1167 | .get_mode = wm8350_dcdc_get_mode, | 1187 | .get_mode = wm8350_dcdc_get_mode, |
@@ -1185,6 +1205,7 @@ static struct regulator_ops wm8350_dcdc2_5_ops = { | |||
1185 | static struct regulator_ops wm8350_ldo_ops = { | 1205 | static struct regulator_ops wm8350_ldo_ops = { |
1186 | .set_voltage = wm8350_ldo_set_voltage, | 1206 | .set_voltage = wm8350_ldo_set_voltage, |
1187 | .get_voltage = wm8350_ldo_get_voltage, | 1207 | .get_voltage = wm8350_ldo_get_voltage, |
1208 | .list_voltage = wm8350_ldo_list_voltage, | ||
1188 | .enable = wm8350_ldo_enable, | 1209 | .enable = wm8350_ldo_enable, |
1189 | .disable = wm8350_ldo_disable, | 1210 | .disable = wm8350_ldo_disable, |
1190 | .is_enabled = wm8350_ldo_is_enabled, | 1211 | .is_enabled = wm8350_ldo_is_enabled, |
@@ -1209,6 +1230,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1209 | .ops = &wm8350_dcdc_ops, | 1230 | .ops = &wm8350_dcdc_ops, |
1210 | .irq = WM8350_IRQ_UV_DC1, | 1231 | .irq = WM8350_IRQ_UV_DC1, |
1211 | .type = REGULATOR_VOLTAGE, | 1232 | .type = REGULATOR_VOLTAGE, |
1233 | .n_voltages = WM8350_DCDC_MAX_VSEL + 1, | ||
1212 | .owner = THIS_MODULE, | 1234 | .owner = THIS_MODULE, |
1213 | }, | 1235 | }, |
1214 | { | 1236 | { |
@@ -1225,6 +1247,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1225 | .ops = &wm8350_dcdc_ops, | 1247 | .ops = &wm8350_dcdc_ops, |
1226 | .irq = WM8350_IRQ_UV_DC3, | 1248 | .irq = WM8350_IRQ_UV_DC3, |
1227 | .type = REGULATOR_VOLTAGE, | 1249 | .type = REGULATOR_VOLTAGE, |
1250 | .n_voltages = WM8350_DCDC_MAX_VSEL + 1, | ||
1228 | .owner = THIS_MODULE, | 1251 | .owner = THIS_MODULE, |
1229 | }, | 1252 | }, |
1230 | { | 1253 | { |
@@ -1233,6 +1256,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1233 | .ops = &wm8350_dcdc_ops, | 1256 | .ops = &wm8350_dcdc_ops, |
1234 | .irq = WM8350_IRQ_UV_DC4, | 1257 | .irq = WM8350_IRQ_UV_DC4, |
1235 | .type = REGULATOR_VOLTAGE, | 1258 | .type = REGULATOR_VOLTAGE, |
1259 | .n_voltages = WM8350_DCDC_MAX_VSEL + 1, | ||
1236 | .owner = THIS_MODULE, | 1260 | .owner = THIS_MODULE, |
1237 | }, | 1261 | }, |
1238 | { | 1262 | { |
@@ -1249,6 +1273,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1249 | .ops = &wm8350_dcdc_ops, | 1273 | .ops = &wm8350_dcdc_ops, |
1250 | .irq = WM8350_IRQ_UV_DC6, | 1274 | .irq = WM8350_IRQ_UV_DC6, |
1251 | .type = REGULATOR_VOLTAGE, | 1275 | .type = REGULATOR_VOLTAGE, |
1276 | .n_voltages = WM8350_DCDC_MAX_VSEL + 1, | ||
1252 | .owner = THIS_MODULE, | 1277 | .owner = THIS_MODULE, |
1253 | }, | 1278 | }, |
1254 | { | 1279 | { |
@@ -1257,6 +1282,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1257 | .ops = &wm8350_ldo_ops, | 1282 | .ops = &wm8350_ldo_ops, |
1258 | .irq = WM8350_IRQ_UV_LDO1, | 1283 | .irq = WM8350_IRQ_UV_LDO1, |
1259 | .type = REGULATOR_VOLTAGE, | 1284 | .type = REGULATOR_VOLTAGE, |
1285 | .n_voltages = WM8350_LDO1_VSEL_MASK + 1, | ||
1260 | .owner = THIS_MODULE, | 1286 | .owner = THIS_MODULE, |
1261 | }, | 1287 | }, |
1262 | { | 1288 | { |
@@ -1265,6 +1291,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1265 | .ops = &wm8350_ldo_ops, | 1291 | .ops = &wm8350_ldo_ops, |
1266 | .irq = WM8350_IRQ_UV_LDO2, | 1292 | .irq = WM8350_IRQ_UV_LDO2, |
1267 | .type = REGULATOR_VOLTAGE, | 1293 | .type = REGULATOR_VOLTAGE, |
1294 | .n_voltages = WM8350_LDO2_VSEL_MASK + 1, | ||
1268 | .owner = THIS_MODULE, | 1295 | .owner = THIS_MODULE, |
1269 | }, | 1296 | }, |
1270 | { | 1297 | { |
@@ -1273,6 +1300,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1273 | .ops = &wm8350_ldo_ops, | 1300 | .ops = &wm8350_ldo_ops, |
1274 | .irq = WM8350_IRQ_UV_LDO3, | 1301 | .irq = WM8350_IRQ_UV_LDO3, |
1275 | .type = REGULATOR_VOLTAGE, | 1302 | .type = REGULATOR_VOLTAGE, |
1303 | .n_voltages = WM8350_LDO3_VSEL_MASK + 1, | ||
1276 | .owner = THIS_MODULE, | 1304 | .owner = THIS_MODULE, |
1277 | }, | 1305 | }, |
1278 | { | 1306 | { |
@@ -1281,6 +1309,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { | |||
1281 | .ops = &wm8350_ldo_ops, | 1309 | .ops = &wm8350_ldo_ops, |
1282 | .irq = WM8350_IRQ_UV_LDO4, | 1310 | .irq = WM8350_IRQ_UV_LDO4, |
1283 | .type = REGULATOR_VOLTAGE, | 1311 | .type = REGULATOR_VOLTAGE, |
1312 | .n_voltages = WM8350_LDO4_VSEL_MASK + 1, | ||
1284 | .owner = THIS_MODULE, | 1313 | .owner = THIS_MODULE, |
1285 | }, | 1314 | }, |
1286 | { | 1315 | { |