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

Reply via email to