]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
serial: xuartps: Enable clocks in the pm disable case also
authorShubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Thu, 6 Apr 2017 06:57:41 +0000 (12:27 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 8 Apr 2017 16:54:07 +0000 (18:54 +0200)
When Power management is disabled then the clocks are not getting
enabled. This patch enables it for the !PM case also.
While at it also pm_runtime_set_active is called before
calling pm_runtime_enable.

Reported-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/xilinx_uartps.c

index a83033774382990b8a2948f1ce78e0e87055c769..c0539950f8d7f29725dd4433e6905d5e3d07b1c7 100644 (file)
@@ -1521,12 +1521,12 @@ static int cdns_uart_probe(struct platform_device *pdev)
                return PTR_ERR(cdns_uart_data->uartclk);
        }
 
-       rc = clk_prepare(cdns_uart_data->pclk);
+       rc = clk_prepare_enable(cdns_uart_data->pclk);
        if (rc) {
                dev_err(&pdev->dev, "Unable to enable pclk clock.\n");
                return rc;
        }
-       rc = clk_prepare(cdns_uart_data->uartclk);
+       rc = clk_prepare_enable(cdns_uart_data->uartclk);
        if (rc) {
                dev_err(&pdev->dev, "Unable to enable device clock.\n");
                goto err_out_clk_dis_pclk;
@@ -1580,8 +1580,8 @@ static int cdns_uart_probe(struct platform_device *pdev)
 
        pm_runtime_use_autosuspend(&pdev->dev);
        pm_runtime_set_autosuspend_delay(&pdev->dev, UART_AUTOSUSPEND_TIMEOUT);
-       pm_runtime_enable(&pdev->dev);
        pm_runtime_set_active(&pdev->dev);
+       pm_runtime_enable(&pdev->dev);
 
        rc = uart_add_one_port(&cdns_uart_uart_driver, port);
        if (rc) {
@@ -1601,9 +1601,9 @@ err_out_clk_disable:
        pm_runtime_disable(&pdev->dev);
        pm_runtime_set_suspended(&pdev->dev);
        pm_runtime_dont_use_autosuspend(&pdev->dev);
-       clk_unprepare(cdns_uart_data->uartclk);
+       clk_disable_unprepare(cdns_uart_data->uartclk);
 err_out_clk_dis_pclk:
-       clk_unprepare(cdns_uart_data->pclk);
+       clk_disable_unprepare(cdns_uart_data->pclk);
 
        return rc;
 }
@@ -1627,8 +1627,8 @@ static int cdns_uart_remove(struct platform_device *pdev)
 #endif
        rc = uart_remove_one_port(&cdns_uart_uart_driver, port);
        port->mapbase = 0;
-       clk_unprepare(cdns_uart_data->uartclk);
-       clk_unprepare(cdns_uart_data->pclk);
+       clk_disable_unprepare(cdns_uart_data->uartclk);
+       clk_disable_unprepare(cdns_uart_data->pclk);
        pm_runtime_disable(&pdev->dev);
        pm_runtime_set_suspended(&pdev->dev);
        pm_runtime_dont_use_autosuspend(&pdev->dev);