commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=f08a37635112d74574b87e60a53f30f12197052f
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

add debug messages
handle busy status

Signed-off-by: Steven Miao <[email protected]>
Signed-off-by: Bob Liu <[email protected]>
---
 drivers/char/bfin_lp.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/char/bfin_lp.c b/drivers/char/bfin_lp.c
index b0b48b7..55f1286 100644
--- a/drivers/char/bfin_lp.c
+++ b/drivers/char/bfin_lp.c
@@ -272,10 +272,10 @@ 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;
+			kfifo_reset(&dev->lpfifo);
 			if (dev->regs->stat & LP_STAT_LPBS) {
 				enable_irq(dev->irq);
 				return;
@@ -283,7 +283,7 @@ static void transfer_fn(struct work_struct *work)
 			complete(&dev->complete);
 		}
 	} else if (dev->status == LP_STAT_DONE) {
-		kfifo_reset(&dev->lpfifo);
+		complete(&dev->complete);
 	} else {
 		lp_rx_fifo(dev);
 	}
@@ -373,6 +373,7 @@ static int bfin_lp_open(struct inode *inode, struct file *filp)
 	dev->regs->ctl = 0;
 	SSYNC();
 
+	pr_debug("bfin lp open %d\n", index);
 	return 0;
 
 free_dma:
@@ -385,8 +386,11 @@ free_per:
 static int bfin_lp_release(struct inode *inode, struct file *filp)
 {
 	struct bfin_lp_dev *dev = filp->private_data;
+	unsigned int index = iminor(inode);
 
-	wait_for_completion(&dev->complete);
+	pr_debug("bfin lp relese %d\n", index);
+	if (dev->regs->ctl & LP_CTL_TRAN)
+		wait_for_completion_interruptible(&dev->complete);
 
 	dev->regs->ctl = 0;
 
@@ -428,8 +432,6 @@ 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