Skip to content
Snippets Groups Projects
Commit 1e2fc0d1 authored by Marek Vasut's avatar Marek Vasut Committed by Tom Rini
Browse files

mxs: i2c: Restore speed setting after block reset


The I2C block reset configures the I2C bus speed to strange value.
Read the I2C speed from the block before reseting the block and
restore it afterwards, so the I2C operates correctly. This issue
can be replicated by doing unsuccessful I2C transfer, after such
transfer finishes, the I2C block clock speed is misconfigured.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Heiko Schocher <hs@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
parent aff36ea9
Branches
Tags
No related merge requests found
......@@ -40,6 +40,7 @@ void mxs_i2c_reset(void)
{
struct mxs_i2c_regs *i2c_regs = (struct mxs_i2c_regs *)MXS_I2C0_BASE;
int ret;
int speed = i2c_get_bus_speed();
ret = mxs_reset_block(&i2c_regs->hw_i2c_ctrl0_reg);
if (ret) {
......@@ -53,6 +54,8 @@ void mxs_i2c_reset(void)
&i2c_regs->hw_i2c_ctrl1_clr);
writel(I2C_QUEUECTRL_PIO_QUEUE_MODE, &i2c_regs->hw_i2c_queuectrl_set);
i2c_set_bus_speed(speed);
}
void mxs_i2c_setup_read(uint8_t chip, int len)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment