Commit 24298a21 authored by Sergio Paracuellos's avatar Sergio Paracuellos Committed by Greg Kroah-Hartman
Browse files

staging: mt7621-gpio: change lock place in irq mask and unmask functions



Functions mediatek_gpio_irq_umask mediatek_gpio_irq_unmask are
reading and modifying registers but only the write is being hold.
It should be a complete lock instead for those which are type of
"read-modify-write". This makes more sense.

Signed-off-by: default avatarSergio Paracuellos <sergio.paracuellos@gmail.com>
Reviewed-by: default avatarNeilBrown <neil@brown.name>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7efcce04
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -231,10 +231,9 @@ mediatek_gpio_irq_unmask(struct irq_data *d)
	if (!rg)
		return;

	spin_lock_irqsave(&rg->lock, flags);
	rise = mtk_gpio_r32(rg, GPIO_REG_REDGE);
	fall = mtk_gpio_r32(rg, GPIO_REG_FEDGE);

	spin_lock_irqsave(&rg->lock, flags);
	mtk_gpio_w32(rg, GPIO_REG_REDGE, rise | (PIN_MASK(pin) & rg->rising));
	mtk_gpio_w32(rg, GPIO_REG_FEDGE, fall | (PIN_MASK(pin) & rg->falling));
	spin_unlock_irqrestore(&rg->lock, flags);
@@ -253,10 +252,9 @@ mediatek_gpio_irq_mask(struct irq_data *d)
	if (!rg)
		return;

	spin_lock_irqsave(&rg->lock, flags);
	rise = mtk_gpio_r32(rg, GPIO_REG_REDGE);
	fall = mtk_gpio_r32(rg, GPIO_REG_FEDGE);

	spin_lock_irqsave(&rg->lock, flags);
	mtk_gpio_w32(rg, GPIO_REG_FEDGE, fall & ~PIN_MASK(pin));
	mtk_gpio_w32(rg, GPIO_REG_REDGE, rise & ~PIN_MASK(pin));
	spin_unlock_irqrestore(&rg->lock, flags);