mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
gpio/langwell: Fix broken irq_eoi change.
commit 0766d20fd (langwell_gpio: modify EOI handling following change of kernel irq subsystem) changes - desc->chip->eoi(irq); + + if (desc->chip->irq_eoi) + desc->chip->irq_eoi(irq_get_irq_data(irq)); + else + dev_warn(pg->chip.dev, "missing EOI handler for irq %d\n", irq); With the following explanation: "Latest kernel has many changes in IRQ subsystem and its interfaces, like adding irq_eoi" for struct irq_chip, this patch will make it support both the new and old interface." This is completely bogus. #1) The changelog does not match the patch at all #2) This driver relies on the assumption that it sits behind an eoi capable interrupt line. If the implementation of the underlying chip changes from eoi to irq_eoi then this driver has to follow that change and not add a total bogosity. #3) Just mechanically changing eoi to irq_eoi without checking the background of that change is sloppy at best. Remove the sillyness and retrieve the interrupt data from irq_desc directly. No need to go through a sparse irq lookup. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Feng Tang <feng.tang@intel.com> Cc: Alek Du <alek.du@intel.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
61ab3fe57e
commit
20e2aa916f
@ -187,10 +187,11 @@ MODULE_DEVICE_TABLE(pci, lnw_gpio_ids);
|
|||||||
|
|
||||||
static void lnw_irq_handler(unsigned irq, struct irq_desc *desc)
|
static void lnw_irq_handler(unsigned irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
struct lnw_gpio *lnw = get_irq_data(irq);
|
struct irq_data *data = irq_desc_get_irq_data(desc);
|
||||||
u32 base, gpio;
|
struct lnw_gpio *lnw = irq_data_get_irq_handler_data(data);
|
||||||
|
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
||||||
|
u32 base, gpio, gedr_v;
|
||||||
void __iomem *gedr;
|
void __iomem *gedr;
|
||||||
u32 gedr_v;
|
|
||||||
|
|
||||||
/* check GPIO controller to check which pin triggered the interrupt */
|
/* check GPIO controller to check which pin triggered the interrupt */
|
||||||
for (base = 0; base < lnw->chip.ngpio; base += 32) {
|
for (base = 0; base < lnw->chip.ngpio; base += 32) {
|
||||||
@ -207,11 +208,7 @@ static void lnw_irq_handler(unsigned irq, struct irq_desc *desc)
|
|||||||
writel(gedr_v, gedr);
|
writel(gedr_v, gedr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc->chip->irq_eoi)
|
chip->irq_eoi(data);
|
||||||
desc->chip->irq_eoi(irq_get_irq_data(irq));
|
|
||||||
else
|
|
||||||
dev_warn(lnw->chip.dev, "missing EOI handler for irq %d\n", irq);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit lnw_gpio_probe(struct pci_dev *pdev,
|
static int __devinit lnw_gpio_probe(struct pci_dev *pdev,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user