1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/module.h>
20#include <linux/device.h>
21#include <linux/platform_device.h>
22#include <linux/clk.h>
23#include <linux/slab.h>
24#include <linux/interrupt.h>
25#include <linux/err.h>
26#include <linux/delay.h>
27#include <linux/io.h>
28#include <linux/ioport.h>
29#include <linux/uaccess.h>
30#include <linux/debugfs.h>
31#include <linux/seq_file.h>
32#include <linux/pm_runtime.h>
33#include <linux/of.h>
34#include <linux/of_device.h>
35#include <linux/reset.h>
36
37#include <linux/usb.h>
38#include <linux/usb/otg.h>
39#include <linux/usb/of.h>
40#include <linux/usb/ulpi.h>
41#include <linux/usb/gadget.h>
42#include <linux/usb/hcd.h>
43#include <linux/usb/msm_hsusb.h>
44#include <linux/usb/msm_hsusb_hw.h>
45#include <linux/regulator/consumer.h>
46
47#define MSM_USB_BASE (motg->regs)
48#define DRIVER_NAME "msm_otg"
49
50#define ULPI_IO_TIMEOUT_USEC (10 * 1000)
51#define LINK_RESET_TIMEOUT_USEC (250 * 1000)
52
53#define USB_PHY_3P3_VOL_MIN 3050000
54#define USB_PHY_3P3_VOL_MAX 3300000
55#define USB_PHY_3P3_HPM_LOAD 50000
56#define USB_PHY_3P3_LPM_LOAD 4000
57
58#define USB_PHY_1P8_VOL_MIN 1800000
59#define USB_PHY_1P8_VOL_MAX 1800000
60#define USB_PHY_1P8_HPM_LOAD 50000
61#define USB_PHY_1P8_LPM_LOAD 4000
62
63#define USB_PHY_VDD_DIG_VOL_MIN 1000000
64#define USB_PHY_VDD_DIG_VOL_MAX 1320000
65#define USB_PHY_SUSP_DIG_VOL 500000
66
67enum vdd_levels {
68 VDD_LEVEL_NONE = 0,
69 VDD_LEVEL_MIN,
70 VDD_LEVEL_MAX,
71};
72
73static int msm_hsusb_init_vddcx(struct msm_otg *motg, int init)
74{
75 int ret = 0;
76
77 if (init) {
78 ret = regulator_set_voltage(motg->vddcx,
79 motg->vdd_levels[VDD_LEVEL_MIN],
80 motg->vdd_levels[VDD_LEVEL_MAX]);
81 if (ret) {
82 dev_err(motg->phy.dev, "Cannot set vddcx voltage\n");
83 return ret;
84 }
85
86 ret = regulator_enable(motg->vddcx);
87 if (ret)
88 dev_err(motg->phy.dev, "unable to enable hsusb vddcx\n");
89 } else {
90 ret = regulator_set_voltage(motg->vddcx, 0,
91 motg->vdd_levels[VDD_LEVEL_MAX]);
92 if (ret)
93 dev_err(motg->phy.dev, "Cannot set vddcx voltage\n");
94 ret = regulator_disable(motg->vddcx);
95 if (ret)
96 dev_err(motg->phy.dev, "unable to disable hsusb vddcx\n");
97 }
98
99 return ret;
100}
101
102static int msm_hsusb_ldo_init(struct msm_otg *motg, int init)
103{
104 int rc = 0;
105
106 if (init) {
107 rc = regulator_set_voltage(motg->v3p3, USB_PHY_3P3_VOL_MIN,
108 USB_PHY_3P3_VOL_MAX);
109 if (rc) {
110 dev_err(motg->phy.dev, "Cannot set v3p3 voltage\n");
111 goto exit;
112 }
113 rc = regulator_enable(motg->v3p3);
114 if (rc) {
115 dev_err(motg->phy.dev, "unable to enable the hsusb 3p3\n");
116 goto exit;
117 }
118 rc = regulator_set_voltage(motg->v1p8, USB_PHY_1P8_VOL_MIN,
119 USB_PHY_1P8_VOL_MAX);
120 if (rc) {
121 dev_err(motg->phy.dev, "Cannot set v1p8 voltage\n");
122 goto disable_3p3;
123 }
124 rc = regulator_enable(motg->v1p8);
125 if (rc) {
126 dev_err(motg->phy.dev, "unable to enable the hsusb 1p8\n");
127 goto disable_3p3;
128 }
129
130 return 0;
131 }
132
133 regulator_disable(motg->v1p8);
134disable_3p3:
135 regulator_disable(motg->v3p3);
136exit:
137 return rc;
138}
139
140static int msm_hsusb_ldo_set_mode(struct msm_otg *motg, int on)
141{
142 int ret = 0;
143
144 if (on) {
145 ret = regulator_set_load(motg->v1p8, USB_PHY_1P8_HPM_LOAD);
146 if (ret < 0) {
147 pr_err("Could not set HPM for v1p8\n");
148 return ret;
149 }
150 ret = regulator_set_load(motg->v3p3, USB_PHY_3P3_HPM_LOAD);
151 if (ret < 0) {
152 pr_err("Could not set HPM for v3p3\n");
153 regulator_set_load(motg->v1p8, USB_PHY_1P8_LPM_LOAD);
154 return ret;
155 }
156 } else {
157 ret = regulator_set_load(motg->v1p8, USB_PHY_1P8_LPM_LOAD);
158 if (ret < 0)
159 pr_err("Could not set LPM for v1p8\n");
160 ret = regulator_set_load(motg->v3p3, USB_PHY_3P3_LPM_LOAD);
161 if (ret < 0)
162 pr_err("Could not set LPM for v3p3\n");
163 }
164
165 pr_debug("reg (%s)\n", on ? "HPM" : "LPM");
166 return ret < 0 ? ret : 0;
167}
168
169static int ulpi_read(struct usb_phy *phy, u32 reg)
170{
171 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
172 int cnt = 0;
173
174
175 writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg),
176 USB_ULPI_VIEWPORT);
177
178
179 while (cnt < ULPI_IO_TIMEOUT_USEC) {
180 if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN))
181 break;
182 udelay(1);
183 cnt++;
184 }
185
186 if (cnt >= ULPI_IO_TIMEOUT_USEC) {
187 dev_err(phy->dev, "ulpi_read: timeout %08x\n",
188 readl(USB_ULPI_VIEWPORT));
189 return -ETIMEDOUT;
190 }
191 return ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT));
192}
193
194static int ulpi_write(struct usb_phy *phy, u32 val, u32 reg)
195{
196 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
197 int cnt = 0;
198
199
200 writel(ULPI_RUN | ULPI_WRITE |
201 ULPI_ADDR(reg) | ULPI_DATA(val),
202 USB_ULPI_VIEWPORT);
203
204
205 while (cnt < ULPI_IO_TIMEOUT_USEC) {
206 if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN))
207 break;
208 udelay(1);
209 cnt++;
210 }
211
212 if (cnt >= ULPI_IO_TIMEOUT_USEC) {
213 dev_err(phy->dev, "ulpi_write: timeout\n");
214 return -ETIMEDOUT;
215 }
216 return 0;
217}
218
219static struct usb_phy_io_ops msm_otg_io_ops = {
220 .read = ulpi_read,
221 .write = ulpi_write,
222};
223
224static void ulpi_init(struct msm_otg *motg)
225{
226 struct msm_otg_platform_data *pdata = motg->pdata;
227 int *seq = pdata->phy_init_seq, idx;
228 u32 addr = ULPI_EXT_VENDOR_SPECIFIC;
229
230 for (idx = 0; idx < pdata->phy_init_sz; idx++) {
231 if (seq[idx] == -1)
232 continue;
233
234 dev_vdbg(motg->phy.dev, "ulpi: write 0x%02x to 0x%02x\n",
235 seq[idx], addr + idx);
236 ulpi_write(&motg->phy, seq[idx], addr + idx);
237 }
238}
239
240static int msm_phy_notify_disconnect(struct usb_phy *phy,
241 enum usb_device_speed speed)
242{
243 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
244 int val;
245
246 if (motg->manual_pullup) {
247 val = ULPI_MISC_A_VBUSVLDEXT | ULPI_MISC_A_VBUSVLDEXTSEL;
248 usb_phy_io_write(phy, val, ULPI_CLR(ULPI_MISC_A));
249 }
250
251
252
253
254
255 val = ulpi_read(phy, ULPI_FUNC_CTRL);
256 val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
257 val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
258 ulpi_write(phy, val, ULPI_FUNC_CTRL);
259
260 return 0;
261}
262
263static int msm_otg_link_clk_reset(struct msm_otg *motg, bool assert)
264{
265 int ret;
266
267 if (assert)
268 ret = reset_control_assert(motg->link_rst);
269 else
270 ret = reset_control_deassert(motg->link_rst);
271
272 if (ret)
273 dev_err(motg->phy.dev, "usb link clk reset %s failed\n",
274 assert ? "assert" : "deassert");
275
276 return ret;
277}
278
279static int msm_otg_phy_clk_reset(struct msm_otg *motg)
280{
281 int ret = 0;
282
283 if (motg->phy_rst)
284 ret = reset_control_reset(motg->phy_rst);
285
286 if (ret)
287 dev_err(motg->phy.dev, "usb phy clk reset failed\n");
288
289 return ret;
290}
291
292static int msm_link_reset(struct msm_otg *motg)
293{
294 u32 val;
295 int ret;
296
297 ret = msm_otg_link_clk_reset(motg, 1);
298 if (ret)
299 return ret;
300
301
302 usleep_range(1000, 1200);
303
304 ret = msm_otg_link_clk_reset(motg, 0);
305 if (ret)
306 return ret;
307
308 if (motg->phy_number)
309 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2);
310
311
312 val = readl(USB_PORTSC) & ~PORTSC_PTS_MASK;
313 writel(val | PORTSC_PTS_SERIAL, USB_PORTSC);
314
315 return 0;
316}
317
318static int msm_otg_reset(struct usb_phy *phy)
319{
320 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
321 int cnt = 0;
322
323 writel(USBCMD_RESET, USB_USBCMD);
324 while (cnt < LINK_RESET_TIMEOUT_USEC) {
325 if (!(readl(USB_USBCMD) & USBCMD_RESET))
326 break;
327 udelay(1);
328 cnt++;
329 }
330 if (cnt >= LINK_RESET_TIMEOUT_USEC)
331 return -ETIMEDOUT;
332
333
334 writel(PORTSC_PTS_ULPI, USB_PORTSC);
335
336 writel(0x0, USB_AHBBURST);
337 writel(0x08, USB_AHBMODE);
338
339 if (motg->phy_number)
340 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2);
341 return 0;
342}
343
344static void msm_phy_reset(struct msm_otg *motg)
345{
346 void __iomem *addr;
347
348 if (motg->pdata->phy_type != SNPS_28NM_INTEGRATED_PHY) {
349 msm_otg_phy_clk_reset(motg);
350 return;
351 }
352
353 addr = USB_PHY_CTRL;
354 if (motg->phy_number)
355 addr = USB_PHY_CTRL2;
356
357
358 writel(readl(addr) | PHY_POR_ASSERT, addr);
359
360
361
362
363
364
365 udelay(12);
366
367
368 writel(readl(addr) & ~PHY_POR_ASSERT, addr);
369}
370
371static int msm_usb_reset(struct usb_phy *phy)
372{
373 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
374 int ret;
375
376 if (!IS_ERR(motg->core_clk))
377 clk_prepare_enable(motg->core_clk);
378
379 ret = msm_link_reset(motg);
380 if (ret) {
381 dev_err(phy->dev, "phy_reset failed\n");
382 return ret;
383 }
384
385 ret = msm_otg_reset(&motg->phy);
386 if (ret) {
387 dev_err(phy->dev, "link reset failed\n");
388 return ret;
389 }
390
391 msleep(100);
392
393
394 msm_phy_reset(motg);
395
396 if (!IS_ERR(motg->core_clk))
397 clk_disable_unprepare(motg->core_clk);
398
399 return 0;
400}
401
402static int msm_phy_init(struct usb_phy *phy)
403{
404 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
405 struct msm_otg_platform_data *pdata = motg->pdata;
406 u32 val, ulpi_val = 0;
407
408
409 ulpi_init(motg);
410
411
412
413
414
415 msm_phy_reset(motg);
416
417 if (pdata->otg_control == OTG_PHY_CONTROL) {
418 val = readl(USB_OTGSC);
419 if (pdata->mode == USB_DR_MODE_OTG) {
420 ulpi_val = ULPI_INT_IDGRD | ULPI_INT_SESS_VALID;
421 val |= OTGSC_IDIE | OTGSC_BSVIE;
422 } else if (pdata->mode == USB_DR_MODE_PERIPHERAL) {
423 ulpi_val = ULPI_INT_SESS_VALID;
424 val |= OTGSC_BSVIE;
425 }
426 writel(val, USB_OTGSC);
427 ulpi_write(phy, ulpi_val, ULPI_USB_INT_EN_RISE);
428 ulpi_write(phy, ulpi_val, ULPI_USB_INT_EN_FALL);
429 }
430
431 if (motg->manual_pullup) {
432 val = ULPI_MISC_A_VBUSVLDEXTSEL | ULPI_MISC_A_VBUSVLDEXT;
433 ulpi_write(phy, val, ULPI_SET(ULPI_MISC_A));
434
435 val = readl(USB_GENCONFIG_2);
436 val |= GENCONFIG_2_SESS_VLD_CTRL_EN;
437 writel(val, USB_GENCONFIG_2);
438
439 val = readl(USB_USBCMD);
440 val |= USBCMD_SESS_VLD_CTRL;
441 writel(val, USB_USBCMD);
442
443 val = ulpi_read(phy, ULPI_FUNC_CTRL);
444 val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
445 val |= ULPI_FUNC_CTRL_OPMODE_NORMAL;
446 ulpi_write(phy, val, ULPI_FUNC_CTRL);
447 }
448
449 if (motg->phy_number)
450 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2);
451
452 return 0;
453}
454
455#define PHY_SUSPEND_TIMEOUT_USEC (500 * 1000)
456#define PHY_RESUME_TIMEOUT_USEC (100 * 1000)
457
458#ifdef CONFIG_PM
459
460static int msm_hsusb_config_vddcx(struct msm_otg *motg, int high)
461{
462 int max_vol = motg->vdd_levels[VDD_LEVEL_MAX];
463 int min_vol;
464 int ret;
465
466 if (high)
467 min_vol = motg->vdd_levels[VDD_LEVEL_MIN];
468 else
469 min_vol = motg->vdd_levels[VDD_LEVEL_NONE];
470
471 ret = regulator_set_voltage(motg->vddcx, min_vol, max_vol);
472 if (ret) {
473 pr_err("Cannot set vddcx voltage\n");
474 return ret;
475 }
476
477 pr_debug("%s: min_vol:%d max_vol:%d\n", __func__, min_vol, max_vol);
478
479 return ret;
480}
481
482static int msm_otg_suspend(struct msm_otg *motg)
483{
484 struct usb_phy *phy = &motg->phy;
485 struct usb_bus *bus = phy->otg->host;
486 struct msm_otg_platform_data *pdata = motg->pdata;
487 void __iomem *addr;
488 int cnt = 0;
489
490 if (atomic_read(&motg->in_lpm))
491 return 0;
492
493 disable_irq(motg->irq);
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511 if (motg->pdata->phy_type == CI_45NM_INTEGRATED_PHY) {
512 ulpi_read(phy, 0x14);
513 if (pdata->otg_control == OTG_PHY_CONTROL)
514 ulpi_write(phy, 0x01, 0x30);
515 ulpi_write(phy, 0x08, 0x09);
516 }
517
518
519
520
521
522
523 writel(readl(USB_PORTSC) | PORTSC_PHCD, USB_PORTSC);
524 while (cnt < PHY_SUSPEND_TIMEOUT_USEC) {
525 if (readl(USB_PORTSC) & PORTSC_PHCD)
526 break;
527 udelay(1);
528 cnt++;
529 }
530
531 if (cnt >= PHY_SUSPEND_TIMEOUT_USEC) {
532 dev_err(phy->dev, "Unable to suspend PHY\n");
533 msm_otg_reset(phy);
534 enable_irq(motg->irq);
535 return -ETIMEDOUT;
536 }
537
538
539
540
541
542
543
544
545 writel(readl(USB_USBCMD) | ASYNC_INTR_CTRL | ULPI_STP_CTRL, USB_USBCMD);
546
547 addr = USB_PHY_CTRL;
548 if (motg->phy_number)
549 addr = USB_PHY_CTRL2;
550
551 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY &&
552 motg->pdata->otg_control == OTG_PMIC_CONTROL)
553 writel(readl(addr) | PHY_RETEN, addr);
554
555 clk_disable_unprepare(motg->pclk);
556 clk_disable_unprepare(motg->clk);
557 if (!IS_ERR(motg->core_clk))
558 clk_disable_unprepare(motg->core_clk);
559
560 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY &&
561 motg->pdata->otg_control == OTG_PMIC_CONTROL) {
562 msm_hsusb_ldo_set_mode(motg, 0);
563 msm_hsusb_config_vddcx(motg, 0);
564 }
565
566 if (device_may_wakeup(phy->dev))
567 enable_irq_wake(motg->irq);
568 if (bus)
569 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &(bus_to_hcd(bus))->flags);
570
571 atomic_set(&motg->in_lpm, 1);
572 enable_irq(motg->irq);
573
574 dev_info(phy->dev, "USB in low power mode\n");
575
576 return 0;
577}
578
579static int msm_otg_resume(struct msm_otg *motg)
580{
581 struct usb_phy *phy = &motg->phy;
582 struct usb_bus *bus = phy->otg->host;
583 void __iomem *addr;
584 int cnt = 0;
585 unsigned temp;
586
587 if (!atomic_read(&motg->in_lpm))
588 return 0;
589
590 clk_prepare_enable(motg->pclk);
591 clk_prepare_enable(motg->clk);
592 if (!IS_ERR(motg->core_clk))
593 clk_prepare_enable(motg->core_clk);
594
595 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY &&
596 motg->pdata->otg_control == OTG_PMIC_CONTROL) {
597
598 addr = USB_PHY_CTRL;
599 if (motg->phy_number)
600 addr = USB_PHY_CTRL2;
601
602 msm_hsusb_ldo_set_mode(motg, 1);
603 msm_hsusb_config_vddcx(motg, 1);
604 writel(readl(addr) & ~PHY_RETEN, addr);
605 }
606
607 temp = readl(USB_USBCMD);
608 temp &= ~ASYNC_INTR_CTRL;
609 temp &= ~ULPI_STP_CTRL;
610 writel(temp, USB_USBCMD);
611
612
613
614
615
616 if (!(readl(USB_PORTSC) & PORTSC_PHCD))
617 goto skip_phy_resume;
618
619 writel(readl(USB_PORTSC) & ~PORTSC_PHCD, USB_PORTSC);
620 while (cnt < PHY_RESUME_TIMEOUT_USEC) {
621 if (!(readl(USB_PORTSC) & PORTSC_PHCD))
622 break;
623 udelay(1);
624 cnt++;
625 }
626
627 if (cnt >= PHY_RESUME_TIMEOUT_USEC) {
628
629
630
631
632
633 dev_err(phy->dev, "Unable to resume USB. Re-plugin the cable\n");
634 msm_otg_reset(phy);
635 }
636
637skip_phy_resume:
638 if (device_may_wakeup(phy->dev))
639 disable_irq_wake(motg->irq);
640 if (bus)
641 set_bit(HCD_FLAG_HW_ACCESSIBLE, &(bus_to_hcd(bus))->flags);
642
643 atomic_set(&motg->in_lpm, 0);
644
645 if (motg->async_int) {
646 motg->async_int = 0;
647 pm_runtime_put(phy->dev);
648 enable_irq(motg->irq);
649 }
650
651 dev_info(phy->dev, "USB exited from low power mode\n");
652
653 return 0;
654}
655#endif
656
657static void msm_otg_notify_charger(struct msm_otg *motg, unsigned mA)
658{
659 if (motg->cur_power == mA)
660 return;
661
662
663 dev_info(motg->phy.dev, "Avail curr from USB = %u\n", mA);
664 motg->cur_power = mA;
665}
666
667static int msm_otg_set_power(struct usb_phy *phy, unsigned mA)
668{
669 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
670
671
672
673
674
675
676
677
678 if (motg->chg_type == USB_SDP_CHARGER)
679 msm_otg_notify_charger(motg, mA);
680
681 return 0;
682}
683
684static void msm_otg_start_host(struct usb_phy *phy, int on)
685{
686 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
687 struct msm_otg_platform_data *pdata = motg->pdata;
688 struct usb_hcd *hcd;
689
690 if (!phy->otg->host)
691 return;
692
693 hcd = bus_to_hcd(phy->otg->host);
694
695 if (on) {
696 dev_dbg(phy->dev, "host on\n");
697
698 if (pdata->vbus_power)
699 pdata->vbus_power(1);
700
701
702
703
704
705 if (pdata->setup_gpio)
706 pdata->setup_gpio(OTG_STATE_A_HOST);
707#ifdef CONFIG_USB
708 usb_add_hcd(hcd, hcd->irq, IRQF_SHARED);
709 device_wakeup_enable(hcd->self.controller);
710#endif
711 } else {
712 dev_dbg(phy->dev, "host off\n");
713
714#ifdef CONFIG_USB
715 usb_remove_hcd(hcd);
716#endif
717 if (pdata->setup_gpio)
718 pdata->setup_gpio(OTG_STATE_UNDEFINED);
719 if (pdata->vbus_power)
720 pdata->vbus_power(0);
721 }
722}
723
724static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
725{
726 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy);
727 struct usb_hcd *hcd;
728
729
730
731
732
733 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL) {
734 dev_info(otg->usb_phy->dev, "Host mode is not supported\n");
735 return -ENODEV;
736 }
737
738 if (!host) {
739 if (otg->state == OTG_STATE_A_HOST) {
740 pm_runtime_get_sync(otg->usb_phy->dev);
741 msm_otg_start_host(otg->usb_phy, 0);
742 otg->host = NULL;
743 otg->state = OTG_STATE_UNDEFINED;
744 schedule_work(&motg->sm_work);
745 } else {
746 otg->host = NULL;
747 }
748
749 return 0;
750 }
751
752 hcd = bus_to_hcd(host);
753 hcd->power_budget = motg->pdata->power_budget;
754
755 otg->host = host;
756 dev_dbg(otg->usb_phy->dev, "host driver registered w/ tranceiver\n");
757
758
759
760
761
762 if (motg->pdata->mode == USB_DR_MODE_HOST || otg->gadget) {
763 pm_runtime_get_sync(otg->usb_phy->dev);
764 schedule_work(&motg->sm_work);
765 }
766
767 return 0;
768}
769
770static void msm_otg_start_peripheral(struct usb_phy *phy, int on)
771{
772 struct msm_otg *motg = container_of(phy, struct msm_otg, phy);
773 struct msm_otg_platform_data *pdata = motg->pdata;
774
775 if (!phy->otg->gadget)
776 return;
777
778 if (on) {
779 dev_dbg(phy->dev, "gadget on\n");
780
781
782
783
784
785 if (pdata->setup_gpio)
786 pdata->setup_gpio(OTG_STATE_B_PERIPHERAL);
787 usb_gadget_vbus_connect(phy->otg->gadget);
788 } else {
789 dev_dbg(phy->dev, "gadget off\n");
790 usb_gadget_vbus_disconnect(phy->otg->gadget);
791 if (pdata->setup_gpio)
792 pdata->setup_gpio(OTG_STATE_UNDEFINED);
793 }
794
795}
796
797static int msm_otg_set_peripheral(struct usb_otg *otg,
798 struct usb_gadget *gadget)
799{
800 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy);
801
802
803
804
805
806 if (motg->pdata->mode == USB_DR_MODE_HOST) {
807 dev_info(otg->usb_phy->dev, "Peripheral mode is not supported\n");
808 return -ENODEV;
809 }
810
811 if (!gadget) {
812 if (otg->state == OTG_STATE_B_PERIPHERAL) {
813 pm_runtime_get_sync(otg->usb_phy->dev);
814 msm_otg_start_peripheral(otg->usb_phy, 0);
815 otg->gadget = NULL;
816 otg->state = OTG_STATE_UNDEFINED;
817 schedule_work(&motg->sm_work);
818 } else {
819 otg->gadget = NULL;
820 }
821
822 return 0;
823 }
824 otg->gadget = gadget;
825 dev_dbg(otg->usb_phy->dev,
826 "peripheral driver registered w/ tranceiver\n");
827
828
829
830
831
832 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL || otg->host) {
833 pm_runtime_get_sync(otg->usb_phy->dev);
834 schedule_work(&motg->sm_work);
835 }
836
837 return 0;
838}
839
840static bool msm_chg_check_secondary_det(struct msm_otg *motg)
841{
842 struct usb_phy *phy = &motg->phy;
843 u32 chg_det;
844 bool ret = false;
845
846 switch (motg->pdata->phy_type) {
847 case CI_45NM_INTEGRATED_PHY:
848 chg_det = ulpi_read(phy, 0x34);
849 ret = chg_det & (1 << 4);
850 break;
851 case SNPS_28NM_INTEGRATED_PHY:
852 chg_det = ulpi_read(phy, 0x87);
853 ret = chg_det & 1;
854 break;
855 default:
856 break;
857 }
858 return ret;
859}
860
861static void msm_chg_enable_secondary_det(struct msm_otg *motg)
862{
863 struct usb_phy *phy = &motg->phy;
864 u32 chg_det;
865
866 switch (motg->pdata->phy_type) {
867 case CI_45NM_INTEGRATED_PHY:
868 chg_det = ulpi_read(phy, 0x34);
869
870 chg_det |= ~(1 << 1);
871 ulpi_write(phy, chg_det, 0x34);
872 udelay(20);
873
874 chg_det &= ~(1 << 3);
875 ulpi_write(phy, chg_det, 0x34);
876
877 chg_det &= ~(1 << 2);
878 ulpi_write(phy, chg_det, 0x34);
879
880 chg_det &= ~(1 << 1);
881 ulpi_write(phy, chg_det, 0x34);
882 udelay(20);
883
884 chg_det &= ~(1 << 0);
885 ulpi_write(phy, chg_det, 0x34);
886 break;
887 case SNPS_28NM_INTEGRATED_PHY:
888
889
890
891
892 ulpi_write(phy, 0x8, 0x85);
893 ulpi_write(phy, 0x2, 0x85);
894 ulpi_write(phy, 0x1, 0x85);
895 break;
896 default:
897 break;
898 }
899}
900
901static bool msm_chg_check_primary_det(struct msm_otg *motg)
902{
903 struct usb_phy *phy = &motg->phy;
904 u32 chg_det;
905 bool ret = false;
906
907 switch (motg->pdata->phy_type) {
908 case CI_45NM_INTEGRATED_PHY:
909 chg_det = ulpi_read(phy, 0x34);
910 ret = chg_det & (1 << 4);
911 break;
912 case SNPS_28NM_INTEGRATED_PHY:
913 chg_det = ulpi_read(phy, 0x87);
914 ret = chg_det & 1;
915 break;
916 default:
917 break;
918 }
919 return ret;
920}
921
922static void msm_chg_enable_primary_det(struct msm_otg *motg)
923{
924 struct usb_phy *phy = &motg->phy;
925 u32 chg_det;
926
927 switch (motg->pdata->phy_type) {
928 case CI_45NM_INTEGRATED_PHY:
929 chg_det = ulpi_read(phy, 0x34);
930
931 chg_det &= ~(1 << 0);
932 ulpi_write(phy, chg_det, 0x34);
933 break;
934 case SNPS_28NM_INTEGRATED_PHY:
935
936
937
938
939 ulpi_write(phy, 0x2, 0x85);
940 ulpi_write(phy, 0x1, 0x85);
941 break;
942 default:
943 break;
944 }
945}
946
947static bool msm_chg_check_dcd(struct msm_otg *motg)
948{
949 struct usb_phy *phy = &motg->phy;
950 u32 line_state;
951 bool ret = false;
952
953 switch (motg->pdata->phy_type) {
954 case CI_45NM_INTEGRATED_PHY:
955 line_state = ulpi_read(phy, 0x15);
956 ret = !(line_state & 1);
957 break;
958 case SNPS_28NM_INTEGRATED_PHY:
959 line_state = ulpi_read(phy, 0x87);
960 ret = line_state & 2;
961 break;
962 default:
963 break;
964 }
965 return ret;
966}
967
968static void msm_chg_disable_dcd(struct msm_otg *motg)
969{
970 struct usb_phy *phy = &motg->phy;
971 u32 chg_det;
972
973 switch (motg->pdata->phy_type) {
974 case CI_45NM_INTEGRATED_PHY:
975 chg_det = ulpi_read(phy, 0x34);
976 chg_det &= ~(1 << 5);
977 ulpi_write(phy, chg_det, 0x34);
978 break;
979 case SNPS_28NM_INTEGRATED_PHY:
980 ulpi_write(phy, 0x10, 0x86);
981 break;
982 default:
983 break;
984 }
985}
986
987static void msm_chg_enable_dcd(struct msm_otg *motg)
988{
989 struct usb_phy *phy = &motg->phy;
990 u32 chg_det;
991
992 switch (motg->pdata->phy_type) {
993 case CI_45NM_INTEGRATED_PHY:
994 chg_det = ulpi_read(phy, 0x34);
995
996 chg_det |= (1 << 5);
997 ulpi_write(phy, chg_det, 0x34);
998 break;
999 case SNPS_28NM_INTEGRATED_PHY:
1000
1001 ulpi_write(phy, 0x10, 0x85);
1002 break;
1003 default:
1004 break;
1005 }
1006}
1007
1008static void msm_chg_block_on(struct msm_otg *motg)
1009{
1010 struct usb_phy *phy = &motg->phy;
1011 u32 func_ctrl, chg_det;
1012
1013
1014 func_ctrl = ulpi_read(phy, ULPI_FUNC_CTRL);
1015 func_ctrl &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
1016 func_ctrl |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
1017 ulpi_write(phy, func_ctrl, ULPI_FUNC_CTRL);
1018
1019 switch (motg->pdata->phy_type) {
1020 case CI_45NM_INTEGRATED_PHY:
1021 chg_det = ulpi_read(phy, 0x34);
1022
1023 chg_det &= ~(1 << 3);
1024 ulpi_write(phy, chg_det, 0x34);
1025
1026 chg_det &= ~(1 << 1);
1027 ulpi_write(phy, chg_det, 0x34);
1028 udelay(20);
1029 break;
1030 case SNPS_28NM_INTEGRATED_PHY:
1031
1032 ulpi_write(phy, 0x3F, 0x86);
1033
1034 ulpi_write(phy, 0x1F, 0x92);
1035 ulpi_write(phy, 0x1F, 0x95);
1036 udelay(100);
1037 break;
1038 default:
1039 break;
1040 }
1041}
1042
1043static void msm_chg_block_off(struct msm_otg *motg)
1044{
1045 struct usb_phy *phy = &motg->phy;
1046 u32 func_ctrl, chg_det;
1047
1048 switch (motg->pdata->phy_type) {
1049 case CI_45NM_INTEGRATED_PHY:
1050 chg_det = ulpi_read(phy, 0x34);
1051
1052 chg_det |= ~(1 << 1);
1053 ulpi_write(phy, chg_det, 0x34);
1054 break;
1055 case SNPS_28NM_INTEGRATED_PHY:
1056
1057 ulpi_write(phy, 0x3F, 0x86);
1058
1059 ulpi_write(phy, 0x1F, 0x92);
1060 ulpi_write(phy, 0x1F, 0x95);
1061 break;
1062 default:
1063 break;
1064 }
1065
1066
1067 func_ctrl = ulpi_read(phy, ULPI_FUNC_CTRL);
1068 func_ctrl &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
1069 func_ctrl |= ULPI_FUNC_CTRL_OPMODE_NORMAL;
1070 ulpi_write(phy, func_ctrl, ULPI_FUNC_CTRL);
1071}
1072
1073#define MSM_CHG_DCD_POLL_TIME (100 * HZ/1000)
1074#define MSM_CHG_DCD_MAX_RETRIES 6
1075#define MSM_CHG_PRIMARY_DET_TIME (40 * HZ/1000)
1076#define MSM_CHG_SECONDARY_DET_TIME (40 * HZ/1000)
1077static void msm_chg_detect_work(struct work_struct *w)
1078{
1079 struct msm_otg *motg = container_of(w, struct msm_otg, chg_work.work);
1080 struct usb_phy *phy = &motg->phy;
1081 bool is_dcd, tmout, vout;
1082 unsigned long delay;
1083
1084 dev_dbg(phy->dev, "chg detection work\n");
1085 switch (motg->chg_state) {
1086 case USB_CHG_STATE_UNDEFINED:
1087 pm_runtime_get_sync(phy->dev);
1088 msm_chg_block_on(motg);
1089 msm_chg_enable_dcd(motg);
1090 motg->chg_state = USB_CHG_STATE_WAIT_FOR_DCD;
1091 motg->dcd_retries = 0;
1092 delay = MSM_CHG_DCD_POLL_TIME;
1093 break;
1094 case USB_CHG_STATE_WAIT_FOR_DCD:
1095 is_dcd = msm_chg_check_dcd(motg);
1096 tmout = ++motg->dcd_retries == MSM_CHG_DCD_MAX_RETRIES;
1097 if (is_dcd || tmout) {
1098 msm_chg_disable_dcd(motg);
1099 msm_chg_enable_primary_det(motg);
1100 delay = MSM_CHG_PRIMARY_DET_TIME;
1101 motg->chg_state = USB_CHG_STATE_DCD_DONE;
1102 } else {
1103 delay = MSM_CHG_DCD_POLL_TIME;
1104 }
1105 break;
1106 case USB_CHG_STATE_DCD_DONE:
1107 vout = msm_chg_check_primary_det(motg);
1108 if (vout) {
1109 msm_chg_enable_secondary_det(motg);
1110 delay = MSM_CHG_SECONDARY_DET_TIME;
1111 motg->chg_state = USB_CHG_STATE_PRIMARY_DONE;
1112 } else {
1113 motg->chg_type = USB_SDP_CHARGER;
1114 motg->chg_state = USB_CHG_STATE_DETECTED;
1115 delay = 0;
1116 }
1117 break;
1118 case USB_CHG_STATE_PRIMARY_DONE:
1119 vout = msm_chg_check_secondary_det(motg);
1120 if (vout)
1121 motg->chg_type = USB_DCP_CHARGER;
1122 else
1123 motg->chg_type = USB_CDP_CHARGER;
1124 motg->chg_state = USB_CHG_STATE_SECONDARY_DONE;
1125
1126 case USB_CHG_STATE_SECONDARY_DONE:
1127 motg->chg_state = USB_CHG_STATE_DETECTED;
1128 case USB_CHG_STATE_DETECTED:
1129 msm_chg_block_off(motg);
1130 dev_dbg(phy->dev, "charger = %d\n", motg->chg_type);
1131 schedule_work(&motg->sm_work);
1132 return;
1133 default:
1134 return;
1135 }
1136
1137 schedule_delayed_work(&motg->chg_work, delay);
1138}
1139
1140
1141
1142
1143
1144
1145
1146
1147static void msm_otg_init_sm(struct msm_otg *motg)
1148{
1149 struct msm_otg_platform_data *pdata = motg->pdata;
1150 u32 otgsc = readl(USB_OTGSC);
1151
1152 switch (pdata->mode) {
1153 case USB_DR_MODE_OTG:
1154 if (pdata->otg_control == OTG_PHY_CONTROL) {
1155 if (otgsc & OTGSC_ID)
1156 set_bit(ID, &motg->inputs);
1157 else
1158 clear_bit(ID, &motg->inputs);
1159
1160 if (otgsc & OTGSC_BSV)
1161 set_bit(B_SESS_VLD, &motg->inputs);
1162 else
1163 clear_bit(B_SESS_VLD, &motg->inputs);
1164 } else if (pdata->otg_control == OTG_USER_CONTROL) {
1165 set_bit(ID, &motg->inputs);
1166 clear_bit(B_SESS_VLD, &motg->inputs);
1167 }
1168 break;
1169 case USB_DR_MODE_HOST:
1170 clear_bit(ID, &motg->inputs);
1171 break;
1172 case USB_DR_MODE_PERIPHERAL:
1173 set_bit(ID, &motg->inputs);
1174 if (otgsc & OTGSC_BSV)
1175 set_bit(B_SESS_VLD, &motg->inputs);
1176 else
1177 clear_bit(B_SESS_VLD, &motg->inputs);
1178 break;
1179 default:
1180 break;
1181 }
1182}
1183
1184static void msm_otg_sm_work(struct work_struct *w)
1185{
1186 struct msm_otg *motg = container_of(w, struct msm_otg, sm_work);
1187 struct usb_otg *otg = motg->phy.otg;
1188
1189 switch (otg->state) {
1190 case OTG_STATE_UNDEFINED:
1191 dev_dbg(otg->usb_phy->dev, "OTG_STATE_UNDEFINED state\n");
1192 msm_otg_reset(otg->usb_phy);
1193 msm_otg_init_sm(motg);
1194 otg->state = OTG_STATE_B_IDLE;
1195
1196 case OTG_STATE_B_IDLE:
1197 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_IDLE state\n");
1198 if (!test_bit(ID, &motg->inputs) && otg->host) {
1199
1200 writel(readl(USB_OTGSC) & ~OTGSC_BSVIE, USB_OTGSC);
1201 msm_otg_start_host(otg->usb_phy, 1);
1202 otg->state = OTG_STATE_A_HOST;
1203 } else if (test_bit(B_SESS_VLD, &motg->inputs)) {
1204 switch (motg->chg_state) {
1205 case USB_CHG_STATE_UNDEFINED:
1206 msm_chg_detect_work(&motg->chg_work.work);
1207 break;
1208 case USB_CHG_STATE_DETECTED:
1209 switch (motg->chg_type) {
1210 case USB_DCP_CHARGER:
1211 msm_otg_notify_charger(motg,
1212 IDEV_CHG_MAX);
1213 break;
1214 case USB_CDP_CHARGER:
1215 msm_otg_notify_charger(motg,
1216 IDEV_CHG_MAX);
1217 msm_otg_start_peripheral(otg->usb_phy,
1218 1);
1219 otg->state
1220 = OTG_STATE_B_PERIPHERAL;
1221 break;
1222 case USB_SDP_CHARGER:
1223 msm_otg_notify_charger(motg, IUNIT);
1224 msm_otg_start_peripheral(otg->usb_phy,
1225 1);
1226 otg->state
1227 = OTG_STATE_B_PERIPHERAL;
1228 break;
1229 default:
1230 break;
1231 }
1232 break;
1233 default:
1234 break;
1235 }
1236 } else {
1237
1238
1239
1240
1241
1242 if (cancel_delayed_work_sync(&motg->chg_work)) {
1243 pm_runtime_put_sync(otg->usb_phy->dev);
1244 msm_otg_reset(otg->usb_phy);
1245 }
1246 msm_otg_notify_charger(motg, 0);
1247 motg->chg_state = USB_CHG_STATE_UNDEFINED;
1248 motg->chg_type = USB_INVALID_CHARGER;
1249 }
1250
1251 if (otg->state == OTG_STATE_B_IDLE)
1252 pm_runtime_put_sync(otg->usb_phy->dev);
1253 break;
1254 case OTG_STATE_B_PERIPHERAL:
1255 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_PERIPHERAL state\n");
1256 if (!test_bit(B_SESS_VLD, &motg->inputs) ||
1257 !test_bit(ID, &motg->inputs)) {
1258 msm_otg_notify_charger(motg, 0);
1259 msm_otg_start_peripheral(otg->usb_phy, 0);
1260 motg->chg_state = USB_CHG_STATE_UNDEFINED;
1261 motg->chg_type = USB_INVALID_CHARGER;
1262 otg->state = OTG_STATE_B_IDLE;
1263 msm_otg_reset(otg->usb_phy);
1264 schedule_work(w);
1265 }
1266 break;
1267 case OTG_STATE_A_HOST:
1268 dev_dbg(otg->usb_phy->dev, "OTG_STATE_A_HOST state\n");
1269 if (test_bit(ID, &motg->inputs)) {
1270 msm_otg_start_host(otg->usb_phy, 0);
1271 otg->state = OTG_STATE_B_IDLE;
1272 msm_otg_reset(otg->usb_phy);
1273 schedule_work(w);
1274 }
1275 break;
1276 default:
1277 break;
1278 }
1279}
1280
1281static irqreturn_t msm_otg_irq(int irq, void *data)
1282{
1283 struct msm_otg *motg = data;
1284 struct usb_phy *phy = &motg->phy;
1285 u32 otgsc = 0;
1286
1287 if (atomic_read(&motg->in_lpm)) {
1288 disable_irq_nosync(irq);
1289 motg->async_int = 1;
1290 pm_runtime_get(phy->dev);
1291 return IRQ_HANDLED;
1292 }
1293
1294 otgsc = readl(USB_OTGSC);
1295 if (!(otgsc & (OTGSC_IDIS | OTGSC_BSVIS)))
1296 return IRQ_NONE;
1297
1298 if ((otgsc & OTGSC_IDIS) && (otgsc & OTGSC_IDIE)) {
1299 if (otgsc & OTGSC_ID)
1300 set_bit(ID, &motg->inputs);
1301 else
1302 clear_bit(ID, &motg->inputs);
1303 dev_dbg(phy->dev, "ID set/clear\n");
1304 pm_runtime_get_noresume(phy->dev);
1305 } else if ((otgsc & OTGSC_BSVIS) && (otgsc & OTGSC_BSVIE)) {
1306 if (otgsc & OTGSC_BSV)
1307 set_bit(B_SESS_VLD, &motg->inputs);
1308 else
1309 clear_bit(B_SESS_VLD, &motg->inputs);
1310 dev_dbg(phy->dev, "BSV set/clear\n");
1311 pm_runtime_get_noresume(phy->dev);
1312 }
1313
1314 writel(otgsc, USB_OTGSC);
1315 schedule_work(&motg->sm_work);
1316 return IRQ_HANDLED;
1317}
1318
1319static int msm_otg_mode_show(struct seq_file *s, void *unused)
1320{
1321 struct msm_otg *motg = s->private;
1322 struct usb_otg *otg = motg->phy.otg;
1323
1324 switch (otg->state) {
1325 case OTG_STATE_A_HOST:
1326 seq_puts(s, "host\n");
1327 break;
1328 case OTG_STATE_B_PERIPHERAL:
1329 seq_puts(s, "peripheral\n");
1330 break;
1331 default:
1332 seq_puts(s, "none\n");
1333 break;
1334 }
1335
1336 return 0;
1337}
1338
1339static int msm_otg_mode_open(struct inode *inode, struct file *file)
1340{
1341 return single_open(file, msm_otg_mode_show, inode->i_private);
1342}
1343
1344static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf,
1345 size_t count, loff_t *ppos)
1346{
1347 struct seq_file *s = file->private_data;
1348 struct msm_otg *motg = s->private;
1349 char buf[16];
1350 struct usb_otg *otg = motg->phy.otg;
1351 int status = count;
1352 enum usb_dr_mode req_mode;
1353
1354 memset(buf, 0x00, sizeof(buf));
1355
1356 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) {
1357 status = -EFAULT;
1358 goto out;
1359 }
1360
1361 if (!strncmp(buf, "host", 4)) {
1362 req_mode = USB_DR_MODE_HOST;
1363 } else if (!strncmp(buf, "peripheral", 10)) {
1364 req_mode = USB_DR_MODE_PERIPHERAL;
1365 } else if (!strncmp(buf, "none", 4)) {
1366 req_mode = USB_DR_MODE_UNKNOWN;
1367 } else {
1368 status = -EINVAL;
1369 goto out;
1370 }
1371
1372 switch (req_mode) {
1373 case USB_DR_MODE_UNKNOWN:
1374 switch (otg->state) {
1375 case OTG_STATE_A_HOST:
1376 case OTG_STATE_B_PERIPHERAL:
1377 set_bit(ID, &motg->inputs);
1378 clear_bit(B_SESS_VLD, &motg->inputs);
1379 break;
1380 default:
1381 goto out;
1382 }
1383 break;
1384 case USB_DR_MODE_PERIPHERAL:
1385 switch (otg->state) {
1386 case OTG_STATE_B_IDLE:
1387 case OTG_STATE_A_HOST:
1388 set_bit(ID, &motg->inputs);
1389 set_bit(B_SESS_VLD, &motg->inputs);
1390 break;
1391 default:
1392 goto out;
1393 }
1394 break;
1395 case USB_DR_MODE_HOST:
1396 switch (otg->state) {
1397 case OTG_STATE_B_IDLE:
1398 case OTG_STATE_B_PERIPHERAL:
1399 clear_bit(ID, &motg->inputs);
1400 break;
1401 default:
1402 goto out;
1403 }
1404 break;
1405 default:
1406 goto out;
1407 }
1408
1409 pm_runtime_get_sync(otg->usb_phy->dev);
1410 schedule_work(&motg->sm_work);
1411out:
1412 return status;
1413}
1414
1415static const struct file_operations msm_otg_mode_fops = {
1416 .open = msm_otg_mode_open,
1417 .read = seq_read,
1418 .write = msm_otg_mode_write,
1419 .llseek = seq_lseek,
1420 .release = single_release,
1421};
1422
1423static struct dentry *msm_otg_dbg_root;
1424static struct dentry *msm_otg_dbg_mode;
1425
1426static int msm_otg_debugfs_init(struct msm_otg *motg)
1427{
1428 msm_otg_dbg_root = debugfs_create_dir("msm_otg", NULL);
1429
1430 if (!msm_otg_dbg_root || IS_ERR(msm_otg_dbg_root))
1431 return -ENODEV;
1432
1433 msm_otg_dbg_mode = debugfs_create_file("mode", S_IRUGO | S_IWUSR,
1434 msm_otg_dbg_root, motg, &msm_otg_mode_fops);
1435 if (!msm_otg_dbg_mode) {
1436 debugfs_remove(msm_otg_dbg_root);
1437 msm_otg_dbg_root = NULL;
1438 return -ENODEV;
1439 }
1440
1441 return 0;
1442}
1443
1444static void msm_otg_debugfs_cleanup(void)
1445{
1446 debugfs_remove(msm_otg_dbg_mode);
1447 debugfs_remove(msm_otg_dbg_root);
1448}
1449
1450static const struct of_device_id msm_otg_dt_match[] = {
1451 {
1452 .compatible = "qcom,usb-otg-ci",
1453 .data = (void *) CI_45NM_INTEGRATED_PHY
1454 },
1455 {
1456 .compatible = "qcom,usb-otg-snps",
1457 .data = (void *) SNPS_28NM_INTEGRATED_PHY
1458 },
1459 { }
1460};
1461MODULE_DEVICE_TABLE(of, msm_otg_dt_match);
1462
1463static int msm_otg_vbus_notifier(struct notifier_block *nb, unsigned long event,
1464 void *ptr)
1465{
1466 struct msm_usb_cable *vbus = container_of(nb, struct msm_usb_cable, nb);
1467 struct msm_otg *motg = container_of(vbus, struct msm_otg, vbus);
1468
1469 if (event)
1470 set_bit(B_SESS_VLD, &motg->inputs);
1471 else
1472 clear_bit(B_SESS_VLD, &motg->inputs);
1473
1474 schedule_work(&motg->sm_work);
1475
1476 return NOTIFY_DONE;
1477}
1478
1479static int msm_otg_id_notifier(struct notifier_block *nb, unsigned long event,
1480 void *ptr)
1481{
1482 struct msm_usb_cable *id = container_of(nb, struct msm_usb_cable, nb);
1483 struct msm_otg *motg = container_of(id, struct msm_otg, id);
1484
1485 if (event)
1486 clear_bit(ID, &motg->inputs);
1487 else
1488 set_bit(ID, &motg->inputs);
1489
1490 schedule_work(&motg->sm_work);
1491
1492 return NOTIFY_DONE;
1493}
1494
1495static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg)
1496{
1497 struct msm_otg_platform_data *pdata;
1498 struct extcon_dev *ext_id, *ext_vbus;
1499 const struct of_device_id *id;
1500 struct device_node *node = pdev->dev.of_node;
1501 struct property *prop;
1502 int len, ret, words;
1503 u32 val, tmp[3];
1504
1505 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1506 if (!pdata)
1507 return -ENOMEM;
1508
1509 motg->pdata = pdata;
1510
1511 id = of_match_device(msm_otg_dt_match, &pdev->dev);
1512 pdata->phy_type = (enum msm_usb_phy_type) id->data;
1513
1514 motg->link_rst = devm_reset_control_get(&pdev->dev, "link");
1515 if (IS_ERR(motg->link_rst))
1516 return PTR_ERR(motg->link_rst);
1517
1518 motg->phy_rst = devm_reset_control_get(&pdev->dev, "phy");
1519 if (IS_ERR(motg->phy_rst))
1520 motg->phy_rst = NULL;
1521
1522 pdata->mode = of_usb_get_dr_mode(node);
1523 if (pdata->mode == USB_DR_MODE_UNKNOWN)
1524 pdata->mode = USB_DR_MODE_OTG;
1525
1526 pdata->otg_control = OTG_PHY_CONTROL;
1527 if (!of_property_read_u32(node, "qcom,otg-control", &val))
1528 if (val == OTG_PMIC_CONTROL)
1529 pdata->otg_control = val;
1530
1531 if (!of_property_read_u32(node, "qcom,phy-num", &val) && val < 2)
1532 motg->phy_number = val;
1533
1534 motg->vdd_levels[VDD_LEVEL_NONE] = USB_PHY_SUSP_DIG_VOL;
1535 motg->vdd_levels[VDD_LEVEL_MIN] = USB_PHY_VDD_DIG_VOL_MIN;
1536 motg->vdd_levels[VDD_LEVEL_MAX] = USB_PHY_VDD_DIG_VOL_MAX;
1537
1538 if (of_get_property(node, "qcom,vdd-levels", &len) &&
1539 len == sizeof(tmp)) {
1540 of_property_read_u32_array(node, "qcom,vdd-levels",
1541 tmp, len / sizeof(*tmp));
1542 motg->vdd_levels[VDD_LEVEL_NONE] = tmp[VDD_LEVEL_NONE];
1543 motg->vdd_levels[VDD_LEVEL_MIN] = tmp[VDD_LEVEL_MIN];
1544 motg->vdd_levels[VDD_LEVEL_MAX] = tmp[VDD_LEVEL_MAX];
1545 }
1546
1547 motg->manual_pullup = of_property_read_bool(node, "qcom,manual-pullup");
1548
1549 ext_id = ERR_PTR(-ENODEV);
1550 ext_vbus = ERR_PTR(-ENODEV);
1551 if (of_property_read_bool(node, "extcon")) {
1552
1553
1554 ext_vbus = extcon_get_edev_by_phandle(&pdev->dev, 0);
1555 if (IS_ERR(ext_vbus) && PTR_ERR(ext_vbus) != -ENODEV)
1556 return PTR_ERR(ext_vbus);
1557
1558 ext_id = extcon_get_edev_by_phandle(&pdev->dev, 1);
1559 if (IS_ERR(ext_id) && PTR_ERR(ext_id) != -ENODEV)
1560 return PTR_ERR(ext_id);
1561 }
1562
1563 if (!IS_ERR(ext_vbus)) {
1564 motg->vbus.nb.notifier_call = msm_otg_vbus_notifier;
1565 ret = extcon_register_interest(&motg->vbus.conn, ext_vbus->name,
1566 "USB", &motg->vbus.nb);
1567 if (ret < 0) {
1568 dev_err(&pdev->dev, "register VBUS notifier failed\n");
1569 return ret;
1570 }
1571
1572 ret = extcon_get_cable_state(ext_vbus, "USB");
1573 if (ret)
1574 set_bit(B_SESS_VLD, &motg->inputs);
1575 else
1576 clear_bit(B_SESS_VLD, &motg->inputs);
1577 }
1578
1579 if (!IS_ERR(ext_id)) {
1580 motg->id.nb.notifier_call = msm_otg_id_notifier;
1581 ret = extcon_register_interest(&motg->id.conn, ext_id->name,
1582 "USB-HOST", &motg->id.nb);
1583 if (ret < 0) {
1584 dev_err(&pdev->dev, "register ID notifier failed\n");
1585 return ret;
1586 }
1587
1588 ret = extcon_get_cable_state(ext_id, "USB-HOST");
1589 if (ret)
1590 clear_bit(ID, &motg->inputs);
1591 else
1592 set_bit(ID, &motg->inputs);
1593 }
1594
1595 prop = of_find_property(node, "qcom,phy-init-sequence", &len);
1596 if (!prop || !len)
1597 return 0;
1598
1599 words = len / sizeof(u32);
1600
1601 if (words >= ULPI_EXT_VENDOR_SPECIFIC) {
1602 dev_warn(&pdev->dev, "Too big PHY init sequence %d\n", words);
1603 return 0;
1604 }
1605
1606 pdata->phy_init_seq = devm_kzalloc(&pdev->dev, len, GFP_KERNEL);
1607 if (!pdata->phy_init_seq)
1608 return 0;
1609
1610 ret = of_property_read_u32_array(node, "qcom,phy-init-sequence",
1611 pdata->phy_init_seq, words);
1612 if (!ret)
1613 pdata->phy_init_sz = words;
1614
1615 return 0;
1616}
1617
1618static int msm_otg_probe(struct platform_device *pdev)
1619{
1620 struct regulator_bulk_data regs[3];
1621 int ret = 0;
1622 struct device_node *np = pdev->dev.of_node;
1623 struct msm_otg_platform_data *pdata;
1624 struct resource *res;
1625 struct msm_otg *motg;
1626 struct usb_phy *phy;
1627 void __iomem *phy_select;
1628
1629 motg = devm_kzalloc(&pdev->dev, sizeof(struct msm_otg), GFP_KERNEL);
1630 if (!motg)
1631 return -ENOMEM;
1632
1633 pdata = dev_get_platdata(&pdev->dev);
1634 if (!pdata) {
1635 if (!np)
1636 return -ENXIO;
1637 ret = msm_otg_read_dt(pdev, motg);
1638 if (ret)
1639 return ret;
1640 }
1641
1642 motg->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg),
1643 GFP_KERNEL);
1644 if (!motg->phy.otg)
1645 return -ENOMEM;
1646
1647 phy = &motg->phy;
1648 phy->dev = &pdev->dev;
1649
1650 motg->clk = devm_clk_get(&pdev->dev, np ? "core" : "usb_hs_clk");
1651 if (IS_ERR(motg->clk)) {
1652 dev_err(&pdev->dev, "failed to get usb_hs_clk\n");
1653 return PTR_ERR(motg->clk);
1654 }
1655
1656
1657
1658
1659
1660
1661
1662 motg->pclk = devm_clk_get(&pdev->dev, np ? "iface" : "usb_hs_pclk");
1663 if (IS_ERR(motg->pclk)) {
1664 dev_err(&pdev->dev, "failed to get usb_hs_pclk\n");
1665 return PTR_ERR(motg->pclk);
1666 }
1667
1668
1669
1670
1671
1672
1673 motg->core_clk = devm_clk_get(&pdev->dev,
1674 np ? "alt_core" : "usb_hs_core_clk");
1675
1676 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1677 if (!res)
1678 return -EINVAL;
1679 motg->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
1680 if (!motg->regs)
1681 return -ENOMEM;
1682
1683
1684
1685
1686
1687
1688 if (motg->phy_number) {
1689 phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4);
1690 if (!phy_select)
1691 return -ENOMEM;
1692
1693 writel(0x1, phy_select);
1694 }
1695
1696 dev_info(&pdev->dev, "OTG regs = %p\n", motg->regs);
1697
1698 motg->irq = platform_get_irq(pdev, 0);
1699 if (motg->irq < 0) {
1700 dev_err(&pdev->dev, "platform_get_irq failed\n");
1701 return motg->irq;
1702 }
1703
1704 regs[0].supply = "vddcx";
1705 regs[1].supply = "v3p3";
1706 regs[2].supply = "v1p8";
1707
1708 ret = devm_regulator_bulk_get(motg->phy.dev, ARRAY_SIZE(regs), regs);
1709 if (ret)
1710 return ret;
1711
1712 motg->vddcx = regs[0].consumer;
1713 motg->v3p3 = regs[1].consumer;
1714 motg->v1p8 = regs[2].consumer;
1715
1716 clk_set_rate(motg->clk, 60000000);
1717
1718 clk_prepare_enable(motg->clk);
1719 clk_prepare_enable(motg->pclk);
1720
1721 if (!IS_ERR(motg->core_clk))
1722 clk_prepare_enable(motg->core_clk);
1723
1724 ret = msm_hsusb_init_vddcx(motg, 1);
1725 if (ret) {
1726 dev_err(&pdev->dev, "hsusb vddcx configuration failed\n");
1727 goto disable_clks;
1728 }
1729
1730 ret = msm_hsusb_ldo_init(motg, 1);
1731 if (ret) {
1732 dev_err(&pdev->dev, "hsusb vreg configuration failed\n");
1733 goto disable_vddcx;
1734 }
1735 ret = msm_hsusb_ldo_set_mode(motg, 1);
1736 if (ret) {
1737 dev_err(&pdev->dev, "hsusb vreg enable failed\n");
1738 goto disable_ldo;
1739 }
1740
1741 writel(0, USB_USBINTR);
1742 writel(0, USB_OTGSC);
1743
1744 INIT_WORK(&motg->sm_work, msm_otg_sm_work);
1745 INIT_DELAYED_WORK(&motg->chg_work, msm_chg_detect_work);
1746 ret = devm_request_irq(&pdev->dev, motg->irq, msm_otg_irq, IRQF_SHARED,
1747 "msm_otg", motg);
1748 if (ret) {
1749 dev_err(&pdev->dev, "request irq failed\n");
1750 goto disable_ldo;
1751 }
1752
1753 phy->init = msm_phy_init;
1754 phy->set_power = msm_otg_set_power;
1755 phy->notify_disconnect = msm_phy_notify_disconnect;
1756 phy->type = USB_PHY_TYPE_USB2;
1757
1758 phy->io_ops = &msm_otg_io_ops;
1759
1760 phy->otg->usb_phy = &motg->phy;
1761 phy->otg->set_host = msm_otg_set_host;
1762 phy->otg->set_peripheral = msm_otg_set_peripheral;
1763
1764 msm_usb_reset(phy);
1765
1766 ret = usb_add_phy_dev(&motg->phy);
1767 if (ret) {
1768 dev_err(&pdev->dev, "usb_add_phy failed\n");
1769 goto disable_ldo;
1770 }
1771
1772 platform_set_drvdata(pdev, motg);
1773 device_init_wakeup(&pdev->dev, 1);
1774
1775 if (motg->pdata->mode == USB_DR_MODE_OTG &&
1776 motg->pdata->otg_control == OTG_USER_CONTROL) {
1777 ret = msm_otg_debugfs_init(motg);
1778 if (ret)
1779 dev_dbg(&pdev->dev, "Can not create mode change file\n");
1780 }
1781
1782 pm_runtime_set_active(&pdev->dev);
1783 pm_runtime_enable(&pdev->dev);
1784
1785 return 0;
1786
1787disable_ldo:
1788 msm_hsusb_ldo_init(motg, 0);
1789disable_vddcx:
1790 msm_hsusb_init_vddcx(motg, 0);
1791disable_clks:
1792 clk_disable_unprepare(motg->pclk);
1793 clk_disable_unprepare(motg->clk);
1794 if (!IS_ERR(motg->core_clk))
1795 clk_disable_unprepare(motg->core_clk);
1796 return ret;
1797}
1798
1799static int msm_otg_remove(struct platform_device *pdev)
1800{
1801 struct msm_otg *motg = platform_get_drvdata(pdev);
1802 struct usb_phy *phy = &motg->phy;
1803 int cnt = 0;
1804
1805 if (phy->otg->host || phy->otg->gadget)
1806 return -EBUSY;
1807
1808 if (motg->id.conn.edev)
1809 extcon_unregister_interest(&motg->id.conn);
1810 if (motg->vbus.conn.edev)
1811 extcon_unregister_interest(&motg->vbus.conn);
1812
1813 msm_otg_debugfs_cleanup();
1814 cancel_delayed_work_sync(&motg->chg_work);
1815 cancel_work_sync(&motg->sm_work);
1816
1817 pm_runtime_resume(&pdev->dev);
1818
1819 device_init_wakeup(&pdev->dev, 0);
1820 pm_runtime_disable(&pdev->dev);
1821
1822 usb_remove_phy(phy);
1823 disable_irq(motg->irq);
1824
1825
1826
1827
1828 ulpi_read(phy, 0x14);
1829 ulpi_write(phy, 0x08, 0x09);
1830
1831 writel(readl(USB_PORTSC) | PORTSC_PHCD, USB_PORTSC);
1832 while (cnt < PHY_SUSPEND_TIMEOUT_USEC) {
1833 if (readl(USB_PORTSC) & PORTSC_PHCD)
1834 break;
1835 udelay(1);
1836 cnt++;
1837 }
1838 if (cnt >= PHY_SUSPEND_TIMEOUT_USEC)
1839 dev_err(phy->dev, "Unable to suspend PHY\n");
1840
1841 clk_disable_unprepare(motg->pclk);
1842 clk_disable_unprepare(motg->clk);
1843 if (!IS_ERR(motg->core_clk))
1844 clk_disable_unprepare(motg->core_clk);
1845 msm_hsusb_ldo_init(motg, 0);
1846
1847 pm_runtime_set_suspended(&pdev->dev);
1848
1849 return 0;
1850}
1851
1852#ifdef CONFIG_PM
1853static int msm_otg_runtime_idle(struct device *dev)
1854{
1855 struct msm_otg *motg = dev_get_drvdata(dev);
1856 struct usb_otg *otg = motg->phy.otg;
1857
1858 dev_dbg(dev, "OTG runtime idle\n");
1859
1860
1861
1862
1863
1864
1865
1866 if (otg->state != OTG_STATE_UNDEFINED)
1867 pm_schedule_suspend(dev, 1000);
1868
1869 return -EAGAIN;
1870}
1871
1872static int msm_otg_runtime_suspend(struct device *dev)
1873{
1874 struct msm_otg *motg = dev_get_drvdata(dev);
1875
1876 dev_dbg(dev, "OTG runtime suspend\n");
1877 return msm_otg_suspend(motg);
1878}
1879
1880static int msm_otg_runtime_resume(struct device *dev)
1881{
1882 struct msm_otg *motg = dev_get_drvdata(dev);
1883
1884 dev_dbg(dev, "OTG runtime resume\n");
1885 return msm_otg_resume(motg);
1886}
1887#endif
1888
1889#ifdef CONFIG_PM_SLEEP
1890static int msm_otg_pm_suspend(struct device *dev)
1891{
1892 struct msm_otg *motg = dev_get_drvdata(dev);
1893
1894 dev_dbg(dev, "OTG PM suspend\n");
1895 return msm_otg_suspend(motg);
1896}
1897
1898static int msm_otg_pm_resume(struct device *dev)
1899{
1900 struct msm_otg *motg = dev_get_drvdata(dev);
1901 int ret;
1902
1903 dev_dbg(dev, "OTG PM resume\n");
1904
1905 ret = msm_otg_resume(motg);
1906 if (ret)
1907 return ret;
1908
1909
1910
1911
1912
1913 pm_runtime_disable(dev);
1914 pm_runtime_set_active(dev);
1915 pm_runtime_enable(dev);
1916
1917 return 0;
1918}
1919#endif
1920
1921static const struct dev_pm_ops msm_otg_dev_pm_ops = {
1922 SET_SYSTEM_SLEEP_PM_OPS(msm_otg_pm_suspend, msm_otg_pm_resume)
1923 SET_RUNTIME_PM_OPS(msm_otg_runtime_suspend, msm_otg_runtime_resume,
1924 msm_otg_runtime_idle)
1925};
1926
1927static struct platform_driver msm_otg_driver = {
1928 .probe = msm_otg_probe,
1929 .remove = msm_otg_remove,
1930 .driver = {
1931 .name = DRIVER_NAME,
1932 .pm = &msm_otg_dev_pm_ops,
1933 .of_match_table = msm_otg_dt_match,
1934 },
1935};
1936
1937module_platform_driver(msm_otg_driver);
1938
1939MODULE_LICENSE("GPL v2");
1940MODULE_DESCRIPTION("MSM USB transceiver driver");
1941