forked from Minki/linux
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: Sergio Paracuellos <sergio.paracuellos@gmail.com> Reviewed-by: NeilBrown <neil@brown.name> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7efcce0430
commit
24298a218e
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user