mvtwsi: Fix clock programming
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>
This commit is contained in:
		
							parent
							
								
									557a331908
								
							
						
					
					
						commit
						fab356a0b8
					
				|  | @ -216,7 +216,7 @@ static int twsi_stop(int status) | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #define TWSI_FREQUENCY(m, n) \ | #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 |  * 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. |  * 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 */ | 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) */ | /* Default slave address is 0 (so is an uninitialized static) */ | ||||||
| static u8 twsi_slave_address; | 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 */ | 	/* save baud rate and slave for later calls to twsi_reset */ | ||||||
| 	twsi_baud_rate = baud; | 	twsi_baud_rate = baud; | ||||||
| 	twsi_actual_speed = highest_speed; |  | ||||||
| 	twsi_slave_address = slaveadd; | 	twsi_slave_address = slaveadd; | ||||||
| 	/* reset controller */ | 	/* reset controller */ | ||||||
| 	twsi_reset(); | 	twsi_reset(); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue