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 <aksha...@samsung.com>
---
Changes since v1:
        - Added check for step.

 drivers/spi/exynos_spi.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c
index 4d5def2..68d1206 100644
--- a/drivers/spi/exynos_spi.c
+++ b/drivers/spi/exynos_spi.c
@@ -302,6 +302,11 @@ static int spi_rx_tx(struct exynos_spi_slave *spi_slave, 
int todo,
                                        }
                                } else {
                                        if (rxp || stopping) {
+                                               if (step == 4) {
+                                                       *(rxp + 3) = temp >> 24;
+                                                       *(rxp + 2) = temp >> 16;
+                                                       *(rxp + 1) = temp >> 8;
+                                               }
                                                *rxp = temp;
                                                rxp += step;
                                        }
-- 
1.7.12.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to