commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=b959d430fc94e2705c295b2c2159601ff9817fbe branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
If sport TX dma interrupt is handled before sport is enabled in tx write operation, its handler loops forever to wait for sport tx done status which is not enabled. This patch disable the dma interrupt till sport is enabled. Signed-off-by: Sonic Zhang <[email protected]> --- drivers/char/bfin_sport.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/drivers/char/bfin_sport.c b/drivers/char/bfin_sport.c index 2d964d6..ad39902 100644 --- a/drivers/char/bfin_sport.c +++ b/drivers/char/bfin_sport.c @@ -769,7 +769,11 @@ static ssize_t sport_write(struct file *filp, const char __user *buf, } set_dma_config(dev->dma_tx_chan, dma_config); + /* dma interrupt should not be handled before sport is enabled */ + disable_irq(dev->tx_irq); enable_dma(dev->dma_tx_chan); + dev->regs->tcr1 |= TSPEN; + enable_irq(dev->tx_irq); } else { /* Configure parameters to start PIO transfer */ dev->tx_buf = buf; @@ -780,6 +784,7 @@ static ssize_t sport_write(struct file *filp, const char __user *buf, goto out; } sport_tx_write(dev); + dev->regs->tcr1 |= TSPEN; } status = dev->regs->mcmc2;
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
