]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/serial/serial_bcm283x_mu.c
dm: core: Replace of_offset with accessor
[people/ms/u-boot.git] / drivers / serial / serial_bcm283x_mu.c
index e361909013cb5918615c316bdf4b746074c7cc9e..e7ed8993b847009795c1cb32788f826ff8e34b23 100644 (file)
@@ -59,7 +59,7 @@ static int bcm283x_mu_serial_setbrg(struct udevice *dev, int baudrate)
        struct bcm283x_mu_regs *regs = priv->regs;
        u32 divider;
 
-       if (plat->skip_init)
+       if (plat->disabled || plat->skip_init)
                return 0;
 
        divider = plat->clock / (baudrate * 8);
@@ -85,10 +85,14 @@ static int bcm283x_mu_serial_probe(struct udevice *dev)
 
 static int bcm283x_mu_serial_getc(struct udevice *dev)
 {
+       struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
        struct bcm283x_mu_priv *priv = dev_get_priv(dev);
        struct bcm283x_mu_regs *regs = priv->regs;
        u32 data;
 
+       if (plat->disabled)
+               return -EAGAIN;
+
        /* Wait until there is data in the FIFO */
        if (!(readl(&regs->lsr) & BCM283X_MU_LSR_RX_READY))
                return -EAGAIN;
@@ -100,9 +104,13 @@ static int bcm283x_mu_serial_getc(struct udevice *dev)
 
 static int bcm283x_mu_serial_putc(struct udevice *dev, const char data)
 {
+       struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
        struct bcm283x_mu_priv *priv = dev_get_priv(dev);
        struct bcm283x_mu_regs *regs = priv->regs;
 
+       if (plat->disabled)
+               return 0;
+
        /* Wait until there is space in the FIFO */
        if (!(readl(&regs->lsr) & BCM283X_MU_LSR_TX_EMPTY))
                return -EAGAIN;
@@ -115,9 +123,15 @@ static int bcm283x_mu_serial_putc(struct udevice *dev, const char data)
 
 static int bcm283x_mu_serial_pending(struct udevice *dev, bool input)
 {
+       struct bcm283x_mu_serial_platdata *plat = dev_get_platdata(dev);
        struct bcm283x_mu_priv *priv = dev_get_priv(dev);
        struct bcm283x_mu_regs *regs = priv->regs;
-       unsigned int lsr = readl(&regs->lsr);
+       unsigned int lsr;
+
+       if (plat->disabled)
+               return 0;
+
+       lsr = readl(&regs->lsr);
 
        if (input) {
                WATCHDOG_RESET();
@@ -150,8 +164,9 @@ static int bcm283x_mu_serial_ofdata_to_platdata(struct udevice *dev)
                return -EINVAL;
 
        plat->base = addr;
-       plat->clock = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1);
-       plat->skip_init = fdtdec_get_bool(gd->fdt_blob, dev->of_offset,
+       plat->clock = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "clock",
+                                    1);
+       plat->skip_init = fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
                                          "skip-init");
        plat->disabled = false;
        return 0;