
From: Peng Fan peng.fan@nxp.com
To i.MX7ULP compatible lpuart, there is only ipg clk, no per clk. So add a devtype check for i.MX7ULP.
Signed-off-by: Peng Fan peng.fan@nxp.com --- drivers/serial/serial_lpuart.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index ce08a6b4486..891352293f9 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -111,11 +111,18 @@ u32 __weak get_lpuart_clk(void) #if CONFIG_IS_ENABLED(CLK) static int get_lpuart_clk_rate(struct udevice *dev, u32 *clk) { + struct lpuart_serial_plat *plat = dev_get_plat(dev); struct clk per_clk; ulong rate; int ret; + char *name; + + if (plat->devtype == DEV_MX7ULP) + name = "ipg"; + else + name = "per";
- ret = clk_get_by_name(dev, "per", &per_clk); + ret = clk_get_by_name(dev, name, &per_clk); if (ret) { dev_err(dev, "Failed to get per clk: %d\n", ret); return ret; @@ -479,19 +486,22 @@ static int lpuart_serial_pending(struct udevice *dev, bool input) static int lpuart_serial_probe(struct udevice *dev) { #if CONFIG_IS_ENABLED(CLK) + struct lpuart_serial_plat *plat = dev_get_plat(dev); struct clk per_clk; struct clk ipg_clk; int ret;
- ret = clk_get_by_name(dev, "per", &per_clk); - if (!ret) { - ret = clk_enable(&per_clk); - if (ret) { - dev_err(dev, "Failed to enable per clk: %d\n", ret); - return ret; + if (plat->devtype != DEV_MX7ULP) { + ret = clk_get_by_name(dev, "per", &per_clk); + if (!ret) { + ret = clk_enable(&per_clk); + if (ret) { + dev_err(dev, "Failed to enable per clk: %d\n", ret); + return ret; + } + } else { + debug("%s: Failed to get per clk: %d\n", __func__, ret); } - } else { - debug("%s: Failed to get per clk: %d\n", __func__, ret); }
ret = clk_get_by_name(dev, "ipg", &ipg_clk);