serial: 8250_of: Add reset support
authorJoel Stanley <joel@jms.id.au>
Mon, 29 May 2017 09:57:52 +0000 (19:27 +0930)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Jun 2017 09:48:52 +0000 (18:48 +0900)
This adds the hooks for an optional reset controller in the 8250 device
tree node.

Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/devicetree/bindings/serial/8250.txt
drivers/tty/serial/8250/8250_of.c

index 656733949309219b20c720bf705aafd638124931..419ff6c0a47f8c9e3d7cbbc1800864042e762ebb 100644 (file)
@@ -47,6 +47,7 @@ Optional properties:
   property.
 - tx-threshold: Specify the TX FIFO low water indication for parts with
   programmable TX FIFO thresholds.
+- resets : phandle + reset specifier pairs
 
 Note:
 * fsl,ns16550:
index 1cbadafc688957463bc7f50a3fa152606e1f8eec..0cf95fddccfcd98649a776903ecbe1a10363d6ec 100644 (file)
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/clk.h>
+#include <linux/reset.h>
 
 #include "8250.h"
 
 struct of_serial_info {
        struct clk *clk;
+       struct reset_control *rst;
        int type;
        int line;
 };
@@ -132,6 +134,13 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
                }
        }
 
+       info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);
+       if (IS_ERR(info->rst))
+               goto out;
+       ret = reset_control_deassert(info->rst);
+       if (ret)
+               goto out;
+
        port->type = type;
        port->uartclk = clk;
        port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
@@ -229,6 +238,7 @@ static int of_platform_serial_remove(struct platform_device *ofdev)
 
        serial8250_unregister_port(info->line);
 
+       reset_control_assert(info->rst);
        if (info->clk)
                clk_disable_unprepare(info->clk);
        kfree(info);