diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-02-04 19:02:53 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-02-04 19:14:13 +0100 |
commit | 84d555aa74434392b682fd9eb0fa701c89a046d6 (patch) | |
tree | bcc0a9bf058757da14054bce61a8cb8b8c9cd873 /target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch | |
parent | 953973c2991e8640549a55df7a0574a1abac8644 (diff) | |
download | upstream-84d555aa74434392b682fd9eb0fa701c89a046d6.tar.gz upstream-84d555aa74434392b682fd9eb0fa701c89a046d6.tar.bz2 upstream-84d555aa74434392b682fd9eb0fa701c89a046d6.zip |
brcm2708: update to latest patches from RPi foundation
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch b/target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch new file mode 100644 index 0000000000..280cddf9f2 --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0610-i2c-bcm2835-Set-clock-stretch-timeout-to-35ms.patch @@ -0,0 +1,47 @@ +From 8d453e2193951057db696e37b9c10e7e35c18cb0 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Fri, 12 Jul 2019 15:38:35 +0100 +Subject: [PATCH] i2c: bcm2835: Set clock-stretch timeout to 35ms + +The BCM2835 I2C blocks have a register to set the clock-stretch +timeout - how long the device is allowed to hold SCL low - in bus +cycles. The current driver doesn't write to the register, therefore +the default value of 64 cycles is being used for all devices. + +Set the timeout to the value recommended for SMBus - 35ms. + +See: https://github.com/raspberrypi/linux/issues/3064 + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> +--- + drivers/i2c/busses/i2c-bcm2835.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/drivers/i2c/busses/i2c-bcm2835.c ++++ b/drivers/i2c/busses/i2c-bcm2835.c +@@ -194,6 +194,7 @@ static int clk_bcm2835_i2c_set_rate(stru + { + struct clk_bcm2835_i2c *div = to_clk_bcm2835_i2c(hw); + u32 redl, fedl; ++ u32 clk_tout; + u32 divider = clk_bcm2835_i2c_calc_divider(rate, parent_rate); + + if (divider == -EINVAL) +@@ -217,6 +218,17 @@ static int clk_bcm2835_i2c_set_rate(stru + bcm2835_i2c_writel(div->i2c_dev, BCM2835_I2C_DEL, + (fedl << BCM2835_I2C_FEDL_SHIFT) | + (redl << BCM2835_I2C_REDL_SHIFT)); ++ ++ /* ++ * Set the clock stretch timeout to the SMBUs-recommended 35ms. ++ */ ++ if (rate > 0xffff*1000/35) ++ clk_tout = 0xffff; ++ else ++ clk_tout = 35*rate/1000; ++ ++ bcm2835_i2c_writel(div->i2c_dev, BCM2835_I2C_CLKT, clk_tout); ++ + return 0; + } + |