Commit a4257af5 authored by Marek Vasut's avatar Marek Vasut Committed by Eric Miao

ARM: pxa: Add pxa320 PCMCIA check

On PXA320, there's only one PCMCIA slot available. Check for cases where the
user would want to register multiple. Also, rework failpath.
Signed-off-by: default avatarMarek Vasut <marek.vasut@gmail.com>
Signed-off-by: default avatarEric Miao <eric.y.miao@gmail.com>
parent ef6c8445
...@@ -285,8 +285,16 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev) ...@@ -285,8 +285,16 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
struct clk *clk; struct clk *clk;
ops = (struct pcmcia_low_level *)dev->dev.platform_data; ops = (struct pcmcia_low_level *)dev->dev.platform_data;
if (!ops) if (!ops) {
return -ENODEV; ret = -ENODEV;
goto err0;
}
if (cpu_is_pxa320() && ops->nr > 1) {
dev_err(&dev->dev, "pxa320 supports only one pcmcia slot");
ret = -EINVAL;
goto err0;
}
clk = clk_get(&dev->dev, NULL); clk = clk_get(&dev->dev, NULL);
if (!clk) if (!clk)
...@@ -316,7 +324,7 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev) ...@@ -316,7 +324,7 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
ret = pxa2xx_drv_pcmcia_add_one(skt); ret = pxa2xx_drv_pcmcia_add_one(skt);
if (ret) if (ret)
break; goto err1;
} }
if (ret) { if (ret) {
...@@ -329,6 +337,13 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev) ...@@ -329,6 +337,13 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
dev_set_drvdata(&dev->dev, sinfo); dev_set_drvdata(&dev->dev, sinfo);
} }
return 0;
err1:
while (--i >= 0)
soc_pcmcia_remove_one(&sinfo->skt[i]);
kfree(sinfo);
err0:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment