[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 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 / 10] * = F[(ick / 100) * sum / 1000] */ - sum = 35 + 200 + priv->intdelay; + sum = priv->fall_ns + priv->rise_ns + priv->intdelay; round = (ick + 50) / 100 * 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
Re: [PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times
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 Applied to u-boot-i2c next Thanks! bye, Heiko -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: h...@denx.de
Re: [PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times
On Tue, Aug 24, 2021 at 9:10 AM 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 > 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 / 10] > * = F[(ick / 100) * sum / 1000] > */ > - sum = 35 + 200 + priv->intdelay; > + sum = priv->fall_ns + priv->rise_ns + priv->intdelay; > round = (ick + 50) / 100 * 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 >
Re: [PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times
Hello Adam, On 20.09.21 14:21, Adam Ford wrote: > On Tue, Aug 24, 2021 at 9:10 AM 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 >> > 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 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 / 10] >> * = F[(ick / 100) * sum / 1000] >> */ >> - sum = 35 + 200 + priv->intdelay; >> + sum = priv->fall_ns + priv->rise_ns + priv->intdelay; >> round = (ick + 50) / 100 * 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 >> -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: h...@denx.de
Re: [PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times
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 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 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 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.