diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/gpio/gpio-tqmx86.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/gpio/gpio-tqmx86.c')
| -rw-r--r-- | drivers/gpio/gpio-tqmx86.c | 28 | 
1 files changed, 20 insertions, 8 deletions
diff --git a/drivers/gpio/gpio-tqmx86.c b/drivers/gpio/gpio-tqmx86.c index e739dcea61b2..6f8bd1155db7 100644 --- a/drivers/gpio/gpio-tqmx86.c +++ b/drivers/gpio/gpio-tqmx86.c @@ -15,6 +15,7 @@  #include <linux/module.h>  #include <linux/platform_device.h>  #include <linux/pm_runtime.h> +#include <linux/seq_file.h>  #include <linux/slab.h>  #define TQMX86_NGPIO	8 @@ -34,7 +35,6 @@  struct tqmx86_gpio_data {  	struct gpio_chip	chip; -	struct irq_chip		irq_chip;  	void __iomem		*io_base;  	int			irq;  	raw_spinlock_t		spinlock; @@ -122,6 +122,7 @@ static void tqmx86_gpio_irq_mask(struct irq_data *data)  	gpiic &= ~mask;  	tqmx86_gpio_write(gpio, gpiic, TQMX86_GPIIC);  	raw_spin_unlock_irqrestore(&gpio->spinlock, flags); +	gpiochip_disable_irq(&gpio->chip, irqd_to_hwirq(data));  }  static void tqmx86_gpio_irq_unmask(struct irq_data *data) @@ -134,6 +135,7 @@ static void tqmx86_gpio_irq_unmask(struct irq_data *data)  	mask = TQMX86_GPII_MASK << (offset * TQMX86_GPII_BITS); +	gpiochip_enable_irq(&gpio->chip, irqd_to_hwirq(data));  	raw_spin_lock_irqsave(&gpio->spinlock, flags);  	gpiic = tqmx86_gpio_read(gpio, TQMX86_GPIIC);  	gpiic &= ~mask; @@ -226,6 +228,22 @@ static void tqmx86_init_irq_valid_mask(struct gpio_chip *chip,  	clear_bit(3, valid_mask);  } +static void tqmx86_gpio_irq_print_chip(struct irq_data *d, struct seq_file *p) +{ +	struct gpio_chip *gc = irq_data_get_irq_chip_data(d); + +	seq_printf(p, gc->label); +} + +static const struct irq_chip tqmx86_gpio_irq_chip = { +	.irq_mask = tqmx86_gpio_irq_mask, +	.irq_unmask = tqmx86_gpio_irq_unmask, +	.irq_set_type = tqmx86_gpio_irq_set_type, +	.irq_print_chip = tqmx86_gpio_irq_print_chip, +	.flags = IRQCHIP_IMMUTABLE, +	GPIOCHIP_IRQ_RESOURCE_HELPERS, +}; +  static int tqmx86_gpio_probe(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; @@ -277,14 +295,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)  	pm_runtime_enable(&pdev->dev);  	if (irq > 0) { -		struct irq_chip *irq_chip = &gpio->irq_chip;  		u8 irq_status; -		irq_chip->name = chip->label; -		irq_chip->irq_mask = tqmx86_gpio_irq_mask; -		irq_chip->irq_unmask = tqmx86_gpio_irq_unmask; -		irq_chip->irq_set_type = tqmx86_gpio_irq_set_type; -  		/* Mask all interrupts */  		tqmx86_gpio_write(gpio, 0, TQMX86_GPIIC); @@ -293,7 +305,7 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)  		tqmx86_gpio_write(gpio, irq_status, TQMX86_GPIIS);  		girq = &chip->irq; -		girq->chip = irq_chip; +		gpio_irq_chip_set_chip(girq, &tqmx86_gpio_irq_chip);  		girq->parent_handler = tqmx86_gpio_irq_handler;  		girq->num_parents = 1;  		girq->parents = devm_kcalloc(&pdev->dev, 1,  |