|
@@ -333,8 +333,18 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
|
|
|
|
|
|
if (cpu_is_omap2430() || cpu_is_omap34xx()) {
|
|
|
|
|
|
- /* HSI2C controller internal clk rate should be 19.2 Mhz */
|
|
|
- internal_clk = 19200;
|
|
|
+ /*
|
|
|
+ * HSI2C controller internal clk rate should be 19.2 Mhz for
|
|
|
+ * HS and for all modes on 2430. On 34xx we can use lower rate
|
|
|
+ * to get longer filter period for better noise suppression.
|
|
|
+ * The filter is iclk (fclk for HS) period.
|
|
|
+ */
|
|
|
+ if (dev->speed > 400 || cpu_is_omap_2430())
|
|
|
+ internal_clk = 19200;
|
|
|
+ else if (dev->speed > 100)
|
|
|
+ internal_clk = 9600;
|
|
|
+ else
|
|
|
+ internal_clk = 4000;
|
|
|
fclk_rate = clk_get_rate(dev->fclk) / 1000;
|
|
|
|
|
|
/* Compute prescaler divisor */
|