[PATCH v1 7/7] i2c: stm32f7: compute i2cclk only one time
Patrice CHOTARD
patrice.chotard at foss.st.com
Thu Aug 19 13:47:53 CEST 2021
HI Patrick
On 8/3/21 12:05 PM, Patrice Chotard wrote:
> From: Patrick Delaunay <patrick.delaunay at foss.st.com>
>
> Compute i2cclk only one time in stm32_i2c_compute_timing()
> and remove setup parameter (accessible in i2c_priv).
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
>
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> ---
>
> drivers/i2c/stm32f7_i2c.c | 18 ++++++++----------
> 1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/i2c/stm32f7_i2c.c b/drivers/i2c/stm32f7_i2c.c
> index 2b2dae67a3..c6ae65badb 100644
> --- a/drivers/i2c/stm32f7_i2c.c
> +++ b/drivers/i2c/stm32f7_i2c.c
> @@ -507,14 +507,13 @@ static int stm32_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
> return 0;
> }
>
> -static int stm32_i2c_compute_solutions(struct stm32_i2c_setup *setup,
> +static int stm32_i2c_compute_solutions(u32 i2cclk,
> + struct stm32_i2c_setup *setup,
> const struct stm32_i2c_spec *specs,
> struct list_head *solutions)
> {
> struct stm32_i2c_timings *v;
> u32 p_prev = STM32_PRESC_MAX;
> - u32 i2cclk = DIV_ROUND_CLOSEST(STM32_NSEC_PER_SEC,
> - setup->clock_src);
> u32 af_delay_min, af_delay_max;
> u16 p, l, a;
> int sdadel_min, sdadel_max, scldel_min;
> @@ -582,7 +581,8 @@ static int stm32_i2c_compute_solutions(struct stm32_i2c_setup *setup,
> return ret;
> }
>
> -static int stm32_i2c_choose_solution(struct stm32_i2c_setup *setup,
> +static int stm32_i2c_choose_solution(u32 i2cclk,
> + struct stm32_i2c_setup *setup,
> const struct stm32_i2c_spec *specs,
> struct list_head *solutions,
> struct stm32_i2c_timings *s)
> @@ -591,8 +591,6 @@ static int stm32_i2c_choose_solution(struct stm32_i2c_setup *setup,
> u32 i2cbus = DIV_ROUND_CLOSEST(STM32_NSEC_PER_SEC,
> setup->speed_freq);
> u32 clk_error_prev = i2cbus;
> - u32 i2cclk = DIV_ROUND_CLOSEST(STM32_NSEC_PER_SEC,
> - setup->clock_src);
> u32 clk_min, clk_max;
> u32 af_delay_min;
> u32 dnf_delay;
> @@ -679,9 +677,9 @@ static const struct stm32_i2c_spec *get_specs(u32 rate)
> }
>
> static int stm32_i2c_compute_timing(struct stm32_i2c_priv *i2c_priv,
> - struct stm32_i2c_setup *setup,
> struct stm32_i2c_timings *output)
> {
> + struct stm32_i2c_setup *setup = &i2c_priv->setup;
> const struct stm32_i2c_spec *specs;
> struct stm32_i2c_timings *v, *_v;
> struct list_head solutions;
> @@ -712,11 +710,11 @@ static int stm32_i2c_compute_timing(struct stm32_i2c_priv *i2c_priv,
> }
>
> INIT_LIST_HEAD(&solutions);
> - ret = stm32_i2c_compute_solutions(setup, specs, &solutions);
> + ret = stm32_i2c_compute_solutions(i2cclk, setup, specs, &solutions);
> if (ret)
> goto exit;
>
> - ret = stm32_i2c_choose_solution(setup, specs, &solutions, output);
> + ret = stm32_i2c_choose_solution(i2cclk, setup, specs, &solutions, output);
> if (ret)
> goto exit;
>
> @@ -761,7 +759,7 @@ static int stm32_i2c_setup_timing(struct stm32_i2c_priv *i2c_priv,
> }
>
> do {
> - ret = stm32_i2c_compute_timing(i2c_priv, setup, timing);
> + ret = stm32_i2c_compute_timing(i2c_priv, timing);
> if (ret) {
> log_debug("failed to compute I2C timings.\n");
> if (setup->speed_freq > I2C_SPEED_STANDARD_RATE) {
>
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Thanks
Patrice
More information about the U-Boot
mailing list