Skip to content

Commit 85f8fca

Browse files
wanahmadzainieWolfram Sang
authored andcommitted
i2c: designware: Calculate SCL timing parameter for Fast Mode Plus
Custom parameters for HCNT/LCNT are not available for OF based system. Thus, we will use existing SCL timing parameter calculation functions for Fast Mode Plus. Signed-off-by: Wan Ahmad Zainie <wan.ahmad.zainie.wan.mohamad@intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
1 parent 79d48da commit 85f8fca

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

drivers/i2c/busses/i2c-designware-master.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,27 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
7676
*/
7777
if (t->bus_freq_hz == 1000000) {
7878
/*
79-
* Check are fast mode plus parameters available and use
80-
* fast mode if not.
79+
* Check are Fast Mode Plus parameters available. Calculate
80+
* SCL timing parameters for Fast Mode Plus if not set.
8181
*/
8282
if (dev->fp_hcnt && dev->fp_lcnt) {
8383
dev->fs_hcnt = dev->fp_hcnt;
8484
dev->fs_lcnt = dev->fp_lcnt;
85-
fp_str = " Plus";
85+
} else {
86+
ic_clk = i2c_dw_clk_rate(dev);
87+
dev->fs_hcnt =
88+
i2c_dw_scl_hcnt(ic_clk,
89+
260, /* tHIGH = 260 ns */
90+
sda_falling_time,
91+
0, /* DW default */
92+
0); /* No offset */
93+
dev->fs_lcnt =
94+
i2c_dw_scl_lcnt(ic_clk,
95+
500, /* tLOW = 500 ns */
96+
scl_falling_time,
97+
0); /* No offset */
8698
}
99+
fp_str = " Plus";
87100
}
88101
/*
89102
* Calculate SCL timing parameters for fast mode if not set. They are

0 commit comments

Comments
 (0)