commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=c3e0f5cac14b87df93fb27e692f038e854718216 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk-next
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
