diff options
| author | Abhijeet Dharmapurikar <adharmap@codeaurora.org> | 2016-04-19 19:58:30 -0700 |
|---|---|---|
| committer | Jeevan Shriram <jshriram@codeaurora.org> | 2016-05-03 15:52:50 -0700 |
| commit | 7753ddba59d9933db2a1f3dcb7a3560112fff537 (patch) | |
| tree | b059f56bdad3a738ee467acd2538830e3d5994e3 | |
| parent | 9847f9ca84dfd7f3fb9ecb82274b4349cd09befb (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.c | 17 |
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; |
