@@ -344,9 +344,9 @@ struct stm32f7_i2c_dev {
344
344
*/
345
345
static struct stm32f7_i2c_spec i2c_specs [] = {
346
346
[STM32_I2C_SPEED_STANDARD ] = {
347
- .rate = 100000 ,
348
- .rate_min = 80000 ,
349
- .rate_max = 100000 ,
347
+ .rate = I2C_MAX_STANDARD_MODE_FREQ ,
348
+ .rate_min = I2C_MAX_STANDARD_MODE_FREQ * 8 / 10 , /* 80% */
349
+ .rate_max = I2C_MAX_STANDARD_MODE_FREQ ,
350
350
.fall_max = 300 ,
351
351
.rise_max = 1000 ,
352
352
.hddat_min = 0 ,
@@ -356,9 +356,9 @@ static struct stm32f7_i2c_spec i2c_specs[] = {
356
356
.h_min = 4000 ,
357
357
},
358
358
[STM32_I2C_SPEED_FAST ] = {
359
- .rate = 400000 ,
360
- .rate_min = 320000 ,
361
- .rate_max = 400000 ,
359
+ .rate = I2C_MAX_FAST_MODE_FREQ ,
360
+ .rate_min = I2C_MAX_FAST_MODE_FREQ * 8 / 10 , /* 80% */
361
+ .rate_max = I2C_MAX_FAST_MODE_FREQ ,
362
362
.fall_max = 300 ,
363
363
.rise_max = 300 ,
364
364
.hddat_min = 0 ,
@@ -368,9 +368,9 @@ static struct stm32f7_i2c_spec i2c_specs[] = {
368
368
.h_min = 600 ,
369
369
},
370
370
[STM32_I2C_SPEED_FAST_PLUS ] = {
371
- .rate = 1000000 ,
372
- .rate_min = 800000 ,
373
- .rate_max = 1000000 ,
371
+ .rate = I2C_MAX_FAST_MODE_PLUS_FREQ ,
372
+ .rate_min = I2C_MAX_FAST_MODE_PLUS_FREQ * 8 / 10 , /* 80% */
373
+ .rate_max = I2C_MAX_FAST_MODE_PLUS_FREQ ,
374
374
.fall_max = 100 ,
375
375
.rise_max = 120 ,
376
376
.hddat_min = 0 ,
@@ -610,8 +610,25 @@ static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
610
610
static int stm32f7_i2c_setup_timing (struct stm32f7_i2c_dev * i2c_dev ,
611
611
struct stm32f7_i2c_setup * setup )
612
612
{
613
+ struct i2c_timings timings , * t = & timings ;
613
614
int ret = 0 ;
614
615
616
+ t -> bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ ;
617
+ t -> scl_rise_ns = i2c_dev -> setup .rise_time ;
618
+ t -> scl_fall_ns = i2c_dev -> setup .fall_time ;
619
+
620
+ i2c_parse_fw_timings (i2c_dev -> dev , t , false);
621
+
622
+ if (t -> bus_freq_hz >= I2C_MAX_FAST_MODE_PLUS_FREQ )
623
+ i2c_dev -> speed = STM32_I2C_SPEED_FAST_PLUS ;
624
+ else if (t -> bus_freq_hz >= I2C_MAX_FAST_MODE_FREQ )
625
+ i2c_dev -> speed = STM32_I2C_SPEED_FAST ;
626
+ else
627
+ i2c_dev -> speed = STM32_I2C_SPEED_STANDARD ;
628
+
629
+ i2c_dev -> setup .rise_time = t -> scl_rise_ns ;
630
+ i2c_dev -> setup .fall_time = t -> scl_fall_ns ;
631
+
615
632
setup -> speed = i2c_dev -> speed ;
616
633
setup -> speed_freq = i2c_specs [setup -> speed ].rate ;
617
634
setup -> clock_src = clk_get_rate (i2c_dev -> clk );
@@ -1914,7 +1931,6 @@ static int stm32f7_i2c_probe(struct platform_device *pdev)
1914
1931
struct stm32f7_i2c_dev * i2c_dev ;
1915
1932
const struct stm32f7_i2c_setup * setup ;
1916
1933
struct resource * res ;
1917
- u32 clk_rate , rise_time , fall_time ;
1918
1934
struct i2c_adapter * adap ;
1919
1935
struct reset_control * rst ;
1920
1936
dma_addr_t phy_addr ;
@@ -1961,17 +1977,6 @@ static int stm32f7_i2c_probe(struct platform_device *pdev)
1961
1977
return ret ;
1962
1978
}
1963
1979
1964
- i2c_dev -> speed = STM32_I2C_SPEED_STANDARD ;
1965
- ret = device_property_read_u32 (& pdev -> dev , "clock-frequency" ,
1966
- & clk_rate );
1967
- if (!ret && clk_rate >= 1000000 ) {
1968
- i2c_dev -> speed = STM32_I2C_SPEED_FAST_PLUS ;
1969
- } else if (!ret && clk_rate >= 400000 ) {
1970
- i2c_dev -> speed = STM32_I2C_SPEED_FAST ;
1971
- } else if (!ret && clk_rate >= 100000 ) {
1972
- i2c_dev -> speed = STM32_I2C_SPEED_STANDARD ;
1973
- }
1974
-
1975
1980
rst = devm_reset_control_get (& pdev -> dev , NULL );
1976
1981
if (IS_ERR (rst )) {
1977
1982
dev_err (& pdev -> dev , "Error: Missing controller reset\n" );
@@ -2011,16 +2016,6 @@ static int stm32f7_i2c_probe(struct platform_device *pdev)
2011
2016
}
2012
2017
i2c_dev -> setup = * setup ;
2013
2018
2014
- ret = device_property_read_u32 (i2c_dev -> dev , "i2c-scl-rising-time-ns" ,
2015
- & rise_time );
2016
- if (!ret )
2017
- i2c_dev -> setup .rise_time = rise_time ;
2018
-
2019
- ret = device_property_read_u32 (i2c_dev -> dev , "i2c-scl-falling-time-ns" ,
2020
- & fall_time );
2021
- if (!ret )
2022
- i2c_dev -> setup .fall_time = fall_time ;
2023
-
2024
2019
ret = stm32f7_i2c_setup_timing (i2c_dev , & i2c_dev -> setup );
2025
2020
if (ret )
2026
2021
goto clk_free ;
0 commit comments