hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/drivers/gpio/gpio-bcm-kona.c
....@@ -19,7 +19,6 @@
1919 #include <linux/io.h>
2020 #include <linux/gpio/driver.h>
2121 #include <linux/of_device.h>
22
-#include <linux/of_irq.h>
2322 #include <linux/init.h>
2423 #include <linux/irqdomain.h>
2524 #include <linux/irqchip/chained_irq.h>
....@@ -127,7 +126,7 @@
127126 u32 val;
128127
129128 val = readl(reg_base + GPIO_CONTROL(gpio)) & GPIO_GPCTR0_IOTR_MASK;
130
- return !!val;
129
+ return val ? GPIO_LINE_DIRECTION_IN : GPIO_LINE_DIRECTION_OUT;
131130 }
132131
133132 static void bcm_kona_gpio_set(struct gpio_chip *chip, unsigned gpio, int value)
....@@ -144,7 +143,7 @@
144143 raw_spin_lock_irqsave(&kona_gpio->lock, flags);
145144
146145 /* this function only applies to output pin */
147
- if (bcm_kona_gpio_get_dir(chip, gpio) == 1)
146
+ if (bcm_kona_gpio_get_dir(chip, gpio) == GPIO_LINE_DIRECTION_IN)
148147 goto out;
149148
150149 reg_offset = value ? GPIO_OUT_SET(bank_id) : GPIO_OUT_CLEAR(bank_id);
....@@ -170,7 +169,7 @@
170169 reg_base = kona_gpio->reg_base;
171170 raw_spin_lock_irqsave(&kona_gpio->lock, flags);
172171
173
- if (bcm_kona_gpio_get_dir(chip, gpio) == 1)
172
+ if (bcm_kona_gpio_get_dir(chip, gpio) == GPIO_LINE_DIRECTION_IN)
174173 reg_offset = GPIO_IN_STATUS(bank_id);
175174 else
176175 reg_offset = GPIO_OUT_STATUS(bank_id);
....@@ -373,6 +372,7 @@
373372 val = readl(reg_base + GPIO_INT_MASK(bank_id));
374373 val |= BIT(bit);
375374 writel(val, reg_base + GPIO_INT_MASK(bank_id));
375
+ gpiochip_disable_irq(&kona_gpio->gpio_chip, gpio);
376376
377377 raw_spin_unlock_irqrestore(&kona_gpio->lock, flags);
378378 }
....@@ -394,6 +394,7 @@
394394 val = readl(reg_base + GPIO_INT_MSKCLR(bank_id));
395395 val |= BIT(bit);
396396 writel(val, reg_base + GPIO_INT_MSKCLR(bank_id));
397
+ gpiochip_enable_irq(&kona_gpio->gpio_chip, gpio);
397398
398399 raw_spin_unlock_irqrestore(&kona_gpio->lock, flags);
399400 }
....@@ -485,23 +486,15 @@
485486 static int bcm_kona_gpio_irq_reqres(struct irq_data *d)
486487 {
487488 struct bcm_kona_gpio *kona_gpio = irq_data_get_irq_chip_data(d);
488
- int ret;
489489
490
- ret = gpiochip_lock_as_irq(&kona_gpio->gpio_chip, d->hwirq);
491
- if (ret) {
492
- dev_err(kona_gpio->gpio_chip.parent,
493
- "unable to lock HW IRQ %lu for IRQ\n",
494
- d->hwirq);
495
- return ret;
496
- }
497
- return 0;
490
+ return gpiochip_reqres_irq(&kona_gpio->gpio_chip, d->hwirq);
498491 }
499492
500493 static void bcm_kona_gpio_irq_relres(struct irq_data *d)
501494 {
502495 struct bcm_kona_gpio *kona_gpio = irq_data_get_irq_chip_data(d);
503496
504
- gpiochip_unlock_as_irq(&kona_gpio->gpio_chip, d->hwirq);
497
+ gpiochip_relres_irq(&kona_gpio->gpio_chip, d->hwirq);
505498 }
506499
507500 static struct irq_chip bcm_gpio_irq_chip = {
....@@ -574,7 +567,6 @@
574567 {
575568 struct device *dev = &pdev->dev;
576569 const struct of_device_id *match;
577
- struct resource *res;
578570 struct bcm_kona_gpio_bank *bank;
579571 struct bcm_kona_gpio *kona_gpio;
580572 struct gpio_chip *chip;
....@@ -593,11 +585,15 @@
593585
594586 kona_gpio->gpio_chip = template_chip;
595587 chip = &kona_gpio->gpio_chip;
596
- kona_gpio->num_bank = of_irq_count(dev->of_node);
597
- if (kona_gpio->num_bank == 0) {
588
+ ret = platform_irq_count(pdev);
589
+ if (!ret) {
598590 dev_err(dev, "Couldn't determine # GPIO banks\n");
599591 return -ENOENT;
592
+ } else if (ret < 0) {
593
+ return dev_err_probe(dev, ret, "Couldn't determine GPIO banks\n");
600594 }
595
+ kona_gpio->num_bank = ret;
596
+
601597 if (kona_gpio->num_bank > GPIO_MAX_BANK_NUM) {
602598 dev_err(dev, "Too many GPIO banks configured (max=%d)\n",
603599 GPIO_MAX_BANK_NUM);
....@@ -624,10 +620,9 @@
624620 return -ENXIO;
625621 }
626622
627
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
628
- kona_gpio->reg_base = devm_ioremap_resource(dev, res);
623
+ kona_gpio->reg_base = devm_platform_ioremap_resource(pdev, 0);
629624 if (IS_ERR(kona_gpio->reg_base)) {
630
- ret = -ENXIO;
625
+ ret = PTR_ERR(kona_gpio->reg_base);
631626 goto err_irq_domain;
632627 }
633628