Currently the driver defines 3 gpiochips, one for each bank. /sys/class/gpio/gpiochip416/label:1e000600.gpio /sys/class/gpio/gpiochip448/label:1e000600.gpio /sys/class/gpio/gpiochip480/label:1e000600.gpio Unfortunately they all have the same label Interrupts from /proc/interrupt show the same name which is confusing: /proc/interrupts: 17: 0 0 0 0 MIPS GIC 19 mt7621, mt7621, mt7621 which is the interrupt from the GPIO controller. It is a little weird that all three banks are named "mt7621" here. We also have: 26: 0 0 0 0 GPIO 18 reset which is the interrupt from GPIO which provides the "reset" button. I suspect that if I had interrupts form two different banks they would both be called "GPIO" which would be a little confusing. In order to unify all of this set different names for each chip Use a 'bank-based' name instead the same for all: 'mt7621-bank[0-2]'. Create a new 'mediatek_gpio_bank_name' function which return the name depending on the bank number. This function is allways called with a valid index 0, 1 or 2. Signed-off-by: Sergio Paracuellos <sergio.paracuellos@xxxxxxxxx> --- drivers/staging/mt7621-gpio/gpio-mt7621.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/staging/mt7621-gpio/gpio-mt7621.c b/drivers/staging/mt7621-gpio/gpio-mt7621.c index 698a95d..63fb5a1 100644 --- a/drivers/staging/mt7621-gpio/gpio-mt7621.c +++ b/drivers/staging/mt7621-gpio/gpio-mt7621.c @@ -190,13 +190,21 @@ mediatek_gpio_irq_type(struct irq_data *d, unsigned int type) } static struct irq_chip mediatek_gpio_irq_chip = { - .name = "GPIO", .irq_unmask = mediatek_gpio_irq_unmask, .irq_mask = mediatek_gpio_irq_mask, .irq_mask_ack = mediatek_gpio_irq_mask, .irq_set_type = mediatek_gpio_irq_type, }; +static inline const char * const mediatek_gpio_bank_name(int bank) +{ + static const char * const bank_names[] = { + "mt7621-bank0", "mt7621-bank1", "mt7621-bank2", + }; + + return bank_names[bank]; +} + static int mediatek_gpio_bank_probe(struct platform_device *pdev, struct device_node *bank) { @@ -215,6 +223,7 @@ mediatek_gpio_bank_probe(struct platform_device *pdev, struct device_node *bank) spin_lock_init(&rg->lock); rg->chip.of_node = bank; rg->bank = be32_to_cpu(*id); + rg->chip.label = mediatek_gpio_bank_name(rg->bank); dat = gpio->gpio_membase + GPIO_REG_DATA + (rg->bank * GPIO_BANK_WIDE); set = gpio->gpio_membase + GPIO_REG_DSET + (rg->bank * GPIO_BANK_WIDE); @@ -242,7 +251,7 @@ mediatek_gpio_bank_probe(struct platform_device *pdev, struct device_node *bank) */ ret = devm_request_irq(&pdev->dev, gpio->gpio_irq, mediatek_gpio_irq_handler, IRQF_SHARED, - "mt7621", &rg->chip); + rg->chip.label, &rg->chip); if (ret) { dev_err(&pdev->dev, "Error requesting IRQ %d: %d\n", @@ -250,6 +259,7 @@ mediatek_gpio_bank_probe(struct platform_device *pdev, struct device_node *bank) return ret; } + mediatek_gpio_irq_chip.name = rg->chip.label; ret = gpiochip_irqchip_add(&rg->chip, &mediatek_gpio_irq_chip, 0, handle_simple_irq, IRQ_TYPE_NONE); if (ret) { -- 2.7.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel