commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=8000f88b7f11d9acee8f0564106eaed03416254c branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
Signed-off-by: Steven Miao <[email protected]> Signed-off-by: Bob Liu <[email protected]> --- drivers/char/bfin_lp.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/drivers/char/bfin_lp.c b/drivers/char/bfin_lp.c index e89f9b3..b0b48b7 100644 --- a/drivers/char/bfin_lp.c +++ b/drivers/char/bfin_lp.c @@ -272,6 +272,7 @@ static void transfer_fn(struct work_struct *work) break; while (dev->regs->stat & LP_STAT_LPBS); dev->regs->tx = data; + while (dev->regs->stat & LP_STAT_LPBS); } if (kfifo_len(&dev->lpfifo) == 0) { dev->status = LP_STAT_DONE; @@ -389,7 +390,6 @@ static int bfin_lp_release(struct inode *inode, struct file *filp) dev->regs->ctl = 0; - enable_irq(dev->irq); destroy_workqueue(dev->workqueue); kfifo_free(&dev->lpfifo); peripheral_free_list(dev->per_linkport); @@ -416,6 +416,7 @@ static ssize_t bfin_lp_read(struct file *filp, char *buf, size_t count, loff_t * dev->regs->ctl |= LP_CTL_EN; + while (n) { fifo_cnt = kfifo_len(&dev->lpfifo); if (!fifo_cnt) { @@ -427,6 +428,8 @@ static ssize_t bfin_lp_read(struct file *filp, char *buf, size_t count, loff_t * n -= fifo_cnt; } + complete(&dev->complete); + return count; }
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
