From b29962842d9c1cadf507a2f1c2674f10c3213f9d Mon Sep 17 00:00:00 2001 From: Mingkai Hu Date: Tue, 21 Dec 2010 09:26:07 +0800 Subject: [PATCH] --- yaml --- r: 223607 b: refs/heads/master c: e6289d63a6f39237a027dcee46366ba158cb8406 h: refs/heads/master i: 223605: 6295f2a3e217948744d80971e3438a284ea07610 223603: ac8514d4015c807cfa375fa01e3e61d1c1d5969d 223599: 0bd990ad6b12b6b74dc1360f6e3958534ef1ea97 v: v3 --- [refs] | 2 +- trunk/drivers/spi/spi_fsl_espi.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 383ddae89419..82a780183b4b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 020862648445d7c1b12ea213c152f27def703f3b +refs/heads/master: e6289d63a6f39237a027dcee46366ba158cb8406 diff --git a/trunk/drivers/spi/spi_fsl_espi.c b/trunk/drivers/spi/spi_fsl_espi.c index e3b4f6451966..ae789262c981 100644 --- a/trunk/drivers/spi/spi_fsl_espi.c +++ b/trunk/drivers/spi/spi_fsl_espi.c @@ -507,16 +507,29 @@ void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) /* We need handle RX first */ if (events & SPIE_NE) { - u32 rx_data; + u32 rx_data, tmp; + u8 rx_data_8; /* Spin until RX is done */ while (SPIE_RXCNT(events) < min(4, mspi->len)) { cpu_relax(); events = mpc8xxx_spi_read_reg(®_base->event); } - mspi->len -= 4; - rx_data = mpc8xxx_spi_read_reg(®_base->receive); + if (mspi->len >= 4) { + rx_data = mpc8xxx_spi_read_reg(®_base->receive); + } else { + tmp = mspi->len; + rx_data = 0; + while (tmp--) { + rx_data_8 = in_8((u8 *)®_base->receive); + rx_data |= (rx_data_8 << (tmp * 8)); + } + + rx_data <<= (4 - mspi->len) * 8; + } + + mspi->len -= 4; if (mspi->rx) mspi->get_rx(rx_data, mspi);