i2c: mxc: add CONFIG_CLK support

When CONFIG_CLK enabled, use CLK UCLASS for clk related settings.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>

hs: removed hunk in mxc_i2c_probe() as not longer in code
This commit is contained in:
Peng Fan 2019-08-08 01:43:30 +00:00 committed by Heiko Schocher
parent 877294b56a
commit 6dba0864ec
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