gpio: merrifield: make irq_chip immutable
PATCH 1/1 gpio: merrifield: make irq_chip immutable
Since recently, the kernel is nagging about mutable irq_chips:
"not an immutable chip, please consider fixing it!"
Drop the unneeded copy, flag it as IRQCHIP_IMMUTABLE, add the new helper functions and call the appropriate gpiolib functions.
Signed-off-by Andy Shevchenko <[email protected]>
--- drivers/gpio/gpio-merrifield.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
drivers/gpio/gpio-merrifield.c +15 -7
@@ -220,10 +220,8 @@ static void mrfld_irq_ack(struct irq_data *d)raw_spin_unlock_irqrestore (&priv->lock, flags); } -static void mrfld_irq_unmask_mask (struct irq_data *d,bool unmask) +static void mrfld_irq_unmask_mask (struct mrfld_gpio *priv,u32 gpio,bool unmask) { -struct mrfld_gpio *priv =irq_data_get_irq_chip_data (d); -u32 gpio =irqd_to_hwirq (d);void __iomem *gimr =gpio_reg (&priv->chip, gpio,GIMR );unsigned long flags;u32 value;
@@ -241,12 +239,20 @@ static void mrfld_irq_unmask_mask(struct irq_data *d, bool unmask)static void mrfld_irq_mask (struct irq_data *d) { -mrfld_irq_unmask_mask (d, false); +struct mrfld_gpio *priv =irq_data_get_irq_chip_data (d); +u32 gpio =irqd_to_hwirq (d); + +mrfld_irq_unmask_mask (priv, gpio, false); +gpiochip_disable_irq (&priv->chip, gpio); }static void mrfld_irq_unmask (struct irq_data *d) { -mrfld_irq_unmask_mask (d, true); +struct mrfld_gpio *priv =irq_data_get_irq_chip_data (d); +u32 gpio =irqd_to_hwirq (d); + +gpiochip_enable_irq (&priv->chip, gpio); +mrfld_irq_unmask_mask (priv, gpio, true); }static int mrfld_irq_set_type (struct irq_data *d,unsigned int type)
@@ -329,13 +335,15 @@ static int mrfld_irq_set_wake(struct irq_data *d, unsigned int on)return 0 ; } -static struct irq_chip mrfld_irqchip = { +static const struct irq_chip mrfld_irqchip = { .name ="gpio-merrifield" , .irq_ack = mrfld_irq_ack, .irq_mask = mrfld_irq_mask, .irq_unmask = mrfld_irq_unmask, .irq_set_type = mrfld_irq_set_type, .irq_set_wake = mrfld_irq_set_wake, + .flags =IRQCHIP_IMMUTABLE , +GPIOCHIP_IRQ_RESOURCE_HELPERS , };static void mrfld_irq_handler (struct irq_desc *desc)
@@ -482,7 +490,7 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *idreturn retval; girq = &priv->chip.irq; - girq->chip = &mrfld_irqchip; +gpio_irq_chip_set_chip (girq, &mrfld_irqchip); girq->init_hw = mrfld_irq_init_hw; girq->parent_handler = mrfld_irq_handler; girq->num_parents =1 ;
Signature · 1 line
2.35.1