]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/clk/imx/clk.c
Merge remote-tracking branch 'h8300/h8300-next'
[karo-tx-linux.git] / drivers / clk / imx / clk.c
index df12b53071752955d533f20391d1a26a2a4dcd1e..a634b1185be38a1b5cd34dc93c23983a37448f0c 100644 (file)
@@ -73,3 +73,41 @@ void imx_cscmr1_fixup(u32 *val)
        *val ^= CSCMR1_FIXUP;
        return;
 }
+
+static int imx_keep_uart_clocks __initdata;
+static struct clk ** const *imx_uart_clocks __initdata;
+
+static int __init imx_keep_uart_clocks_param(char *str)
+{
+       imx_keep_uart_clocks = 1;
+
+       return 0;
+}
+__setup_param("earlycon", imx_keep_uart_earlycon,
+             imx_keep_uart_clocks_param, 0);
+__setup_param("earlyprintk", imx_keep_uart_earlyprintk,
+             imx_keep_uart_clocks_param, 0);
+
+void __init imx_register_uart_clocks(struct clk ** const clks[])
+{
+       if (imx_keep_uart_clocks) {
+               int i;
+
+               imx_uart_clocks = clks;
+               for (i = 0; imx_uart_clocks[i]; i++)
+                       clk_prepare_enable(*imx_uart_clocks[i]);
+       }
+}
+
+static int __init imx_clk_disable_uart(void)
+{
+       if (imx_keep_uart_clocks && imx_uart_clocks) {
+               int i;
+
+               for (i = 0; imx_uart_clocks[i]; i++)
+                       clk_disable_unprepare(*imx_uart_clocks[i]);
+       }
+
+       return 0;
+}
+late_initcall_sync(imx_clk_disable_uart);