[PATCH] i2c: rcar_i2c: Enable configuring SCL rise and fall times
Heiko Schocher
hs at denx.de
Tue Sep 21 06:13:28 CEST 2021
Hello Adam,
On 20.09.21 14:21, Adam Ford wrote:
> On Tue, Aug 24, 2021 at 9:10 AM Adam Ford <aford173 at 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 at 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 at 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
>>
--
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: hs at denx.de
More information about the U-Boot
mailing list