Merge tag 'gpio-v3.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio

Pull GPIO fixes from Linus Walleij:
"Two patches for the OMAP driver, dealing with setting up IRQs properly
on the device tree boot path"

* tag 'gpio-v3.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
gpio/omap: auto-setup a GPIO when used as an IRQ
gpio/omap: maintain GPIO and IRQ usage separately

Changed files
+101 -57
drivers
+101 -57
drivers/gpio/gpio-omap.c
··· 63 63 struct gpio_chip chip; 64 64 struct clk *dbck; 65 65 u32 mod_usage; 66 + u32 irq_usage; 66 67 u32 dbck_enable_mask; 67 68 bool dbck_enabled; 68 69 struct device *dev; ··· 86 85 #define GPIO_INDEX(bank, gpio) (gpio % bank->width) 87 86 #define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio)) 88 87 #define GPIO_MOD_CTRL_BIT BIT(0) 88 + 89 + #define BANK_USED(bank) (bank->mod_usage || bank->irq_usage) 90 + #define LINE_USED(line, offset) (line & (1 << offset)) 89 91 90 92 static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq) 91 93 { ··· 424 420 return 0; 425 421 } 426 422 423 + static void _enable_gpio_module(struct gpio_bank *bank, unsigned offset) 424 + { 425 + if (bank->regs->pinctrl) { 426 + void __iomem *reg = bank->base + bank->regs->pinctrl; 427 + 428 + /* Claim the pin for MPU */ 429 + __raw_writel(__raw_readl(reg) | (1 << offset), reg); 430 + } 431 + 432 + if (bank->regs->ctrl && !BANK_USED(bank)) { 433 + void __iomem *reg = bank->base + bank->regs->ctrl; 434 + u32 ctrl; 435 + 436 + ctrl = __raw_readl(reg); 437 + /* Module is enabled, clocks are not gated */ 438 + ctrl &= ~GPIO_MOD_CTRL_BIT; 439 + __raw_writel(ctrl, reg); 440 + bank->context.ctrl = ctrl; 441 + } 442 + } 443 + 444 + static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) 445 + { 446 + void __iomem *base = bank->base; 447 + 448 + if (bank->regs->wkup_en && 449 + !LINE_USED(bank->mod_usage, offset) && 450 + !LINE_USED(bank->irq_usage, offset)) { 451 + /* Disable wake-up during idle for dynamic tick */ 452 + _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0); 453 + bank->context.wake_en = 454 + __raw_readl(bank->base + bank->regs->wkup_en); 455 + } 456 + 457 + if (bank->regs->ctrl && !BANK_USED(bank)) { 458 + void __iomem *reg = bank->base + bank->regs->ctrl; 459 + u32 ctrl; 460 + 461 + ctrl = __raw_readl(reg); 462 + /* Module is disabled, clocks are gated */ 463 + ctrl |= GPIO_MOD_CTRL_BIT; 464 + __raw_writel(ctrl, reg); 465 + bank->context.ctrl = ctrl; 466 + } 467 + } 468 + 469 + static int gpio_is_input(struct gpio_bank *bank, int mask) 470 + { 471 + void __iomem *reg = bank->base + bank->regs->direction; 472 + 473 + return __raw_readl(reg) & mask; 474 + } 475 + 427 476 static int gpio_irq_type(struct irq_data *d, unsigned type) 428 477 { 429 478 struct gpio_bank *bank = irq_data_get_irq_chip_data(d); 430 479 unsigned gpio = 0; 431 480 int retval; 432 481 unsigned long flags; 482 + unsigned offset; 433 483 434 - if (WARN_ON(!bank->mod_usage)) 435 - return -EINVAL; 484 + if (!BANK_USED(bank)) 485 + pm_runtime_get_sync(bank->dev); 436 486 437 487 #ifdef CONFIG_ARCH_OMAP1 438 488 if (d->irq > IH_MPUIO_BASE) ··· 504 446 return -EINVAL; 505 447 506 448 spin_lock_irqsave(&bank->lock, flags); 507 - retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type); 449 + offset = GPIO_INDEX(bank, gpio); 450 + retval = _set_gpio_triggering(bank, offset, type); 451 + if (!LINE_USED(bank->mod_usage, offset)) { 452 + _enable_gpio_module(bank, offset); 453 + _set_gpio_direction(bank, offset, 1); 454 + } else if (!gpio_is_input(bank, 1 << offset)) { 455 + spin_unlock_irqrestore(&bank->lock, flags); 456 + return -EINVAL; 457 + } 458 + 459 + bank->irq_usage |= 1 << GPIO_INDEX(bank, gpio); 508 460 spin_unlock_irqrestore(&bank->lock, flags); 509 461 510 462 if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) ··· 671 603 * If this is the first gpio_request for the bank, 672 604 * enable the bank module. 673 605 */ 674 - if (!bank->mod_usage) 606 + if (!BANK_USED(bank)) 675 607 pm_runtime_get_sync(bank->dev); 676 608 677 609 spin_lock_irqsave(&bank->lock, flags); 678 610 /* Set trigger to none. You need to enable the desired trigger with 679 - * request_irq() or set_irq_type(). 611 + * request_irq() or set_irq_type(). Only do this if the IRQ line has 612 + * not already been requested. 680 613 */ 681 - _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE); 682 - 683 - if (bank->regs->pinctrl) { 684 - void __iomem *reg = bank->base + bank->regs->pinctrl; 685 - 686 - /* Claim the pin for MPU */ 687 - __raw_writel(__raw_readl(reg) | (1 << offset), reg); 614 + if (!LINE_USED(bank->irq_usage, offset)) { 615 + _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE); 616 + _enable_gpio_module(bank, offset); 688 617 } 689 - 690 - if (bank->regs->ctrl && !bank->mod_usage) { 691 - void __iomem *reg = bank->base + bank->regs->ctrl; 692 - u32 ctrl; 693 - 694 - ctrl = __raw_readl(reg); 695 - /* Module is enabled, clocks are not gated */ 696 - ctrl &= ~GPIO_MOD_CTRL_BIT; 697 - __raw_writel(ctrl, reg); 698 - bank->context.ctrl = ctrl; 699 - } 700 - 701 618 bank->mod_usage |= 1 << offset; 702 - 703 619 spin_unlock_irqrestore(&bank->lock, flags); 704 620 705 621 return 0; ··· 692 640 static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) 693 641 { 694 642 struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip); 695 - void __iomem *base = bank->base; 696 643 unsigned long flags; 697 644 698 645 spin_lock_irqsave(&bank->lock, flags); 699 - 700 - if (bank->regs->wkup_en) { 701 - /* Disable wake-up during idle for dynamic tick */ 702 - _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0); 703 - bank->context.wake_en = 704 - __raw_readl(bank->base + bank->regs->wkup_en); 705 - } 706 - 707 646 bank->mod_usage &= ~(1 << offset); 708 - 709 - if (bank->regs->ctrl && !bank->mod_usage) { 710 - void __iomem *reg = bank->base + bank->regs->ctrl; 711 - u32 ctrl; 712 - 713 - ctrl = __raw_readl(reg); 714 - /* Module is disabled, clocks are gated */ 715 - ctrl |= GPIO_MOD_CTRL_BIT; 716 - __raw_writel(ctrl, reg); 717 - bank->context.ctrl = ctrl; 718 - } 719 - 647 + _disable_gpio_module(bank, offset); 720 648 _reset_gpio(bank, bank->chip.base + offset); 721 649 spin_unlock_irqrestore(&bank->lock, flags); 722 650 ··· 704 672 * If this is the last gpio to be freed in the bank, 705 673 * disable the bank module. 706 674 */ 707 - if (!bank->mod_usage) 675 + if (!BANK_USED(bank)) 708 676 pm_runtime_put(bank->dev); 709 677 } 710 678 ··· 794 762 struct gpio_bank *bank = irq_data_get_irq_chip_data(d); 795 763 unsigned int gpio = irq_to_gpio(bank, d->hwirq); 796 764 unsigned long flags; 765 + unsigned offset = GPIO_INDEX(bank, gpio); 797 766 798 767 spin_lock_irqsave(&bank->lock, flags); 768 + bank->irq_usage &= ~(1 << offset); 769 + _disable_gpio_module(bank, offset); 799 770 _reset_gpio(bank, gpio); 800 771 spin_unlock_irqrestore(&bank->lock, flags); 772 + 773 + /* 774 + * If this is the last IRQ to be freed in the bank, 775 + * disable the bank module. 776 + */ 777 + if (!BANK_USED(bank)) 778 + pm_runtime_put(bank->dev); 801 779 } 802 780 803 781 static void gpio_ack_irq(struct irq_data *d) ··· 939 897 return 0; 940 898 } 941 899 942 - static int gpio_is_input(struct gpio_bank *bank, int mask) 943 - { 944 - void __iomem *reg = bank->base + bank->regs->direction; 945 - 946 - return __raw_readl(reg) & mask; 947 - } 948 - 949 900 static int gpio_get(struct gpio_chip *chip, unsigned offset) 950 901 { 951 902 struct gpio_bank *bank; ··· 957 922 { 958 923 struct gpio_bank *bank; 959 924 unsigned long flags; 925 + int retval = 0; 960 926 961 927 bank = container_of(chip, struct gpio_bank, chip); 962 928 spin_lock_irqsave(&bank->lock, flags); 929 + 930 + if (LINE_USED(bank->irq_usage, offset)) { 931 + retval = -EINVAL; 932 + goto exit; 933 + } 934 + 963 935 bank->set_dataout(bank, offset, value); 964 936 _set_gpio_direction(bank, offset, 0); 937 + 938 + exit: 965 939 spin_unlock_irqrestore(&bank->lock, flags); 966 - return 0; 940 + return retval; 967 941 } 968 942 969 943 static int gpio_debounce(struct gpio_chip *chip, unsigned offset, ··· 1444 1400 struct gpio_bank *bank; 1445 1401 1446 1402 list_for_each_entry(bank, &omap_gpio_list, node) { 1447 - if (!bank->mod_usage || !bank->loses_context) 1403 + if (!BANK_USED(bank) || !bank->loses_context) 1448 1404 continue; 1449 1405 1450 1406 bank->power_mode = pwr_mode; ··· 1458 1414 struct gpio_bank *bank; 1459 1415 1460 1416 list_for_each_entry(bank, &omap_gpio_list, node) { 1461 - if (!bank->mod_usage || !bank->loses_context) 1417 + if (!BANK_USED(bank) || !bank->loses_context) 1462 1418 continue; 1463 1419 1464 1420 pm_runtime_get_sync(bank->dev);