mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-28 10:01:32 +00:00
i2c: mvtwsi.c: Fix set speed
Previous patch for this driver breaks i2c initialization.
commit 8bcf12ccce
("i2c: mvtwsi.c: Avoid NULL dereference")
If actual_speed is passed as NULL in this function:
static void __twsi_i2c_init(struct mvtwsi_registers *twsi, int speed,
int slaveadd, uint *actual_speed)
than __twsi_i2c_set_bus_speed never get called. This causes i2c clock
to run on default speed - 2MHz (measured with oscilloscope). This is issue
on some boards, sunxi for example, since on I2C0 bus PMU is connected.
The bootlogs with and without the patch are as follows:
Wihtout the patch:
U-Boot SPL 2018.03-rc2 (Feb 13 2018 - 09:23:17 +0200)
DRAM: 1024 MiB
Failed to set core voltage! Can't set CPU frequency
Trying to boot from FEL
U-Boot 2018.03-rc2 (Feb 13 2018 - 09:23:17 +0200) Allwinner Technology
CPU: Allwinner A20 (SUN7I)
Model: Olimex A20-OLinuXino-LIME2
I2C: ready
DRAM: 1 GiB
MMC: SUNXI SD/MMC: 0
With the patch:
U-Boot SPL 2018.03-rc2-00001-g838ff85 (Feb 13 2018 - 09:24:34 +0200)
DRAM: 1024 MiB
CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
Trying to boot from FEL
U-Boot 2018.03-rc2-00001-g838ff85 (Feb 13 2018 - 09:24:34 +0200) Allwinner Technology
CPU: Allwinner A20 (SUN7I)
Model: Olimex A20-OLinuXino-LIME2
I2C: ready
DRAM: 1 GiB
MMC: SUNXI SD/MMC: 0
Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
02b0895c21
commit
004b4cdaec
1 changed files with 4 additions and 1 deletions
|
@ -487,11 +487,14 @@ static uint __twsi_i2c_set_bus_speed(struct mvtwsi_registers *twsi,
|
||||||
static void __twsi_i2c_init(struct mvtwsi_registers *twsi, int speed,
|
static void __twsi_i2c_init(struct mvtwsi_registers *twsi, int speed,
|
||||||
int slaveadd, uint *actual_speed)
|
int slaveadd, uint *actual_speed)
|
||||||
{
|
{
|
||||||
|
uint tmp_speed;
|
||||||
|
|
||||||
/* Reset controller */
|
/* Reset controller */
|
||||||
twsi_reset(twsi);
|
twsi_reset(twsi);
|
||||||
/* Set speed */
|
/* Set speed */
|
||||||
|
tmp_speed = __twsi_i2c_set_bus_speed(twsi, speed);
|
||||||
if (actual_speed)
|
if (actual_speed)
|
||||||
*actual_speed = __twsi_i2c_set_bus_speed(twsi, speed);
|
*actual_speed = tmp_speed;
|
||||||
/* Set slave address; even though we don't use it */
|
/* Set slave address; even though we don't use it */
|
||||||
writel(slaveadd, &twsi->slave_address);
|
writel(slaveadd, &twsi->slave_address);
|
||||||
writel(0, &twsi->xtnd_slave_addr);
|
writel(0, &twsi->xtnd_slave_addr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue