diff options
author | Peng Fan <peng.fan@nxp.com> | 2024-04-12 22:24:52 +0800 |
---|---|---|
committer | Fabio Estevam <festevam@gmail.com> | 2024-04-15 08:09:31 -0300 |
commit | 1e635a319d1cd45f1bd1b7d1b9ad2b7e2969a6b4 (patch) | |
tree | 680845461a03d67d85690c49756a5529db120e81 | |
parent | 51cfa66f2c4a2a57112d689f1f452e07be2dda21 (diff) | |
download | u-boot-1e635a319d1cd45f1bd1b7d1b9ad2b7e2969a6b4.zip u-boot-1e635a319d1cd45f1bd1b7d1b9ad2b7e2969a6b4.tar.gz u-boot-1e635a319d1cd45f1bd1b7d1b9ad2b7e2969a6b4.tar.bz2 |
serial: lpuart: use ipg clk for i.MX7ULP
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>
-rw-r--r-- | drivers/serial/serial_lpuart.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index ce08a6b..3f2be72 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -109,28 +109,35 @@ u32 __weak get_lpuart_clk(void) } #if CONFIG_IS_ENABLED(CLK) -static int get_lpuart_clk_rate(struct udevice *dev, u32 *clk) +static int get_lpuart_clk_rate(struct udevice *dev, u32 *clk_rate) { - struct clk per_clk; + struct lpuart_serial_plat *plat = dev_get_plat(dev); + struct clk clk; ulong rate; int ret; + char *name; - ret = clk_get_by_name(dev, "per", &per_clk); + if (plat->devtype == DEV_MX7ULP) + name = "ipg"; + else + name = "per"; + + ret = clk_get_by_name(dev, name, &clk); if (ret) { - dev_err(dev, "Failed to get per clk: %d\n", ret); + dev_err(dev, "Failed to get clk: %d\n", ret); return ret; } - rate = clk_get_rate(&per_clk); + rate = clk_get_rate(&clk); if ((long)rate <= 0) { - dev_err(dev, "Failed to get per clk rate: %ld\n", (long)rate); + dev_err(dev, "Failed to get clk rate: %ld\n", (long)rate); return ret; } - *clk = rate; + *clk_rate = rate; return 0; } #else -static inline int get_lpuart_clk_rate(struct udevice *dev, u32 *clk) +static inline int get_lpuart_clk_rate(struct udevice *dev, u32 *clk_rate) { return -ENOSYS; } #endif @@ -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); |