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.pur...@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

_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to