ARM: pxa: Add pxa320 PCMCIA check
authorMarek Vasut <marek.vasut@gmail.com>
Wed, 3 Nov 2010 15:26:42 +0000 (16:26 +0100)
committerEric Miao <eric.y.miao@gmail.com>
Mon, 20 Dec 2010 15:07:37 +0000 (23:07 +0800)
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: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
drivers/pcmcia/pxa2xx_base.c

index 3c01774eb3937d3b6df0ef9714de45347766b7d9..3755e7c8c715f5f9bebf60c5d9a7ff4a5e250f65 100644 (file)
@@ -285,8 +285,16 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
        struct clk *clk;
 
        ops = (struct pcmcia_low_level *)dev->dev.platform_data;
-       if (!ops)
-               return -ENODEV;
+       if (!ops) {
+               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);
        if (!clk)
@@ -316,7 +324,7 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
 
                ret = pxa2xx_drv_pcmcia_add_one(skt);
                if (ret)
-                       break;
+                       goto err1;
        }
 
        if (ret) {
@@ -329,6 +337,13 @@ static int pxa2xx_drv_pcmcia_probe(struct platform_device *dev)
                dev_set_drvdata(&dev->dev, sinfo);
        }
 
+       return 0;
+
+err1:
+       while (--i >= 0)
+               soc_pcmcia_remove_one(&sinfo->skt[i]);
+       kfree(sinfo);
+err0:
        return ret;
 }