From d9477c6fac1ded8502dc8639a531d60d915e89f7 Mon Sep 17 00:00:00 2001 From: eric miao Date: Fri, 23 Nov 2007 14:55:59 +0800 Subject: [PATCH] --- yaml --- r: 77559 b: refs/heads/master c: 732ce16066964bb7b60947750e48374cc32bd310 h: refs/heads/master i: 77557: 4323a37def08db4ccd739bacd023fca591dfc415 77555: e48b87bfe864f2c3b537e7b544783b4048f204e8 77551: 8a88a15c52e4842c55181b23a2b5773c6eb15a16 v: v3 --- [refs] | 2 +- trunk/arch/arm/mach-pxa/ssp.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index d6437a286fff..5c1d40cdcce6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5a1f21b1e546fafe840944f02949c1a8a8725132 +refs/heads/master: 732ce16066964bb7b60947750e48374cc32bd310 diff --git a/trunk/arch/arm/mach-pxa/ssp.c b/trunk/arch/arm/mach-pxa/ssp.c index 575b662200a7..4954da907d42 100644 --- a/trunk/arch/arm/mach-pxa/ssp.c +++ b/trunk/arch/arm/mach-pxa/ssp.c @@ -138,6 +138,16 @@ int ssp_flush(struct ssp_dev *dev) struct ssp_device *ssp = dev->ssp; int timeout = TIMEOUT * 2; + /* ensure TX FIFO is empty instead of not full */ + if (cpu_is_pxa3xx()) { + while (__raw_readl(ssp->mmio_base + SSSR) & 0xf00) { + if (!--timeout) + return -ETIMEDOUT; + cpu_relax(); + } + timeout = TIMEOUT * 2; + } + do { while (__raw_readl(ssp->mmio_base + SSSR) & SSSR_RNE) { if (!--timeout)