Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5e22ce6 authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge "spmi: pmic_arb: don't synchronize accesses to interrupt region" into msm-4.8

parents 3d683717 76de09c4
Loading
Loading
Loading
Loading
+0 −10
Original line number Original line Diff line number Diff line
@@ -490,14 +490,10 @@ static void cleanup_irq(struct spmi_pmic_arb *pa, u8 apid, int id)
	u16 ppid = pa->apid_data[apid].ppid;
	u16 ppid = pa->apid_data[apid].ppid;
	u8 sid = ppid >> 8;
	u8 sid = ppid >> 8;
	u8 per = ppid & 0xFF;
	u8 per = ppid & 0xFF;
	unsigned long flags;
	u8 irq_mask = BIT(id);
	u8 irq_mask = BIT(id);


	raw_spin_lock_irqsave(&pa->lock, flags);
	writel_relaxed(irq_mask, pa->intr + pa->ver_ops->irq_clear(apid));
	writel_relaxed(irq_mask, pa->intr + pa->ver_ops->irq_clear(apid));


	raw_spin_unlock_irqrestore(&pa->lock, flags);

	if (pmic_arb_write_cmd(pa->spmic, SPMI_CMD_EXT_WRITEL, sid,
	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,
		dev_err_ratelimited(&pa->spmic->dev,
@@ -563,12 +559,9 @@ static void qpnpint_irq_ack(struct irq_data *d)
	struct spmi_pmic_arb *pa = irq_data_get_irq_chip_data(d);
	struct spmi_pmic_arb *pa = irq_data_get_irq_chip_data(d);
	u8 irq  = d->hwirq >> 8;
	u8 irq  = d->hwirq >> 8;
	u8 apid = d->hwirq;
	u8 apid = d->hwirq;
	unsigned long flags;
	u8 data;
	u8 data;


	raw_spin_lock_irqsave(&pa->lock, flags);
	writel_relaxed(BIT(irq), pa->intr + pa->ver_ops->irq_clear(apid));
	writel_relaxed(BIT(irq), pa->intr + pa->ver_ops->irq_clear(apid));
	raw_spin_unlock_irqrestore(&pa->lock, flags);


	data = BIT(irq);
	data = BIT(irq);
	qpnpint_spmi_write(d, QPNPINT_REG_LATCHED_CLR, &data, 1);
	qpnpint_spmi_write(d, QPNPINT_REG_LATCHED_CLR, &data, 1);
@@ -587,13 +580,10 @@ static void qpnpint_irq_unmask(struct irq_data *d)
	struct spmi_pmic_arb *pa = irq_data_get_irq_chip_data(d);
	struct spmi_pmic_arb *pa = irq_data_get_irq_chip_data(d);
	u8 irq  = d->hwirq >> 8;
	u8 irq  = d->hwirq >> 8;
	u8 apid = d->hwirq;
	u8 apid = d->hwirq;
	unsigned long flags;
	u8 buf[2];
	u8 buf[2];


	raw_spin_lock_irqsave(&pa->lock, flags);
	writel_relaxed(SPMI_PIC_ACC_ENABLE_BIT,
	writel_relaxed(SPMI_PIC_ACC_ENABLE_BIT,
		pa->intr + pa->ver_ops->acc_enable(apid));
		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);
	qpnpint_spmi_read(d, QPNPINT_REG_EN_SET, &buf[0], 1);
	if (!(buf[0] & BIT(irq))) {
	if (!(buf[0] & BIT(irq))) {