From 7753ddba59d9933db2a1f3dcb7a3560112fff537 Mon Sep 17 00:00:00 2001 From: Abhijeet Dharmapurikar Date: Tue, 19 Apr 2016 19:58:30 -0700 Subject: [PATCH] Revert "spmi: pmic_arb: use handle_fasteoi_irq handler" This reverts commit 3b1bda734da2 ("spmi: pmic_arb: use handle_fasteoi_irq handler") PMIC interrupt are not aligned to be used as fasteoi, this is because * most of the PMIC interrupts are threaded and are configured as ONESHOT. Fasteoi handlers do not support ONESHOT semantics * There is a chance of losing edge interrupts that trigger while the handler is running. This is because fasteoi handler signals EOI after the handler is run. So edge interrupts that trigger while the handler is running get acknowledged without being handled. CRs-Fixed: 1001770 Change-Id: I622fd971201b6c0001212a696c3d12aea409c11b Signed-off-by: Abhijeet Dharmapurikar --- drivers/spmi/spmi-pmic-arb.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c index 6e11f9ca5ce2..2d480f1af11f 100644 --- a/drivers/spmi/spmi-pmic-arb.c +++ b/drivers/spmi/spmi-pmic-arb.c @@ -649,15 +649,14 @@ static int qpnpint_get_irqchip_state(struct irq_data *d, } static struct irq_chip pmic_arb_irqchip = { - .name = "pmic_arb", - .irq_ack = qpnpint_irq_ack, - .irq_eoi = qpnpint_irq_ack, - .irq_mask = qpnpint_irq_mask, - .irq_unmask = qpnpint_irq_unmask, - .irq_set_type = qpnpint_irq_set_type, + .name = "pmic_arb", + .irq_ack = qpnpint_irq_ack, + .irq_mask = qpnpint_irq_mask, + .irq_unmask = qpnpint_irq_unmask, + .irq_set_type = qpnpint_irq_set_type, .irq_get_irqchip_state = qpnpint_get_irqchip_state, - .flags = IRQCHIP_MASK_ON_SUSPEND - | IRQCHIP_SKIP_SET_WAKE, + .flags = IRQCHIP_MASK_ON_SUSPEND + | IRQCHIP_SKIP_SET_WAKE, }; static int qpnpint_irq_domain_dt_translate(struct irq_domain *d, @@ -716,7 +715,7 @@ static int qpnpint_irq_domain_map(struct irq_domain *d, dev_dbg(&pa->spmic->dev, "virq = %u, hwirq = %lu\n", virq, hwirq); - irq_set_chip_and_handler(virq, &pmic_arb_irqchip, handle_fasteoi_irq); + irq_set_chip_and_handler(virq, &pmic_arb_irqchip, handle_level_irq); irq_set_chip_data(virq, d->host_data); irq_set_noprobe(virq); return 0;