Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: brcmstb: allow 0 width GPIO banks

Sometimes we have empty banks within the GPIO block. This commit allows
proper handling of 0 width GPIO banks. We handle 0 width GPIO banks by
incrementing the bank and number of GPIOs, but not initializing them.
This will mean a call into the non-existent GPIOs will return an error.

Also remove "GPIO registered" dev print. This information is misleading
since the incremented banks and gpio_base do not reflect the actual GPIOs
that get initialized. We leave this information out since it is already
printed with dev_dbg.

Signed-off-by: Justin Chen <justinpopo6@gmail.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Justin Chen and committed by
Linus Walleij
bfba223d 36f3f19a

+12 -3
+12 -3
drivers/gpio/gpio-brcmstb.c
··· 664 664 struct brcmstb_gpio_bank *bank; 665 665 struct gpio_chip *gc; 666 666 667 + /* 668 + * If bank_width is 0, then there is an empty bank in the 669 + * register block. Special handling for this case. 670 + */ 671 + if (bank_width == 0) { 672 + dev_dbg(dev, "Width 0 found: Empty bank @ %d\n", 673 + num_banks); 674 + num_banks++; 675 + gpio_base += MAX_GPIO_PER_BANK; 676 + continue; 677 + } 678 + 667 679 bank = devm_kzalloc(dev, sizeof(*bank), GFP_KERNEL); 668 680 if (!bank) { 669 681 err = -ENOMEM; ··· 751 739 if (err) 752 740 goto fail; 753 741 } 754 - 755 - dev_info(dev, "Registered %d banks (GPIO(s): %d-%d)\n", 756 - num_banks, priv->gpio_base, gpio_base - 1); 757 742 758 743 if (priv->parent_wake_irq && need_wakeup_event) 759 744 pm_wakeup_event(dev, 0);