On Tue, Aug 24, 2021 at 9:10 AM Adam Ford <aford...@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 <aford...@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 >