From: Peng Fan <peng....@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....@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);

-- 
2.35.3

Reply via email to