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

Commit 3a71c05e authored by Loic Poulain's avatar Loic Poulain Committed by Linus Walleij
Browse files

pinctrl: baytrail: Clear DIRECT_IRQ bit



Direct irq en bit should be cleared for pads using io mode.
If not, the io based irq will never be detected.
However, this bit can sometimes be misconfigured (BIOS issue).
Force clearing of this bit in io mode and trigger a WARN.

Signed-off-by: default avatarLoic Poulain <loic.poulain@intel.com>
Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent f114040e
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -227,10 +227,14 @@ static int byt_irq_type(struct irq_data *d, unsigned type)
	spin_lock_irqsave(&vg->lock, flags);
	value = readl(reg);

	WARN(value & BYT_DIRECT_IRQ_EN,
		"Bad pad config for io mode, force direct_irq_en bit clearing");

	/* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
	 * are used to indicate high and low level triggering
	 */
	value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
	value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
		   BYT_TRIG_LVL);

	switch (type) {
	case IRQ_TYPE_LEVEL_HIGH: