]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - arch/arm/mach-tegra/usb_phy.c
arm: tegra: usb: Fix compiler warnings
[linux-2.6.git] / arch / arm / mach-tegra / usb_phy.c
1 /*
2  * arch/arm/mach-tegra/usb_phy.c
3  *
4  * Copyright (C) 2010 Google, Inc.
5  * Copyright (C) 2010 - 2011 NVIDIA Corporation
6  *
7  * Author:
8  *      Erik Gilling <konkers@google.com>
9  *      Benoit Goby <benoit@android.com>
10  *
11  * This software is licensed under the terms of the GNU General Public
12  * License version 2, as published by the Free Software Foundation, and
13  * may be copied, distributed, and modified under those terms.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  */
21
22 #include <linux/resource.h>
23 #include <linux/delay.h>
24 #include <linux/interrupt.h>
25 #include <linux/slab.h>
26 #include <linux/err.h>
27 #include <linux/platform_device.h>
28 #include <linux/io.h>
29 #include <linux/gpio.h>
30 #include <linux/usb/otg.h>
31 #include <linux/usb/ulpi.h>
32 #include <asm/mach-types.h>
33 #include <mach/gpio-tegra.h>
34 #include <mach/usb_phy.h>
35 #include <mach/iomap.h>
36 #include <mach/pinmux.h>
37 #include <mach/pinmux-tegra20.h>
38
39 #include "fuse.h"
40
41 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
42 #define USB_USBCMD              0x140
43 #define   USB_USBCMD_RS         (1 << 0)
44
45 #define USB_USBSTS              0x144
46 #define   USB_USBSTS_PCI        (1 << 2)
47 #define   USB_USBSTS_HCH        (1 << 12)
48
49 #define USB_TXFILLTUNING        0x164
50 #define USB_FIFO_TXFILL_THRES(x)   (((x) & 0x1f) << 16)
51 #define USB_FIFO_TXFILL_MASK    0x1f0000
52
53 #define ULPI_VIEWPORT           0x170
54 #define   ULPI_WAKEUP           (1 << 31)
55 #define   ULPI_RUN              (1 << 30)
56 #define   ULPI_RD_WR            (1 << 29)
57
58 #define USB_PORTSC1             0x184
59 #define   USB_PORTSC1_PTS(x)    (((x) & 0x3) << 30)
60 #define   USB_PORTSC1_PSPD(x)   (((x) & 0x3) << 26)
61 #define   USB_PORTSC1_PHCD      (1 << 23)
62 #define   USB_PORTSC1_WKOC      (1 << 22)
63 #define   USB_PORTSC1_WKDS      (1 << 21)
64 #define   USB_PORTSC1_WKCN      (1 << 20)
65 #define   USB_PORTSC1_PTC(x)    (((x) & 0xf) << 16)
66 #define   USB_PORTSC1_PP        (1 << 12)
67 #define   USB_PORTSC1_LS(x)     (((x) & 0x3) << 10)
68 #define   USB_PORTSC1_SUSP      (1 << 7)
69 #define   USB_PORTSC1_PE        (1 << 2)
70 #define   USB_PORTSC1_CCS       (1 << 0)
71
72 #define USB_SUSP_CTRL           0x400
73 #define   USB_WAKE_ON_CNNT_EN_DEV       (1 << 3)
74 #define   USB_WAKE_ON_DISCON_EN_DEV     (1 << 4)
75 #define   USB_SUSP_CLR          (1 << 5)
76 #define   USB_CLKEN             (1 << 6)
77 #define   USB_PHY_CLK_VALID     (1 << 7)
78 #define   UTMIP_RESET           (1 << 11)
79 #define   UHSIC_RESET           (1 << 11)
80 #define   UTMIP_PHY_ENABLE      (1 << 12)
81 #define   UHSIC_PHY_ENABLE      (1 << 12)
82 #define   ULPI_PHY_ENABLE       (1 << 13)
83 #define   USB_SUSP_SET          (1 << 14)
84 #define   USB_WAKEUP_DEBOUNCE_COUNT(x)  (((x) & 0x7) << 16)
85
86 #define USB1_LEGACY_CTRL        0x410
87 #define   USB1_NO_LEGACY_MODE                   (1 << 0)
88 #define   USB1_VBUS_SENSE_CTL_MASK              (3 << 1)
89 #define   USB1_VBUS_SENSE_CTL_VBUS_WAKEUP       (0 << 1)
90 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD_OR_VBUS_WAKEUP \
91                                                 (1 << 1)
92 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD       (2 << 1)
93 #define   USB1_VBUS_SENSE_CTL_A_SESS_VLD        (3 << 1)
94
95
96 #define UTMIP_PLL_CFG1          0x804
97 #define   UTMIP_XTAL_FREQ_COUNT(x)              (((x) & 0xfff) << 0)
98 #define   UTMIP_PLLU_ENABLE_DLY_COUNT(x)        (((x) & 0x1f) << 27)
99
100 #define UTMIP_XCVR_CFG0         0x808
101 #define   UTMIP_XCVR_SETUP(x)                   (((x) & 0xf) << 0)
102 #define   UTMIP_XCVR_LSRSLEW(x)                 (((x) & 0x3) << 8)
103 #define   UTMIP_XCVR_LSFSLEW(x)                 (((x) & 0x3) << 10)
104 #define   UTMIP_FORCE_PD_POWERDOWN              (1 << 14)
105 #define   UTMIP_FORCE_PD2_POWERDOWN             (1 << 16)
106 #define   UTMIP_FORCE_PDZI_POWERDOWN            (1 << 18)
107 #define   UTMIP_XCVR_LSBIAS_SEL                 (1 << 21)
108 #define   UTMIP_XCVR_HSSLEW_MSB(x)              (((x) & 0x7f) << 25)
109
110 #define UTMIP_BIAS_CFG0         0x80c
111 #define   UTMIP_OTGPD                   (1 << 11)
112 #define   UTMIP_BIASPD                  (1 << 10)
113
114 #define UTMIP_HSRX_CFG0         0x810
115 #define   UTMIP_ELASTIC_LIMIT(x)        (((x) & 0x1f) << 10)
116 #define   UTMIP_IDLE_WAIT(x)            (((x) & 0x1f) << 15)
117
118 #define UTMIP_HSRX_CFG1         0x814
119 #define   UTMIP_HS_SYNC_START_DLY(x)    (((x) & 0x1f) << 1)
120
121 #define UTMIP_TX_CFG0           0x820
122 #define   UTMIP_FS_PREABMLE_J           (1 << 19)
123 #define   UTMIP_HS_DISCON_DISABLE       (1 << 8)
124
125 #define UTMIP_MISC_CFG0         0x824
126 #define   UTMIP_DPDM_OBSERVE            (1 << 26)
127 #define   UTMIP_DPDM_OBSERVE_SEL(x)     (((x) & 0xf) << 27)
128 #define   UTMIP_DPDM_OBSERVE_SEL_FS_J   UTMIP_DPDM_OBSERVE_SEL(0xf)
129 #define   UTMIP_DPDM_OBSERVE_SEL_FS_K   UTMIP_DPDM_OBSERVE_SEL(0xe)
130 #define   UTMIP_DPDM_OBSERVE_SEL_FS_SE1 UTMIP_DPDM_OBSERVE_SEL(0xd)
131 #define   UTMIP_DPDM_OBSERVE_SEL_FS_SE0 UTMIP_DPDM_OBSERVE_SEL(0xc)
132 #define   UTMIP_SUSPEND_EXIT_ON_EDGE    (1 << 22)
133
134 #define UTMIP_MISC_CFG1         0x828
135 #define   UTMIP_PLL_ACTIVE_DLY_COUNT(x) (((x) & 0x1f) << 18)
136 #define   UTMIP_PLLU_STABLE_COUNT(x)    (((x) & 0xfff) << 6)
137
138 #define UTMIP_DEBOUNCE_CFG0     0x82c
139 #define   UTMIP_BIAS_DEBOUNCE_A(x)      (((x) & 0xffff) << 0)
140
141 #define UTMIP_BAT_CHRG_CFG0     0x830
142 #define   UTMIP_PD_CHRG                 (1 << 0)
143
144 #define UTMIP_XCVR_CFG1         0x838
145 #define   UTMIP_FORCE_PDDISC_POWERDOWN  (1 << 0)
146 #define   UTMIP_FORCE_PDCHRP_POWERDOWN  (1 << 2)
147 #define   UTMIP_FORCE_PDDR_POWERDOWN    (1 << 4)
148 #define   UTMIP_XCVR_TERM_RANGE_ADJ(x)  (((x) & 0xf) << 18)
149
150 #define UTMIP_BIAS_CFG1         0x83c
151 #define   UTMIP_BIAS_PDTRK_COUNT(x)     (((x) & 0x1f) << 3)
152
153 #define UHSIC_PLL_CFG1                          0x804
154 #define   UHSIC_XTAL_FREQ_COUNT(x)              (((x) & 0xfff) << 0)
155 #define   UHSIC_PLLU_ENABLE_DLY_COUNT(x)        (((x) & 0x1f) << 14)
156
157 #define UHSIC_HSRX_CFG0                         0x808
158 #define   UHSIC_ELASTIC_UNDERRUN_LIMIT(x)       (((x) & 0x1f) << 2)
159 #define   UHSIC_ELASTIC_OVERRUN_LIMIT(x)        (((x) & 0x1f) << 8)
160 #define   UHSIC_IDLE_WAIT(x)                    (((x) & 0x1f) << 13)
161
162 #define UHSIC_HSRX_CFG1                         0x80c
163 #define   UHSIC_HS_SYNC_START_DLY(x)            (((x) & 0x1f) << 1)
164
165 #define UHSIC_MISC_CFG0                         0x814
166 #define   UHSIC_SUSPEND_EXIT_ON_EDGE            (1 << 7)
167 #define   UHSIC_DETECT_SHORT_CONNECT            (1 << 8)
168 #define   UHSIC_FORCE_XCVR_MODE                 (1 << 15)
169
170 #define UHSIC_MISC_CFG1                         0X818
171 #define   UHSIC_PLLU_STABLE_COUNT(x)            (((x) & 0xfff) << 2)
172
173 #define UHSIC_PADS_CFG0                         0x81c
174 #define   UHSIC_TX_RTUNEN                       0xf000
175 #define   UHSIC_TX_RTUNE(x)                     (((x) & 0xf) << 12)
176
177 #define UHSIC_PADS_CFG1                         0x820
178 #define   UHSIC_PD_BG                           (1 << 2)
179 #define   UHSIC_PD_TX                           (1 << 3)
180 #define   UHSIC_PD_TRK                          (1 << 4)
181 #define   UHSIC_PD_RX                           (1 << 5)
182 #define   UHSIC_PD_ZI                           (1 << 6)
183 #define   UHSIC_RX_SEL                          (1 << 7)
184 #define   UHSIC_RPD_DATA                        (1 << 9)
185 #define   UHSIC_RPD_STROBE                      (1 << 10)
186 #define   UHSIC_RPU_DATA                        (1 << 11)
187 #define   UHSIC_RPU_STROBE                      (1 << 12)
188
189 #define UHSIC_STAT_CFG0                         0x828
190 #define   UHSIC_CONNECT_DETECT                  (1 << 0)
191
192
193 #else   /* T30 definitions */
194
195 #define USB_USBCMD              0x130
196 #define   USB_USBCMD_RS         (1 << 0)
197
198 #define USB_USBSTS              0x134
199 #define   USB_USBSTS_PCI        (1 << 2)
200 #define   USB_USBSTS_HCH        (1 << 12)
201
202 #define ULPI_VIEWPORT           0x160
203
204 #define USB_PORTSC1             0x174
205 #define   USB_PORTSC1_WKOC      (1 << 22)
206 #define   USB_PORTSC1_WKDS      (1 << 21)
207 #define   USB_PORTSC1_WKCN      (1 << 20)
208 #define   USB_PORTSC1_PTC(x)    (((x) & 0xf) << 16)
209 #define   USB_PORTSC1_PP        (1 << 12)
210 #define   USB_PORTSC1_SUSP      (1 << 7)
211 #define   USB_PORTSC1_PE        (1 << 2)
212 #define   USB_PORTSC1_CCS       (1 << 0)
213
214 #define USB_SUSP_CTRL           0x400
215 #define   USB_WAKE_ON_CNNT_EN_DEV       (1 << 3)
216 #define   USB_WAKE_ON_DISCON_EN_DEV     (1 << 4)
217 #define   USB_SUSP_CLR                  (1 << 5)
218 #define   USB_PHY_CLK_VALID             (1 << 7)
219
220 #define   UTMIP_RESET                   (1 << 11)
221 #define   UTMIP_PHY_ENABLE              (1 << 12)
222 #define   ULPI_PHY_ENABLE               (1 << 13)
223 #define   UHSIC_RESET                   (1 << 14)
224
225 #define   USB_WAKEUP_DEBOUNCE_COUNT(x)  (((x) & 0x7) << 16)
226 #define   UHSIC_PHY_ENABLE              (1 << 19)
227 #define   ULPIS2S_SLV0_RESET            (1 << 20)
228 #define   ULPIS2S_SLV1_RESET            (1 << 21)
229 #define   ULPIS2S_LINE_RESET            (1 << 22)
230 #define   ULPI_PADS_RESET               (1 << 23)
231 #define   ULPI_PADS_CLKEN_RESET         (1 << 24)
232
233 #define USB1_LEGACY_CTRL        0x410
234 #define   USB1_NO_LEGACY_MODE                   (1 << 0)
235 #define   USB1_VBUS_SENSE_CTL_MASK              (3 << 1)
236 #define   USB1_VBUS_SENSE_CTL_VBUS_WAKEUP       (0 << 1)
237 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD_OR_VBUS_WAKEUP \
238                                                 (1 << 1)
239 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD       (2 << 1)
240 #define   USB1_VBUS_SENSE_CTL_A_SESS_VLD        (3 << 1)
241
242 #define UTMIP_PLL_CFG1          0x804
243 #define   UTMIP_XTAL_FREQ_COUNT(x)              (((x) & 0xfff) << 0)
244 #define   UTMIP_PLLU_ENABLE_DLY_COUNT(x)        (((x) & 0x1f) << 27)
245
246 #define UTMIP_XCVR_CFG0         0x808
247 #define   UTMIP_XCVR_SETUP(x)                   (((x) & 0xf) << 0)
248 #define   UTMIP_XCVR_LSRSLEW(x)                 (((x) & 0x3) << 8)
249 #define   UTMIP_XCVR_LSFSLEW(x)                 (((x) & 0x3) << 10)
250 #define   UTMIP_FORCE_PD_POWERDOWN              (1 << 14)
251 #define   UTMIP_FORCE_PD2_POWERDOWN             (1 << 16)
252 #define   UTMIP_FORCE_PDZI_POWERDOWN            (1 << 18)
253 #define   UTMIP_XCVR_HSSLEW_MSB(x)              (((x) & 0x7f) << 25)
254
255 #define UTMIP_BIAS_CFG0         0x80c
256 #define   UTMIP_OTGPD                   (1 << 11)
257 #define   UTMIP_BIASPD                  (1 << 10)
258
259 #define UTMIP_HSRX_CFG0         0x810
260 #define   UTMIP_ELASTIC_LIMIT(x)        (((x) & 0x1f) << 10)
261 #define   UTMIP_IDLE_WAIT(x)            (((x) & 0x1f) << 15)
262
263 #define UTMIP_HSRX_CFG1         0x814
264 #define   UTMIP_HS_SYNC_START_DLY(x)    (((x) & 0x1f) << 1)
265
266 #define UTMIP_TX_CFG0           0x820
267 #define   UTMIP_FS_PREABMLE_J           (1 << 19)
268 #define   UTMIP_HS_DISCON_DISABLE       (1 << 8)
269
270 #define UTMIP_MISC_CFG0         0x824
271 #define   UTMIP_SUSPEND_EXIT_ON_EDGE    (1 << 22)
272
273 #define UTMIP_MISC_CFG1         0x828
274 #define   UTMIP_PLL_ACTIVE_DLY_COUNT(x) (((x) & 0x1f) << 18)
275 #define   UTMIP_PLLU_STABLE_COUNT(x)    (((x) & 0xfff) << 6)
276
277 #define UTMIP_DEBOUNCE_CFG0     0x82c
278 #define   UTMIP_BIAS_DEBOUNCE_A(x)      (((x) & 0xffff) << 0)
279
280 #define UTMIP_BAT_CHRG_CFG0     0x830
281 #define   UTMIP_PD_CHRG                 (1 << 0)
282
283 #define UTMIP_XCVR_CFG1         0x838
284 #define   UTMIP_FORCE_PDDISC_POWERDOWN  (1 << 0)
285 #define   UTMIP_FORCE_PDCHRP_POWERDOWN  (1 << 2)
286 #define   UTMIP_FORCE_PDDR_POWERDOWN    (1 << 4)
287 #define   UTMIP_XCVR_TERM_RANGE_ADJ(x)  (((x) & 0xf) << 18)
288
289 #define UTMIP_BIAS_CFG1         0x83c
290 #define   UTMIP_BIAS_PDTRK_COUNT(x)     (((x) & 0x1f) << 3)
291
292 #define HOSTPC1_DEVLC           0x1b4
293 #define   HOSTPC1_DEVLC_PHCD            (1 << 22)
294 #define   HOSTPC1_DEVLC_PTS(x)          (((x) & 0x7) << 29)
295 #define   HOSTPC1_DEVLC_PTS_MASK        7
296 #define   HOSTPC1_DEVLC_PTS_HSIC        4
297 #define   HOSTPC1_DEVLC_STS             (1 << 28)
298 #define   HOSTPC1_DEVLC_PSPD(x)         (((x) & 0x3) << 25)
299 #define   HOSTPC1_DEVLC_PSPD_MASK       3
300 #define   HOSTPC1_DEVLC_PSPD_HIGH_SPEED 2
301
302 #define TEGRA_USB_USBMODE_REG_OFFSET    0x1f8
303 #define   TEGRA_USB_USBMODE_HOST                (3 << 0)
304
305 #define TEGRA_PMC_USB_AO                0xf0
306 #define   TEGRA_PMC_USB_AO_VBUS_WAKEUP_PD_P0    (1 << 2)
307 #define   TEGRA_PMC_USB_AO_ID_PD_P0             (1 << 3)
308
309 #define ICUSB_CTRL              0x15c
310
311 #define UHSIC_PLL_CFG1                          0xc04
312 #define   UHSIC_XTAL_FREQ_COUNT(x)              (((x) & 0xfff) << 0)
313 #define   UHSIC_PLLU_ENABLE_DLY_COUNT(x)        (((x) & 0x1f) << 14)
314
315 #define UHSIC_HSRX_CFG0                         0xc08
316 #define   UHSIC_ELASTIC_UNDERRUN_LIMIT(x)       (((x) & 0x1f) << 2)
317 #define   UHSIC_ELASTIC_OVERRUN_LIMIT(x)        (((x) & 0x1f) << 8)
318 #define   UHSIC_IDLE_WAIT(x)                    (((x) & 0x1f) << 13)
319
320 #define UHSIC_HSRX_CFG1                         0xc0c
321 #define   UHSIC_HS_SYNC_START_DLY(x)            (((x) & 0x1f) << 1)
322
323 #define UHSIC_MISC_CFG0                         0xc14
324 #define   UHSIC_SUSPEND_EXIT_ON_EDGE            (1 << 7)
325 #define   UHSIC_DETECT_SHORT_CONNECT            (1 << 8)
326 #define   UHSIC_FORCE_XCVR_MODE                 (1 << 15)
327
328 #define UHSIC_MISC_CFG1                         0xc18
329 #define   UHSIC_PLLU_STABLE_COUNT(x)            (((x) & 0xfff) << 2)
330
331 #define UHSIC_PADS_CFG0                         0xc1c
332 #define   UHSIC_TX_RTUNEN                       0xf000
333 #define   UHSIC_TX_RTUNE(x)                     (((x) & 0xf) << 12)
334
335 #define UHSIC_PADS_CFG1                         0xc20
336 #define   UHSIC_PD_BG                           (1 << 2)
337 #define   UHSIC_PD_TX                           (1 << 3)
338 #define   UHSIC_PD_TRK                          (1 << 4)
339 #define   UHSIC_PD_RX                           (1 << 5)
340 #define   UHSIC_PD_ZI                           (1 << 6)
341 #define   UHSIC_RX_SEL                          (1 << 7)
342 #define   UHSIC_RPD_DATA                        (1 << 9)
343 #define   UHSIC_RPD_STROBE                      (1 << 10)
344 #define   UHSIC_RPU_DATA                        (1 << 11)
345 #define   UHSIC_RPU_STROBE                      (1 << 12)
346
347 #define UHSIC_STAT_CFG0                         0xc28
348 #define   UHSIC_CONNECT_DETECT                  (1 << 0)
349 #endif
350
351 /* Common registers */
352
353 #define ULPIS2S_CTRL            0x418
354 #define   ULPIS2S_ENA                   (1 << 0)
355 #define   ULPIS2S_SUPPORT_DISCONNECT    (1 << 2)
356 #define   ULPIS2S_PLLU_MASTER_BLASTER60 (1 << 3)
357 #define   ULPIS2S_SPARE(x)              (((x) & 0xF) << 8)
358 #define   ULPIS2S_FORCE_ULPI_CLK_OUT    (1 << 12)
359 #define   ULPIS2S_DISCON_DONT_CHECK_SE0 (1 << 13)
360 #define   ULPIS2S_SUPPORT_HS_KEEP_ALIVE (1 << 14)
361 #define   ULPIS2S_DISABLE_STP_PU        (1 << 15)
362 #define   ULPIS2S_SLV0_CLAMP_XMIT       (1 << 16)
363
364
365 #define ULPI_TIMING_CTRL_0      0x424
366 #define   ULPI_CLOCK_OUT_DELAY(x)       ((x) & 0x1F)
367 #define   ULPI_OUTPUT_PINMUX_BYP        (1 << 10)
368 #define   ULPI_CLKOUT_PINMUX_BYP        (1 << 11)
369 #define   ULPI_SHADOW_CLK_LOOPBACK_EN   (1 << 12)
370 #define   ULPI_SHADOW_CLK_SEL           (1 << 13)
371 #define   ULPI_CORE_CLK_SEL             (1 << 14)
372 #define   ULPI_SHADOW_CLK_DELAY(x)      (((x) & 0x1F) << 16)
373 #define   ULPI_LBK_PAD_EN               (1 << 26)
374 #define   ULPI_LBK_PAD_E_INPUT_OR       (1 << 27)
375 #define   ULPI_CLK_OUT_ENA              (1 << 28)
376 #define   ULPI_CLK_PADOUT_ENA           (1 << 29)
377
378 #define ULPI_TIMING_CTRL_1      0x428
379 #define   ULPI_DATA_TRIMMER_LOAD        (1 << 0)
380 #define   ULPI_DATA_TRIMMER_SEL(x)      (((x) & 0x7) << 1)
381 #define   ULPI_STPDIRNXT_TRIMMER_LOAD   (1 << 16)
382 #define   ULPI_STPDIRNXT_TRIMMER_SEL(x) (((x) & 0x7) << 17)
383 #define   ULPI_DIR_TRIMMER_LOAD         (1 << 24)
384 #define   ULPI_DIR_TRIMMER_SEL(x)       (((x) & 0x7) << 25)
385
386
387
388 #define UTMIP_SPARE_CFG0        0x834
389 #define   FUSE_SETUP_SEL                (1 << 3)
390
391 #define UHSIC_PLL_CFG0                          0x800
392
393 #define UHSIC_TX_CFG0                           0x810
394 #define   UHSIC_HS_POSTAMBLE_OUTPUT_ENABLE      (1 << 6)
395
396 #define UHSIC_CMD_CFG0                          0x824
397 #define   UHSIC_PRETEND_CONNECT_DETECT          (1 << 5)
398
399 #define UHSIC_SPARE_CFG0                        0x82c
400
401
402
403 static DEFINE_SPINLOCK(utmip_pad_lock);
404 static int utmip_pad_count;
405
406 struct tegra_xtal_freq {
407         int freq;
408         u8 enable_delay;
409         u8 stable_count;
410         u8 active_delay;
411         u16 xtal_freq_count;
412         u16 debounce;
413         u8 pdtrk_count;
414 };
415
416 static const struct tegra_xtal_freq tegra_freq_table[] = {
417         {
418                 .freq = 12000000,
419                 .enable_delay = 0x02,
420                 .stable_count = 0x2F,
421                 .active_delay = 0x04,
422                 .xtal_freq_count = 0x76,
423                 .debounce = 0x7530,
424                 .pdtrk_count = 5,
425         },
426         {
427                 .freq = 13000000,
428                 .enable_delay = 0x02,
429                 .stable_count = 0x33,
430                 .active_delay = 0x05,
431                 .xtal_freq_count = 0x7F,
432                 .debounce = 0x7EF4,
433                 .pdtrk_count = 5,
434         },
435         {
436                 .freq = 19200000,
437                 .enable_delay = 0x03,
438                 .stable_count = 0x4B,
439                 .active_delay = 0x06,
440                 .xtal_freq_count = 0xBB,
441                 .debounce = 0xBB80,
442                 .pdtrk_count = 7,
443         },
444         {
445                 .freq = 26000000,
446                 .enable_delay = 0x04,
447                 .stable_count = 0x66,
448                 .active_delay = 0x09,
449                 .xtal_freq_count = 0xFE,
450                 .debounce = 0xFDE8,
451                 .pdtrk_count = 9,
452         },
453 };
454
455 static const struct tegra_xtal_freq tegra_uhsic_freq_table[] = {
456         {
457                 .freq = 12000000,
458                 .enable_delay = 0x02,
459                 .stable_count = 0x2F,
460                 .active_delay = 0x0,
461                 .xtal_freq_count = 0x1CA,
462         },
463         {
464                 .freq = 13000000,
465                 .enable_delay = 0x02,
466                 .stable_count = 0x33,
467                 .active_delay = 0x0,
468                 .xtal_freq_count = 0x1F0,
469         },
470         {
471                 .freq = 19200000,
472                 .enable_delay = 0x03,
473                 .stable_count = 0x4B,
474                 .active_delay = 0x0,
475                 .xtal_freq_count = 0x2DD,
476         },
477         {
478                 .freq = 26000000,
479                 .enable_delay = 0x04,
480                 .stable_count = 0x66,
481                 .active_delay = 0x0,
482                 .xtal_freq_count = 0x3E0,
483         },
484 };
485
486 static struct tegra_utmip_config utmip_default[] = {
487         [0] = {
488                 .hssync_start_delay = 9,
489                 .idle_wait_delay = 17,
490                 .elastic_limit = 16,
491                 .term_range_adj = 6,
492                 .xcvr_setup = 9,
493                 .xcvr_lsfslew = 2,
494                 .xcvr_lsrslew = 2,
495         },
496         [2] = {
497                 .hssync_start_delay = 9,
498                 .idle_wait_delay = 17,
499                 .elastic_limit = 16,
500                 .term_range_adj = 6,
501                 .xcvr_setup = 9,
502                 .xcvr_lsfslew = 2,
503                 .xcvr_lsrslew = 2,
504         },
505 };
506
507 static struct tegra_uhsic_config uhsic_default = {
508         .sync_start_delay = 9,
509         .idle_wait_delay = 17,
510         .term_range_adj = 0,
511         .elastic_underrun_limit = 16,
512         .elastic_overrun_limit = 16,
513 };
514
515 struct usb_phy_plat_data usb_phy_data[] = {
516         { 0, 0, -1, NULL},
517         { 0, 0, -1, NULL},
518         { 0, 0, -1, NULL},
519 };
520
521 static int utmip_pad_open(struct tegra_usb_phy *phy)
522 {
523         phy->pad_clk = clk_get_sys("utmip-pad", NULL);
524         if (IS_ERR(phy->pad_clk)) {
525                 pr_err("%s: can't get utmip pad clock\n", __func__);
526                 return PTR_ERR(phy->pad_clk);
527         }
528
529         if (phy->instance == 0) {
530                 phy->pad_regs = phy->regs;
531         } else {
532                 phy->pad_regs = ioremap(TEGRA_USB_BASE, TEGRA_USB_SIZE);
533                 if (!phy->pad_regs) {
534                         pr_err("%s: can't remap usb registers\n", __func__);
535                         clk_put(phy->pad_clk);
536                         return -ENOMEM;
537                 }
538         }
539         return 0;
540 }
541
542 static void utmip_pad_close(struct tegra_usb_phy *phy)
543 {
544         if (phy->instance != 0)
545                 iounmap(phy->pad_regs);
546         clk_put(phy->pad_clk);
547 }
548
549 static int utmip_pad_power_on(struct tegra_usb_phy *phy)
550 {
551         unsigned long val, flags;
552         void __iomem *base = phy->pad_regs;
553
554         clk_enable(phy->pad_clk);
555
556         spin_lock_irqsave(&utmip_pad_lock, flags);
557
558         if (utmip_pad_count++ == 0) {
559                 val = readl(base + UTMIP_BIAS_CFG0);
560                 val &= ~(UTMIP_OTGPD | UTMIP_BIASPD);
561                 writel(val, base + UTMIP_BIAS_CFG0);
562         }
563
564         spin_unlock_irqrestore(&utmip_pad_lock, flags);
565
566         clk_disable(phy->pad_clk);
567
568         return 0;
569 }
570
571 static int utmip_pad_power_off(struct tegra_usb_phy *phy)
572 {
573         unsigned long val, flags;
574         void __iomem *base = phy->pad_regs;
575
576         if (!utmip_pad_count) {
577                 pr_err("%s: utmip pad already powered off\n", __func__);
578                 return -EINVAL;
579         }
580
581         clk_enable(phy->pad_clk);
582
583         spin_lock_irqsave(&utmip_pad_lock, flags);
584
585         if (--utmip_pad_count == 0) {
586                 val = readl(base + UTMIP_BIAS_CFG0);
587                 val |= UTMIP_OTGPD | UTMIP_BIASPD;
588                 writel(val, base + UTMIP_BIAS_CFG0);
589         }
590
591         spin_unlock_irqrestore(&utmip_pad_lock, flags);
592
593         clk_disable(phy->pad_clk);
594
595         return 0;
596 }
597
598 static int utmi_wait_register(void __iomem *reg, u32 mask, u32 result)
599 {
600         unsigned long timeout = 2500;
601         do {
602                 if ((readl(reg) & mask) == result)
603                         return 0;
604                 udelay(1);
605                 timeout--;
606         } while (timeout);
607         return -1;
608 }
609
610 static void utmi_phy_clk_disable(struct tegra_usb_phy *phy)
611 {
612         unsigned long val;
613         void __iomem *base = phy->regs;
614 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
615         if (phy->instance == 0) {
616                 val = readl(base + USB_SUSP_CTRL);
617                 val |= USB_SUSP_SET;
618                 writel(val, base + USB_SUSP_CTRL);
619
620                 udelay(10);
621
622                 val = readl(base + USB_SUSP_CTRL);
623                 val &= ~USB_SUSP_SET;
624                 writel(val, base + USB_SUSP_CTRL);
625         }
626
627         if (phy->instance == 2) {
628                 val = readl(base + USB_PORTSC1);
629                 val |= USB_PORTSC1_PHCD;
630                 writel(val, base + USB_PORTSC1);
631         }
632 #else
633         val = readl(base + HOSTPC1_DEVLC);
634         val |= HOSTPC1_DEVLC_PHCD;
635         writel(val, base + HOSTPC1_DEVLC);
636 #endif
637
638         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID, 0) < 0)
639                 pr_err("%s: timeout waiting for phy to stabilize\n", __func__);
640 }
641
642 static void utmi_phy_clk_enable(struct tegra_usb_phy *phy)
643 {
644         unsigned long val;
645         void __iomem *base = phy->regs;
646
647         if (phy->instance == 0) {
648                 val = readl(base + USB_SUSP_CTRL);
649                 val |= USB_SUSP_CLR;
650                 writel(val, base + USB_SUSP_CTRL);
651
652                 udelay(10);
653
654                 val = readl(base + USB_SUSP_CTRL);
655                 val &= ~USB_SUSP_CLR;
656                 writel(val, base + USB_SUSP_CTRL);
657         }
658
659 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
660         if (phy->instance == 2) {
661                 val = readl(base + USB_PORTSC1);
662                 val &= ~USB_PORTSC1_PHCD;
663                 writel(val, base + USB_PORTSC1);
664         }
665 #endif
666
667         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
668                                                      USB_PHY_CLK_VALID) < 0)
669                 pr_err("%s: timeout waiting for phy to stabilize\n", __func__);
670 }
671
672 static void vbus_enable(struct tegra_usb_phy *phy)
673 {
674 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
675         int gpio_status;
676         int gpio = usb_phy_data[phy->instance].vbus_gpio;
677
678         if (gpio == -1)
679                 return;
680
681         gpio_status = gpio_request(gpio,"VBUS_USB");
682         if (gpio_status < 0) {
683                 printk("VBUS_USB request GPIO FAILED\n");
684                 WARN_ON(1);
685                 return;
686         }
687         tegra_gpio_enable(gpio);
688         gpio_status = gpio_direction_output(gpio, 1);
689         if (gpio_status < 0) {
690                 printk("VBUS_USB request GPIO DIRECTION FAILED \n");
691                 WARN_ON(1);
692                 return;
693         }
694         gpio_set_value(gpio, 1);
695 #else
696         if (phy->reg_vbus)
697                 regulator_enable(phy->reg_vbus);
698 #endif
699 }
700
701 static void vbus_disable(struct tegra_usb_phy *phy)
702 {
703 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
704         int gpio = usb_phy_data[phy->instance].vbus_gpio;
705
706         if (gpio == -1)
707                 return;
708
709         gpio_set_value(gpio, 0);
710         gpio_free(gpio);
711 #else
712         if (phy->reg_vbus)
713                 regulator_disable(phy->reg_vbus);
714 #endif
715 }
716
717 static int utmi_phy_power_on(struct tegra_usb_phy *phy)
718 {
719         unsigned long val;
720         void __iomem *base = phy->regs;
721         struct tegra_utmip_config *config = phy->config;
722
723         val = readl(base + USB_SUSP_CTRL);
724         val |= UTMIP_RESET;
725         writel(val, base + USB_SUSP_CTRL);
726
727 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
728         if (phy->instance == 0) {
729                 val = readl(base + USB1_LEGACY_CTRL);
730                 val |= USB1_NO_LEGACY_MODE;
731                 writel(val, base + USB1_LEGACY_CTRL);
732         }
733 #endif
734
735         val = readl(base + UTMIP_TX_CFG0);
736         val |= UTMIP_FS_PREABMLE_J;
737         writel(val, base + UTMIP_TX_CFG0);
738
739         val = readl(base + UTMIP_HSRX_CFG0);
740         val &= ~(UTMIP_IDLE_WAIT(~0) | UTMIP_ELASTIC_LIMIT(~0));
741         val |= UTMIP_IDLE_WAIT(config->idle_wait_delay);
742         val |= UTMIP_ELASTIC_LIMIT(config->elastic_limit);
743         writel(val, base + UTMIP_HSRX_CFG0);
744
745         val = readl(base + UTMIP_HSRX_CFG1);
746         val &= ~UTMIP_HS_SYNC_START_DLY(~0);
747         val |= UTMIP_HS_SYNC_START_DLY(config->hssync_start_delay);
748         writel(val, base + UTMIP_HSRX_CFG1);
749
750         val = readl(base + UTMIP_DEBOUNCE_CFG0);
751         val &= ~UTMIP_BIAS_DEBOUNCE_A(~0);
752         val |= UTMIP_BIAS_DEBOUNCE_A(phy->freq->debounce);
753         writel(val, base + UTMIP_DEBOUNCE_CFG0);
754
755         val = readl(base + UTMIP_MISC_CFG0);
756         val &= ~UTMIP_SUSPEND_EXIT_ON_EDGE;
757         writel(val, base + UTMIP_MISC_CFG0);
758
759 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
760         val = readl(base + UTMIP_MISC_CFG1);
761         val &= ~(UTMIP_PLL_ACTIVE_DLY_COUNT(~0) | UTMIP_PLLU_STABLE_COUNT(~0));
762         val |= UTMIP_PLL_ACTIVE_DLY_COUNT(phy->freq->active_delay) |
763                 UTMIP_PLLU_STABLE_COUNT(phy->freq->stable_count);
764         writel(val, base + UTMIP_MISC_CFG1);
765
766         val = readl(base + UTMIP_PLL_CFG1);
767         val &= ~(UTMIP_XTAL_FREQ_COUNT(~0) | UTMIP_PLLU_ENABLE_DLY_COUNT(~0));
768         val |= UTMIP_XTAL_FREQ_COUNT(phy->freq->xtal_freq_count) |
769                 UTMIP_PLLU_ENABLE_DLY_COUNT(phy->freq->enable_delay);
770         writel(val, base + UTMIP_PLL_CFG1);
771 #endif
772
773         if (phy->mode == TEGRA_USB_PHY_MODE_DEVICE) {
774                 val = readl(base + USB_SUSP_CTRL);
775                 val &= ~(USB_WAKE_ON_CNNT_EN_DEV | USB_WAKE_ON_DISCON_EN_DEV);
776                 writel(val, base + USB_SUSP_CTRL);
777         }
778
779         utmip_pad_power_on(phy);
780
781         val = readl(base + UTMIP_XCVR_CFG0);
782         val &= ~(UTMIP_XCVR_LSBIAS_SEL | UTMIP_FORCE_PD_POWERDOWN |
783                  UTMIP_FORCE_PD2_POWERDOWN | UTMIP_FORCE_PDZI_POWERDOWN |
784                  UTMIP_XCVR_SETUP(~0) | UTMIP_XCVR_LSFSLEW(~0) |
785                  UTMIP_XCVR_LSRSLEW(~0) | UTMIP_XCVR_HSSLEW_MSB(~0));
786         val |= UTMIP_XCVR_SETUP(config->xcvr_setup);
787         val |= UTMIP_XCVR_LSFSLEW(config->xcvr_lsfslew);
788         val |= UTMIP_XCVR_LSRSLEW(config->xcvr_lsrslew);
789         writel(val, base + UTMIP_XCVR_CFG0);
790
791         val = readl(base + UTMIP_XCVR_CFG1);
792         val &= ~(UTMIP_FORCE_PDDISC_POWERDOWN | UTMIP_FORCE_PDCHRP_POWERDOWN |
793                  UTMIP_FORCE_PDDR_POWERDOWN | UTMIP_XCVR_TERM_RANGE_ADJ(~0));
794         val |= UTMIP_XCVR_TERM_RANGE_ADJ(config->term_range_adj);
795         writel(val, base + UTMIP_XCVR_CFG1);
796
797         val = readl(base + UTMIP_BAT_CHRG_CFG0);
798         if (phy->mode == TEGRA_USB_PHY_MODE_HOST)
799                 val |= UTMIP_PD_CHRG;
800         else
801                 val &= ~UTMIP_PD_CHRG;
802         writel(val, base + UTMIP_BAT_CHRG_CFG0);
803
804         val = readl(base + UTMIP_BIAS_CFG1);
805         val &= ~UTMIP_BIAS_PDTRK_COUNT(~0);
806         val |= UTMIP_BIAS_PDTRK_COUNT(phy->freq->pdtrk_count);
807         writel(val, base + UTMIP_BIAS_CFG1);
808
809         if (phy->instance == 0) {
810                 val = readl(base + UTMIP_SPARE_CFG0);
811                 if (phy->mode == TEGRA_USB_PHY_MODE_DEVICE)
812                         val &= ~FUSE_SETUP_SEL;
813                 else
814                         val |= FUSE_SETUP_SEL;
815                 writel(val, base + UTMIP_SPARE_CFG0);
816         }
817 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
818         if (phy->instance == 2) {
819                 val = readl(base + UTMIP_SPARE_CFG0);
820                 val |= FUSE_SETUP_SEL;
821                 writel(val, base + UTMIP_SPARE_CFG0);
822
823                 val = readl(base + USB_SUSP_CTRL);
824                 val |= UTMIP_PHY_ENABLE;
825                 writel(val, base + USB_SUSP_CTRL);
826         }
827 #else
828         if ((phy->instance == 1) || (phy->instance == 2)) {
829                 val = readl(base + USB_SUSP_CTRL);
830                 val |= UTMIP_PHY_ENABLE;
831                 writel(val, base + USB_SUSP_CTRL);
832         }
833 #endif
834
835         val = readl(base + USB_SUSP_CTRL);
836         val &= ~UTMIP_RESET;
837         writel(val, base + USB_SUSP_CTRL);
838
839         if (phy->instance == 0) {
840                 val = readl(base + USB1_LEGACY_CTRL);
841                 val &= ~USB1_VBUS_SENSE_CTL_MASK;
842                 val |= USB1_VBUS_SENSE_CTL_A_SESS_VLD;
843                 writel(val, base + USB1_LEGACY_CTRL);
844
845 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
846                 val = readl(base + USB_SUSP_CTRL);
847                 val &= ~USB_SUSP_SET;
848                 writel(val, base + USB_SUSP_CTRL);
849 #endif
850         }
851
852         utmi_phy_clk_enable(phy);
853 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
854         if (phy->instance == 2) {
855                 val = readl(base + USB_PORTSC1);
856                 val &= ~USB_PORTSC1_PTS(~0);
857                 writel(val, base + USB_PORTSC1);
858         }
859 #else
860         if(phy->instance == 2) {
861                 writel(0, base + ICUSB_CTRL);
862
863                 val = readl(base + TEGRA_USB_USBMODE_REG_OFFSET);
864                 writel((val | TEGRA_USB_USBMODE_HOST),
865                         (base + TEGRA_USB_USBMODE_REG_OFFSET));
866         }
867         val = readl(base + HOSTPC1_DEVLC);
868         val &= ~HOSTPC1_DEVLC_PTS(~0);
869         val |= HOSTPC1_DEVLC_STS;
870         writel(val, base + HOSTPC1_DEVLC);
871 #endif
872         if (phy->mode == TEGRA_USB_PHY_MODE_HOST) {
873                 vbus_enable(phy);
874         }
875
876         return 0;
877 }
878
879 static int utmi_phy_power_off(struct tegra_usb_phy *phy)
880 {
881         unsigned long val;
882         void __iomem *base = phy->regs;
883
884         utmi_phy_clk_disable(phy);
885
886         if (phy->mode == TEGRA_USB_PHY_MODE_HOST) {
887                 vbus_disable(phy);
888         }
889
890         if (phy->mode == TEGRA_USB_PHY_MODE_DEVICE) {
891                 val = readl(base + USB_SUSP_CTRL);
892                 val &= ~USB_WAKEUP_DEBOUNCE_COUNT(~0);
893                 val |= USB_WAKE_ON_CNNT_EN_DEV | USB_WAKEUP_DEBOUNCE_COUNT(5);
894                 writel(val, base + USB_SUSP_CTRL);
895         }
896
897         val = readl(base + USB_SUSP_CTRL);
898         val |= UTMIP_RESET;
899         writel(val, base + USB_SUSP_CTRL);
900
901         if (phy->mode == TEGRA_USB_PHY_MODE_DEVICE) {
902                 val = readl(base + UTMIP_BAT_CHRG_CFG0);
903                 val |= UTMIP_PD_CHRG;
904                 writel(val, base + UTMIP_BAT_CHRG_CFG0);
905         }
906
907         val = readl(base + UTMIP_XCVR_CFG0);
908         val |= UTMIP_FORCE_PD_POWERDOWN | UTMIP_FORCE_PD2_POWERDOWN |
909                UTMIP_FORCE_PDZI_POWERDOWN;
910         writel(val, base + UTMIP_XCVR_CFG0);
911
912         val = readl(base + UTMIP_XCVR_CFG1);
913         val |= UTMIP_FORCE_PDDISC_POWERDOWN | UTMIP_FORCE_PDCHRP_POWERDOWN |
914                UTMIP_FORCE_PDDR_POWERDOWN;
915         writel(val, base + UTMIP_XCVR_CFG1);
916
917 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
918         val = readl(base + UTMIP_BIAS_CFG1);
919         val |= UTMIP_BIAS_PDTRK_COUNT(0x5);
920         writel(val, base + UTMIP_BIAS_CFG1);
921 #endif
922         utmip_pad_power_off(phy);
923
924         return 0;
925 }
926
927 static int utmi_phy_preresume(struct tegra_usb_phy *phy)
928 {
929         unsigned long val;
930         void __iomem *base = phy->regs;
931
932         val = readl(base + UTMIP_TX_CFG0);
933         val |= UTMIP_HS_DISCON_DISABLE;
934         writel(val, base + UTMIP_TX_CFG0);
935
936         return 0;
937 }
938
939 static int utmi_phy_postresume(struct tegra_usb_phy *phy)
940 {
941         unsigned long val;
942         void __iomem *base = phy->regs;
943
944         val = readl(base + UTMIP_TX_CFG0);
945         val &= ~UTMIP_HS_DISCON_DISABLE;
946         writel(val, base + UTMIP_TX_CFG0);
947
948         return 0;
949 }
950
951 static int uhsic_phy_postresume(struct tegra_usb_phy *phy)
952 {
953 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
954         unsigned long val;
955         void __iomem *base = phy->regs;
956
957         val = readl(base + USB_TXFILLTUNING);
958         if ((val & USB_FIFO_TXFILL_MASK) != USB_FIFO_TXFILL_THRES(0x10)) {
959                 val = USB_FIFO_TXFILL_THRES(0x10);
960                 writel(val, base + USB_TXFILLTUNING);
961         }
962 #endif
963
964         return 0;
965 }
966
967 static void utmi_phy_restore_start(struct tegra_usb_phy *phy,
968                                    enum tegra_usb_phy_port_speed port_speed)
969 {
970         unsigned long val;
971         void __iomem *base = phy->regs;
972
973         val = readl(base + UTMIP_MISC_CFG0);
974         val &= ~UTMIP_DPDM_OBSERVE_SEL(~0);
975         if (port_speed == TEGRA_USB_PHY_PORT_SPEED_LOW)
976                 val |= UTMIP_DPDM_OBSERVE_SEL_FS_K;
977         else
978                 val |= UTMIP_DPDM_OBSERVE_SEL_FS_J;
979         writel(val, base + UTMIP_MISC_CFG0);
980         udelay(1);
981
982         val = readl(base + UTMIP_MISC_CFG0);
983         val |= UTMIP_DPDM_OBSERVE;
984         writel(val, base + UTMIP_MISC_CFG0);
985         udelay(10);
986 }
987
988 static void utmi_phy_restore_end(struct tegra_usb_phy *phy)
989 {
990         unsigned long val;
991         void __iomem *base = phy->regs;
992
993         val = readl(base + UTMIP_MISC_CFG0);
994         val &= ~UTMIP_DPDM_OBSERVE;
995         writel(val, base + UTMIP_MISC_CFG0);
996         udelay(10);
997 }
998
999 static void ulpi_set_tristate(bool enable)
1000 {
1001 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1002         int tristate = (enable)? TEGRA_TRI_TRISTATE : TEGRA_TRI_NORMAL;
1003
1004         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA0, tristate);
1005         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA1, tristate);
1006         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA2, tristate);
1007         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA3, tristate);
1008         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA4, tristate);
1009         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA5, tristate);
1010         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA6, tristate);
1011         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DATA7, tristate);
1012         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_CLK, tristate);
1013         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_DIR, tristate);
1014         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_STP, tristate);
1015         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_NXT, tristate);
1016 #endif
1017 }
1018
1019 static void ulpi_phy_reset(void __iomem *base)
1020 {
1021         unsigned long val;
1022
1023 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1024         tegra_pinmux_set_tristate(TEGRA_PINGROUP_ULPI_CLK, TEGRA_TRI_TRISTATE);
1025 #endif
1026         val = readl(base + USB_SUSP_CTRL);
1027         val |= UHSIC_RESET;
1028         writel(val, base + USB_SUSP_CTRL);
1029
1030 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1031         val = readl(base + USB_SUSP_CTRL);
1032         val |= UTMIP_RESET;
1033         writel(val, base + USB_SUSP_CTRL);
1034 #endif
1035 }
1036
1037 static void ulpi_set_host(void __iomem *base)
1038 {
1039 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1040         unsigned long val;
1041
1042         val = readl(base + TEGRA_USB_USBMODE_REG_OFFSET);
1043         val |= TEGRA_USB_USBMODE_HOST;
1044         writel(val, base + TEGRA_USB_USBMODE_REG_OFFSET);
1045
1046         val = readl(base + HOSTPC1_DEVLC);
1047         val |= HOSTPC1_DEVLC_PTS(2);
1048         writel(val, base + HOSTPC1_DEVLC);
1049 #endif
1050 }
1051
1052 static void ulpi_set_trimmer(void __iomem *base, u8 data, u8 sdn, u8 dir)
1053 {
1054         unsigned long val;
1055
1056         val = ULPI_DATA_TRIMMER_SEL(data);
1057         val |= ULPI_STPDIRNXT_TRIMMER_SEL(sdn);
1058         val |= ULPI_DIR_TRIMMER_SEL(dir);
1059         writel(val, base + ULPI_TIMING_CTRL_1);
1060         udelay(10);
1061
1062         val |= ULPI_DATA_TRIMMER_LOAD;
1063         val |= ULPI_STPDIRNXT_TRIMMER_LOAD;
1064         val |= ULPI_DIR_TRIMMER_LOAD;
1065         writel(val, base + ULPI_TIMING_CTRL_1);
1066 }
1067
1068 static void ulpi_phy_restore_start(struct tegra_usb_phy *phy,
1069                                    enum tegra_usb_phy_port_speed port_speed)
1070 {
1071         unsigned long val;
1072         void __iomem *base = phy->regs;
1073
1074         /*Tristate ulpi interface before USB controller resume*/
1075         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UAA, TEGRA_TRI_TRISTATE);
1076         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UAB, TEGRA_TRI_TRISTATE);
1077         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UDA, TEGRA_TRI_TRISTATE);
1078
1079         val = readl(base + ULPI_TIMING_CTRL_0);
1080         val &= ~ULPI_OUTPUT_PINMUX_BYP;
1081         writel(val, base + ULPI_TIMING_CTRL_0);
1082 }
1083
1084 static void ulpi_phy_restore_end(struct tegra_usb_phy *phy)
1085 {
1086         unsigned long val;
1087         void __iomem *base = phy->regs;
1088
1089         val = readl(base + ULPI_TIMING_CTRL_0);
1090         val |= ULPI_OUTPUT_PINMUX_BYP;
1091         writel(val, base + ULPI_TIMING_CTRL_0);
1092
1093         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UAA, TEGRA_TRI_NORMAL);
1094         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UAB, TEGRA_TRI_NORMAL);
1095         tegra_pinmux_set_tristate(TEGRA_PINGROUP_UDA, TEGRA_TRI_NORMAL);
1096 }
1097
1098 static int ulpi_phy_power_on(struct tegra_usb_phy *phy)
1099 {
1100         int ret;
1101         unsigned long val;
1102         void __iomem *base = phy->regs;
1103 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1104         struct tegra_ulpi_config *config = phy->config;
1105 #endif
1106
1107         clk_enable(phy->clk);
1108         msleep(1);
1109
1110         if (!phy->initialized) {
1111                 phy->initialized = 1;
1112 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1113                 gpio_direction_output(config->reset_gpio, 0);
1114                 msleep(5);
1115                 gpio_direction_output(config->reset_gpio, 1);
1116 #endif
1117         }
1118
1119         ulpi_phy_reset(base);
1120         ulpi_set_host(base);
1121
1122         val = readl(base + ULPI_TIMING_CTRL_0);
1123         val |= ULPI_OUTPUT_PINMUX_BYP | ULPI_CLKOUT_PINMUX_BYP;
1124         writel(val, base + ULPI_TIMING_CTRL_0);
1125
1126         val = readl(base + USB_SUSP_CTRL);
1127         val |= ULPI_PHY_ENABLE;
1128         writel(val, base + USB_SUSP_CTRL);
1129
1130         val = readl(base + USB_SUSP_CTRL);
1131         val |= USB_SUSP_CLR;
1132         writel(val, base + USB_SUSP_CTRL);
1133
1134         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
1135                                                      USB_PHY_CLK_VALID) < 0)
1136                 pr_err("%s: timeout waiting for phy to stabilize\n", __func__);
1137
1138         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_CLKEN, USB_CLKEN) < 0)
1139                 pr_err("%s: timeout waiting for AHB clock\n", __func__);
1140
1141         val = readl(base + USB_SUSP_CTRL);
1142         val &= ~USB_SUSP_CLR;
1143         writel(val, base + USB_SUSP_CTRL);
1144
1145         val = 0;
1146         writel(val, base + ULPI_TIMING_CTRL_1);
1147
1148         ulpi_set_trimmer(base, 4, 4, 4);
1149
1150         /* Fix VbusInvalid due to floating VBUS */
1151         ret = otg_io_write(phy->ulpi, 0x40, 0x08);
1152         if (ret) {
1153                 pr_err("%s: ulpi write failed\n", __func__);
1154                 return ret;
1155         }
1156
1157         ret = otg_io_write(phy->ulpi, 0x80, 0x0B);
1158         if (ret) {
1159                 pr_err("%s: ulpi write failed\n", __func__);
1160                 return ret;
1161         }
1162
1163         val = readl(base + USB_PORTSC1);
1164         val |= USB_PORTSC1_WKOC | USB_PORTSC1_WKDS | USB_PORTSC1_WKCN;
1165         writel(val, base + USB_PORTSC1);
1166
1167         return 0;
1168 }
1169
1170 static int ulpi_phy_power_off(struct tegra_usb_phy *phy)
1171 {
1172         unsigned long val;
1173         void __iomem *base = phy->regs;
1174 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1175         int ret;
1176
1177         /* Disable VbusValid, SessEnd comparators */
1178         ret = otg_io_write(phy->ulpi, 0x00, 0x0D);
1179         if (ret)
1180                 pr_err("%s: ulpi write 0x0D failed\n", __func__);
1181
1182         ret = otg_io_write(phy->ulpi, 0x00, 0x10);
1183         if (ret)
1184                 pr_err("%s: ulpi write 0x10 failed\n", __func__);
1185
1186         /* Disable IdFloat comparator */
1187         ret = otg_io_write(phy->ulpi, 0x00, 0x19);
1188         if (ret)
1189                 pr_err("%s: ulpi write 0x19 failed\n", __func__);
1190
1191         ret = otg_io_write(phy->ulpi, 0x00, 0x1D);
1192         if (ret)
1193                 pr_err("%s: ulpi write 0x1D failed\n", __func__);
1194
1195         /* Clear WKCN/WKDS/WKOC wake-on events that can cause the USB
1196          * Controller to immediately bring the ULPI PHY out of low power
1197          */
1198         val = readl(base + USB_PORTSC1);
1199         val &= ~(USB_PORTSC1_WKOC | USB_PORTSC1_WKDS | USB_PORTSC1_WKCN);
1200         writel(val, base + USB_PORTSC1);
1201
1202         /* Put the PHY in the low power mode */
1203         val = readl(base + USB_PORTSC1);
1204         val |= USB_PORTSC1_PHCD;
1205         writel(val, base + USB_PORTSC1);
1206
1207         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID, 0) < 0)
1208                 pr_err("%s: timeout waiting for phy to stop\n", __func__);
1209 #else
1210         val = readl(base + HOSTPC1_DEVLC);
1211         val &= ~(HOSTPC1_DEVLC_PHCD);
1212         writel(val, base + HOSTPC1_DEVLC);
1213 #endif
1214
1215         clk_disable(phy->clk);
1216
1217         return 0;
1218 }
1219
1220 static int null_phy_power_on(struct tegra_usb_phy *phy)
1221 {
1222         const struct tegra_ulpi_trimmer default_trimmer = {0, 0, 4, 4};
1223         unsigned long val;
1224         void __iomem *base = phy->regs;
1225         struct tegra_ulpi_config *config = phy->config;
1226
1227         if (!config->trimmer)
1228                 config->trimmer = &default_trimmer;
1229
1230         ulpi_phy_reset(base);
1231         ulpi_set_host(base);
1232
1233         if (config->preinit)
1234                 config->preinit();
1235
1236         val = readl(base + ULPI_TIMING_CTRL_0);
1237         val |= ULPI_OUTPUT_PINMUX_BYP | ULPI_CLKOUT_PINMUX_BYP;
1238         writel(val, base + ULPI_TIMING_CTRL_0);
1239
1240         val = readl(base + USB_SUSP_CTRL);
1241         val |= ULPI_PHY_ENABLE;
1242         writel(val, base + USB_SUSP_CTRL);
1243         udelay(10);
1244
1245         /* set timming parameters */
1246         val = readl(base + ULPI_TIMING_CTRL_0);
1247         val |= ULPI_SHADOW_CLK_LOOPBACK_EN;
1248         val |= ULPI_SHADOW_CLK_SEL;
1249         val &= ~ULPI_LBK_PAD_EN;
1250         val |= ULPI_SHADOW_CLK_DELAY(config->trimmer->shadow_clk_delay);
1251         val |= ULPI_CLOCK_OUT_DELAY(config->trimmer->clock_out_delay);
1252         val |= ULPI_LBK_PAD_E_INPUT_OR;
1253         writel(val, base + ULPI_TIMING_CTRL_0);
1254
1255         writel(0, base + ULPI_TIMING_CTRL_1);
1256         udelay(10);
1257
1258         /* start internal 60MHz clock */
1259         val = ULPIS2S_PLLU_MASTER_BLASTER60;
1260         writel(val, base + ULPIS2S_CTRL);
1261
1262         /* select ULPI_CORE_CLK_SEL to SHADOW_CLK */
1263         val = readl(base + ULPI_TIMING_CTRL_0);
1264         val |= ULPI_CORE_CLK_SEL;
1265         writel(val, base + ULPI_TIMING_CTRL_0);
1266         udelay(10);
1267
1268 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1269         /* remove slave0 reset */
1270         val = readl(base + USB_SUSP_CTRL);
1271         val &= ~ULPIS2S_SLV0_RESET;
1272         writel(val, base + USB_SUSP_CTRL);
1273         udelay(10);
1274 #endif
1275         /* enable ULPI null phy clock - can't set the trimmers before this */
1276         val = readl(base + ULPI_TIMING_CTRL_0);
1277         val |= ULPI_CLK_OUT_ENA;
1278         writel(val, base + ULPI_TIMING_CTRL_0);
1279         udelay(10);
1280
1281         /* set trimmers */
1282         ulpi_set_trimmer(base, config->trimmer->data_trimmer,
1283                          config->trimmer->stpdirnxt_trimmer, 1);
1284
1285 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1286         /* remove various ULPIS2S resets */
1287         val = readl(base + USB_SUSP_CTRL);
1288         val &= ~ULPIS2S_LINE_RESET;
1289         val &= ~ULPIS2S_SLV1_RESET;
1290         val &= ~ULPI_PADS_RESET;
1291         val &= ~ULPI_PADS_CLKEN_RESET;
1292         writel(val, base + USB_SUSP_CTRL);
1293 #endif
1294
1295         val = readl(base + ULPIS2S_CTRL);
1296         val |= ULPIS2S_ENA;
1297         val |= ULPIS2S_SPARE((phy->mode == TEGRA_USB_PHY_MODE_HOST)? 3 : 1);
1298         writel(val, base + ULPIS2S_CTRL);
1299
1300 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1301         val = readl(base + USB_SUSP_CTRL);
1302         val |= USB_SUSP_CLR;
1303         writel(val, base + USB_SUSP_CTRL);
1304         udelay(100);
1305         val = readl(base + USB_SUSP_CTRL);
1306         val &= ~USB_SUSP_CLR;
1307         writel(val, base + USB_SUSP_CTRL);
1308 #endif
1309         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
1310                                                      USB_PHY_CLK_VALID)) {
1311                 pr_err("%s: timeout waiting for phy to stabilize\n", __func__);
1312                 return -ETIMEDOUT;
1313         }
1314
1315         val = readl(base + ULPI_TIMING_CTRL_0);
1316         val |= ULPI_CLK_PADOUT_ENA;
1317         writel(val, base + ULPI_TIMING_CTRL_0);
1318         udelay(10);
1319
1320         if (config->postinit)
1321                 config->postinit();
1322
1323         return 0;
1324 }
1325
1326 static int null_phy_power_off(struct tegra_usb_phy *phy)
1327 {
1328         unsigned long val;
1329         void __iomem *base = phy->regs;
1330
1331         val = readl(base + ULPI_TIMING_CTRL_0);
1332         val &= ~ULPI_CLK_PADOUT_ENA;
1333         writel(val, base + ULPI_TIMING_CTRL_0);
1334
1335         ulpi_set_tristate(true);
1336         return 0;
1337 }
1338
1339 static int null_phy_post_usbcmd_reset(struct tegra_usb_phy *phy)
1340 {
1341 #ifndef CONFIG_ARCH_TEGRA_2x_SOC
1342         unsigned long val;
1343         void __iomem *base = phy->regs;
1344
1345         val = readl(base + ULPIS2S_CTRL);
1346         val |=  ULPIS2S_SLV0_CLAMP_XMIT;
1347         writel(val, base + ULPIS2S_CTRL);
1348
1349         val = readl(base + USB_SUSP_CTRL);
1350         val |= ULPIS2S_SLV0_RESET;
1351         writel(val, base + USB_SUSP_CTRL);
1352         udelay(10);
1353
1354         /* remove slave0 reset */
1355         val = readl(base + USB_SUSP_CTRL);
1356         val &= ~ULPIS2S_SLV0_RESET;
1357         writel(val, base + USB_SUSP_CTRL);
1358         udelay(10);
1359
1360         val = readl(base + ULPIS2S_CTRL);
1361         val &=  ~ULPIS2S_SLV0_CLAMP_XMIT;
1362         writel(val, base + ULPIS2S_CTRL);
1363
1364         ulpi_set_host(base);
1365 #endif
1366         return 0;
1367 }
1368
1369 static int uhsic_phy_power_on(struct tegra_usb_phy *phy)
1370 {
1371         unsigned long val;
1372         void __iomem *base = phy->regs;
1373         struct tegra_uhsic_config *config = &uhsic_default;
1374         struct tegra_ulpi_config *ulpi_config = phy->config;
1375
1376         if (ulpi_config->preinit)
1377                 ulpi_config->preinit();
1378
1379         val = readl(base + UHSIC_PADS_CFG1);
1380         val &= ~(UHSIC_PD_BG | UHSIC_PD_TX | UHSIC_PD_TRK | UHSIC_PD_RX |
1381                         UHSIC_PD_ZI | UHSIC_RPD_DATA | UHSIC_RPD_STROBE);
1382         val |= UHSIC_RX_SEL;
1383         writel(val, base + UHSIC_PADS_CFG1);
1384         udelay(2);
1385
1386         val = readl(base + USB_SUSP_CTRL);
1387         val |= UHSIC_RESET;
1388         writel(val, base + USB_SUSP_CTRL);
1389         udelay(30);
1390
1391         val = readl(base + USB_SUSP_CTRL);
1392         val |= UHSIC_PHY_ENABLE;
1393         writel(val, base + USB_SUSP_CTRL);
1394
1395         val = readl(base + UHSIC_HSRX_CFG0);
1396         val |= UHSIC_IDLE_WAIT(config->idle_wait_delay);
1397         val |= UHSIC_ELASTIC_UNDERRUN_LIMIT(config->elastic_underrun_limit);
1398         val |= UHSIC_ELASTIC_OVERRUN_LIMIT(config->elastic_overrun_limit);
1399         writel(val, base + UHSIC_HSRX_CFG0);
1400
1401         val = readl(base + UHSIC_HSRX_CFG1);
1402         val |= UHSIC_HS_SYNC_START_DLY(config->sync_start_delay);
1403         writel(val, base + UHSIC_HSRX_CFG1);
1404
1405         val = readl(base + UHSIC_MISC_CFG0);
1406         val |= UHSIC_SUSPEND_EXIT_ON_EDGE;
1407         writel(val, base + UHSIC_MISC_CFG0);
1408
1409         val = readl(base + UHSIC_MISC_CFG1);
1410         val |= UHSIC_PLLU_STABLE_COUNT(phy->freq->stable_count);
1411         writel(val, base + UHSIC_MISC_CFG1);
1412
1413         val = readl(base + UHSIC_PLL_CFG1);
1414         val |= UHSIC_PLLU_ENABLE_DLY_COUNT(phy->freq->enable_delay);
1415         val |= UHSIC_XTAL_FREQ_COUNT(phy->freq->xtal_freq_count);
1416         writel(val, base + UHSIC_PLL_CFG1);
1417
1418         val = readl(base + USB_SUSP_CTRL);
1419         val &= ~(UHSIC_RESET);
1420         writel(val, base + USB_SUSP_CTRL);
1421         udelay(2);
1422
1423 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1424         val = readl(base + USB_PORTSC1);
1425         val &= ~USB_PORTSC1_PTS(~0);
1426         writel(val, base + USB_PORTSC1);
1427
1428         val = readl(base + USB_TXFILLTUNING);
1429         if ((val & USB_FIFO_TXFILL_MASK) != USB_FIFO_TXFILL_THRES(0x10)) {
1430                 val = USB_FIFO_TXFILL_THRES(0x10);
1431                 writel(val, base + USB_TXFILLTUNING);
1432         }
1433 #endif
1434
1435         val = readl(base + USB_PORTSC1);
1436         val &= ~(USB_PORTSC1_WKOC | USB_PORTSC1_WKDS | USB_PORTSC1_WKCN);
1437         writel(val, base + USB_PORTSC1);
1438
1439         val = readl(base + UHSIC_PADS_CFG0);
1440         val &= ~(UHSIC_TX_RTUNEN);
1441         /* set Rtune impedance to 40 ohm */
1442         val |= UHSIC_TX_RTUNE(0);
1443         writel(val, base + UHSIC_PADS_CFG0);
1444
1445         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
1446                                                         USB_PHY_CLK_VALID)) {
1447                 pr_err("%s: timeout waiting for phy to stabilize\n", __func__);
1448                 return -ETIMEDOUT;
1449         }
1450
1451         return 0;
1452 }
1453
1454 static int uhsic_phy_power_off(struct tegra_usb_phy *phy)
1455 {
1456         unsigned long val;
1457         void __iomem *base = phy->regs;
1458
1459         val = readl(base + UHSIC_PADS_CFG1);
1460         val &= ~UHSIC_RPU_STROBE;
1461         val |= UHSIC_RPD_STROBE;
1462         writel(val, base + UHSIC_PADS_CFG1);
1463
1464         val = readl(base + USB_SUSP_CTRL);
1465         val |= UHSIC_RESET;
1466         writel(val, base + USB_SUSP_CTRL);
1467         udelay(30);
1468
1469         val = readl(base + USB_SUSP_CTRL);
1470         val &= ~UHSIC_PHY_ENABLE;
1471         writel(val, base + USB_SUSP_CTRL);
1472
1473         return 0;
1474 }
1475
1476 #ifdef CONFIG_USB_TEGRA_OTG
1477 extern void tegra_otg_check_vbus_detection(void);
1478 #endif
1479
1480 static irqreturn_t usb_phy_vbus_irq_thr(int irq, void *pdata)
1481 {
1482         struct tegra_usb_phy *phy = pdata;
1483
1484         if (!phy->regulator_on) {
1485                 regulator_enable(phy->reg_vdd);
1486                 phy->regulator_on = 1;
1487                 /*
1488                  * Optimal time to get the regulator turned on
1489                  * before detecting vbus interrupt.
1490                  */
1491                 mdelay(15);
1492         }
1493
1494 #ifdef CONFIG_USB_TEGRA_OTG
1495         tegra_otg_check_vbus_detection();
1496 #endif
1497
1498         return IRQ_HANDLED;
1499 }
1500
1501 struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs,
1502                         void *config, enum tegra_usb_phy_mode phy_mode,
1503                         enum tegra_usb_phy_type usb_phy_type)
1504 {
1505         struct tegra_usb_phy *phy;
1506         struct tegra_ulpi_config *ulpi_config;
1507         unsigned long parent_rate;
1508         int i;
1509         int err;
1510
1511         phy = kzalloc(sizeof(struct tegra_usb_phy), GFP_KERNEL);
1512         if (!phy)
1513                 return ERR_PTR(-ENOMEM);
1514
1515         phy->instance = instance;
1516         phy->regs = regs;
1517         phy->config = config;
1518         phy->mode = phy_mode;
1519         phy->usb_phy_type = usb_phy_type;
1520         phy->initialized = 0;
1521         phy->regulator_on = 0;
1522
1523         if (!phy->config) {
1524                 if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_LINK_ULPI ||
1525                     phy->usb_phy_type == TEGRA_USB_PHY_TYPE_NULL_ULPI) {
1526                         pr_err("%s: ulpi phy configuration missing", __func__);
1527                         err = -EINVAL;
1528                         goto err0;
1529                 } else {
1530                         phy->config = &utmip_default[instance];
1531                 }
1532         }
1533
1534         phy->pll_u = clk_get_sys(NULL, "pll_u");
1535         if (IS_ERR(phy->pll_u)) {
1536                 pr_err("Can't get pll_u clock\n");
1537                 err = PTR_ERR(phy->pll_u);
1538                 goto err0;
1539         }
1540         clk_enable(phy->pll_u);
1541
1542         parent_rate = clk_get_rate(clk_get_parent(phy->pll_u));
1543         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1544                 for (i = 0; i < ARRAY_SIZE(tegra_uhsic_freq_table); i++) {
1545                         if (tegra_uhsic_freq_table[i].freq == parent_rate) {
1546                                 phy->freq = &tegra_uhsic_freq_table[i];
1547                                 break;
1548                         }
1549                 }
1550         } else {
1551                 for (i = 0; i < ARRAY_SIZE(tegra_freq_table); i++) {
1552                         if (tegra_freq_table[i].freq == parent_rate) {
1553                                 phy->freq = &tegra_freq_table[i];
1554                                 break;
1555                         }
1556                 }
1557         }
1558         if (!phy->freq) {
1559                 pr_err("invalid pll_u parent rate %ld\n", parent_rate);
1560                 err = -EINVAL;
1561                 goto err1;
1562         }
1563
1564         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP) {
1565                 err = utmip_pad_open(phy);
1566                 if (err < 0)
1567                         goto err1;
1568         } else if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_LINK_ULPI) {
1569                 ulpi_config = config;
1570
1571                 phy->clk = clk_get_sys(NULL, ulpi_config->clk);
1572                 if (IS_ERR(phy->clk)) {
1573                         pr_err("%s: can't get ulpi clock\n", __func__);
1574                         err = -ENXIO;
1575                         goto err1;
1576                 }
1577                 tegra_gpio_enable(ulpi_config->reset_gpio);
1578                 gpio_request(ulpi_config->reset_gpio, "ulpi_phy_reset_b");
1579                 gpio_direction_output(ulpi_config->reset_gpio, 0);
1580                 phy->ulpi = otg_ulpi_create(&ulpi_viewport_access_ops, 0);
1581                 phy->ulpi->io_priv = regs + ULPI_VIEWPORT;
1582         }
1583 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1584         else if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1585                 ulpi_config = config;
1586                 gpio_request(ulpi_config->enable_gpio,
1587                         "uhsic_enable");
1588                 gpio_request(ulpi_config->reset_gpio,
1589                         "uhsic_reset");
1590                 /* hsic enable signal deasserted, hsic reset asserted */
1591                 gpio_direction_output(ulpi_config->enable_gpio,
1592                         0 /* deasserted */);
1593                 gpio_direction_output(ulpi_config->reset_gpio,
1594                         0 /* asserted */);
1595                 tegra_gpio_enable(ulpi_config->enable_gpio);
1596                 tegra_gpio_enable(ulpi_config->reset_gpio);
1597                 /* keep hsic reset asserted for 1 ms */
1598                 udelay(1000);
1599                 /* enable (power on) hsic */
1600                 gpio_set_value_cansleep(ulpi_config->enable_gpio, 1);
1601                 udelay(1000);
1602                 /* deassert reset */
1603                 gpio_set_value_cansleep(ulpi_config->reset_gpio, 1);
1604         }
1605 #endif
1606
1607         phy->reg_vdd = regulator_get(NULL, "avdd_usb");
1608         if (WARN_ON(IS_ERR_OR_NULL(phy->reg_vdd))) {
1609                 pr_err("couldn't get regulator avdd_usb: %ld \n",
1610                          PTR_ERR(phy->reg_vdd));
1611                 err = PTR_ERR(phy->reg_vdd);
1612                 goto err1;
1613         }
1614
1615         if (instance == 0 && usb_phy_data[0].vbus_irq) {
1616                 err = request_threaded_irq(usb_phy_data[0].vbus_irq, NULL, usb_phy_vbus_irq_thr, IRQF_SHARED,
1617                         "usb_phy_vbus", phy);
1618                 if (err) {
1619                         pr_err("Failed to register IRQ\n");
1620                         goto err1;
1621                 }
1622         }
1623
1624 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1625         /* Power-up the VBUS detector for UTMIP PHY */
1626         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP) {
1627                 writel(readl((IO_ADDRESS(TEGRA_PMC_BASE) + TEGRA_PMC_USB_AO)) &
1628                         ~(TEGRA_PMC_USB_AO_VBUS_WAKEUP_PD_P0 | TEGRA_PMC_USB_AO_ID_PD_P0),
1629                         (IO_ADDRESS(TEGRA_PMC_BASE) + TEGRA_PMC_USB_AO));
1630
1631                 if (usb_phy_data[phy->instance].vbus_reg_supply) {
1632                         phy->reg_vbus = regulator_get(NULL, usb_phy_data[phy->instance].vbus_reg_supply);
1633                         if (WARN_ON(IS_ERR_OR_NULL(phy->reg_vbus))) {
1634                                 pr_err("couldn't get regulator vdd_vbus_usb: %ld, instance : %d\n",
1635                                         PTR_ERR(phy->reg_vbus), phy->instance);
1636                                 err = PTR_ERR(phy->reg_vbus);
1637                                 goto err1;
1638                         }
1639                 }
1640         }
1641 #endif
1642
1643         return phy;
1644
1645 err1:
1646         clk_disable(phy->pll_u);
1647         clk_put(phy->pll_u);
1648 err0:
1649         kfree(phy);
1650         return ERR_PTR(err);
1651 }
1652
1653 int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
1654 {
1655         int ret = 0;
1656
1657         const tegra_phy_fp power_on[] = {
1658                 utmi_phy_power_on,
1659                 ulpi_phy_power_on,
1660                 null_phy_power_on,
1661                 uhsic_phy_power_on,
1662         };
1663
1664         if (phy->reg_vdd && !phy->regulator_on) {
1665                 regulator_enable(phy->reg_vdd);
1666                 phy->regulator_on = 1;
1667         }
1668
1669         if (power_on[phy->usb_phy_type])
1670                 ret = power_on[phy->usb_phy_type](phy);
1671
1672         return ret;
1673 }
1674
1675 void tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
1676 {
1677         const tegra_phy_fp power_off[] = {
1678                 utmi_phy_power_off,
1679                 ulpi_phy_power_off,
1680                 null_phy_power_off,
1681                 uhsic_phy_power_off,
1682         };
1683
1684         if (power_off[phy->usb_phy_type])
1685                 power_off[phy->usb_phy_type](phy);
1686
1687         if (phy->reg_vdd && phy->regulator_on) {
1688 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1689                 if (tegra_get_revision() >= TEGRA_REVISION_A03)
1690 #endif
1691                         regulator_disable(phy->reg_vdd);
1692                 phy->regulator_on = 0;
1693         }
1694 }
1695
1696 void tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
1697 {
1698         const tegra_phy_fp preresume[] = {
1699                 utmi_phy_preresume,
1700                 NULL,
1701                 NULL,
1702                 NULL,
1703         };
1704
1705         if (preresume[phy->usb_phy_type])
1706                 preresume[phy->usb_phy_type](phy);
1707 }
1708
1709 void tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
1710 {
1711         const tegra_phy_fp postresume[] = {
1712                 utmi_phy_postresume,
1713                 NULL,
1714                 NULL,
1715                 uhsic_phy_postresume,
1716         };
1717
1718         if (postresume[phy->usb_phy_type])
1719                 postresume[phy->usb_phy_type](phy);
1720 }
1721
1722 void tegra_ehci_post_reset(struct tegra_usb_phy *phy)
1723 {
1724         const tegra_phy_fp post_reset[] = {
1725                 NULL,
1726                 NULL,
1727                 null_phy_post_usbcmd_reset,
1728                 NULL,
1729         };
1730
1731         if (post_reset[phy->usb_phy_type])
1732                 post_reset[phy->usb_phy_type](phy);
1733 }
1734
1735 void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
1736                                  enum tegra_usb_phy_port_speed port_speed)
1737 {
1738         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP)
1739                 utmi_phy_restore_start(phy, port_speed);
1740         else
1741                 ulpi_phy_restore_start(phy, port_speed);
1742 }
1743
1744 void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy)
1745 {
1746         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP)
1747                 utmi_phy_restore_end(phy);
1748         else
1749                 ulpi_phy_restore_end(phy);
1750 }
1751
1752 void tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy)
1753 {
1754         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP)
1755                 utmi_phy_clk_disable(phy);
1756 }
1757
1758 void tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy)
1759 {
1760         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP)
1761                 utmi_phy_clk_enable(phy);
1762 }
1763
1764 void tegra_usb_phy_close(struct tegra_usb_phy *phy)
1765 {
1766         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP)
1767                 utmip_pad_close(phy);
1768         else if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_LINK_ULPI)
1769                 clk_put(phy->clk);
1770
1771         clk_disable(phy->pll_u);
1772         clk_put(phy->pll_u);
1773         if (phy->reg_vbus)
1774                 regulator_put(phy->reg_vbus);
1775         if (phy->reg_vdd)
1776                 regulator_put(phy->reg_vdd);
1777         if (phy->instance == 0 && usb_phy_data[0].vbus_irq)
1778                 free_irq(usb_phy_data[0].vbus_irq, phy);
1779         kfree(phy);
1780 }
1781
1782 int tegra_usb_phy_bus_connect(struct tegra_usb_phy *phy)
1783 {
1784         unsigned long val;
1785         void __iomem *base = phy->regs;
1786         struct tegra_ulpi_config *config = phy->config;
1787
1788         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1789 #ifdef CONFIG_ARCH_TEGRA_3x_SOC
1790                 /* Change the USB controller PHY type to HSIC */
1791                 val = readl(base + HOSTPC1_DEVLC);
1792                 val &= ~HOSTPC1_DEVLC_PTS(HOSTPC1_DEVLC_PTS_MASK);
1793                 val |= HOSTPC1_DEVLC_PTS(HOSTPC1_DEVLC_PTS_HSIC);
1794                 val &= ~HOSTPC1_DEVLC_PSPD(HOSTPC1_DEVLC_PSPD_MASK);
1795                 val |= HOSTPC1_DEVLC_PSPD(HOSTPC1_DEVLC_PSPD_HIGH_SPEED);
1796                 writel(val, base + HOSTPC1_DEVLC);
1797 #endif
1798                 val = readl(base + UHSIC_MISC_CFG0);
1799                 val |= UHSIC_DETECT_SHORT_CONNECT;
1800                 writel(val, base + UHSIC_MISC_CFG0);
1801                 udelay(1);
1802
1803                 val = readl(base + UHSIC_MISC_CFG0);
1804                 val |= UHSIC_FORCE_XCVR_MODE;
1805                 writel(val, base + UHSIC_MISC_CFG0);
1806
1807                 val = readl(base + UHSIC_PADS_CFG1);
1808                 val &= ~UHSIC_RPD_STROBE;
1809 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1810                 val |= UHSIC_RPU_STROBE;
1811 #endif
1812                 writel(val, base + UHSIC_PADS_CFG1);
1813
1814                 if (utmi_wait_register(base + UHSIC_STAT_CFG0, UHSIC_CONNECT_DETECT, UHSIC_CONNECT_DETECT) < 0) {
1815                         pr_err("%s: timeout waiting for hsic connect detect\n", __func__);
1816                         return -ETIMEDOUT;
1817                 }
1818
1819 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1820                 if (utmi_wait_register(base + USB_PORTSC1, USB_PORTSC1_LS(2), USB_PORTSC1_LS(2)) < 0) {
1821                         pr_err("%s: timeout waiting for dplus state\n", __func__);
1822                         return -ETIMEDOUT;
1823                 }
1824 #endif
1825         }
1826
1827         return 0;
1828 }
1829
1830 int tegra_usb_phy_bus_reset(struct tegra_usb_phy *phy)
1831 {
1832         unsigned long val;
1833         void __iomem *base = phy->regs;
1834
1835         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1836 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1837                 val = readl(base + USB_PORTSC1);
1838                 val |= USB_PORTSC1_PTC(5);
1839                 writel(val, base + USB_PORTSC1);
1840                 udelay(2);
1841
1842                 val = readl(base + USB_PORTSC1);
1843                 val &= ~USB_PORTSC1_PTC(~0);
1844                 writel(val, base + USB_PORTSC1);
1845                 udelay(2);
1846 #endif
1847
1848 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1849                 if (utmi_wait_register(base + USB_PORTSC1, USB_PORTSC1_LS(0), 0) < 0) {
1850                         pr_err("%s: timeout waiting for SE0\n", __func__);
1851                         return -ETIMEDOUT;
1852                 }
1853 #endif
1854                 if (utmi_wait_register(base + USB_PORTSC1, USB_PORTSC1_CCS, USB_PORTSC1_CCS) < 0) {
1855                         pr_err("%s: timeout waiting for connection status\n", __func__);
1856                         return -ETIMEDOUT;
1857                 }
1858
1859 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1860                 if (utmi_wait_register(base + USB_PORTSC1, USB_PORTSC1_PSPD(2), USB_PORTSC1_PSPD(2)) < 0) {
1861                         pr_err("%s: timeout waiting hsic high speed configuration\n", __func__);
1862                         return -ETIMEDOUT;
1863                 }
1864 #endif
1865                 val = readl(base + USB_USBCMD);
1866                 val &= ~USB_USBCMD_RS;
1867                 writel(val, base + USB_USBCMD);
1868
1869                 if (utmi_wait_register(base + USB_USBSTS, USB_USBSTS_HCH, USB_USBSTS_HCH) < 0) {
1870                         pr_err("%s: timeout waiting for stopping the controller\n", __func__);
1871                         return -ETIMEDOUT;
1872                 }
1873
1874                 val = readl(base + UHSIC_PADS_CFG1);
1875                 val &= ~UHSIC_RPU_STROBE;
1876                 val |= UHSIC_RPD_STROBE;
1877                 writel(val, base + UHSIC_PADS_CFG1);
1878
1879                 mdelay(50);
1880
1881                 val = readl(base + UHSIC_PADS_CFG1);
1882                 val &= ~UHSIC_RPD_STROBE;
1883                 val |= UHSIC_RPU_STROBE;
1884                 writel(val, base + UHSIC_PADS_CFG1);
1885
1886                 val = readl(base + USB_USBCMD);
1887                 val |= USB_USBCMD_RS;
1888                 writel(val, base + USB_USBCMD);
1889
1890                 val = readl(base + UHSIC_PADS_CFG1);
1891                 val &= ~UHSIC_RPU_STROBE;
1892                 writel(val, base + UHSIC_PADS_CFG1);
1893
1894                 if (utmi_wait_register(base + USB_USBCMD, USB_USBCMD_RS, USB_USBCMD_RS) < 0) {
1895                         pr_err("%s: timeout waiting for starting the controller\n", __func__);
1896                         return -ETIMEDOUT;
1897                 }
1898         }
1899
1900         return 0;
1901 }
1902
1903 int tegra_usb_phy_bus_idle(struct tegra_usb_phy *phy)
1904 {
1905         unsigned long val;
1906         void __iomem *base = phy->regs;
1907
1908         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1909                 val = readl(base + UHSIC_MISC_CFG0);
1910                 val |= UHSIC_DETECT_SHORT_CONNECT;
1911                 writel(val, base + UHSIC_MISC_CFG0);
1912                 udelay(1);
1913
1914                 val = readl(base + UHSIC_MISC_CFG0);
1915                 val |= UHSIC_FORCE_XCVR_MODE;
1916                 writel(val, base + UHSIC_MISC_CFG0);
1917
1918                 val = readl(base + UHSIC_PADS_CFG1);
1919                 val &= ~UHSIC_RPD_STROBE;
1920                 val |= UHSIC_RPU_STROBE;
1921                 writel(val, base + UHSIC_PADS_CFG1);
1922         }
1923         return 0;
1924 }
1925
1926 bool tegra_usb_phy_is_device_connected(struct tegra_usb_phy *phy)
1927 {
1928         void __iomem *base = phy->regs;
1929
1930         if (phy->usb_phy_type == TEGRA_USB_PHY_TYPE_HSIC) {
1931                 if (!((readl(base + UHSIC_STAT_CFG0) & UHSIC_CONNECT_DETECT) == UHSIC_CONNECT_DETECT)) {
1932                         pr_err("%s: hsic no device connection\n", __func__);
1933                         return false;
1934                 }
1935 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
1936                 if (utmi_wait_register(base + USB_PORTSC1, USB_PORTSC1_LS(2), USB_PORTSC1_LS(2)) < 0) {
1937                         pr_err("%s: timeout waiting for dplus state\n", __func__);
1938                         return false;
1939                 }
1940 #endif
1941         }
1942         return true;
1943 }
1944
1945 int __init tegra_usb_phy_init(struct usb_phy_plat_data *pdata, int size)
1946 {
1947         if (pdata) {
1948                 int i;
1949
1950                 for (i = 0; i < size; i++, pdata++) {
1951                         usb_phy_data[pdata->instance].instance = pdata->instance;
1952                         usb_phy_data[pdata->instance].vbus_irq = pdata->vbus_irq;
1953                         usb_phy_data[pdata->instance].vbus_gpio = pdata->vbus_gpio;
1954                         usb_phy_data[pdata->instance].vbus_reg_supply = pdata->vbus_reg_supply;
1955                 }
1956         }
1957
1958         return 0;
1959 }