
SPI recieve and transfer code in exynos_spi driver has a logical bug. We read data in a variable which can hold an integer. Then we assign this integer 32 bit value to another variable which has data type uchar. Latter represents a unit of our recieve buffer. Everytime when we write a value to our recieve buffer we step ahead by 4 units when actually we wrote to one unit. This results in the loss of 3 bytes out of every 4 bytes recieved. This patch intends to fix this bug.
Signed-off-by: Akshay Saraswat akshay.s@samsung.com --- drivers/spi/exynos_spi.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c index 4d5def2..b9fd618 100644 --- a/drivers/spi/exynos_spi.c +++ b/drivers/spi/exynos_spi.c @@ -302,6 +302,9 @@ static int spi_rx_tx(struct exynos_spi_slave *spi_slave, int todo, } } else { if (rxp || stopping) { + *(rxp + 3) = (temp >> 24); + *(rxp + 2) = (temp >> 16); + *(rxp + 1) = (temp >> 8); *rxp = temp; rxp += step; }