diff options
| -rw-r--r-- | drivers/mfd/wm831x-core.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/mfd/wm831x-core.c b/drivers/mfd/wm831x-core.c index 265f75fc6a25..04994b23bb6b 100644 --- a/drivers/mfd/wm831x-core.c +++ b/drivers/mfd/wm831x-core.c | |||
| @@ -1440,7 +1440,7 @@ static struct mfd_cell backlight_devs[] = { | |||
| 1440 | int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) | 1440 | int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) |
| 1441 | { | 1441 | { |
| 1442 | struct wm831x_pdata *pdata = wm831x->dev->platform_data; | 1442 | struct wm831x_pdata *pdata = wm831x->dev->platform_data; |
| 1443 | int rev; | 1443 | int rev, wm831x_num; |
| 1444 | enum wm831x_parent parent; | 1444 | enum wm831x_parent parent; |
| 1445 | int ret, i; | 1445 | int ret, i; |
| 1446 | 1446 | ||
| @@ -1592,6 +1592,12 @@ int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) | |||
| 1592 | } | 1592 | } |
| 1593 | } | 1593 | } |
| 1594 | 1594 | ||
| 1595 | /* Multiply by 10 as we have many subdevices of the same type */ | ||
| 1596 | if (pdata && pdata->wm831x_num) | ||
| 1597 | wm831x_num = pdata->wm831x_num * 10; | ||
| 1598 | else | ||
| 1599 | wm831x_num = -1; | ||
| 1600 | |||
| 1595 | ret = wm831x_irq_init(wm831x, irq); | 1601 | ret = wm831x_irq_init(wm831x, irq); |
| 1596 | if (ret != 0) | 1602 | if (ret != 0) |
| 1597 | goto err; | 1603 | goto err; |
| @@ -1609,19 +1615,19 @@ int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) | |||
| 1609 | /* The core device is up, instantiate the subdevices. */ | 1615 | /* The core device is up, instantiate the subdevices. */ |
| 1610 | switch (parent) { | 1616 | switch (parent) { |
| 1611 | case WM8310: | 1617 | case WM8310: |
| 1612 | ret = mfd_add_devices(wm831x->dev, -1, | 1618 | ret = mfd_add_devices(wm831x->dev, wm831x_num, |
| 1613 | wm8310_devs, ARRAY_SIZE(wm8310_devs), | 1619 | wm8310_devs, ARRAY_SIZE(wm8310_devs), |
| 1614 | NULL, wm831x->irq_base); | 1620 | NULL, wm831x->irq_base); |
| 1615 | break; | 1621 | break; |
| 1616 | 1622 | ||
| 1617 | case WM8311: | 1623 | case WM8311: |
| 1618 | ret = mfd_add_devices(wm831x->dev, -1, | 1624 | ret = mfd_add_devices(wm831x->dev, wm831x_num, |
| 1619 | wm8311_devs, ARRAY_SIZE(wm8311_devs), | 1625 | wm8311_devs, ARRAY_SIZE(wm8311_devs), |
| 1620 | NULL, wm831x->irq_base); | 1626 | NULL, wm831x->irq_base); |
| 1621 | break; | 1627 | break; |
| 1622 | 1628 | ||
| 1623 | case WM8312: | 1629 | case WM8312: |
| 1624 | ret = mfd_add_devices(wm831x->dev, -1, | 1630 | ret = mfd_add_devices(wm831x->dev, wm831x_num, |
| 1625 | wm8312_devs, ARRAY_SIZE(wm8312_devs), | 1631 | wm8312_devs, ARRAY_SIZE(wm8312_devs), |
| 1626 | NULL, wm831x->irq_base); | 1632 | NULL, wm831x->irq_base); |
| 1627 | break; | 1633 | break; |
| @@ -1630,7 +1636,7 @@ int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) | |||
| 1630 | case WM8321: | 1636 | case WM8321: |
| 1631 | case WM8325: | 1637 | case WM8325: |
| 1632 | case WM8326: | 1638 | case WM8326: |
| 1633 | ret = mfd_add_devices(wm831x->dev, -1, | 1639 | ret = mfd_add_devices(wm831x->dev, wm831x_num, |
| 1634 | wm8320_devs, ARRAY_SIZE(wm8320_devs), | 1640 | wm8320_devs, ARRAY_SIZE(wm8320_devs), |
| 1635 | NULL, wm831x->irq_base); | 1641 | NULL, wm831x->irq_base); |
| 1636 | break; | 1642 | break; |
| @@ -1647,7 +1653,7 @@ int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq) | |||
| 1647 | 1653 | ||
| 1648 | if (pdata && pdata->backlight) { | 1654 | if (pdata && pdata->backlight) { |
| 1649 | /* Treat errors as non-critical */ | 1655 | /* Treat errors as non-critical */ |
| 1650 | ret = mfd_add_devices(wm831x->dev, -1, backlight_devs, | 1656 | ret = mfd_add_devices(wm831x->dev, wm831x_num, backlight_devs, |
| 1651 | ARRAY_SIZE(backlight_devs), NULL, | 1657 | ARRAY_SIZE(backlight_devs), NULL, |
| 1652 | wm831x->irq_base); | 1658 | wm831x->irq_base); |
| 1653 | if (ret < 0) | 1659 | if (ret < 0) |
