[PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times

The Linux i2c driver supports i2c-scl-rising-time-ns, and i2c-scl-falling-time-ns, but U-Boot uses hard-coded values for these values.
Update the calculation by fetching them from the device tree if present and use the previous values as the default if they are missing.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 14bb6603d5..d9ece5e3a8 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -64,6 +64,8 @@ enum rcar_i2c_type { struct rcar_i2c_priv { void __iomem *base; struct clk clk; + u32 fall_ns; + u32 rise_ns; u32 intdelay; u32 icccr; enum rcar_i2c_type type; @@ -278,7 +280,7 @@ static int rcar_i2c_set_speed(struct udevice *dev, uint bus_freq_hz) * = F[sum * ick / 1000000000] * = F[(ick / 1000000) * sum / 1000] */ - sum = 35 + 200 + priv->intdelay; + sum = priv->fall_ns + priv->rise_ns + priv->intdelay; round = (ick + 500000) / 1000000 * sum; round = (round + 500) / 1000;
@@ -323,6 +325,10 @@ static int rcar_i2c_probe(struct udevice *dev) int ret;
priv->base = dev_read_addr_ptr(dev); + priv->rise_ns = dev_read_u32_default(dev, + "i2c-scl-rising-time-ns", 200); + priv->fall_ns = dev_read_u32_default(dev, + "i2c-scl-falling-time-ns", 35); priv->intdelay = dev_read_u32_default(dev, "i2c-scl-internal-delay-ns", 5); priv->type = dev_get_driver_data(dev);

On Tue, Aug 24, 2021 at 9:10 AM Adam Ford aford173@gmail.com wrote:
The Linux i2c driver supports i2c-scl-rising-time-ns, and i2c-scl-falling-time-ns, but U-Boot uses hard-coded values for these values.
Update the calculation by fetching them from the device tree if present and use the previous values as the default if they are missing.
Signed-off-by: Adam Ford aford173@gmail.com
Do I have the right people in copy? I was hoping to get some feedback on this. My boards use the i2c-scl-rising-time-ns to help properly set the i2c clocking.
thanks adam
diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 14bb6603d5..d9ece5e3a8 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -64,6 +64,8 @@ enum rcar_i2c_type { struct rcar_i2c_priv { void __iomem *base; struct clk clk;
u32 fall_ns;
u32 rise_ns; u32 intdelay; u32 icccr; enum rcar_i2c_type type;
@@ -278,7 +280,7 @@ static int rcar_i2c_set_speed(struct udevice *dev, uint bus_freq_hz) * = F[sum * ick / 1000000000] * = F[(ick / 1000000) * sum / 1000] */
sum = 35 + 200 + priv->intdelay;
sum = priv->fall_ns + priv->rise_ns + priv->intdelay; round = (ick + 500000) / 1000000 * sum; round = (round + 500) / 1000;
@@ -323,6 +325,10 @@ static int rcar_i2c_probe(struct udevice *dev) int ret;
priv->base = dev_read_addr_ptr(dev);
priv->rise_ns = dev_read_u32_default(dev,
"i2c-scl-rising-time-ns", 200);
priv->fall_ns = dev_read_u32_default(dev,
"i2c-scl-falling-time-ns", 35); priv->intdelay = dev_read_u32_default(dev, "i2c-scl-internal-delay-ns", 5); priv->type = dev_get_driver_data(dev);
-- 2.25.1

Hello Adam,
On 20.09.21 14:21, Adam Ford wrote:
On Tue, Aug 24, 2021 at 9:10 AM Adam Ford aford173@gmail.com wrote:
The Linux i2c driver supports i2c-scl-rising-time-ns, and i2c-scl-falling-time-ns, but U-Boot uses hard-coded values for these values.
Update the calculation by fetching them from the device tree if present and use the previous values as the default if they are missing.
Signed-off-by: Adam Ford aford173@gmail.com
Do I have the right people in copy? I was hoping to get some feedback on this. My boards use the i2c-scl-rising-time-ns to help properly set the i2c clocking.
No, I think all fine, for me the patch is okay, so:
Reviewed-by: Heiko Schocher hs@denx.de
Ah, I see, in patchwork the patch is assigned to Marek... added Marek to cc.
@Marek: Is it okay for you, if I pickup the patch, when new u-boot version is out? Else you can pick it up.
Thanks!
bye, Heiko
thanks adam
diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 14bb6603d5..d9ece5e3a8 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -64,6 +64,8 @@ enum rcar_i2c_type { struct rcar_i2c_priv { void __iomem *base; struct clk clk;
u32 fall_ns;
u32 rise_ns; u32 intdelay; u32 icccr; enum rcar_i2c_type type;
@@ -278,7 +280,7 @@ static int rcar_i2c_set_speed(struct udevice *dev, uint bus_freq_hz) * = F[sum * ick / 1000000000] * = F[(ick / 1000000) * sum / 1000] */
sum = 35 + 200 + priv->intdelay;
sum = priv->fall_ns + priv->rise_ns + priv->intdelay; round = (ick + 500000) / 1000000 * sum; round = (round + 500) / 1000;
@@ -323,6 +325,10 @@ static int rcar_i2c_probe(struct udevice *dev) int ret;
priv->base = dev_read_addr_ptr(dev);
priv->rise_ns = dev_read_u32_default(dev,
"i2c-scl-rising-time-ns", 200);
priv->fall_ns = dev_read_u32_default(dev,
"i2c-scl-falling-time-ns", 35); priv->intdelay = dev_read_u32_default(dev, "i2c-scl-internal-delay-ns", 5); priv->type = dev_get_driver_data(dev);
-- 2.25.1

On 9/21/21 6:13 AM, Heiko Schocher wrote:
Hello Adam,
On 20.09.21 14:21, Adam Ford wrote:
On Tue, Aug 24, 2021 at 9:10 AM Adam Ford aford173@gmail.com wrote:
The Linux i2c driver supports i2c-scl-rising-time-ns, and i2c-scl-falling-time-ns, but U-Boot uses hard-coded values for these values.
Update the calculation by fetching them from the device tree if present and use the previous values as the default if they are missing.
Signed-off-by: Adam Ford aford173@gmail.com
Do I have the right people in copy? I was hoping to get some feedback on this. My boards use the i2c-scl-rising-time-ns to help properly set the i2c clocking.
No, I think all fine, for me the patch is okay, so:
Reviewed-by: Heiko Schocher hs@denx.de
Ah, I see, in patchwork the patch is assigned to Marek... added Marek to cc.
@Marek: Is it okay for you, if I pickup the patch, when new u-boot version is out? Else you can pick it up.
Looks good, pick it for next please.

Hello Adam,
On 24.08.21 16:10, Adam Ford wrote:
The Linux i2c driver supports i2c-scl-rising-time-ns, and i2c-scl-falling-time-ns, but U-Boot uses hard-coded values for these values.
Update the calculation by fetching them from the device tree if present and use the previous values as the default if they are missing.
Signed-off-by: Adam Ford aford173@gmail.com
Applied to u-boot-i2c next
Thanks!
bye, Heiko
participants (3)
-
Adam Ford
-
Heiko Schocher
-
Marek Vasut