aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/wm8350-core.c6
-rw-r--r--drivers/regulator/wm8350-regulator.c7
-rw-r--r--include/linux/mfd/wm8350/pmic.h4
3 files changed, 17 insertions, 0 deletions
diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
index 03af3b12c020..56c363c240a9 100644
--- a/drivers/mfd/wm8350-core.c
+++ b/drivers/mfd/wm8350-core.c
@@ -1301,6 +1301,9 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
1301 1301
1302 switch (mask_rev) { 1302 switch (mask_rev) {
1303 case 0: 1303 case 0:
1304 wm8350->pmic.max_dcdc = WM8350_DCDC_6;
1305 wm8350->pmic.max_isink = WM8350_ISINK_B;
1306
1304 switch (chip_rev) { 1307 switch (chip_rev) {
1305 case WM8350_REV_E: 1308 case WM8350_REV_E:
1306 dev_info(wm8350->dev, "WM8350 Rev E\n"); 1309 dev_info(wm8350->dev, "WM8350 Rev E\n");
@@ -1325,6 +1328,9 @@ int wm8350_device_init(struct wm8350 *wm8350, int irq,
1325 break; 1328 break;
1326 1329
1327 case 2: 1330 case 2:
1331 wm8350->pmic.max_dcdc = WM8350_DCDC_6;
1332 wm8350->pmic.max_isink = WM8350_ISINK_B;
1333
1328 switch (chip_rev) { 1334 switch (chip_rev) {
1329 case 0: 1335 case 0:
1330 dev_info(wm8350->dev, "WM8352 Rev A\n"); 1336 dev_info(wm8350->dev, "WM8352 Rev A\n");
diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c
index 1f44b17e23b1..c68c496b2c49 100644
--- a/drivers/regulator/wm8350-regulator.c
+++ b/drivers/regulator/wm8350-regulator.c
@@ -1380,6 +1380,13 @@ int wm8350_register_regulator(struct wm8350 *wm8350, int reg,
1380 if (wm8350->pmic.pdev[reg]) 1380 if (wm8350->pmic.pdev[reg])
1381 return -EBUSY; 1381 return -EBUSY;
1382 1382
1383 if (reg >= WM8350_DCDC_1 && reg <= WM8350_DCDC_6 &&
1384 reg > wm8350->pmic.max_dcdc)
1385 return -ENODEV;
1386 if (reg >= WM8350_ISINK_A && reg <= WM8350_ISINK_B &&
1387 reg > wm8350->pmic.max_isink)
1388 return -ENODEV;
1389
1383 pdev = platform_device_alloc("wm8350-regulator", reg); 1390 pdev = platform_device_alloc("wm8350-regulator", reg);
1384 if (!pdev) 1391 if (!pdev)
1385 return -ENOMEM; 1392 return -ENOMEM;
diff --git a/include/linux/mfd/wm8350/pmic.h b/include/linux/mfd/wm8350/pmic.h
index 69b69e07f62f..96acbfc8aa12 100644
--- a/include/linux/mfd/wm8350/pmic.h
+++ b/include/linux/mfd/wm8350/pmic.h
@@ -701,6 +701,10 @@ struct platform_device;
701struct regulator_init_data; 701struct regulator_init_data;
702 702
703struct wm8350_pmic { 703struct wm8350_pmic {
704 /* Number of regulators of each type on this device */
705 int max_dcdc;
706 int max_isink;
707
704 /* ISINK to DCDC mapping */ 708 /* ISINK to DCDC mapping */
705 int isink_A_dcdc; 709 int isink_A_dcdc;
706 int isink_B_dcdc; 710 int isink_B_dcdc;