Skip to content

Commit

Permalink
regulator: Fix WM831x regulator ID lookups for multiple WM831xs
Browse files Browse the repository at this point in the history
With multiple wm831x devices the device IDs used for the regulators will
not always be contiguous so simply taking the modulus is not sufficient
to look up the ID, we need to reverse the way the ID is generated.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
  • Loading branch information
Mark Brown authored and Liam Girdwood committed Jul 28, 2011
1 parent 54abd33 commit 137a635
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
16 changes: 14 additions & 2 deletions drivers/regulator/wm831x-dcdc.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,11 +504,17 @@ static __devinit int wm831x_buckv_probe(struct platform_device *pdev)
{
struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
struct wm831x_pdata *pdata = wm831x->dev->platform_data;
int id = pdev->id % ARRAY_SIZE(pdata->dcdc);
int id;
struct wm831x_dcdc *dcdc;
struct resource *res;
int ret, irq;

if (pdata && pdata->wm831x_num)
id = (pdata->wm831x_num * 10) + 1;
else
id = 0;
id = pdev->id - id;

dev_dbg(&pdev->dev, "Probing DCDC%d\n", id + 1);

if (pdata == NULL || pdata->dcdc[id] == NULL)
Expand Down Expand Up @@ -709,11 +715,17 @@ static __devinit int wm831x_buckp_probe(struct platform_device *pdev)
{
struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
struct wm831x_pdata *pdata = wm831x->dev->platform_data;
int id = pdev->id % ARRAY_SIZE(pdata->dcdc);
int id;
struct wm831x_dcdc *dcdc;
struct resource *res;
int ret, irq;

if (pdata && pdata->wm831x_num)
id = (pdata->wm831x_num * 10) + 1;
else
id = 0;
id = pdev->id - id;

dev_dbg(&pdev->dev, "Probing DCDC%d\n", id + 1);

if (pdata == NULL || pdata->dcdc[id] == NULL)
Expand Down
25 changes: 22 additions & 3 deletions drivers/regulator/wm831x-ldo.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,11 +310,17 @@ static __devinit int wm831x_gp_ldo_probe(struct platform_device *pdev)
{
struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
struct wm831x_pdata *pdata = wm831x->dev->platform_data;
int id = pdev->id % ARRAY_SIZE(pdata->ldo);
int id;
struct wm831x_ldo *ldo;
struct resource *res;
int ret, irq;

if (pdata && pdata->wm831x_num)
id = (pdata->wm831x_num * 10) + 1;
else
id = 0;
id = pdev->id - id;

dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);

if (pdata == NULL || pdata->ldo[id] == NULL)
Expand Down Expand Up @@ -574,11 +580,17 @@ static __devinit int wm831x_aldo_probe(struct platform_device *pdev)
{
struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
struct wm831x_pdata *pdata = wm831x->dev->platform_data;
int id = pdev->id % ARRAY_SIZE(pdata->ldo);
int id;
struct wm831x_ldo *ldo;
struct resource *res;
int ret, irq;

if (pdata && pdata->wm831x_num)
id = (pdata->wm831x_num * 10) + 1;
else
id = 0;
id = pdev->id - id;

dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);

if (pdata == NULL || pdata->ldo[id] == NULL)
Expand Down Expand Up @@ -764,11 +776,18 @@ static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev)
{
struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);
struct wm831x_pdata *pdata = wm831x->dev->platform_data;
int id = pdev->id % ARRAY_SIZE(pdata->ldo);
int id;
struct wm831x_ldo *ldo;
struct resource *res;
int ret;

if (pdata && pdata->wm831x_num)
id = (pdata->wm831x_num * 10) + 1;
else
id = 0;
id = pdev->id - id;


dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1);

if (pdata == NULL || pdata->ldo[id] == NULL)
Expand Down

0 comments on commit 137a635

Please sign in to comment.