aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-01-07 08:04:56 -0500
committerLinus Walleij <linus.walleij@linaro.org>2013-01-11 15:49:20 -0500
commit50f690d85e4e26ca31082e9943d36b618e7566fe (patch)
tree6960253522d61e8685601e60e7a4f987306ad3b0
parentaa6e379aef84711f432ce754bda8e88b0270061c (diff)
pinctrl/nomadik: simplify GPIO probe
Instead of jumping to a label later in the probe just return with an error code whenever probe() fails. Make sure to remove the gpiochip on irqdomain error now that we're at it. Reviewed-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/pinctrl/pinctrl-nomadik.c52
1 files changed, 17 insertions, 35 deletions
diff --git a/drivers/pinctrl/pinctrl-nomadik.c b/drivers/pinctrl/pinctrl-nomadik.c
index 4814d5403733..f404e644a16e 100644
--- a/drivers/pinctrl/pinctrl-nomadik.c
+++ b/drivers/pinctrl/pinctrl-nomadik.c
@@ -1341,8 +1341,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
1341 1341
1342 if (of_property_read_u32(np, "gpio-bank", &dev->id)) { 1342 if (of_property_read_u32(np, "gpio-bank", &dev->id)) {
1343 dev_err(&dev->dev, "gpio-bank property not found\n"); 1343 dev_err(&dev->dev, "gpio-bank property not found\n");
1344 ret = -EINVAL; 1344 return -EINVAL;
1345 goto out;
1346 } 1345 }
1347 1346
1348 pdata->first_gpio = dev->id * NMK_GPIO_PER_CHIP; 1347 pdata->first_gpio = dev->id * NMK_GPIO_PER_CHIP;
@@ -1350,41 +1349,29 @@ static int nmk_gpio_probe(struct platform_device *dev)
1350 } 1349 }
1351 1350
1352 res = platform_get_resource(dev, IORESOURCE_MEM, 0); 1351 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
1353 if (!res) { 1352 if (!res)
1354 ret = -ENOENT; 1353 return -ENOENT;
1355 goto out;
1356 }
1357 1354
1358 irq = platform_get_irq(dev, 0); 1355 irq = platform_get_irq(dev, 0);
1359 if (irq < 0) { 1356 if (irq < 0)
1360 ret = irq; 1357 return irq;
1361 goto out;
1362 }
1363 1358
1364 secondary_irq = platform_get_irq(dev, 1); 1359 secondary_irq = platform_get_irq(dev, 1);
1365 if (secondary_irq >= 0 && !pdata->get_secondary_status) { 1360 if (secondary_irq >= 0 && !pdata->get_secondary_status)
1366 ret = -EINVAL; 1361 return -EINVAL;
1367 goto out;
1368 }
1369 1362
1370 base = devm_request_and_ioremap(&dev->dev, res); 1363 base = devm_request_and_ioremap(&dev->dev, res);
1371 if (!base) { 1364 if (!base)
1372 ret = -ENOMEM; 1365 return -ENOMEM;
1373 goto out;
1374 }
1375 1366
1376 clk = devm_clk_get(&dev->dev, NULL); 1367 clk = devm_clk_get(&dev->dev, NULL);
1377 if (IS_ERR(clk)) { 1368 if (IS_ERR(clk))
1378 ret = PTR_ERR(clk); 1369 return PTR_ERR(clk);
1379 goto out;
1380 }
1381 clk_prepare(clk); 1370 clk_prepare(clk);
1382 1371
1383 nmk_chip = devm_kzalloc(&dev->dev, sizeof(*nmk_chip), GFP_KERNEL); 1372 nmk_chip = devm_kzalloc(&dev->dev, sizeof(*nmk_chip), GFP_KERNEL);
1384 if (!nmk_chip) { 1373 if (!nmk_chip)
1385 ret = -ENOMEM; 1374 return -ENOMEM;
1386 goto out;
1387 }
1388 1375
1389 /* 1376 /*
1390 * The virt address in nmk_chip->addr is in the nomadik register space, 1377 * The virt address in nmk_chip->addr is in the nomadik register space,
@@ -1418,7 +1405,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
1418 1405
1419 ret = gpiochip_add(&nmk_chip->chip); 1406 ret = gpiochip_add(&nmk_chip->chip);
1420 if (ret) 1407 if (ret)
1421 goto out; 1408 return ret;
1422 1409
1423 BUG_ON(nmk_chip->bank >= ARRAY_SIZE(nmk_gpio_chips)); 1410 BUG_ON(nmk_chip->bank >= ARRAY_SIZE(nmk_gpio_chips));
1424 1411
@@ -1433,8 +1420,9 @@ static int nmk_gpio_probe(struct platform_device *dev)
1433 &nmk_gpio_irq_simple_ops, nmk_chip); 1420 &nmk_gpio_irq_simple_ops, nmk_chip);
1434 if (!nmk_chip->domain) { 1421 if (!nmk_chip->domain) {
1435 dev_err(&dev->dev, "failed to create irqdomain\n"); 1422 dev_err(&dev->dev, "failed to create irqdomain\n");
1436 ret = -ENOSYS; 1423 /* Just do this, no matter if it fails */
1437 goto out; 1424 ret = gpiochip_remove(&nmk_chip->chip);
1425 return -ENOSYS;
1438 } 1426 }
1439 1427
1440 nmk_gpio_init_irq(nmk_chip); 1428 nmk_gpio_init_irq(nmk_chip);
@@ -1442,12 +1430,6 @@ static int nmk_gpio_probe(struct platform_device *dev)
1442 dev_info(&dev->dev, "at address %p\n", nmk_chip->addr); 1430 dev_info(&dev->dev, "at address %p\n", nmk_chip->addr);
1443 1431
1444 return 0; 1432 return 0;
1445
1446out:
1447 dev_err(&dev->dev, "Failure %i for GPIO %i-%i\n", ret,
1448 pdata->first_gpio, pdata->first_gpio+31);
1449
1450 return ret;
1451} 1433}
1452 1434
1453static int nmk_get_groups_cnt(struct pinctrl_dev *pctldev) 1435static int nmk_get_groups_cnt(struct pinctrl_dev *pctldev)