diff options
author | Richard Zhao <richard.zhao@freescale.com> | 2012-07-11 22:25:24 -0400 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2012-07-12 01:45:00 -0400 |
commit | 396bf1c24e13f45686118acd550dd63b23035b23 (patch) | |
tree | 12710a21887965fa3e71979867b2a514ac7791cc | |
parent | 7571d283c8cb11af7f3b28260e074217ded6c093 (diff) |
ARM: imx6q: disable usb charger detector
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>
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index b47e98b7d53..140f5501063 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/pinctrl/machine.h> | 24 | #include <linux/pinctrl/machine.h> |
25 | #include <linux/phy.h> | 25 | #include <linux/phy.h> |
26 | #include <linux/micrel_phy.h> | 26 | #include <linux/micrel_phy.h> |
27 | #include <linux/mfd/anatop.h> | ||
27 | #include <asm/smp_twd.h> | 28 | #include <asm/smp_twd.h> |
28 | #include <asm/hardware/cache-l2x0.h> | 29 | #include <asm/hardware/cache-l2x0.h> |
29 | #include <asm/hardware/gic.h> | 30 | #include <asm/hardware/gic.h> |
@@ -113,6 +114,45 @@ static void __init imx6q_sabrelite_init(void) | |||
113 | imx6q_sabrelite_cko1_setup(); | 114 | imx6q_sabrelite_cko1_setup(); |
114 | } | 115 | } |
115 | 116 | ||
117 | static void __init imx6q_usb_init(void) | ||
118 | { | ||
119 | struct device_node *np; | ||
120 | struct platform_device *pdev = NULL; | ||
121 | struct anatop *adata = NULL; | ||
122 | |||
123 | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop"); | ||
124 | if (np) | ||
125 | pdev = of_find_device_by_node(np); | ||
126 | if (pdev) | ||
127 | adata = platform_get_drvdata(pdev); | ||
128 | if (!adata) { | ||
129 | if (np) | ||
130 | of_node_put(np); | ||
131 | return; | ||
132 | } | ||
133 | |||
134 | #define HW_ANADIG_USB1_CHRG_DETECT 0x000001b0 | ||
135 | #define HW_ANADIG_USB2_CHRG_DETECT 0x00000210 | ||
136 | |||
137 | #define BM_ANADIG_USB_CHRG_DETECT_EN_B 0x00100000 | ||
138 | #define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B 0x00080000 | ||
139 | |||
140 | /* | ||
141 | * The external charger detector needs to be disabled, | ||
142 | * or the signal at DP will be poor | ||
143 | */ | ||
144 | anatop_write_reg(adata, HW_ANADIG_USB1_CHRG_DETECT, | ||
145 | BM_ANADIG_USB_CHRG_DETECT_EN_B | ||
146 | | BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B, | ||
147 | ~0); | ||
148 | anatop_write_reg(adata, HW_ANADIG_USB2_CHRG_DETECT, | ||
149 | BM_ANADIG_USB_CHRG_DETECT_EN_B | | ||
150 | BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B, | ||
151 | ~0); | ||
152 | |||
153 | of_node_put(np); | ||
154 | } | ||
155 | |||
116 | static void __init imx6q_init_machine(void) | 156 | static void __init imx6q_init_machine(void) |
117 | { | 157 | { |
118 | /* | 158 | /* |
@@ -127,6 +167,7 @@ static void __init imx6q_init_machine(void) | |||
127 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 167 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
128 | 168 | ||
129 | imx6q_pm_init(); | 169 | imx6q_pm_init(); |
170 | imx6q_usb_init(); | ||
130 | } | 171 | } |
131 | 172 | ||
132 | static void __init imx6q_map_io(void) | 173 | static void __init imx6q_map_io(void) |