]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-imx/mach-imx6q.c
Merge tag 'mfd-3.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
[~andy/linux] / arch / arm / mach-imx / mach-imx6q.c
index 36979d3dfe341aa2cc3d41d0b1742bd1ef261a1a..47c91f7185d2fb7cdef048388e5cf82620e68a87 100644 (file)
@@ -23,8 +23,9 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.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>
@@ -118,20 +119,7 @@ static void __init imx6q_sabrelite_init(void)
 
 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
@@ -139,20 +127,21 @@ 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)