From 0074d4bf2d9f9b32b9939dfba6c84a160d250763 Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Tue, 2 Jan 2018 15:41:52 +0800 Subject: [PATCH 1/3] i2c: lpi2c: do not add 4 for bus seq The number 4 is dedicated on i.MX7ULP, but lpi2c will be reused on i.MX8, 4 is not valid. The seq number could be configured by alias node. The following patch will use i2c4 as the begin for i.MX7ULP. Signed-off-by: Peng Fan --- drivers/i2c/imx_lpi2c.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index e7ec17fe9e..de74e89efd 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -258,7 +258,7 @@ static int bus_i2c_set_bus_speed(struct udevice *bus, int speed) int i; regs = (struct imx_lpi2c_reg *)devfdt_get_addr(bus); - clock_rate = imx_get_i2cclk(bus->seq + 4); + clock_rate = imx_get_i2cclk(bus->seq); if (!clock_rate) return -EPERM; @@ -419,14 +419,14 @@ static int imx_lpi2c_probe(struct udevice *bus) i2c_bus->bus = bus; /* power up i2c resource */ - ret = init_i2c_power(bus->seq + 4); + ret = init_i2c_power(bus->seq); if (ret) { debug("init_i2c_power err = %d\n", ret); return ret; } - /* Enable clk, only i2c4-7 can be handled by A7 core */ - ret = enable_i2c_clk(1, bus->seq + 4); + /* To i.MX7ULP, only i2c4-7 can be handled by A7 core */ + ret = enable_i2c_clk(1, bus->seq); if (ret < 0) return ret; From 34b0af83902d43c05aa57e96cc06c1d5b42259e2 Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Tue, 2 Jan 2018 15:41:53 +0800 Subject: [PATCH 2/3] imx: mx7ulp: modify lpi2c seq number Modify the lpi2c alias seq number to align with device. Then no need to add 4 to get the device index. Signed-off-by: Peng Fan --- arch/arm/dts/imx7ulp.dtsi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/dts/imx7ulp.dtsi b/arch/arm/dts/imx7ulp.dtsi index 5497734a21..a8458f89d5 100644 --- a/arch/arm/dts/imx7ulp.dtsi +++ b/arch/arm/dts/imx7ulp.dtsi @@ -27,10 +27,10 @@ serial2 = &lpuart6; serial3 = &lpuart7; usbphy0 = &usbphy1; - i2c0 = &lpi2c4; - i2c1 = &lpi2c5; - i2c2 = &lpi2c6; - i2c3 = &lpi2c7; + i2c4 = &lpi2c4; + i2c5 = &lpi2c5; + i2c6 = &lpi2c6; + i2c7 = &lpi2c7; }; cpus { From fb0128736b7bfb83b43a35211f603c74f8627eff Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Fri, 29 Dec 2017 15:06:08 +0800 Subject: [PATCH 3/3] i2c: mxc_i2c: Use or operation The operation should be OR, not BIT OR. Signed-off-by: Peng Fan Cc: Heiko Schocher Cc: Stefano Babic --- drivers/i2c/mxc_i2c.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c index 205274e947..79228c2757 100644 --- a/drivers/i2c/mxc_i2c.c +++ b/drivers/i2c/mxc_i2c.c @@ -784,9 +784,9 @@ static int mxc_i2c_probe(struct udevice *bus) ret2 = gpio_request_by_name_nodev(offset_to_ofnode(node), "sda-gpios", 0, &i2c_bus->sda_gpio, GPIOD_IS_OUT); - if (!dm_gpio_is_valid(&i2c_bus->sda_gpio) | - !dm_gpio_is_valid(&i2c_bus->scl_gpio) | - ret | ret2) { + if (!dm_gpio_is_valid(&i2c_bus->sda_gpio) || + !dm_gpio_is_valid(&i2c_bus->scl_gpio) || + ret || ret2) { dev_err(dev, "i2c bus %d at %lu, fail to request scl/sda gpio\n", bus->seq, i2c_bus->base); return -EINVAL; }