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

2021-08-24 Thread Adam Ford
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

2021-09-27 Thread Heiko Schocher
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

2021-09-20 Thread Adam Ford
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

2021-09-20 Thread Heiko Schocher
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

2021-09-20 Thread Marek Vasut

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.