diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/busses/i2c-st.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/drivers/i2c/busses/i2c-st.c b/drivers/i2c/busses/i2c-st.c index fc767ddba3fb..2e4eccd6599a 100644 --- a/drivers/i2c/busses/i2c-st.c +++ b/drivers/i2c/busses/i2c-st.c | |||
@@ -206,25 +206,31 @@ static inline void st_i2c_clr_bits(void __iomem *reg, u32 mask) | |||
206 | writel_relaxed(readl_relaxed(reg) & ~mask, reg); | 206 | writel_relaxed(readl_relaxed(reg) & ~mask, reg); |
207 | } | 207 | } |
208 | 208 | ||
209 | /* From I2C Specifications v0.5 */ | 209 | /* |
210 | * From I2C Specifications v0.5. | ||
211 | * | ||
212 | * All the values below have +10% margin added to be | ||
213 | * compatible with some out-of-spec devices, | ||
214 | * like HDMI link of the Toshiba 19AV600 TV. | ||
215 | */ | ||
210 | static struct st_i2c_timings i2c_timings[] = { | 216 | static struct st_i2c_timings i2c_timings[] = { |
211 | [I2C_MODE_STANDARD] = { | 217 | [I2C_MODE_STANDARD] = { |
212 | .rate = 100000, | 218 | .rate = 100000, |
213 | .rep_start_hold = 4000, | 219 | .rep_start_hold = 4400, |
214 | .rep_start_setup = 4700, | 220 | .rep_start_setup = 5170, |
215 | .start_hold = 4000, | 221 | .start_hold = 4400, |
216 | .data_setup_time = 250, | 222 | .data_setup_time = 275, |
217 | .stop_setup_time = 4000, | 223 | .stop_setup_time = 4400, |
218 | .bus_free_time = 4700, | 224 | .bus_free_time = 5170, |
219 | }, | 225 | }, |
220 | [I2C_MODE_FAST] = { | 226 | [I2C_MODE_FAST] = { |
221 | .rate = 400000, | 227 | .rate = 400000, |
222 | .rep_start_hold = 600, | 228 | .rep_start_hold = 660, |
223 | .rep_start_setup = 600, | 229 | .rep_start_setup = 660, |
224 | .start_hold = 600, | 230 | .start_hold = 660, |
225 | .data_setup_time = 100, | 231 | .data_setup_time = 110, |
226 | .stop_setup_time = 600, | 232 | .stop_setup_time = 660, |
227 | .bus_free_time = 1300, | 233 | .bus_free_time = 1430, |
228 | }, | 234 | }, |
229 | }; | 235 | }; |
230 | 236 | ||