]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/usb/phy/phy-tegra-usb.c
x86/mce/amd: Fix kobject lifetime
[linux.git] / drivers / usb / phy / phy-tegra-usb.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2010 Google, Inc.
4  * Copyright (C) 2013 NVIDIA Corporation
5  *
6  * Author:
7  *      Erik Gilling <konkers@google.com>
8  *      Benoit Goby <benoit@android.com>
9  *      Venu Byravarasu <vbyravarasu@nvidia.com>
10  */
11
12 #include <linux/delay.h>
13 #include <linux/err.h>
14 #include <linux/export.h>
15 #include <linux/gpio.h>
16 #include <linux/iopoll.h>
17 #include <linux/module.h>
18 #include <linux/of.h>
19 #include <linux/of_device.h>
20 #include <linux/of_gpio.h>
21 #include <linux/platform_device.h>
22 #include <linux/resource.h>
23 #include <linux/slab.h>
24 #include <linux/spinlock.h>
25
26 #include <linux/regulator/consumer.h>
27
28 #include <linux/usb/ehci_def.h>
29 #include <linux/usb/of.h>
30 #include <linux/usb/tegra_usb_phy.h>
31 #include <linux/usb/ulpi.h>
32
33 #define ULPI_VIEWPORT                           0x170
34
35 /* PORTSC PTS/PHCD bits, Tegra20 only */
36 #define TEGRA_USB_PORTSC1                       0x184
37 #define TEGRA_USB_PORTSC1_PTS(x)                (((x) & 0x3) << 30)
38 #define TEGRA_USB_PORTSC1_PHCD                  BIT(23)
39
40 /* HOSTPC1 PTS/PHCD bits, Tegra30 and above */
41 #define TEGRA_USB_HOSTPC1_DEVLC                 0x1b4
42 #define TEGRA_USB_HOSTPC1_DEVLC_PTS(x)          (((x) & 0x7) << 29)
43 #define TEGRA_USB_HOSTPC1_DEVLC_PHCD            BIT(22)
44
45 /* Bits of PORTSC1, which will get cleared by writing 1 into them */
46 #define TEGRA_PORTSC1_RWC_BITS  (PORT_CSC | PORT_PEC | PORT_OCC)
47
48 #define USB_SUSP_CTRL                           0x400
49 #define   USB_WAKE_ON_CNNT_EN_DEV               BIT(3)
50 #define   USB_WAKE_ON_DISCON_EN_DEV             BIT(4)
51 #define   USB_SUSP_CLR                          BIT(5)
52 #define   USB_PHY_CLK_VALID                     BIT(7)
53 #define   UTMIP_RESET                           BIT(11)
54 #define   UHSIC_RESET                           BIT(11)
55 #define   UTMIP_PHY_ENABLE                      BIT(12)
56 #define   ULPI_PHY_ENABLE                       BIT(13)
57 #define   USB_SUSP_SET                          BIT(14)
58 #define   USB_WAKEUP_DEBOUNCE_COUNT(x)          (((x) & 0x7) << 16)
59
60 #define USB1_LEGACY_CTRL                        0x410
61 #define   USB1_NO_LEGACY_MODE                   BIT(0)
62 #define   USB1_VBUS_SENSE_CTL_MASK              (3 << 1)
63 #define   USB1_VBUS_SENSE_CTL_VBUS_WAKEUP       (0 << 1)
64 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD_OR_VBUS_WAKEUP \
65                                                 (1 << 1)
66 #define   USB1_VBUS_SENSE_CTL_AB_SESS_VLD       (2 << 1)
67 #define   USB1_VBUS_SENSE_CTL_A_SESS_VLD        (3 << 1)
68
69 #define ULPI_TIMING_CTRL_0                      0x424
70 #define   ULPI_OUTPUT_PINMUX_BYP                BIT(10)
71 #define   ULPI_CLKOUT_PINMUX_BYP                BIT(11)
72
73 #define ULPI_TIMING_CTRL_1                      0x428
74 #define   ULPI_DATA_TRIMMER_LOAD                BIT(0)
75 #define   ULPI_DATA_TRIMMER_SEL(x)              (((x) & 0x7) << 1)
76 #define   ULPI_STPDIRNXT_TRIMMER_LOAD           BIT(16)
77 #define   ULPI_STPDIRNXT_TRIMMER_SEL(x)         (((x) & 0x7) << 17)
78 #define   ULPI_DIR_TRIMMER_LOAD                 BIT(24)
79 #define   ULPI_DIR_TRIMMER_SEL(x)               (((x) & 0x7) << 25)
80
81 #define UTMIP_PLL_CFG1                          0x804
82 #define   UTMIP_XTAL_FREQ_COUNT(x)              (((x) & 0xfff) << 0)
83 #define   UTMIP_PLLU_ENABLE_DLY_COUNT(x)        (((x) & 0x1f) << 27)
84
85 #define UTMIP_XCVR_CFG0                         0x808
86 #define   UTMIP_XCVR_SETUP(x)                   (((x) & 0xf) << 0)
87 #define   UTMIP_XCVR_SETUP_MSB(x)               ((((x) & 0x70) >> 4) << 22)
88 #define   UTMIP_XCVR_LSRSLEW(x)                 (((x) & 0x3) << 8)
89 #define   UTMIP_XCVR_LSFSLEW(x)                 (((x) & 0x3) << 10)
90 #define   UTMIP_FORCE_PD_POWERDOWN              BIT(14)
91 #define   UTMIP_FORCE_PD2_POWERDOWN             BIT(16)
92 #define   UTMIP_FORCE_PDZI_POWERDOWN            BIT(18)
93 #define   UTMIP_XCVR_LSBIAS_SEL                 BIT(21)
94 #define   UTMIP_XCVR_HSSLEW(x)                  (((x) & 0x3) << 4)
95 #define   UTMIP_XCVR_HSSLEW_MSB(x)              ((((x) & 0x1fc) >> 2) << 25)
96
97 #define UTMIP_BIAS_CFG0                         0x80c
98 #define   UTMIP_OTGPD                           BIT(11)
99 #define   UTMIP_BIASPD                          BIT(10)
100 #define   UTMIP_HSSQUELCH_LEVEL(x)              (((x) & 0x3) << 0)
101 #define   UTMIP_HSDISCON_LEVEL(x)               (((x) & 0x3) << 2)
102 #define   UTMIP_HSDISCON_LEVEL_MSB(x)           ((((x) & 0x4) >> 2) << 24)
103
104 #define UTMIP_HSRX_CFG0                         0x810
105 #define   UTMIP_ELASTIC_LIMIT(x)                (((x) & 0x1f) << 10)
106 #define   UTMIP_IDLE_WAIT(x)                    (((x) & 0x1f) << 15)
107
108 #define UTMIP_HSRX_CFG1                         0x814
109 #define   UTMIP_HS_SYNC_START_DLY(x)            (((x) & 0x1f) << 1)
110
111 #define UTMIP_TX_CFG0                           0x820
112 #define   UTMIP_FS_PREABMLE_J                   BIT(19)
113 #define   UTMIP_HS_DISCON_DISABLE               BIT(8)
114
115 #define UTMIP_MISC_CFG0                         0x824
116 #define   UTMIP_DPDM_OBSERVE                    BIT(26)
117 #define   UTMIP_DPDM_OBSERVE_SEL(x)             (((x) & 0xf) << 27)
118 #define   UTMIP_DPDM_OBSERVE_SEL_FS_J           UTMIP_DPDM_OBSERVE_SEL(0xf)
119 #define   UTMIP_DPDM_OBSERVE_SEL_FS_K           UTMIP_DPDM_OBSERVE_SEL(0xe)
120 #define   UTMIP_DPDM_OBSERVE_SEL_FS_SE1         UTMIP_DPDM_OBSERVE_SEL(0xd)
121 #define   UTMIP_DPDM_OBSERVE_SEL_FS_SE0         UTMIP_DPDM_OBSERVE_SEL(0xc)
122 #define   UTMIP_SUSPEND_EXIT_ON_EDGE            BIT(22)
123
124 #define UTMIP_MISC_CFG1                         0x828
125 #define   UTMIP_PLL_ACTIVE_DLY_COUNT(x)         (((x) & 0x1f) << 18)
126 #define   UTMIP_PLLU_STABLE_COUNT(x)            (((x) & 0xfff) << 6)
127
128 #define UTMIP_DEBOUNCE_CFG0                     0x82c
129 #define   UTMIP_BIAS_DEBOUNCE_A(x)              (((x) & 0xffff) << 0)
130
131 #define UTMIP_BAT_CHRG_CFG0                     0x830
132 #define   UTMIP_PD_CHRG                         BIT(0)
133
134 #define UTMIP_SPARE_CFG0                        0x834
135 #define   FUSE_SETUP_SEL                        BIT(3)
136
137 #define UTMIP_XCVR_CFG1                         0x838
138 #define   UTMIP_FORCE_PDDISC_POWERDOWN          BIT(0)
139 #define   UTMIP_FORCE_PDCHRP_POWERDOWN          BIT(2)
140 #define   UTMIP_FORCE_PDDR_POWERDOWN            BIT(4)
141 #define   UTMIP_XCVR_TERM_RANGE_ADJ(x)          (((x) & 0xf) << 18)
142
143 #define UTMIP_BIAS_CFG1                         0x83c
144 #define   UTMIP_BIAS_PDTRK_COUNT(x)             (((x) & 0x1f) << 3)
145
146 /* For Tegra30 and above only, the address is different in Tegra20 */
147 #define USB_USBMODE                             0x1f8
148 #define   USB_USBMODE_MASK                      (3 << 0)
149 #define   USB_USBMODE_HOST                      (3 << 0)
150 #define   USB_USBMODE_DEVICE                    (2 << 0)
151
152 static DEFINE_SPINLOCK(utmip_pad_lock);
153 static unsigned int utmip_pad_count;
154
155 struct tegra_xtal_freq {
156         unsigned int freq;
157         u8 enable_delay;
158         u8 stable_count;
159         u8 active_delay;
160         u8 xtal_freq_count;
161         u16 debounce;
162 };
163
164 static const struct tegra_xtal_freq tegra_freq_table[] = {
165         {
166                 .freq = 12000000,
167                 .enable_delay = 0x02,
168                 .stable_count = 0x2F,
169                 .active_delay = 0x04,
170                 .xtal_freq_count = 0x76,
171                 .debounce = 0x7530,
172         },
173         {
174                 .freq = 13000000,
175                 .enable_delay = 0x02,
176                 .stable_count = 0x33,
177                 .active_delay = 0x05,
178                 .xtal_freq_count = 0x7F,
179                 .debounce = 0x7EF4,
180         },
181         {
182                 .freq = 19200000,
183                 .enable_delay = 0x03,
184                 .stable_count = 0x4B,
185                 .active_delay = 0x06,
186                 .xtal_freq_count = 0xBB,
187                 .debounce = 0xBB80,
188         },
189         {
190                 .freq = 26000000,
191                 .enable_delay = 0x04,
192                 .stable_count = 0x66,
193                 .active_delay = 0x09,
194                 .xtal_freq_count = 0xFE,
195                 .debounce = 0xFDE8,
196         },
197 };
198
199 static inline struct tegra_usb_phy *to_tegra_usb_phy(struct usb_phy *u_phy)
200 {
201         return container_of(u_phy, struct tegra_usb_phy, u_phy);
202 }
203
204 static void set_pts(struct tegra_usb_phy *phy, u8 pts_val)
205 {
206         void __iomem *base = phy->regs;
207         u32 val;
208
209         if (phy->soc_config->has_hostpc) {
210                 val = readl_relaxed(base + TEGRA_USB_HOSTPC1_DEVLC);
211                 val &= ~TEGRA_USB_HOSTPC1_DEVLC_PTS(~0);
212                 val |= TEGRA_USB_HOSTPC1_DEVLC_PTS(pts_val);
213                 writel_relaxed(val, base + TEGRA_USB_HOSTPC1_DEVLC);
214         } else {
215                 val = readl_relaxed(base + TEGRA_USB_PORTSC1);
216                 val &= ~TEGRA_PORTSC1_RWC_BITS;
217                 val &= ~TEGRA_USB_PORTSC1_PTS(~0);
218                 val |= TEGRA_USB_PORTSC1_PTS(pts_val);
219                 writel_relaxed(val, base + TEGRA_USB_PORTSC1);
220         }
221 }
222
223 static void set_phcd(struct tegra_usb_phy *phy, bool enable)
224 {
225         void __iomem *base = phy->regs;
226         u32 val;
227
228         if (phy->soc_config->has_hostpc) {
229                 val = readl_relaxed(base + TEGRA_USB_HOSTPC1_DEVLC);
230                 if (enable)
231                         val |= TEGRA_USB_HOSTPC1_DEVLC_PHCD;
232                 else
233                         val &= ~TEGRA_USB_HOSTPC1_DEVLC_PHCD;
234                 writel_relaxed(val, base + TEGRA_USB_HOSTPC1_DEVLC);
235         } else {
236                 val = readl_relaxed(base + TEGRA_USB_PORTSC1) & ~PORT_RWC_BITS;
237                 if (enable)
238                         val |= TEGRA_USB_PORTSC1_PHCD;
239                 else
240                         val &= ~TEGRA_USB_PORTSC1_PHCD;
241                 writel_relaxed(val, base + TEGRA_USB_PORTSC1);
242         }
243 }
244
245 static int utmip_pad_open(struct tegra_usb_phy *phy)
246 {
247         int ret;
248
249         ret = clk_prepare_enable(phy->pad_clk);
250         if (ret) {
251                 dev_err(phy->u_phy.dev,
252                         "Failed to enable UTMI-pads clock: %d\n", ret);
253                 return ret;
254         }
255
256         spin_lock(&utmip_pad_lock);
257
258         ret = reset_control_deassert(phy->pad_rst);
259         if (ret) {
260                 dev_err(phy->u_phy.dev,
261                         "Failed to initialize UTMI-pads reset: %d\n", ret);
262                 goto unlock;
263         }
264
265         ret = reset_control_assert(phy->pad_rst);
266         if (ret) {
267                 dev_err(phy->u_phy.dev,
268                         "Failed to assert UTMI-pads reset: %d\n", ret);
269                 goto unlock;
270         }
271
272         udelay(1);
273
274         ret = reset_control_deassert(phy->pad_rst);
275         if (ret)
276                 dev_err(phy->u_phy.dev,
277                         "Failed to deassert UTMI-pads reset: %d\n", ret);
278 unlock:
279         spin_unlock(&utmip_pad_lock);
280
281         clk_disable_unprepare(phy->pad_clk);
282
283         return ret;
284 }
285
286 static int utmip_pad_close(struct tegra_usb_phy *phy)
287 {
288         int ret;
289
290         ret = clk_prepare_enable(phy->pad_clk);
291         if (ret) {
292                 dev_err(phy->u_phy.dev,
293                         "Failed to enable UTMI-pads clock: %d\n", ret);
294                 return ret;
295         }
296
297         ret = reset_control_assert(phy->pad_rst);
298         if (ret)
299                 dev_err(phy->u_phy.dev,
300                         "Failed to assert UTMI-pads reset: %d\n", ret);
301
302         udelay(1);
303
304         clk_disable_unprepare(phy->pad_clk);
305
306         return ret;
307 }
308
309 static int utmip_pad_power_on(struct tegra_usb_phy *phy)
310 {
311         struct tegra_utmip_config *config = phy->config;
312         void __iomem *base = phy->pad_regs;
313         u32 val;
314         int err;
315
316         err = clk_prepare_enable(phy->pad_clk);
317         if (err)
318                 return err;
319
320         spin_lock(&utmip_pad_lock);
321
322         if (utmip_pad_count++ == 0) {
323                 val = readl_relaxed(base + UTMIP_BIAS_CFG0);
324                 val &= ~(UTMIP_OTGPD | UTMIP_BIASPD);
325
326                 if (phy->soc_config->requires_extra_tuning_parameters) {
327                         val &= ~(UTMIP_HSSQUELCH_LEVEL(~0) |
328                                 UTMIP_HSDISCON_LEVEL(~0) |
329                                 UTMIP_HSDISCON_LEVEL_MSB(~0));
330
331                         val |= UTMIP_HSSQUELCH_LEVEL(config->hssquelch_level);
332                         val |= UTMIP_HSDISCON_LEVEL(config->hsdiscon_level);
333                         val |= UTMIP_HSDISCON_LEVEL_MSB(config->hsdiscon_level);
334                 }
335                 writel_relaxed(val, base + UTMIP_BIAS_CFG0);
336         }
337
338         spin_unlock(&utmip_pad_lock);
339
340         clk_disable_unprepare(phy->pad_clk);
341
342         return 0;
343 }
344
345 static int utmip_pad_power_off(struct tegra_usb_phy *phy)
346 {
347         void __iomem *base = phy->pad_regs;
348         u32 val;
349         int ret;
350
351         ret = clk_prepare_enable(phy->pad_clk);
352         if (ret)
353                 return ret;
354
355         spin_lock(&utmip_pad_lock);
356
357         if (!utmip_pad_count) {
358                 dev_err(phy->u_phy.dev, "UTMIP pad already powered off\n");
359                 ret = -EINVAL;
360                 goto ulock;
361         }
362
363         if (--utmip_pad_count == 0) {
364                 val = readl_relaxed(base + UTMIP_BIAS_CFG0);
365                 val |= UTMIP_OTGPD | UTMIP_BIASPD;
366                 writel_relaxed(val, base + UTMIP_BIAS_CFG0);
367         }
368 ulock:
369         spin_unlock(&utmip_pad_lock);
370
371         clk_disable_unprepare(phy->pad_clk);
372
373         return ret;
374 }
375
376 static int utmi_wait_register(void __iomem *reg, u32 mask, u32 result)
377 {
378         u32 tmp;
379
380         return readl_relaxed_poll_timeout(reg, tmp, (tmp & mask) == result,
381                                           2000, 6000);
382 }
383
384 static void utmi_phy_clk_disable(struct tegra_usb_phy *phy)
385 {
386         void __iomem *base = phy->regs;
387         u32 val;
388
389         /*
390          * The USB driver may have already initiated the phy clock
391          * disable so wait to see if the clock turns off and if not
392          * then proceed with gating the clock.
393          */
394         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID, 0) == 0)
395                 return;
396
397         if (phy->is_legacy_phy) {
398                 val = readl_relaxed(base + USB_SUSP_CTRL);
399                 val |= USB_SUSP_SET;
400                 writel_relaxed(val, base + USB_SUSP_CTRL);
401
402                 usleep_range(10, 100);
403
404                 val = readl_relaxed(base + USB_SUSP_CTRL);
405                 val &= ~USB_SUSP_SET;
406                 writel_relaxed(val, base + USB_SUSP_CTRL);
407         } else {
408                 set_phcd(phy, true);
409         }
410
411         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID, 0))
412                 dev_err(phy->u_phy.dev,
413                         "Timeout waiting for PHY to stabilize on disable\n");
414 }
415
416 static void utmi_phy_clk_enable(struct tegra_usb_phy *phy)
417 {
418         void __iomem *base = phy->regs;
419         u32 val;
420
421         /*
422          * The USB driver may have already initiated the phy clock
423          * enable so wait to see if the clock turns on and if not
424          * then proceed with ungating the clock.
425          */
426         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
427                                USB_PHY_CLK_VALID) == 0)
428                 return;
429
430         if (phy->is_legacy_phy) {
431                 val = readl_relaxed(base + USB_SUSP_CTRL);
432                 val |= USB_SUSP_CLR;
433                 writel_relaxed(val, base + USB_SUSP_CTRL);
434
435                 usleep_range(10, 100);
436
437                 val = readl_relaxed(base + USB_SUSP_CTRL);
438                 val &= ~USB_SUSP_CLR;
439                 writel_relaxed(val, base + USB_SUSP_CTRL);
440         } else {
441                 set_phcd(phy, false);
442         }
443
444         if (utmi_wait_register(base + USB_SUSP_CTRL, USB_PHY_CLK_VALID,
445                                USB_PHY_CLK_VALID))
446                 dev_err(phy->u_phy.dev,
447                         "Timeout waiting for PHY to stabilize on enable\n");
448 }
449
450 static int utmi_phy_power_on(struct tegra_usb_phy *phy)
451 {
452         struct tegra_utmip_config *config = phy->config;
453         void __iomem *base = phy->regs;
454         u32 val;
455         int err;
456
457         val = readl_relaxed(base + USB_SUSP_CTRL);
458         val |= UTMIP_RESET;
459         writel_relaxed(val, base + USB_SUSP_CTRL);
460
461         if (phy->is_legacy_phy) {
462                 val = readl_relaxed(base + USB1_LEGACY_CTRL);
463                 val |= USB1_NO_LEGACY_MODE;
464                 writel_relaxed(val, base + USB1_LEGACY_CTRL);
465         }
466
467         val = readl_relaxed(base + UTMIP_TX_CFG0);
468         val |= UTMIP_FS_PREABMLE_J;
469         writel_relaxed(val, base + UTMIP_TX_CFG0);
470
471         val = readl_relaxed(base + UTMIP_HSRX_CFG0);
472         val &= ~(UTMIP_IDLE_WAIT(~0) | UTMIP_ELASTIC_LIMIT(~0));
473         val |= UTMIP_IDLE_WAIT(config->idle_wait_delay);
474         val |= UTMIP_ELASTIC_LIMIT(config->elastic_limit);
475         writel_relaxed(val, base + UTMIP_HSRX_CFG0);
476
477         val = readl_relaxed(base + UTMIP_HSRX_CFG1);
478         val &= ~UTMIP_HS_SYNC_START_DLY(~0);
479         val |= UTMIP_HS_SYNC_START_DLY(config->hssync_start_delay);
480         writel_relaxed(val, base + UTMIP_HSRX_CFG1);
481
482         val = readl_relaxed(base + UTMIP_DEBOUNCE_CFG0);
483         val &= ~UTMIP_BIAS_DEBOUNCE_A(~0);
484         val |= UTMIP_BIAS_DEBOUNCE_A(phy->freq->debounce);
485         writel_relaxed(val, base + UTMIP_DEBOUNCE_CFG0);
486
487         val = readl_relaxed(base + UTMIP_MISC_CFG0);
488         val &= ~UTMIP_SUSPEND_EXIT_ON_EDGE;
489         writel_relaxed(val, base + UTMIP_MISC_CFG0);
490
491         if (!phy->soc_config->utmi_pll_config_in_car_module) {
492                 val = readl_relaxed(base + UTMIP_MISC_CFG1);
493                 val &= ~(UTMIP_PLL_ACTIVE_DLY_COUNT(~0) |
494                         UTMIP_PLLU_STABLE_COUNT(~0));
495                 val |= UTMIP_PLL_ACTIVE_DLY_COUNT(phy->freq->active_delay) |
496                         UTMIP_PLLU_STABLE_COUNT(phy->freq->stable_count);
497                 writel_relaxed(val, base + UTMIP_MISC_CFG1);
498
499                 val = readl_relaxed(base + UTMIP_PLL_CFG1);
500                 val &= ~(UTMIP_XTAL_FREQ_COUNT(~0) |
501                         UTMIP_PLLU_ENABLE_DLY_COUNT(~0));
502                 val |= UTMIP_XTAL_FREQ_COUNT(phy->freq->xtal_freq_count) |
503                         UTMIP_PLLU_ENABLE_DLY_COUNT(phy->freq->enable_delay);
504                 writel_relaxed(val, base + UTMIP_PLL_CFG1);
505         }
506
507         if (phy->mode == USB_DR_MODE_PERIPHERAL) {
508                 val = readl_relaxed(base + USB_SUSP_CTRL);
509                 val &= ~(USB_WAKE_ON_CNNT_EN_DEV | USB_WAKE_ON_DISCON_EN_DEV);
510                 writel_relaxed(val, base + USB_SUSP_CTRL);
511
512                 val = readl_relaxed(base + UTMIP_BAT_CHRG_CFG0);
513                 val &= ~UTMIP_PD_CHRG;
514                 writel_relaxed(val, base + UTMIP_BAT_CHRG_CFG0);
515         } else {
516                 val = readl_relaxed(base + UTMIP_BAT_CHRG_CFG0);
517                 val |= UTMIP_PD_CHRG;
518                 writel_relaxed(val, base + UTMIP_BAT_CHRG_CFG0);
519         }
520
521         err = utmip_pad_power_on(phy);
522         if (err)
523                 return err;
524
525         val = readl_relaxed(base + UTMIP_XCVR_CFG0);
526         val &= ~(UTMIP_FORCE_PD_POWERDOWN | UTMIP_FORCE_PD2_POWERDOWN |
527                  UTMIP_FORCE_PDZI_POWERDOWN | UTMIP_XCVR_LSBIAS_SEL |
528                  UTMIP_XCVR_SETUP(~0) | UTMIP_XCVR_SETUP_MSB(~0) |
529                  UTMIP_XCVR_LSFSLEW(~0) | UTMIP_XCVR_LSRSLEW(~0));
530
531         if (!config->xcvr_setup_use_fuses) {
532                 val |= UTMIP_XCVR_SETUP(config->xcvr_setup);
533                 val |= UTMIP_XCVR_SETUP_MSB(config->xcvr_setup);
534         }
535         val |= UTMIP_XCVR_LSFSLEW(config->xcvr_lsfslew);
536         val |= UTMIP_XCVR_LSRSLEW(config->xcvr_lsrslew);
537
538         if (phy->soc_config->requires_extra_tuning_parameters) {
539                 val &= ~(UTMIP_XCVR_HSSLEW(~0) | UTMIP_XCVR_HSSLEW_MSB(~0));
540                 val |= UTMIP_XCVR_HSSLEW(config->xcvr_hsslew);
541                 val |= UTMIP_XCVR_HSSLEW_MSB(config->xcvr_hsslew);
542         }
543         writel_relaxed(val, base + UTMIP_XCVR_CFG0);
544
545         val = readl_relaxed(base + UTMIP_XCVR_CFG1);
546         val &= ~(UTMIP_FORCE_PDDISC_POWERDOWN | UTMIP_FORCE_PDCHRP_POWERDOWN |
547                  UTMIP_FORCE_PDDR_POWERDOWN | UTMIP_XCVR_TERM_RANGE_ADJ(~0));
548         val |= UTMIP_XCVR_TERM_RANGE_ADJ(config->term_range_adj);
549         writel_relaxed(val, base + UTMIP_XCVR_CFG1);
550
551         val = readl_relaxed(base + UTMIP_BIAS_CFG1);
552         val &= ~UTMIP_BIAS_PDTRK_COUNT(~0);
553         val |= UTMIP_BIAS_PDTRK_COUNT(0x5);
554         writel_relaxed(val, base + UTMIP_BIAS_CFG1);
555
556         val = readl_relaxed(base + UTMIP_SPARE_CFG0);
557         if (config->xcvr_setup_use_fuses)
558                 val |= FUSE_SETUP_SEL;
559         else
560                 val &= ~FUSE_SETUP_SEL;
561         writel_relaxed(val, base + UTMIP_SPARE_CFG0);
562
563         if (!phy->is_legacy_phy) {
564                 val = readl_relaxed(base + USB_SUSP_CTRL);
565                 val |= UTMIP_PHY_ENABLE;
566                 writel_relaxed(val, base + USB_SUSP_CTRL);
567         }
568
569         val = readl_relaxed(base + USB_SUSP_CTRL);
570         val &= ~UTMIP_RESET;
571         writel_relaxed(val, base + USB_SUSP_CTRL);
572
573         if (phy->is_legacy_phy) {
574                 val = readl_relaxed(base + USB1_LEGACY_CTRL);
575                 val &= ~USB1_VBUS_SENSE_CTL_MASK;
576                 val |= USB1_VBUS_SENSE_CTL_A_SESS_VLD;
577                 writel_relaxed(val, base + USB1_LEGACY_CTRL);
578
579                 val = readl_relaxed(base + USB_SUSP_CTRL);
580                 val &= ~USB_SUSP_SET;
581                 writel_relaxed(val, base + USB_SUSP_CTRL);
582         }
583
584         utmi_phy_clk_enable(phy);
585
586         if (phy->soc_config->requires_usbmode_setup) {
587                 val = readl_relaxed(base + USB_USBMODE);
588                 val &= ~USB_USBMODE_MASK;
589                 if (phy->mode == USB_DR_MODE_HOST)
590                         val |= USB_USBMODE_HOST;
591                 else
592                         val |= USB_USBMODE_DEVICE;
593                 writel_relaxed(val, base + USB_USBMODE);
594         }
595
596         if (!phy->is_legacy_phy)
597                 set_pts(phy, 0);
598
599         return 0;
600 }
601
602 static int utmi_phy_power_off(struct tegra_usb_phy *phy)
603 {
604         void __iomem *base = phy->regs;
605         u32 val;
606
607         utmi_phy_clk_disable(phy);
608
609         if (phy->mode == USB_DR_MODE_PERIPHERAL) {
610                 val = readl_relaxed(base + USB_SUSP_CTRL);
611                 val &= ~USB_WAKEUP_DEBOUNCE_COUNT(~0);
612                 val |= USB_WAKE_ON_CNNT_EN_DEV | USB_WAKEUP_DEBOUNCE_COUNT(5);
613                 writel_relaxed(val, base + USB_SUSP_CTRL);
614         }
615
616         val = readl_relaxed(base + USB_SUSP_CTRL);
617         val |= UTMIP_RESET;
618         writel_relaxed(val, base + USB_SUSP_CTRL);
619
620         val = readl_relaxed(base + UTMIP_BAT_CHRG_CFG0);
621         val |= UTMIP_PD_CHRG;
622         writel_relaxed(val, base + UTMIP_BAT_CHRG_CFG0);
623
624         val = readl_relaxed(base + UTMIP_XCVR_CFG0);
625         val |= UTMIP_FORCE_PD_POWERDOWN | UTMIP_FORCE_PD2_POWERDOWN |
626                UTMIP_FORCE_PDZI_POWERDOWN;
627         writel_relaxed(val, base + UTMIP_XCVR_CFG0);
628
629         val = readl_relaxed(base + UTMIP_XCVR_CFG1);
630         val |= UTMIP_FORCE_PDDISC_POWERDOWN | UTMIP_FORCE_PDCHRP_POWERDOWN |
631                UTMIP_FORCE_PDDR_POWERDOWN;
632         writel_relaxed(val, base + UTMIP_XCVR_CFG1);
633
634         return utmip_pad_power_off(phy);
635 }
636
637 static void utmi_phy_preresume(struct tegra_usb_phy *phy)
638 {
639         void __iomem *base = phy->regs;
640         u32 val;
641
642         val = readl_relaxed(base + UTMIP_TX_CFG0);
643         val |= UTMIP_HS_DISCON_DISABLE;
644         writel_relaxed(val, base + UTMIP_TX_CFG0);
645 }
646
647 static void utmi_phy_postresume(struct tegra_usb_phy *phy)
648 {
649         void __iomem *base = phy->regs;
650         u32 val;
651
652         val = readl_relaxed(base + UTMIP_TX_CFG0);
653         val &= ~UTMIP_HS_DISCON_DISABLE;
654         writel_relaxed(val, base + UTMIP_TX_CFG0);
655 }
656
657 static void utmi_phy_restore_start(struct tegra_usb_phy *phy,
658                                    enum tegra_usb_phy_port_speed port_speed)
659 {
660         void __iomem *base = phy->regs;
661         u32 val;
662
663         val = readl_relaxed(base + UTMIP_MISC_CFG0);
664         val &= ~UTMIP_DPDM_OBSERVE_SEL(~0);
665         if (port_speed == TEGRA_USB_PHY_PORT_SPEED_LOW)
666                 val |= UTMIP_DPDM_OBSERVE_SEL_FS_K;
667         else
668                 val |= UTMIP_DPDM_OBSERVE_SEL_FS_J;
669         writel_relaxed(val, base + UTMIP_MISC_CFG0);
670         usleep_range(1, 10);
671
672         val = readl_relaxed(base + UTMIP_MISC_CFG0);
673         val |= UTMIP_DPDM_OBSERVE;
674         writel_relaxed(val, base + UTMIP_MISC_CFG0);
675         usleep_range(10, 100);
676 }
677
678 static void utmi_phy_restore_end(struct tegra_usb_phy *phy)
679 {
680         void __iomem *base = phy->regs;
681         u32 val;
682
683         val = readl_relaxed(base + UTMIP_MISC_CFG0);
684         val &= ~UTMIP_DPDM_OBSERVE;
685         writel_relaxed(val, base + UTMIP_MISC_CFG0);
686         usleep_range(10, 100);
687 }
688
689 static int ulpi_phy_power_on(struct tegra_usb_phy *phy)
690 {
691         void __iomem *base = phy->regs;
692         u32 val;
693         int err;
694
695         gpiod_set_value_cansleep(phy->reset_gpio, 1);
696
697         err = clk_prepare_enable(phy->clk);
698         if (err)
699                 return err;
700
701         usleep_range(5000, 6000);
702
703         gpiod_set_value_cansleep(phy->reset_gpio, 0);
704
705         usleep_range(1000, 2000);
706
707         val = readl_relaxed(base + USB_SUSP_CTRL);
708         val |= UHSIC_RESET;
709         writel_relaxed(val, base + USB_SUSP_CTRL);
710
711         val = readl_relaxed(base + ULPI_TIMING_CTRL_0);
712         val |= ULPI_OUTPUT_PINMUX_BYP | ULPI_CLKOUT_PINMUX_BYP;
713         writel_relaxed(val, base + ULPI_TIMING_CTRL_0);
714
715         val = readl_relaxed(base + USB_SUSP_CTRL);
716         val |= ULPI_PHY_ENABLE;
717         writel_relaxed(val, base + USB_SUSP_CTRL);
718
719         val = 0;
720         writel_relaxed(val, base + ULPI_TIMING_CTRL_1);
721
722         val |= ULPI_DATA_TRIMMER_SEL(4);
723         val |= ULPI_STPDIRNXT_TRIMMER_SEL(4);
724         val |= ULPI_DIR_TRIMMER_SEL(4);
725         writel_relaxed(val, base + ULPI_TIMING_CTRL_1);
726         usleep_range(10, 100);
727
728         val |= ULPI_DATA_TRIMMER_LOAD;
729         val |= ULPI_STPDIRNXT_TRIMMER_LOAD;
730         val |= ULPI_DIR_TRIMMER_LOAD;
731         writel_relaxed(val, base + ULPI_TIMING_CTRL_1);
732
733         /* Fix VbusInvalid due to floating VBUS */
734         err = usb_phy_io_write(phy->ulpi, 0x40, 0x08);
735         if (err) {
736                 dev_err(phy->u_phy.dev, "ULPI write failed: %d\n", err);
737                 goto disable_clk;
738         }
739
740         err = usb_phy_io_write(phy->ulpi, 0x80, 0x0B);
741         if (err) {
742                 dev_err(phy->u_phy.dev, "ULPI write failed: %d\n", err);
743                 goto disable_clk;
744         }
745
746         val = readl_relaxed(base + USB_SUSP_CTRL);
747         val |= USB_SUSP_CLR;
748         writel_relaxed(val, base + USB_SUSP_CTRL);
749         usleep_range(100, 1000);
750
751         val = readl_relaxed(base + USB_SUSP_CTRL);
752         val &= ~USB_SUSP_CLR;
753         writel_relaxed(val, base + USB_SUSP_CTRL);
754
755         return 0;
756
757 disable_clk:
758         clk_disable_unprepare(phy->clk);
759
760         return err;
761 }
762
763 static int ulpi_phy_power_off(struct tegra_usb_phy *phy)
764 {
765         gpiod_set_value_cansleep(phy->reset_gpio, 1);
766         usleep_range(5000, 6000);
767         clk_disable_unprepare(phy->clk);
768
769         return 0;
770 }
771
772 static int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
773 {
774         int err;
775
776         if (phy->powered_on)
777                 return 0;
778
779         if (phy->is_ulpi_phy)
780                 err = ulpi_phy_power_on(phy);
781         else
782                 err = utmi_phy_power_on(phy);
783         if (err)
784                 return err;
785
786         phy->powered_on = true;
787
788         return 0;
789 }
790
791 static int tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
792 {
793         int err;
794
795         if (!phy->powered_on)
796                 return 0;
797
798         if (phy->is_ulpi_phy)
799                 err = ulpi_phy_power_off(phy);
800         else
801                 err = utmi_phy_power_off(phy);
802         if (err)
803                 return err;
804
805         phy->powered_on = false;
806
807         return 0;
808 }
809
810 static void tegra_usb_phy_shutdown(struct usb_phy *u_phy)
811 {
812         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
813
814         if (WARN_ON(!phy->freq))
815                 return;
816
817         tegra_usb_phy_power_off(phy);
818
819         if (!phy->is_ulpi_phy)
820                 utmip_pad_close(phy);
821
822         regulator_disable(phy->vbus);
823         clk_disable_unprepare(phy->pll_u);
824
825         phy->freq = NULL;
826 }
827
828 static int tegra_usb_phy_set_suspend(struct usb_phy *u_phy, int suspend)
829 {
830         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
831
832         if (WARN_ON(!phy->freq))
833                 return -EINVAL;
834
835         if (suspend)
836                 return tegra_usb_phy_power_off(phy);
837         else
838                 return tegra_usb_phy_power_on(phy);
839 }
840
841 static int tegra_usb_phy_init(struct usb_phy *u_phy)
842 {
843         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
844         unsigned long parent_rate;
845         unsigned int i;
846         int err;
847
848         if (WARN_ON(phy->freq))
849                 return 0;
850
851         err = clk_prepare_enable(phy->pll_u);
852         if (err)
853                 return err;
854
855         parent_rate = clk_get_rate(clk_get_parent(phy->pll_u));
856         for (i = 0; i < ARRAY_SIZE(tegra_freq_table); i++) {
857                 if (tegra_freq_table[i].freq == parent_rate) {
858                         phy->freq = &tegra_freq_table[i];
859                         break;
860                 }
861         }
862         if (!phy->freq) {
863                 dev_err(phy->u_phy.dev, "Invalid pll_u parent rate %ld\n",
864                         parent_rate);
865                 err = -EINVAL;
866                 goto disable_clk;
867         }
868
869         err = regulator_enable(phy->vbus);
870         if (err) {
871                 dev_err(phy->u_phy.dev,
872                         "Failed to enable USB VBUS regulator: %d\n", err);
873                 goto disable_clk;
874         }
875
876         if (!phy->is_ulpi_phy) {
877                 err = utmip_pad_open(phy);
878                 if (err)
879                         goto disable_vbus;
880         }
881
882         err = tegra_usb_phy_power_on(phy);
883         if (err)
884                 goto close_phy;
885
886         return 0;
887
888 close_phy:
889         if (!phy->is_ulpi_phy)
890                 utmip_pad_close(phy);
891
892 disable_vbus:
893         regulator_disable(phy->vbus);
894
895 disable_clk:
896         clk_disable_unprepare(phy->pll_u);
897
898         phy->freq = NULL;
899
900         return err;
901 }
902
903 void tegra_usb_phy_preresume(struct usb_phy *u_phy)
904 {
905         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
906
907         if (!phy->is_ulpi_phy)
908                 utmi_phy_preresume(phy);
909 }
910 EXPORT_SYMBOL_GPL(tegra_usb_phy_preresume);
911
912 void tegra_usb_phy_postresume(struct usb_phy *u_phy)
913 {
914         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
915
916         if (!phy->is_ulpi_phy)
917                 utmi_phy_postresume(phy);
918 }
919 EXPORT_SYMBOL_GPL(tegra_usb_phy_postresume);
920
921 void tegra_ehci_phy_restore_start(struct usb_phy *u_phy,
922                                   enum tegra_usb_phy_port_speed port_speed)
923 {
924         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
925
926         if (!phy->is_ulpi_phy)
927                 utmi_phy_restore_start(phy, port_speed);
928 }
929 EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_start);
930
931 void tegra_ehci_phy_restore_end(struct usb_phy *u_phy)
932 {
933         struct tegra_usb_phy *phy = to_tegra_usb_phy(u_phy);
934
935         if (!phy->is_ulpi_phy)
936                 utmi_phy_restore_end(phy);
937 }
938 EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_end);
939
940 static int read_utmi_param(struct platform_device *pdev, const char *param,
941                            u8 *dest)
942 {
943         u32 value;
944         int err;
945
946         err = of_property_read_u32(pdev->dev.of_node, param, &value);
947         if (err)
948                 dev_err(&pdev->dev,
949                         "Failed to read USB UTMI parameter %s: %d\n",
950                         param, err);
951         else
952                 *dest = value;
953
954         return err;
955 }
956
957 static int utmi_phy_probe(struct tegra_usb_phy *tegra_phy,
958                           struct platform_device *pdev)
959 {
960         struct tegra_utmip_config *config;
961         struct resource *res;
962         int err;
963
964         tegra_phy->is_ulpi_phy = false;
965
966         res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
967         if (!res) {
968                 dev_err(&pdev->dev, "Failed to get UTMI pad regs\n");
969                 return  -ENXIO;
970         }
971
972         tegra_phy->pad_regs = devm_ioremap(&pdev->dev, res->start,
973                                            resource_size(res));
974         if (!tegra_phy->pad_regs) {
975                 dev_err(&pdev->dev, "Failed to remap UTMI pad regs\n");
976                 return -ENOMEM;
977         }
978
979         tegra_phy->config = devm_kzalloc(&pdev->dev, sizeof(*config),
980                                          GFP_KERNEL);
981         if (!tegra_phy->config)
982                 return -ENOMEM;
983
984         config = tegra_phy->config;
985
986         err = read_utmi_param(pdev, "nvidia,hssync-start-delay",
987                               &config->hssync_start_delay);
988         if (err)
989                 return err;
990
991         err = read_utmi_param(pdev, "nvidia,elastic-limit",
992                               &config->elastic_limit);
993         if (err)
994                 return err;
995
996         err = read_utmi_param(pdev, "nvidia,idle-wait-delay",
997                               &config->idle_wait_delay);
998         if (err)
999                 return err;
1000
1001         err = read_utmi_param(pdev, "nvidia,term-range-adj",
1002                               &config->term_range_adj);
1003         if (err)
1004                 return err;
1005
1006         err = read_utmi_param(pdev, "nvidia,xcvr-lsfslew",
1007                               &config->xcvr_lsfslew);
1008         if (err)
1009                 return err;
1010
1011         err = read_utmi_param(pdev, "nvidia,xcvr-lsrslew",
1012                               &config->xcvr_lsrslew);
1013         if (err)
1014                 return err;
1015
1016         if (tegra_phy->soc_config->requires_extra_tuning_parameters) {
1017                 err = read_utmi_param(pdev, "nvidia,xcvr-hsslew",
1018                                       &config->xcvr_hsslew);
1019                 if (err)
1020                         return err;
1021
1022                 err = read_utmi_param(pdev, "nvidia,hssquelch-level",
1023                                       &config->hssquelch_level);
1024                 if (err)
1025                         return err;
1026
1027                 err = read_utmi_param(pdev, "nvidia,hsdiscon-level",
1028                                       &config->hsdiscon_level);
1029                 if (err)
1030                         return err;
1031         }
1032
1033         config->xcvr_setup_use_fuses = of_property_read_bool(
1034                 pdev->dev.of_node, "nvidia,xcvr-setup-use-fuses");
1035
1036         if (!config->xcvr_setup_use_fuses) {
1037                 err = read_utmi_param(pdev, "nvidia,xcvr-setup",
1038                                       &config->xcvr_setup);
1039                 if (err)
1040                         return err;
1041         }
1042
1043         return 0;
1044 }
1045
1046 static const struct tegra_phy_soc_config tegra20_soc_config = {
1047         .utmi_pll_config_in_car_module = false,
1048         .has_hostpc = false,
1049         .requires_usbmode_setup = false,
1050         .requires_extra_tuning_parameters = false,
1051 };
1052
1053 static const struct tegra_phy_soc_config tegra30_soc_config = {
1054         .utmi_pll_config_in_car_module = true,
1055         .has_hostpc = true,
1056         .requires_usbmode_setup = true,
1057         .requires_extra_tuning_parameters = true,
1058 };
1059
1060 static const struct of_device_id tegra_usb_phy_id_table[] = {
1061         { .compatible = "nvidia,tegra30-usb-phy", .data = &tegra30_soc_config },
1062         { .compatible = "nvidia,tegra20-usb-phy", .data = &tegra20_soc_config },
1063         { },
1064 };
1065 MODULE_DEVICE_TABLE(of, tegra_usb_phy_id_table);
1066
1067 static int tegra_usb_phy_probe(struct platform_device *pdev)
1068 {
1069         struct device_node *np = pdev->dev.of_node;
1070         struct tegra_usb_phy *tegra_phy;
1071         enum usb_phy_interface phy_type;
1072         struct reset_control *reset;
1073         struct gpio_desc *gpiod;
1074         struct resource *res;
1075         struct usb_phy *phy;
1076         int err;
1077
1078         tegra_phy = devm_kzalloc(&pdev->dev, sizeof(*tegra_phy), GFP_KERNEL);
1079         if (!tegra_phy)
1080                 return -ENOMEM;
1081
1082         tegra_phy->soc_config = of_device_get_match_data(&pdev->dev);
1083
1084         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1085         if (!res) {
1086                 dev_err(&pdev->dev, "Failed to get I/O memory\n");
1087                 return  -ENXIO;
1088         }
1089
1090         tegra_phy->regs = devm_ioremap(&pdev->dev, res->start,
1091                                        resource_size(res));
1092         if (!tegra_phy->regs) {
1093                 dev_err(&pdev->dev, "Failed to remap I/O memory\n");
1094                 return -ENOMEM;
1095         }
1096
1097         tegra_phy->is_legacy_phy =
1098                 of_property_read_bool(np, "nvidia,has-legacy-mode");
1099
1100         if (of_find_property(np, "dr_mode", NULL))
1101                 tegra_phy->mode = usb_get_dr_mode(&pdev->dev);
1102         else
1103                 tegra_phy->mode = USB_DR_MODE_HOST;
1104
1105         if (tegra_phy->mode == USB_DR_MODE_UNKNOWN) {
1106                 dev_err(&pdev->dev, "dr_mode is invalid\n");
1107                 return -EINVAL;
1108         }
1109
1110         /* On some boards, the VBUS regulator doesn't need to be controlled */
1111         tegra_phy->vbus = devm_regulator_get(&pdev->dev, "vbus");
1112         if (IS_ERR(tegra_phy->vbus))
1113                 return PTR_ERR(tegra_phy->vbus);
1114
1115         tegra_phy->pll_u = devm_clk_get(&pdev->dev, "pll_u");
1116         err = PTR_ERR_OR_ZERO(tegra_phy->pll_u);
1117         if (err) {
1118                 dev_err(&pdev->dev, "Failed to get pll_u clock: %d\n", err);
1119                 return err;
1120         }
1121
1122         phy_type = of_usb_get_phy_mode(np);
1123         switch (phy_type) {
1124         case USBPHY_INTERFACE_MODE_UTMI:
1125                 err = utmi_phy_probe(tegra_phy, pdev);
1126                 if (err)
1127                         return err;
1128
1129                 tegra_phy->pad_clk = devm_clk_get(&pdev->dev, "utmi-pads");
1130                 err = PTR_ERR_OR_ZERO(tegra_phy->pad_clk);
1131                 if (err) {
1132                         dev_err(&pdev->dev,
1133                                 "Failed to get UTMIP pad clock: %d\n", err);
1134                         return err;
1135                 }
1136
1137                 reset = devm_reset_control_get_optional_shared(&pdev->dev,
1138                                                                "utmi-pads");
1139                 err = PTR_ERR_OR_ZERO(reset);
1140                 if (err) {
1141                         dev_err(&pdev->dev,
1142                                 "Failed to get UTMI-pads reset: %d\n", err);
1143                         return err;
1144                 }
1145                 tegra_phy->pad_rst = reset;
1146                 break;
1147
1148         case USBPHY_INTERFACE_MODE_ULPI:
1149                 tegra_phy->is_ulpi_phy = true;
1150
1151                 tegra_phy->clk = devm_clk_get(&pdev->dev, "ulpi-link");
1152                 err = PTR_ERR_OR_ZERO(tegra_phy->clk);
1153                 if (err) {
1154                         dev_err(&pdev->dev,
1155                                 "Failed to get ULPI clock: %d\n", err);
1156                         return err;
1157                 }
1158
1159                 gpiod = devm_gpiod_get_from_of_node(&pdev->dev, np,
1160                                                     "nvidia,phy-reset-gpio",
1161                                                     0, GPIOD_OUT_HIGH,
1162                                                     "ulpi_phy_reset_b");
1163                 err = PTR_ERR_OR_ZERO(gpiod);
1164                 if (err) {
1165                         dev_err(&pdev->dev,
1166                                 "Request failed for reset GPIO: %d\n", err);
1167                         return err;
1168                 }
1169                 tegra_phy->reset_gpio = gpiod;
1170
1171                 phy = devm_otg_ulpi_create(&pdev->dev,
1172                                            &ulpi_viewport_access_ops, 0);
1173                 if (!phy) {
1174                         dev_err(&pdev->dev, "Failed to create ULPI OTG\n");
1175                         return -ENOMEM;
1176                 }
1177
1178                 tegra_phy->ulpi = phy;
1179                 tegra_phy->ulpi->io_priv = tegra_phy->regs + ULPI_VIEWPORT;
1180                 break;
1181
1182         default:
1183                 dev_err(&pdev->dev, "phy_type %u is invalid or unsupported\n",
1184                         phy_type);
1185                 return -EINVAL;
1186         }
1187
1188         tegra_phy->u_phy.dev = &pdev->dev;
1189         tegra_phy->u_phy.init = tegra_usb_phy_init;
1190         tegra_phy->u_phy.shutdown = tegra_usb_phy_shutdown;
1191         tegra_phy->u_phy.set_suspend = tegra_usb_phy_set_suspend;
1192
1193         platform_set_drvdata(pdev, tegra_phy);
1194
1195         err = usb_add_phy_dev(&tegra_phy->u_phy);
1196         if (err)
1197                 return err;
1198
1199         return 0;
1200 }
1201
1202 static int tegra_usb_phy_remove(struct platform_device *pdev)
1203 {
1204         struct tegra_usb_phy *tegra_phy = platform_get_drvdata(pdev);
1205
1206         usb_remove_phy(&tegra_phy->u_phy);
1207
1208         return 0;
1209 }
1210
1211 static struct platform_driver tegra_usb_phy_driver = {
1212         .probe          = tegra_usb_phy_probe,
1213         .remove         = tegra_usb_phy_remove,
1214         .driver         = {
1215                 .name   = "tegra-phy",
1216                 .of_match_table = tegra_usb_phy_id_table,
1217         },
1218 };
1219 module_platform_driver(tegra_usb_phy_driver);
1220
1221 MODULE_DESCRIPTION("Tegra USB PHY driver");
1222 MODULE_LICENSE("GPL v2");