Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c: stm32f7: switch to I²C generic property parsing

Switch to the new generic functions: i2c_parse_fw_timings().

While here, replace hard coded values with standard bus frequency definitions.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Alain Volmat <alain.volmat@st.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>

authored by

Andy Shevchenko and committed by
Wolfram Sang
83672db7 38a592e2

+26 -31
+26 -31
drivers/i2c/busses/i2c-stm32f7.c
··· 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 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 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 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; 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; 614 631 615 632 setup->speed = i2c_dev->speed; 616 633 setup->speed_freq = i2c_specs[setup->speed].rate; ··· 1931 1914 struct stm32f7_i2c_dev *i2c_dev; 1932 1915 const struct stm32f7_i2c_setup *setup; 1933 1916 struct resource *res; 1934 - u32 clk_rate, rise_time, fall_time; 1935 1917 struct i2c_adapter *adap; 1936 1918 struct reset_control *rst; 1937 1919 dma_addr_t phy_addr; ··· 1977 1961 return ret; 1978 1962 } 1979 1963 1980 - i2c_dev->speed = STM32_I2C_SPEED_STANDARD; 1981 - ret = device_property_read_u32(&pdev->dev, "clock-frequency", 1982 - &clk_rate); 1983 - if (!ret && clk_rate >= 1000000) { 1984 - i2c_dev->speed = STM32_I2C_SPEED_FAST_PLUS; 1985 - } else if (!ret && clk_rate >= 400000) { 1986 - i2c_dev->speed = STM32_I2C_SPEED_FAST; 1987 - } else if (!ret && clk_rate >= 100000) { 1988 - i2c_dev->speed = STM32_I2C_SPEED_STANDARD; 1989 - } 1990 - 1991 1964 rst = devm_reset_control_get(&pdev->dev, NULL); 1992 1965 if (IS_ERR(rst)) { 1993 1966 dev_err(&pdev->dev, "Error: Missing controller reset\n"); ··· 2015 2010 goto clk_free; 2016 2011 } 2017 2012 i2c_dev->setup = *setup; 2018 - 2019 - ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns", 2020 - &rise_time); 2021 - if (!ret) 2022 - i2c_dev->setup.rise_time = rise_time; 2023 - 2024 - ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-falling-time-ns", 2025 - &fall_time); 2026 - if (!ret) 2027 - i2c_dev->setup.fall_time = fall_time; 2028 2013 2029 2014 ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup); 2030 2015 if (ret)