summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/spmi/spmi-pmic-arb.c52
1 files changed, 6 insertions, 46 deletions
diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
index 30211248edb6..be1f7fd2cc02 100644
--- a/drivers/spmi/spmi-pmic-arb.c
+++ b/drivers/spmi/spmi-pmic-arb.c
@@ -101,7 +101,6 @@ struct pmic_arb_ver_ops;
struct apid_data {
u16 ppid;
u8 owner;
- u8 enabled_irq_mask;
};
/**
@@ -488,7 +487,6 @@ static void qpnpint_spmi_read(struct irq_data *d, u8 reg, void *buf, size_t len)
static void cleanup_irq(struct spmi_pmic_arb *pa, u8 apid, int id)
{
- u32 status;
u16 ppid = pa->apid_data[apid].ppid;
u8 sid = ppid >> 8;
u8 per = ppid & 0xFF;
@@ -497,15 +495,11 @@ static void cleanup_irq(struct spmi_pmic_arb *pa, u8 apid, int id)
raw_spin_lock_irqsave(&pa->lock, flags);
writel_relaxed(irq_mask, pa->intr + pa->ver_ops->irq_clear(apid));
- if (pa->apid_data[apid].enabled_irq_mask == 0) {
- status = readl_relaxed(pa->intr + pa->ver_ops->acc_enable(apid));
- status = status & ~SPMI_PIC_ACC_ENABLE_BIT;
- writel_relaxed(status, pa->intr + pa->ver_ops->acc_enable(apid));
- }
+
raw_spin_unlock_irqrestore(&pa->lock, flags);
if (pmic_arb_write_cmd(pa->spmic, SPMI_CMD_EXT_WRITEL, sid,
- (per << 8) + QPNPINT_REG_LATCHED_CLR, &irq_mask, 1))
+ (per << 8) + QPNPINT_REG_LATCHED_CLR, &irq_mask, 1))
dev_err_ratelimited(&pa->spmic->dev,
"failed to ack irq_mask = 0x%x for ppid = %x\n",
irq_mask, ppid);
@@ -582,29 +576,8 @@ static void qpnpint_irq_ack(struct irq_data *d)
static void qpnpint_irq_mask(struct irq_data *d)
{
- struct spmi_pmic_arb *pa = irq_data_get_irq_chip_data(d);
u8 irq = d->hwirq >> 8;
- u8 apid = d->hwirq;
- unsigned long flags;
- u32 status;
u8 data = BIT(irq);
- u8 prev_enabled_irq_mask;
-
- prev_enabled_irq_mask = pa->apid_data[apid].enabled_irq_mask;
- pa->apid_data[apid].enabled_irq_mask &= ~BIT(irq);
-
- if (prev_enabled_irq_mask != 0 &&
- pa->apid_data[apid].enabled_irq_mask == 0) {
- raw_spin_lock_irqsave(&pa->lock, flags);
- status = readl_relaxed(pa->intr
- + pa->ver_ops->acc_enable(apid));
- if (status & SPMI_PIC_ACC_ENABLE_BIT) {
- status = status & ~SPMI_PIC_ACC_ENABLE_BIT;
- writel_relaxed(status, pa->intr +
- pa->ver_ops->acc_enable(apid));
- }
- raw_spin_unlock_irqrestore(&pa->lock, flags);
- }
qpnpint_spmi_write(d, QPNPINT_REG_EN_CLR, &data, 1);
}
@@ -615,25 +588,12 @@ static void qpnpint_irq_unmask(struct irq_data *d)
u8 irq = d->hwirq >> 8;
u8 apid = d->hwirq;
unsigned long flags;
- u32 status;
- u8 prev_enabled_irq_mask;
u8 buf[2];
- prev_enabled_irq_mask = pa->apid_data[apid].enabled_irq_mask;
- pa->apid_data[apid].enabled_irq_mask &= ~BIT(irq);
- pa->apid_data[apid].enabled_irq_mask |= BIT(irq);
-
- if (prev_enabled_irq_mask == 0 &&
- pa->apid_data[apid].enabled_irq_mask != 0) {
- raw_spin_lock_irqsave(&pa->lock, flags);
- status = readl_relaxed(pa->intr
- + pa->ver_ops->acc_enable(apid));
- if (!(status & SPMI_PIC_ACC_ENABLE_BIT)) {
- writel_relaxed(status | SPMI_PIC_ACC_ENABLE_BIT,
- pa->intr + pa->ver_ops->acc_enable(apid));
- }
- raw_spin_unlock_irqrestore(&pa->lock, flags);
- }
+ raw_spin_lock_irqsave(&pa->lock, flags);
+ writel_relaxed(SPMI_PIC_ACC_ENABLE_BIT,
+ pa->intr + pa->ver_ops->acc_enable(apid));
+ raw_spin_unlock_irqrestore(&pa->lock, flags);
qpnpint_spmi_read(d, QPNPINT_REG_EN_SET, &buf[0], 1);
if (!(buf[0] & BIT(irq))) {