ARM: imx6q: Set enet tx reference clk from anatop to support 1588
[pandora-kernel.git] / arch / arm / mach-imx / mach-imx6q.c
index 045b3f6..38d6910 100644 (file)
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
-#include <linux/pinctrl/machine.h>
 #include <linux/phy.h>
+#include <linux/regmap.h>
 #include <linux/micrel_phy.h>
-#include <linux/mfd/anatop.h>
+#include <linux/mfd/syscon.h>
 #include <asm/cpuidle.h>
 #include <asm/smp_twd.h>
 #include <asm/hardware/cache-l2x0.h>
@@ -100,7 +100,6 @@ static void __init imx6q_sabrelite_cko1_setup(void)
        clk_set_parent(cko1_sel, ahb);
        rate = clk_round_rate(cko1, 16000000);
        clk_set_rate(cko1, rate);
-       clk_register_clkdev(cko1, NULL, "0-000a");
 put_clk:
        if (!IS_ERR(cko1_sel))
                clk_put(cko1_sel);
@@ -118,22 +117,20 @@ static void __init imx6q_sabrelite_init(void)
        imx6q_sabrelite_cko1_setup();
 }
 
+static void __init imx6q_1588_init(void)
+{
+       struct regmap *gpr;
+
+       gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
+       if (!IS_ERR(gpr))
+               regmap_update_bits(gpr, 0x4, 1 << 21, 1 << 21);
+       else
+               pr_err("failed to find fsl,imx6q-iomux-gpr regmap\n");
+
+}
 static void __init imx6q_usb_init(void)
 {
-       struct device_node *np;
-       struct platform_device *pdev = NULL;
-       struct anatop *adata = NULL;
-
-       np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");
-       if (np)
-               pdev = of_find_device_by_node(np);
-       if (pdev)
-               adata = platform_get_drvdata(pdev);
-       if (!adata) {
-               if (np)
-                       of_node_put(np);
-               return;
-       }
+       struct regmap *anatop;
 
 #define HW_ANADIG_USB1_CHRG_DETECT             0x000001b0
 #define HW_ANADIG_USB2_CHRG_DETECT             0x00000210
@@ -141,30 +138,25 @@ static void __init imx6q_usb_init(void)
 #define BM_ANADIG_USB_CHRG_DETECT_EN_B         0x00100000
 #define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B   0x00080000
 
-       /*
-        * The external charger detector needs to be disabled,
-        * or the signal at DP will be poor
-        */
-       anatop_write_reg(adata, HW_ANADIG_USB1_CHRG_DETECT,
-                       BM_ANADIG_USB_CHRG_DETECT_EN_B
-                       | BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B,
-                       ~0);
-       anatop_write_reg(adata, HW_ANADIG_USB2_CHRG_DETECT,
-                       BM_ANADIG_USB_CHRG_DETECT_EN_B |
-                       BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B,
-                       ~0);
-
-       of_node_put(np);
+       anatop = syscon_regmap_lookup_by_compatible("fsl,imx6q-anatop");
+       if (!IS_ERR(anatop)) {
+               /*
+                * The external charger detector needs to be disabled,
+                * or the signal at DP will be poor
+                */
+               regmap_write(anatop, HW_ANADIG_USB1_CHRG_DETECT,
+                               BM_ANADIG_USB_CHRG_DETECT_EN_B
+                               | BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B);
+               regmap_write(anatop, HW_ANADIG_USB2_CHRG_DETECT,
+                               BM_ANADIG_USB_CHRG_DETECT_EN_B |
+                               BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B);
+       } else {
+               pr_warn("failed to find fsl,imx6q-anatop regmap\n");
+       }
 }
 
 static void __init imx6q_init_machine(void)
 {
-       /*
-        * This should be removed when all imx6q boards have pinctrl
-        * states for devices defined in device tree.
-        */
-       pinctrl_provide_dummies();
-
        if (of_machine_is_compatible("fsl,imx6q-sabrelite"))
                imx6q_sabrelite_init();
 
@@ -172,6 +164,7 @@ static void __init imx6q_init_machine(void)
 
        imx6q_pm_init();
        imx6q_usb_init();
+       imx6q_1588_init();
 }
 
 static struct cpuidle_driver imx6q_cpuidle_driver = {
@@ -218,14 +211,12 @@ static struct sys_timer imx6q_timer = {
 };
 
 static const char *imx6q_dt_compat[] __initdata = {
-       "fsl,imx6q-arm2",
-       "fsl,imx6q-sabrelite",
-       "fsl,imx6q-sabresd",
        "fsl,imx6q",
        NULL,
 };
 
 DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)")
+       .smp            = smp_ops(imx_smp_ops),
        .map_io         = imx6q_map_io,
        .init_irq       = imx6q_init_irq,
        .handle_irq     = imx6q_handle_irq,