aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-12-07 09:24:12 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-12-07 09:24:12 -0500
commitacf1fcf77247efa01d7213f53082451f6c9c8f3b (patch)
tree7f4acc733d5384e0f342240a82c6156f5619e80c /drivers/gpio
parenteb485c7d9e6d71e4f621edb83573cb85c1d22975 (diff)
parent35ca3f61617db77364e40c1977952c5ee0a776cb (diff)
Merge branch 'thread-irq-simpler' into devel
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/gpio-adnp.c12
-rw-r--r--drivers/gpio/gpio-crystalcove.c6
-rw-r--r--drivers/gpio/gpio-dln2.c1
-rw-r--r--drivers/gpio/gpio-max732x.c17
-rw-r--r--drivers/gpio/gpio-mcp23s08.c17
-rw-r--r--drivers/gpio/gpio-pca953x.c16
-rw-r--r--drivers/gpio/gpio-pcf857x.c11
-rw-r--r--drivers/gpio/gpio-stmpe.c17
-rw-r--r--drivers/gpio/gpio-tc3589x.c17
-rw-r--r--drivers/gpio/gpio-wcove.c6
-rw-r--r--drivers/gpio/gpiolib.c69
11 files changed, 117 insertions, 72 deletions
diff --git a/drivers/gpio/gpio-adnp.c b/drivers/gpio/gpio-adnp.c
index 8ff7b0d3eac6..89863ea25de1 100644
--- a/drivers/gpio/gpio-adnp.c
+++ b/drivers/gpio/gpio-adnp.c
@@ -468,17 +468,19 @@ static int adnp_irq_setup(struct adnp *adnp)
468 return err; 468 return err;
469 } 469 }
470 470
471 err = gpiochip_irqchip_add(chip, 471 err = gpiochip_irqchip_add_nested(chip,
472 &adnp_irq_chip, 472 &adnp_irq_chip,
473 0, 473 0,
474 handle_simple_irq, 474 handle_simple_irq,
475 IRQ_TYPE_NONE); 475 IRQ_TYPE_NONE);
476 if (err) { 476 if (err) {
477 dev_err(chip->parent, 477 dev_err(chip->parent,
478 "could not connect irqchip to gpiochip\n"); 478 "could not connect irqchip to gpiochip\n");
479 return err; 479 return err;
480 } 480 }
481 481
482 gpiochip_set_nested_irqchip(chip, &adnp_irq_chip, adnp->client->irq);
483
482 return 0; 484 return 0;
483} 485}
484 486
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index 7c446d118cd6..2197368cc899 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c
@@ -351,8 +351,8 @@ static int crystalcove_gpio_probe(struct platform_device *pdev)
351 return retval; 351 return retval;
352 } 352 }
353 353
354 gpiochip_irqchip_add(&cg->chip, &crystalcove_irqchip, 0, 354 gpiochip_irqchip_add_nested(&cg->chip, &crystalcove_irqchip, 0,
355 handle_simple_irq, IRQ_TYPE_NONE); 355 handle_simple_irq, IRQ_TYPE_NONE);
356 356
357 retval = request_threaded_irq(irq, NULL, crystalcove_gpio_irq_handler, 357 retval = request_threaded_irq(irq, NULL, crystalcove_gpio_irq_handler,
358 IRQF_ONESHOT, KBUILD_MODNAME, cg); 358 IRQF_ONESHOT, KBUILD_MODNAME, cg);
@@ -362,6 +362,8 @@ static int crystalcove_gpio_probe(struct platform_device *pdev)
362 return retval; 362 return retval;
363 } 363 }
364 364
365 gpiochip_set_nested_irqchip(&cg->chip, &crystalcove_irqchip, irq);
366
365 return 0; 367 return 0;
366} 368}
367 369
diff --git a/drivers/gpio/gpio-dln2.c b/drivers/gpio/gpio-dln2.c
index f7a60a441e95..5d38b08d1ee2 100644
--- a/drivers/gpio/gpio-dln2.c
+++ b/drivers/gpio/gpio-dln2.c
@@ -467,7 +467,6 @@ static int dln2_gpio_probe(struct platform_device *pdev)
467 dln2->gpio.base = -1; 467 dln2->gpio.base = -1;
468 dln2->gpio.ngpio = pins; 468 dln2->gpio.ngpio = pins;
469 dln2->gpio.can_sleep = true; 469 dln2->gpio.can_sleep = true;
470 dln2->gpio.irq_not_threaded = true;
471 dln2->gpio.set = dln2_gpio_set; 470 dln2->gpio.set = dln2_gpio_set;
472 dln2->gpio.get = dln2_gpio_get; 471 dln2->gpio.get = dln2_gpio_get;
473 dln2->gpio.request = dln2_gpio_request; 472 dln2->gpio.request = dln2_gpio_request;
diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c
index a9aaf9d822b4..4ea4c6a1313b 100644
--- a/drivers/gpio/gpio-max732x.c
+++ b/drivers/gpio/gpio-max732x.c
@@ -520,20 +520,19 @@ static int max732x_irq_setup(struct max732x_chip *chip,
520 client->irq); 520 client->irq);
521 return ret; 521 return ret;
522 } 522 }
523 ret = gpiochip_irqchip_add(&chip->gpio_chip, 523 ret = gpiochip_irqchip_add_nested(&chip->gpio_chip,
524 &max732x_irq_chip, 524 &max732x_irq_chip,
525 irq_base, 525 irq_base,
526 handle_simple_irq, 526 handle_simple_irq,
527 IRQ_TYPE_NONE); 527 IRQ_TYPE_NONE);
528 if (ret) { 528 if (ret) {
529 dev_err(&client->dev, 529 dev_err(&client->dev,
530 "could not connect irqchip to gpiochip\n"); 530 "could not connect irqchip to gpiochip\n");
531 return ret; 531 return ret;
532 } 532 }
533 gpiochip_set_chained_irqchip(&chip->gpio_chip, 533 gpiochip_set_nested_irqchip(&chip->gpio_chip,
534 &max732x_irq_chip, 534 &max732x_irq_chip,
535 client->irq, 535 client->irq);
536 NULL);
537 } 536 }
538 537
539 return 0; 538 return 0;
diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c
index 99d37b56c258..504550665091 100644
--- a/drivers/gpio/gpio-mcp23s08.c
+++ b/drivers/gpio/gpio-mcp23s08.c
@@ -473,21 +473,20 @@ static int mcp23s08_irq_setup(struct mcp23s08 *mcp)
473 return err; 473 return err;
474 } 474 }
475 475
476 err = gpiochip_irqchip_add(chip, 476 err = gpiochip_irqchip_add_nested(chip,
477 &mcp23s08_irq_chip, 477 &mcp23s08_irq_chip,
478 0, 478 0,
479 handle_simple_irq, 479 handle_simple_irq,
480 IRQ_TYPE_NONE); 480 IRQ_TYPE_NONE);
481 if (err) { 481 if (err) {
482 dev_err(chip->parent, 482 dev_err(chip->parent,
483 "could not connect irqchip to gpiochip: %d\n", err); 483 "could not connect irqchip to gpiochip: %d\n", err);
484 return err; 484 return err;
485 } 485 }
486 486
487 gpiochip_set_chained_irqchip(chip, 487 gpiochip_set_nested_irqchip(chip,
488 &mcp23s08_irq_chip, 488 &mcp23s08_irq_chip,
489 mcp->irq, 489 mcp->irq);
490 NULL);
491 490
492 return 0; 491 return 0;
493} 492}
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 601c4550ee27..9733678f0219 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -636,20 +636,20 @@ static int pca953x_irq_setup(struct pca953x_chip *chip,
636 return ret; 636 return ret;
637 } 637 }
638 638
639 ret = gpiochip_irqchip_add(&chip->gpio_chip, 639 ret = gpiochip_irqchip_add_nested(&chip->gpio_chip,
640 &pca953x_irq_chip, 640 &pca953x_irq_chip,
641 irq_base, 641 irq_base,
642 handle_simple_irq, 642 handle_simple_irq,
643 IRQ_TYPE_NONE); 643 IRQ_TYPE_NONE);
644 if (ret) { 644 if (ret) {
645 dev_err(&client->dev, 645 dev_err(&client->dev,
646 "could not connect irqchip to gpiochip\n"); 646 "could not connect irqchip to gpiochip\n");
647 return ret; 647 return ret;
648 } 648 }
649 649
650 gpiochip_set_chained_irqchip(&chip->gpio_chip, 650 gpiochip_set_nested_irqchip(&chip->gpio_chip,
651 &pca953x_irq_chip, 651 &pca953x_irq_chip,
652 client->irq, NULL); 652 client->irq);
653 } 653 }
654 654
655 return 0; 655 return 0;
diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c
index d168410e2338..895af42a4513 100644
--- a/drivers/gpio/gpio-pcf857x.c
+++ b/drivers/gpio/gpio-pcf857x.c
@@ -378,9 +378,10 @@ static int pcf857x_probe(struct i2c_client *client,
378 378
379 /* Enable irqchip if we have an interrupt */ 379 /* Enable irqchip if we have an interrupt */
380 if (client->irq) { 380 if (client->irq) {
381 status = gpiochip_irqchip_add(&gpio->chip, &pcf857x_irq_chip, 381 status = gpiochip_irqchip_add_nested(&gpio->chip,
382 0, handle_level_irq, 382 &pcf857x_irq_chip,
383 IRQ_TYPE_NONE); 383 0, handle_level_irq,
384 IRQ_TYPE_NONE);
384 if (status) { 385 if (status) {
385 dev_err(&client->dev, "cannot add irqchip\n"); 386 dev_err(&client->dev, "cannot add irqchip\n");
386 goto fail; 387 goto fail;
@@ -393,8 +394,8 @@ static int pcf857x_probe(struct i2c_client *client,
393 if (status) 394 if (status)
394 goto fail; 395 goto fail;
395 396
396 gpiochip_set_chained_irqchip(&gpio->chip, &pcf857x_irq_chip, 397 gpiochip_set_nested_irqchip(&gpio->chip, &pcf857x_irq_chip,
397 client->irq, NULL); 398 client->irq);
398 gpio->irq_parent = client->irq; 399 gpio->irq_parent = client->irq;
399 } 400 }
400 401
diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
index e2e1b16a42db..21364e95065d 100644
--- a/drivers/gpio/gpio-stmpe.c
+++ b/drivers/gpio/gpio-stmpe.c
@@ -484,21 +484,20 @@ static int stmpe_gpio_probe(struct platform_device *pdev)
484 if (stmpe_gpio->norequest_mask & BIT(i)) 484 if (stmpe_gpio->norequest_mask & BIT(i))
485 clear_bit(i, stmpe_gpio->chip.irq_valid_mask); 485 clear_bit(i, stmpe_gpio->chip.irq_valid_mask);
486 } 486 }
487 ret = gpiochip_irqchip_add(&stmpe_gpio->chip, 487 ret = gpiochip_irqchip_add_nested(&stmpe_gpio->chip,
488 &stmpe_gpio_irq_chip, 488 &stmpe_gpio_irq_chip,
489 0, 489 0,
490 handle_simple_irq, 490 handle_simple_irq,
491 IRQ_TYPE_NONE); 491 IRQ_TYPE_NONE);
492 if (ret) { 492 if (ret) {
493 dev_err(&pdev->dev, 493 dev_err(&pdev->dev,
494 "could not connect irqchip to gpiochip\n"); 494 "could not connect irqchip to gpiochip\n");
495 goto out_disable; 495 goto out_disable;
496 } 496 }
497 497
498 gpiochip_set_chained_irqchip(&stmpe_gpio->chip, 498 gpiochip_set_nested_irqchip(&stmpe_gpio->chip,
499 &stmpe_gpio_irq_chip, 499 &stmpe_gpio_irq_chip,
500 irq, 500 irq);
501 NULL);
502 } 501 }
503 502
504 platform_set_drvdata(pdev, stmpe_gpio); 503 platform_set_drvdata(pdev, stmpe_gpio);
diff --git a/drivers/gpio/gpio-tc3589x.c b/drivers/gpio/gpio-tc3589x.c
index 5a5a6cb00eea..f041965f1b03 100644
--- a/drivers/gpio/gpio-tc3589x.c
+++ b/drivers/gpio/gpio-tc3589x.c
@@ -337,21 +337,20 @@ static int tc3589x_gpio_probe(struct platform_device *pdev)
337 return ret; 337 return ret;
338 } 338 }
339 339
340 ret = gpiochip_irqchip_add(&tc3589x_gpio->chip, 340 ret = gpiochip_irqchip_add_nested(&tc3589x_gpio->chip,
341 &tc3589x_gpio_irq_chip, 341 &tc3589x_gpio_irq_chip,
342 0, 342 0,
343 handle_simple_irq, 343 handle_simple_irq,
344 IRQ_TYPE_NONE); 344 IRQ_TYPE_NONE);
345 if (ret) { 345 if (ret) {
346 dev_err(&pdev->dev, 346 dev_err(&pdev->dev,
347 "could not connect irqchip to gpiochip\n"); 347 "could not connect irqchip to gpiochip\n");
348 return ret; 348 return ret;
349 } 349 }
350 350
351 gpiochip_set_chained_irqchip(&tc3589x_gpio->chip, 351 gpiochip_set_nested_irqchip(&tc3589x_gpio->chip,
352 &tc3589x_gpio_irq_chip, 352 &tc3589x_gpio_irq_chip,
353 irq, 353 irq);
354 NULL);
355 354
356 platform_set_drvdata(pdev, tc3589x_gpio); 355 platform_set_drvdata(pdev, tc3589x_gpio);
357 356
diff --git a/drivers/gpio/gpio-wcove.c b/drivers/gpio/gpio-wcove.c
index d0ddba7a9d08..34baee5b1dd6 100644
--- a/drivers/gpio/gpio-wcove.c
+++ b/drivers/gpio/gpio-wcove.c
@@ -426,8 +426,8 @@ static int wcove_gpio_probe(struct platform_device *pdev)
426 return ret; 426 return ret;
427 } 427 }
428 428
429 ret = gpiochip_irqchip_add(&wg->chip, &wcove_irqchip, 0, 429 ret = gpiochip_irqchip_add_nested(&wg->chip, &wcove_irqchip, 0,
430 handle_simple_irq, IRQ_TYPE_NONE); 430 handle_simple_irq, IRQ_TYPE_NONE);
431 if (ret) { 431 if (ret) {
432 dev_err(dev, "Failed to add irqchip: %d\n", ret); 432 dev_err(dev, "Failed to add irqchip: %d\n", ret);
433 return ret; 433 return ret;
@@ -446,6 +446,8 @@ static int wcove_gpio_probe(struct platform_device *pdev)
446 return ret; 446 return ret;
447 } 447 }
448 448
449 gpiochip_set_nested_irqchip(&wg->chip, &wcove_irqchip, virq);
450
449 return 0; 451 return 0;
450} 452}
451 453
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 0e29cb745648..acdff62f2ee2 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1440,7 +1440,7 @@ static bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
1440} 1440}
1441 1441
1442/** 1442/**
1443 * gpiochip_set_chained_irqchip() - sets a chained irqchip to a gpiochip 1443 * gpiochip_set_cascaded_irqchip() - connects a cascaded irqchip to a gpiochip
1444 * @gpiochip: the gpiochip to set the irqchip chain to 1444 * @gpiochip: the gpiochip to set the irqchip chain to
1445 * @irqchip: the irqchip to chain to the gpiochip 1445 * @irqchip: the irqchip to chain to the gpiochip
1446 * @parent_irq: the irq number corresponding to the parent IRQ for this 1446 * @parent_irq: the irq number corresponding to the parent IRQ for this
@@ -1449,10 +1449,10 @@ static bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
1449 * coming out of the gpiochip. If the interrupt is nested rather than 1449 * coming out of the gpiochip. If the interrupt is nested rather than
1450 * cascaded, pass NULL in this handler argument 1450 * cascaded, pass NULL in this handler argument
1451 */ 1451 */
1452void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip, 1452static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip,
1453 struct irq_chip *irqchip, 1453 struct irq_chip *irqchip,
1454 int parent_irq, 1454 int parent_irq,
1455 irq_flow_handler_t parent_handler) 1455 irq_flow_handler_t parent_handler)
1456{ 1456{
1457 unsigned int offset; 1457 unsigned int offset;
1458 1458
@@ -1476,7 +1476,7 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
1476 irq_set_chained_handler_and_data(parent_irq, parent_handler, 1476 irq_set_chained_handler_and_data(parent_irq, parent_handler,
1477 gpiochip); 1477 gpiochip);
1478 1478
1479 gpiochip->irq_parent = parent_irq; 1479 gpiochip->irq_chained_parent = parent_irq;
1480 } 1480 }
1481 1481
1482 /* Set the parent IRQ for all affected IRQs */ 1482 /* Set the parent IRQ for all affected IRQs */
@@ -1487,9 +1487,48 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
1487 parent_irq); 1487 parent_irq);
1488 } 1488 }
1489} 1489}
1490
1491/**
1492 * gpiochip_set_chained_irqchip() - connects a chained irqchip to a gpiochip
1493 * @gpiochip: the gpiochip to set the irqchip chain to
1494 * @irqchip: the irqchip to chain to the gpiochip
1495 * @parent_irq: the irq number corresponding to the parent IRQ for this
1496 * chained irqchip
1497 * @parent_handler: the parent interrupt handler for the accumulated IRQ
1498 * coming out of the gpiochip. If the interrupt is nested rather than
1499 * cascaded, pass NULL in this handler argument
1500 */
1501void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
1502 struct irq_chip *irqchip,
1503 int parent_irq,
1504 irq_flow_handler_t parent_handler)
1505{
1506 gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq,
1507 parent_handler);
1508}
1490EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip); 1509EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
1491 1510
1492/** 1511/**
1512 * gpiochip_set_nested_irqchip() - connects a nested irqchip to a gpiochip
1513 * @gpiochip: the gpiochip to set the irqchip nested handler to
1514 * @irqchip: the irqchip to nest to the gpiochip
1515 * @parent_irq: the irq number corresponding to the parent IRQ for this
1516 * nested irqchip
1517 */
1518void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
1519 struct irq_chip *irqchip,
1520 int parent_irq)
1521{
1522 if (!gpiochip->irq_nested) {
1523 chip_err(gpiochip, "tried to nest a chained gpiochip\n");
1524 return;
1525 }
1526 gpiochip_set_cascaded_irqchip(gpiochip, irqchip, parent_irq,
1527 NULL);
1528}
1529EXPORT_SYMBOL_GPL(gpiochip_set_nested_irqchip);
1530
1531/**
1493 * gpiochip_irq_map() - maps an IRQ into a GPIO irqchip 1532 * gpiochip_irq_map() - maps an IRQ into a GPIO irqchip
1494 * @d: the irqdomain used by this irqchip 1533 * @d: the irqdomain used by this irqchip
1495 * @irq: the global irq number used by this GPIO irqchip irq 1534 * @irq: the global irq number used by this GPIO irqchip irq
@@ -1511,8 +1550,8 @@ static int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
1511 */ 1550 */
1512 irq_set_lockdep_class(irq, chip->lock_key); 1551 irq_set_lockdep_class(irq, chip->lock_key);
1513 irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler); 1552 irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
1514 /* Chips that can sleep need nested thread handlers */ 1553 /* Chips that use nested thread handlers have them marked */
1515 if (chip->can_sleep && !chip->irq_not_threaded) 1554 if (chip->irq_nested)
1516 irq_set_nested_thread(irq, 1); 1555 irq_set_nested_thread(irq, 1);
1517 irq_set_noprobe(irq); 1556 irq_set_noprobe(irq);
1518 1557
@@ -1530,7 +1569,7 @@ static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
1530{ 1569{
1531 struct gpio_chip *chip = d->host_data; 1570 struct gpio_chip *chip = d->host_data;
1532 1571
1533 if (chip->can_sleep) 1572 if (chip->irq_nested)
1534 irq_set_nested_thread(irq, 0); 1573 irq_set_nested_thread(irq, 0);
1535 irq_set_chip_and_handler(irq, NULL, NULL); 1574 irq_set_chip_and_handler(irq, NULL, NULL);
1536 irq_set_chip_data(irq, NULL); 1575 irq_set_chip_data(irq, NULL);
@@ -1585,9 +1624,9 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1585 1624
1586 acpi_gpiochip_free_interrupts(gpiochip); 1625 acpi_gpiochip_free_interrupts(gpiochip);
1587 1626
1588 if (gpiochip->irq_parent) { 1627 if (gpiochip->irq_chained_parent) {
1589 irq_set_chained_handler(gpiochip->irq_parent, NULL); 1628 irq_set_chained_handler(gpiochip->irq_chained_parent, NULL);
1590 irq_set_handler_data(gpiochip->irq_parent, NULL); 1629 irq_set_handler_data(gpiochip->irq_chained_parent, NULL);
1591 } 1630 }
1592 1631
1593 /* Remove all IRQ mappings and delete the domain */ 1632 /* Remove all IRQ mappings and delete the domain */
@@ -1611,7 +1650,7 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1611} 1650}
1612 1651
1613/** 1652/**
1614 * gpiochip_irqchip_add() - adds an irqchip to a gpiochip 1653 * _gpiochip_irqchip_add() - adds an irqchip to a gpiochip
1615 * @gpiochip: the gpiochip to add the irqchip to 1654 * @gpiochip: the gpiochip to add the irqchip to
1616 * @irqchip: the irqchip to add to the gpiochip 1655 * @irqchip: the irqchip to add to the gpiochip
1617 * @first_irq: if not dynamically assigned, the base (first) IRQ to 1656 * @first_irq: if not dynamically assigned, the base (first) IRQ to
@@ -1619,6 +1658,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1619 * @handler: the irq handler to use (often a predefined irq core function) 1658 * @handler: the irq handler to use (often a predefined irq core function)
1620 * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE 1659 * @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE
1621 * to have the core avoid setting up any default type in the hardware. 1660 * to have the core avoid setting up any default type in the hardware.
1661 * @nested: whether this is a nested irqchip calling handle_nested_irq()
1662 * in its IRQ handler
1622 * @lock_key: lockdep class 1663 * @lock_key: lockdep class
1623 * 1664 *
1624 * This function closely associates a certain irqchip with a certain 1665 * This function closely associates a certain irqchip with a certain
@@ -1640,6 +1681,7 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
1640 unsigned int first_irq, 1681 unsigned int first_irq,
1641 irq_flow_handler_t handler, 1682 irq_flow_handler_t handler,
1642 unsigned int type, 1683 unsigned int type,
1684 bool nested,
1643 struct lock_class_key *lock_key) 1685 struct lock_class_key *lock_key)
1644{ 1686{
1645 struct device_node *of_node; 1687 struct device_node *of_node;
@@ -1654,6 +1696,7 @@ int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
1654 pr_err("missing gpiochip .dev parent pointer\n"); 1696 pr_err("missing gpiochip .dev parent pointer\n");
1655 return -EINVAL; 1697 return -EINVAL;
1656 } 1698 }
1699 gpiochip->irq_nested = nested;
1657 of_node = gpiochip->parent->of_node; 1700 of_node = gpiochip->parent->of_node;
1658#ifdef CONFIG_OF_GPIO 1701#ifdef CONFIG_OF_GPIO
1659 /* 1702 /*