i2c: au1550: relax bus timings a bit
authorManuel Lauss <manuel.lauss@gmail.com>
Tue, 8 Sep 2015 06:56:23 +0000 (08:56 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Tue, 20 Oct 2015 15:43:13 +0000 (17:43 +0200)
The i2c-au1550 driver has to program various setup and hold times
for the sda/scl signals by hand.  The current values seem to be
working best when the driver is supplied with 50MHz, however on the
DB1300 board 48MHz is the closest we can get to it, and the timings
are a bit too tight for that, leading to the last bit of a transmission
sometimes being swallowed.  This manifests itself in wrong readings
of the ne1619 sensor and inability to configure the wm8731 i2s codec.

With the relaxed timings, both the sensor and the i2s codec can now
be accessed more reliably over a wider range of I2C block input
frequencies.

Verified on DB1200, DB1300 and DB1550 boards.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-au1550.c

index a6aae84e570656d9ef9b54bed57142c438d59211..4de110791ed55b2da8dd7f947d31fc7b2c165573 100644 (file)
@@ -284,10 +284,10 @@ static void i2c_au1550_setup(struct i2c_au1550_data *priv)
        /* Set the protocol timer values.  See Table 71 in the
         * Au1550 Data Book for standard timing values.
         */
-       WR(priv, PSC_SMBTMR, PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(15) | \
-               PSC_SMBTMR_SET_PU(15) | PSC_SMBTMR_SET_SH(15) | \
-               PSC_SMBTMR_SET_SU(15) | PSC_SMBTMR_SET_CL(15) | \
-               PSC_SMBTMR_SET_CH(15));
+       WR(priv, PSC_SMBTMR, PSC_SMBTMR_SET_TH(0) | PSC_SMBTMR_SET_PS(20) | \
+               PSC_SMBTMR_SET_PU(20) | PSC_SMBTMR_SET_SH(20) | \
+               PSC_SMBTMR_SET_SU(20) | PSC_SMBTMR_SET_CL(20) | \
+               PSC_SMBTMR_SET_CH(20));
 
        cfg |= PSC_SMBCFG_DE_ENABLE;
        WR(priv, PSC_SMBCFG, cfg);