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> Reviewed-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
1d1f98c8ee
commit
e53979cd34
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user