提交 e47c4f70 编写于 作者: D Dmitry Torokhov

Input: at32psif - do not sleep in atomic context

We can't use msleep() while holding a spinlock, moreower serio's write()
method is supposed to be useable from inettrupt context. Let's do what
i8042 does and poll the status register every 50 us (with udelay).
Reported-by: NMarjan Fojkar <marjan@pajkc.eu>
Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
上级 a61cd038
...@@ -137,7 +137,7 @@ static int psif_write(struct serio *io, unsigned char val) ...@@ -137,7 +137,7 @@ static int psif_write(struct serio *io, unsigned char val)
spin_lock_irqsave(&psif->lock, flags); spin_lock_irqsave(&psif->lock, flags);
while (!(psif_readl(psif, SR) & PSIF_BIT(TXEMPTY)) && timeout--) while (!(psif_readl(psif, SR) & PSIF_BIT(TXEMPTY)) && timeout--)
msleep(10); udelay(50);
if (timeout >= 0) { if (timeout >= 0) {
psif_writel(psif, THR, val); psif_writel(psif, THR, val);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册