ARM: imx6q: disable usb charger detector
authorRichard Zhao <richard.zhao@freescale.com>
Thu, 12 Jul 2012 02:25:24 +0000 (10:25 +0800)
committerShawn Guo <shawn.guo@linaro.org>
Thu, 12 Jul 2012 05:45:00 +0000 (13:45 +0800)
The external charger detector needs to be disabled,
or the signal at DP will be poor

Signed-off-by: Richard Zhao <richard.zhao@freescale.com>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
arch/arm/mach-imx/mach-imx6q.c

index b47e98b7d539fc9bce4cd4f0060004f086d528c4..140f55010630ffb8b17fd7ed858cbe5dff0f14f0 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/pinctrl/machine.h>
 #include <linux/phy.h>
 #include <linux/micrel_phy.h>
+#include <linux/mfd/anatop.h>
 #include <asm/smp_twd.h>
 #include <asm/hardware/cache-l2x0.h>
 #include <asm/hardware/gic.h>
@@ -113,6 +114,45 @@ static void __init imx6q_sabrelite_init(void)
        imx6q_sabrelite_cko1_setup();
 }
 
+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;
+       }
+
+#define HW_ANADIG_USB1_CHRG_DETECT             0x000001b0
+#define HW_ANADIG_USB2_CHRG_DETECT             0x00000210
+
+#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);
+}
+
 static void __init imx6q_init_machine(void)
 {
        /*
@@ -127,6 +167,7 @@ static void __init imx6q_init_machine(void)
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 
        imx6q_pm_init();
+       imx6q_usb_init();
 }
 
 static void __init imx6q_map_io(void)
This page took 0.03826 seconds and 5 git commands to generate.