summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-04-19 19:58:30 -0700
committerJeevan Shriram <jshriram@codeaurora.org>2016-05-03 15:52:50 -0700
commit7753ddba59d9933db2a1f3dcb7a3560112fff537 (patch)
treeb059f56bdad3a738ee467acd2538830e3d5994e3
parent9847f9ca84dfd7f3fb9ecb82274b4349cd09befb (diff)
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 <adharmap@codeaurora.org>
-rw-r--r--drivers/spmi/spmi-pmic-arb.c17
1 files 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;