i2c bugfixes for 2019.10 take 2
- i2c: mxc: add CONFIG_CLK support
  If CONFIG_CLK is enabled use clk framework for clock settings.
This commit is contained in:
Tom Rini 2019-09-03 07:16:05 -04:00
commit f65fb411ed
2 changed files with 24 additions and 0 deletions

View File

@ -6,6 +6,9 @@
#define __ASM_ARCH_MXC_MXC_I2C_H__
#include <asm-generic/gpio.h>
#include <asm/mach-imx/iomux-v3.h>
#if CONFIG_IS_ENABLED(CLK)
#include <clk.h>
#endif
struct i2c_pin_ctrl {
iomux_v3_cfg_t i2c_mode;
@ -47,6 +50,9 @@ struct mxc_i2c_bus {
ulong driver_data;
int speed;
struct i2c_pads_info *pads_info;
#if CONFIG_IS_ENABLED(CLK)
struct clk per_clk;
#endif
#ifndef CONFIG_DM_I2C
int (*idle_bus_fn)(void *p);
void *idle_bus_data;

View File

@ -149,7 +149,12 @@ static uint8_t i2c_imx_get_clk(struct mxc_i2c_bus *i2c_bus, unsigned int rate)
#endif
/* Divider value calculation */
#if CONFIG_IS_ENABLED(CLK)
i2c_clk_rate = clk_get_rate(&i2c_bus->per_clk);
#else
i2c_clk_rate = mxc_get_clock(MXC_I2C_CLK);
#endif
div = (i2c_clk_rate + rate - 1) / rate;
if (div < i2c_clk_div[0][0])
clk_div = 0;
@ -891,9 +896,22 @@ static int mxc_i2c_probe(struct udevice *bus)
i2c_bus->bus = bus;
/* Enable clk */
#if CONFIG_IS_ENABLED(CLK)
ret = clk_get_by_index(bus, 0, &i2c_bus->per_clk);
if (ret) {
printf("Failed to get i2c clk\n");
return ret;
}
ret = clk_enable(&i2c_bus->per_clk);
if (ret) {
printf("Failed to enable i2c clk\n");
return ret;
}
#else
ret = enable_i2c_clk(1, bus->seq);
if (ret < 0)
return ret;
#endif
/*
* See Documentation/devicetree/bindings/i2c/i2c-imx.txt