mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
i2c: uniphier: fix violation of tLOW requirement for Fast-mode
[ Upstream commit 8469636ab5 ]
Currently, the clock duty is set as tLOW/tHIGH = 1/1. For Fast-mode,
tLOW is set to 1.25 us while the I2C spec requires tLOW >= 1.3 us.
tLOW/tHIGH = 5/4 would meet both Standard-mode and Fast-mode:
Standard-mode: tLOW = 5.56 us, tHIGH = 4.44 us
Fast-mode: tLOW = 1.39 us, tHIGH = 1.11 us
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9d5db5becd
commit
eb296b2d31
@@ -320,7 +320,13 @@ static void uniphier_i2c_hw_init(struct uniphier_i2c_priv *priv)
|
||||
|
||||
uniphier_i2c_reset(priv, true);
|
||||
|
||||
writel((cyc / 2 << 16) | cyc, priv->membase + UNIPHIER_I2C_CLK);
|
||||
/*
|
||||
* Bit30-16: clock cycles of tLOW.
|
||||
* Standard-mode: tLOW = 4.7 us, tHIGH = 4.0 us
|
||||
* Fast-mode: tLOW = 1.3 us, tHIGH = 0.6 us
|
||||
* "tLow/tHIGH = 5/4" meets both.
|
||||
*/
|
||||
writel((cyc * 5 / 9 << 16) | cyc, priv->membase + UNIPHIER_I2C_CLK);
|
||||
|
||||
uniphier_i2c_reset(priv, false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user