[yocto] [PATCH] linux-raspberrypi: Fix i2c issues

Richard Purdie richard.purdie at linuxfoundation.org
Sun Apr 21 07:23:59 PDT 2013


I was having intermittent i2c issues on the device until I applied this kernel patch
which I found online.

Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 .../sl030raspberrypii2ckernel.patch                |   32 ++++++++++++++++++++
 recipes-kernel/linux/linux-raspberrypi_3.2.27.bb   |    1 +
 recipes-kernel/linux/linux-raspberrypi_3.6.11.bb   |    1 +
 3 files changed, 34 insertions(+)
 create mode 100644 recipes-kernel/linux/linux-raspberrypi/sl030raspberrypii2ckernel.patch

diff --git a/recipes-kernel/linux/linux-raspberrypi/sl030raspberrypii2ckernel.patch b/recipes-kernel/linux/linux-raspberrypi/sl030raspberrypii2ckernel.patch
new file mode 100644
index 0000000..8534ecb
--- /dev/null
+++ b/recipes-kernel/linux/linux-raspberrypi/sl030raspberrypii2ckernel.patch
@@ -0,0 +1,32 @@
+Fix i2c timing errors.
+
+When Transmitting: Make SDA valid quarter of a cycle after the falling edge of SCL.
+When Receiving: Sample SDA Quarter of a cycle after the rising edge of SCL.
+
+Upstream-Status: Pending
+
+RP 2013/04/21
+
+Index: git/drivers/i2c/busses/i2c-bcm2708.c
+===================================================================
+--- git.orig/drivers/i2c/busses/i2c-bcm2708.c	2013-01-06 17:15:00.754954587 +0000
++++ git/drivers/i2c/busses/i2c-bcm2708.c	2013-01-06 17:50:09.794905741 +0000
+@@ -150,6 +150,7 @@
+ 	unsigned long bus_hz;
+ 	u32 cdiv;
+ 	u32 c = BSC_C_I2CEN | BSC_C_INTD | BSC_C_ST | BSC_C_CLEAR_1;
++	u32 cdel;
+ 
+ 	bus_hz = clk_get_rate(bi->clk);
+ 	cdiv = bus_hz / baudrate;
+@@ -163,6 +164,10 @@
+ 	bcm2708_wr(bi, BSC_A, bi->msg->addr);
+ 	bcm2708_wr(bi, BSC_DLEN, bi->msg->len);
+ 	bcm2708_wr(bi, BSC_C, c);
++
++	cdel = (cdiv / 4) & 0xffff;
++	cdel = cdel << 16 | cdel;
++	bcm2708_wr(bi, BSC_DEL, cdel);
+ }
+ 
+ static irqreturn_t bcm2708_i2c_interrupt(int irq, void *dev_id)
diff --git a/recipes-kernel/linux/linux-raspberrypi_3.2.27.bb b/recipes-kernel/linux/linux-raspberrypi_3.2.27.bb
index c7a12e6..a68186b 100644
--- a/recipes-kernel/linux/linux-raspberrypi_3.2.27.bb
+++ b/recipes-kernel/linux/linux-raspberrypi_3.2.27.bb
@@ -8,6 +8,7 @@ PV_append = "+git${SRCREV}"
 
 SRCREV = "10182a3bc434b27740f81c2b836a1af943060241"
 SRC_URI = "git://github.com/raspberrypi/linux.git;protocol=git;branch=rpi-3.2.27 \
+	   file://sl030raspberrypii2ckernel.patch \
           "
 S = "${WORKDIR}/git"
 
diff --git a/recipes-kernel/linux/linux-raspberrypi_3.6.11.bb b/recipes-kernel/linux/linux-raspberrypi_3.6.11.bb
index caee7f2..07b0ae8 100644
--- a/recipes-kernel/linux/linux-raspberrypi_3.6.11.bb
+++ b/recipes-kernel/linux/linux-raspberrypi_3.6.11.bb
@@ -8,6 +8,7 @@ PV_append = "+git${SRCREV}"
 
 SRCREV = "31a951046155b27361127d9cf85a1f58719fe9b3"
 SRC_URI = "git://github.com/raspberrypi/linux.git;protocol=git;branch=rpi-3.6.y \
+           file://sl030raspberrypii2ckernel.patch \
           "
 S = "${WORKDIR}/git"
 
-- 
1.7.10.4




More information about the yocto mailing list