From 49c5b45e28560fdd182874a15bb93c9510a59959 Mon Sep 17 00:00:00 2001 From: Feng Tang Date: Thu, 21 Jan 2010 10:41:10 +0800 Subject: [PATCH] --- yaml --- r: 180893 b: refs/heads/master c: c587b6fa05106606053fc5e8e344f07cd34ace23 h: refs/heads/master i: 180891: a2e112fb34aacb772d6d6b401a39a4f549bd3da1 v: v3 --- [refs] | 2 +- trunk/drivers/spi/dw_spi.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index fd9e864dbca3..0cf19ef97ebf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 99147b5c4167612a987860b661b9f8b79e66b81f +refs/heads/master: c587b6fa05106606053fc5e8e344f07cd34ace23 diff --git a/trunk/drivers/spi/dw_spi.c b/trunk/drivers/spi/dw_spi.c index f713af8309e3..d948ef4f3910 100644 --- a/trunk/drivers/spi/dw_spi.c +++ b/trunk/drivers/spi/dw_spi.c @@ -831,6 +831,22 @@ static void spi_hw_init(struct dw_spi *dws) spi_mask_intr(dws, 0xff); spi_enable_chip(dws, 1); flush(dws); + + /* + * Try to detect the FIFO depth if not set by interface driver, + * the depth could be from 2 to 256 from HW spec + */ + if (!dws->fifo_len) { + u32 fifo; + for (fifo = 2; fifo <= 257; fifo++) { + dw_writew(dws, txfltr, fifo); + if (fifo != dw_readw(dws, txfltr)) + break; + } + + dws->fifo_len = (fifo == 257) ? 0 : fifo; + dw_writew(dws, txfltr, 0); + } } int __devinit dw_spi_add_host(struct dw_spi *dws)