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

gpio: sodaville: use resource management for irqs

Use device resource managed variants of irq_alloc_descs() and
request_irq() and remove the code manually freeing irq resources.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Bartosz Golaszewski and committed by
Linus Walleij
74dd9ebf a1a3c2d5

+11 -17
+11 -17
drivers/gpio/gpio-sodaville.c
··· 135 135 struct irq_chip_type *ct; 136 136 int ret; 137 137 138 - sd->irq_base = irq_alloc_descs(-1, 0, SDV_NUM_PUB_GPIOS, -1); 138 + sd->irq_base = devm_irq_alloc_descs(&pdev->dev, -1, 0, 139 + SDV_NUM_PUB_GPIOS, -1); 139 140 if (sd->irq_base < 0) 140 141 return sd->irq_base; 141 142 ··· 144 143 writel(0, sd->gpio_pub_base + GPIO_INT); 145 144 writel((1 << 11) - 1, sd->gpio_pub_base + GPSTR); 146 145 147 - ret = request_irq(pdev->irq, sdv_gpio_pub_irq_handler, IRQF_SHARED, 148 - "sdv_gpio", sd); 146 + ret = devm_request_irq(&pdev->dev, pdev->irq, 147 + sdv_gpio_pub_irq_handler, IRQF_SHARED, 148 + "sdv_gpio", sd); 149 149 if (ret) 150 - goto out_free_desc; 150 + return ret; 151 151 152 152 /* 153 153 * This gpio irq controller latches level irqs. Testing shows that if ··· 157 155 */ 158 156 sd->gc = irq_alloc_generic_chip("sdv-gpio", 1, sd->irq_base, 159 157 sd->gpio_pub_base, handle_fasteoi_irq); 160 - if (!sd->gc) { 161 - ret = -ENOMEM; 162 - goto out_free_irq; 163 - } 158 + if (!sd->gc) 159 + return -ENOMEM; 164 160 165 161 sd->gc->private = sd; 166 162 ct = sd->gc->chip_types; ··· 176 176 177 177 sd->id = irq_domain_add_legacy(pdev->dev.of_node, SDV_NUM_PUB_GPIOS, 178 178 sd->irq_base, 0, &irq_domain_sdv_ops, sd); 179 - if (!sd->id) { 180 - ret = -ENODEV; 181 - goto out_free_irq; 182 - } 179 + if (!sd->id) 180 + return -ENODEV; 181 + 183 182 return 0; 184 - out_free_irq: 185 - free_irq(pdev->irq, sd); 186 - out_free_desc: 187 - irq_free_descs(sd->irq_base, SDV_NUM_PUB_GPIOS); 188 - return ret; 189 183 } 190 184 191 185 static int sdv_gpio_probe(struct pci_dev *pdev,