diff mbox series

[U-Boot] i2c: imx_lpi2c: add ipg clk

Message ID 20190724090940.14615-1-peng.fan@nxp.com
State Accepted
Commit d02be21d3004b51c6fc9a54b90d31dcc2dac4a9a
Delegated to: Stefano Babic
Headers show
Series [U-Boot] i2c: imx_lpi2c: add ipg clk | expand

Commit Message

Peng Fan July 24, 2019, 8:54 a.m. UTC
The controller needs two clk, per clk and ipg clk,
so let's add ipg clk.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/i2c/imx_lpi2c.c | 11 +++++++++++
 include/imx_lpi2c.h     |  1 +
 2 files changed, 12 insertions(+)

Comments

Anatolij Gustschin July 29, 2019, 7:37 p.m. UTC | #1
Hi Peng,

On Wed, 24 Jul 2019 08:54:16 +0000
Peng Fan peng.fan@nxp.com wrote:
...
> +++ b/drivers/i2c/imx_lpi2c.c
> @@ -471,6 +471,17 @@ static int imx_lpi2c_probe(struct udevice *bus)
>  			dev_err(bus, "Failed to enable per clk\n");
>  			return ret;
>  		}
> +
> +		ret = clk_get_by_name(bus, "ipg", &i2c_bus->ipg_clk);
> +		if (ret) {
> +			dev_err(bus, "Failed to get ipg clk\n");
> +			return ret;
> +		}

imx8dx/imx8qxp device trees do not have ipg clock in I2C nodes, here
probing will fail. Should we add I2C ipg clock to imx8x dts files?
Or is it required only for imx8qm?

--
Anatolij
Peng Fan July 30, 2019, 12:45 a.m. UTC | #2
> Subject: Re: [PATCH] i2c: imx_lpi2c: add ipg clk
> 
> Hi Peng,
> 
> On Wed, 24 Jul 2019 08:54:16 +0000
> Peng Fan peng.fan@nxp.com wrote:
> ...
> > +++ b/drivers/i2c/imx_lpi2c.c
> > @@ -471,6 +471,17 @@ static int imx_lpi2c_probe(struct udevice *bus)
> >  			dev_err(bus, "Failed to enable per clk\n");
> >  			return ret;
> >  		}
> > +
> > +		ret = clk_get_by_name(bus, "ipg", &i2c_bus->ipg_clk);
> > +		if (ret) {
> > +			dev_err(bus, "Failed to get ipg clk\n");
> > +			return ret;
> > +		}
> 
> imx8dx/imx8qxp device trees do not have ipg clock in I2C nodes, here probing
> will fail. Should we add I2C ipg clock to imx8x dts files?

The dts should be fixed. Seems upstream Linux also not have ipg clk, downstream has
it. Let's fix Linux first.

Thanks,
Peng.

> Or is it required only for imx8qm?
> 
> --
> Anatolij
Anatolij Gustschin July 30, 2019, 7:17 a.m. UTC | #3
On Tue, 30 Jul 2019 00:45:52 +0000
Peng Fan peng.fan@nxp.com wrote:
...
> The dts should be fixed. Seems upstream Linux also not have ipg clk, downstream has
> it. Let's fix Linux first.

OK, thanks!

--
Anatolij
diff mbox series

Patch

diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c
index 4586d4331f..2de99d019e 100644
--- a/drivers/i2c/imx_lpi2c.c
+++ b/drivers/i2c/imx_lpi2c.c
@@ -471,6 +471,17 @@  static int imx_lpi2c_probe(struct udevice *bus)
 			dev_err(bus, "Failed to enable per clk\n");
 			return ret;
 		}
+
+		ret = clk_get_by_name(bus, "ipg", &i2c_bus->ipg_clk);
+		if (ret) {
+			dev_err(bus, "Failed to get ipg clk\n");
+			return ret;
+		}
+		ret = clk_enable(&i2c_bus->ipg_clk);
+		if (ret) {
+			dev_err(bus, "Failed to enable ipg clk\n");
+			return ret;
+		}
 	} else {
 		/* To i.MX7ULP, only i2c4-7 can be handled by A7 core */
 		ret = enable_i2c_clk(1, bus->seq);
diff --git a/include/imx_lpi2c.h b/include/imx_lpi2c.h
index 2700e5f876..3ce9edaf10 100644
--- a/include/imx_lpi2c.h
+++ b/include/imx_lpi2c.h
@@ -18,6 +18,7 @@  struct imx_lpi2c_bus {
 	struct i2c_pads_info *pads_info;
 	struct udevice *bus;
 	struct clk per_clk;
+	struct clk ipg_clk;
 };
 
 struct imx_lpi2c_reg {