]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
mvtwsi: Fix clock programming
authorHans de Goede <hdegoede@redhat.com>
Sat, 3 May 2014 15:46:26 +0000 (17:46 +0200)
committerHeiko Schocher <hs@denx.de>
Wed, 14 May 2014 10:58:55 +0000 (12:58 +0200)
The TWSI_FREQUENCY macro was wrong in 2 ways:
1) It was casting the result of the calculations to an u8, while i2c clk
rates are often >= 100Khz which won't fit in a u8, drop the cast.
2) It had an extra factor of 2 in the divider which neither the datasheet nor
the Linux driver have.

The comment for the default value was wrongly saying that m lives in
bits 4-7, while in reality it is in bits 3-6, as can be seen from the correct
shift by 3 used in i2c_init().

While at it remove the unused twsi_actual_speed variable.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/i2c/mvtwsi.c

index 90c83879182c12596ef0d26518c3b07145547aec..b44944378a9049902dc1a17fcca272d4020afdf2 100644 (file)
@@ -216,7 +216,7 @@ static int twsi_stop(int status)
  */
 
 #define TWSI_FREQUENCY(m, n) \
-       ((u8) (CONFIG_SYS_TCLK / (10 * (m + 1) * 2 * (1 << n))))
+       (CONFIG_SYS_TCLK / (10 * (m + 1) * (1 << n)))
 
 /*
  * These are required to be reprogrammed before enabling the controller
@@ -225,10 +225,8 @@ static int twsi_stop(int status)
  * twsi_slave_address left uninitialized lest checkpatch.pl complains.
  */
 
-/* Baudrate generator: m (bits 7..4) =4, n (bits 3..0) =4 */
+/* Baudrate generator: m (bits 6..3) = 8, n (bits 2..0) = 4 */
 static u8 twsi_baud_rate = 0x44; /* baudrate at controller reset */
-/* Default frequency corresponding to default m=4, n=4 */
-static u8 twsi_actual_speed = TWSI_FREQUENCY(4, 4);
 /* Default slave address is 0 (so is an uninitialized static) */
 static u8 twsi_slave_address;
 
@@ -279,7 +277,6 @@ void i2c_init(int requested_speed, int slaveadd)
        }
        /* save baud rate and slave for later calls to twsi_reset */
        twsi_baud_rate = baud;
-       twsi_actual_speed = highest_speed;
        twsi_slave_address = slaveadd;
        /* reset controller */
        twsi_reset();