diff options
author | Ruchika Kharwar <ruchika@ti.com> | 2013-07-06 08:52:49 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2013-07-29 06:56:51 -0400 |
commit | a45c82b84c844cd85b2ed1aa32596f1bffa32716 (patch) | |
tree | 5da3e7a15957d138633a9085125defd336bac64d /drivers/usb/dwc3/core.c | |
parent | 51e563e3c11492748d11d3846b6d325426427a95 (diff) |
usb: dwc3: adapt to use dr_mode device tree helper
This patch adapts the dwc3 to use the device tree helper
"of_usb_get_dr_mode" for the mode of operation of the dwc3 instance
being probed.
[ balbi@ti.com : make of_usb_get_dr_mode() conditional on
dev->of_node and let pdata pass dr_mode too ]
Reviewed-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Ruchika Kharwar <ruchika@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/core.c')
-rw-r--r-- | drivers/usb/dwc3/core.c | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 2f5632730ffb..df3723a1023e 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/usb/ch9.h> | 37 | #include <linux/usb/ch9.h> |
38 | #include <linux/usb/gadget.h> | 38 | #include <linux/usb/gadget.h> |
39 | #include <linux/usb/of.h> | 39 | #include <linux/usb/of.h> |
40 | #include <linux/usb/otg.h> | ||
40 | 41 | ||
41 | #include "platform_data.h" | 42 | #include "platform_data.h" |
42 | #include "core.h" | 43 | #include "core.h" |
@@ -359,8 +360,6 @@ static int dwc3_probe(struct platform_device *pdev) | |||
359 | void __iomem *regs; | 360 | void __iomem *regs; |
360 | void *mem; | 361 | void *mem; |
361 | 362 | ||
362 | u8 mode; | ||
363 | |||
364 | mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); | 363 | mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); |
365 | if (!mem) { | 364 | if (!mem) { |
366 | dev_err(dev, "not enough memory\n"); | 365 | dev_err(dev, "not enough memory\n"); |
@@ -415,6 +414,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
415 | dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1); | 414 | dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1); |
416 | 415 | ||
417 | dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); | 416 | dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); |
417 | dwc->dr_mode = of_usb_get_dr_mode(node); | ||
418 | } else { | 418 | } else { |
419 | dwc->maximum_speed = pdata->maximum_speed; | 419 | dwc->maximum_speed = pdata->maximum_speed; |
420 | 420 | ||
@@ -422,6 +422,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
422 | dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3); | 422 | dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3); |
423 | 423 | ||
424 | dwc->needs_fifo_resize = pdata->tx_fifo_resize; | 424 | dwc->needs_fifo_resize = pdata->tx_fifo_resize; |
425 | dwc->dr_mode = pdata->dr_mode; | ||
425 | } | 426 | } |
426 | 427 | ||
427 | /* default to superspeed if no maximum_speed passed */ | 428 | /* default to superspeed if no maximum_speed passed */ |
@@ -498,14 +499,15 @@ static int dwc3_probe(struct platform_device *pdev) | |||
498 | } | 499 | } |
499 | 500 | ||
500 | if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) | 501 | if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) |
501 | mode = DWC3_MODE_HOST; | 502 | dwc->dr_mode = USB_DR_MODE_HOST; |
502 | else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) | 503 | else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) |
503 | mode = DWC3_MODE_DEVICE; | 504 | dwc->dr_mode = USB_DR_MODE_PERIPHERAL; |
504 | else | 505 | |
505 | mode = DWC3_MODE_DRD; | 506 | if (dwc->dr_mode == USB_DR_MODE_UNKNOWN) |
507 | dwc->dr_mode = USB_DR_MODE_OTG; | ||
506 | 508 | ||
507 | switch (mode) { | 509 | switch (dwc->dr_mode) { |
508 | case DWC3_MODE_DEVICE: | 510 | case USB_DR_MODE_PERIPHERAL: |
509 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); | 511 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); |
510 | ret = dwc3_gadget_init(dwc); | 512 | ret = dwc3_gadget_init(dwc); |
511 | if (ret) { | 513 | if (ret) { |
@@ -513,7 +515,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
513 | goto err2; | 515 | goto err2; |
514 | } | 516 | } |
515 | break; | 517 | break; |
516 | case DWC3_MODE_HOST: | 518 | case USB_DR_MODE_HOST: |
517 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); | 519 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); |
518 | ret = dwc3_host_init(dwc); | 520 | ret = dwc3_host_init(dwc); |
519 | if (ret) { | 521 | if (ret) { |
@@ -521,7 +523,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
521 | goto err2; | 523 | goto err2; |
522 | } | 524 | } |
523 | break; | 525 | break; |
524 | case DWC3_MODE_DRD: | 526 | case USB_DR_MODE_OTG: |
525 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG); | 527 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG); |
526 | ret = dwc3_host_init(dwc); | 528 | ret = dwc3_host_init(dwc); |
527 | if (ret) { | 529 | if (ret) { |
@@ -536,10 +538,9 @@ static int dwc3_probe(struct platform_device *pdev) | |||
536 | } | 538 | } |
537 | break; | 539 | break; |
538 | default: | 540 | default: |
539 | dev_err(dev, "Unsupported mode of operation %d\n", mode); | 541 | dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode); |
540 | goto err2; | 542 | goto err2; |
541 | } | 543 | } |
542 | dwc->mode = mode; | ||
543 | 544 | ||
544 | ret = dwc3_debugfs_init(dwc); | 545 | ret = dwc3_debugfs_init(dwc); |
545 | if (ret) { | 546 | if (ret) { |
@@ -552,14 +553,14 @@ static int dwc3_probe(struct platform_device *pdev) | |||
552 | return 0; | 553 | return 0; |
553 | 554 | ||
554 | err3: | 555 | err3: |
555 | switch (mode) { | 556 | switch (dwc->dr_mode) { |
556 | case DWC3_MODE_DEVICE: | 557 | case USB_DR_MODE_PERIPHERAL: |
557 | dwc3_gadget_exit(dwc); | 558 | dwc3_gadget_exit(dwc); |
558 | break; | 559 | break; |
559 | case DWC3_MODE_HOST: | 560 | case USB_DR_MODE_HOST: |
560 | dwc3_host_exit(dwc); | 561 | dwc3_host_exit(dwc); |
561 | break; | 562 | break; |
562 | case DWC3_MODE_DRD: | 563 | case USB_DR_MODE_OTG: |
563 | dwc3_host_exit(dwc); | 564 | dwc3_host_exit(dwc); |
564 | dwc3_gadget_exit(dwc); | 565 | dwc3_gadget_exit(dwc); |
565 | break; | 566 | break; |
@@ -592,14 +593,14 @@ static int dwc3_remove(struct platform_device *pdev) | |||
592 | 593 | ||
593 | dwc3_debugfs_exit(dwc); | 594 | dwc3_debugfs_exit(dwc); |
594 | 595 | ||
595 | switch (dwc->mode) { | 596 | switch (dwc->dr_mode) { |
596 | case DWC3_MODE_DEVICE: | 597 | case USB_DR_MODE_PERIPHERAL: |
597 | dwc3_gadget_exit(dwc); | 598 | dwc3_gadget_exit(dwc); |
598 | break; | 599 | break; |
599 | case DWC3_MODE_HOST: | 600 | case USB_DR_MODE_HOST: |
600 | dwc3_host_exit(dwc); | 601 | dwc3_host_exit(dwc); |
601 | break; | 602 | break; |
602 | case DWC3_MODE_DRD: | 603 | case USB_DR_MODE_OTG: |
603 | dwc3_host_exit(dwc); | 604 | dwc3_host_exit(dwc); |
604 | dwc3_gadget_exit(dwc); | 605 | dwc3_gadget_exit(dwc); |
605 | break; | 606 | break; |
@@ -623,12 +624,12 @@ static int dwc3_prepare(struct device *dev) | |||
623 | 624 | ||
624 | spin_lock_irqsave(&dwc->lock, flags); | 625 | spin_lock_irqsave(&dwc->lock, flags); |
625 | 626 | ||
626 | switch (dwc->mode) { | 627 | switch (dwc->dr_mode) { |
627 | case DWC3_MODE_DEVICE: | 628 | case USB_DR_MODE_PERIPHERAL: |
628 | case DWC3_MODE_DRD: | 629 | case USB_DR_MODE_OTG: |
629 | dwc3_gadget_prepare(dwc); | 630 | dwc3_gadget_prepare(dwc); |
630 | /* FALLTHROUGH */ | 631 | /* FALLTHROUGH */ |
631 | case DWC3_MODE_HOST: | 632 | case USB_DR_MODE_HOST: |
632 | default: | 633 | default: |
633 | dwc3_event_buffers_cleanup(dwc); | 634 | dwc3_event_buffers_cleanup(dwc); |
634 | break; | 635 | break; |
@@ -646,12 +647,12 @@ static void dwc3_complete(struct device *dev) | |||
646 | 647 | ||
647 | spin_lock_irqsave(&dwc->lock, flags); | 648 | spin_lock_irqsave(&dwc->lock, flags); |
648 | 649 | ||
649 | switch (dwc->mode) { | 650 | switch (dwc->dr_mode) { |
650 | case DWC3_MODE_DEVICE: | 651 | case USB_DR_MODE_PERIPHERAL: |
651 | case DWC3_MODE_DRD: | 652 | case USB_DR_MODE_OTG: |
652 | dwc3_gadget_complete(dwc); | 653 | dwc3_gadget_complete(dwc); |
653 | /* FALLTHROUGH */ | 654 | /* FALLTHROUGH */ |
654 | case DWC3_MODE_HOST: | 655 | case USB_DR_MODE_HOST: |
655 | default: | 656 | default: |
656 | dwc3_event_buffers_setup(dwc); | 657 | dwc3_event_buffers_setup(dwc); |
657 | break; | 658 | break; |
@@ -667,12 +668,12 @@ static int dwc3_suspend(struct device *dev) | |||
667 | 668 | ||
668 | spin_lock_irqsave(&dwc->lock, flags); | 669 | spin_lock_irqsave(&dwc->lock, flags); |
669 | 670 | ||
670 | switch (dwc->mode) { | 671 | switch (dwc->dr_mode) { |
671 | case DWC3_MODE_DEVICE: | 672 | case USB_DR_MODE_PERIPHERAL: |
672 | case DWC3_MODE_DRD: | 673 | case USB_DR_MODE_OTG: |
673 | dwc3_gadget_suspend(dwc); | 674 | dwc3_gadget_suspend(dwc); |
674 | /* FALLTHROUGH */ | 675 | /* FALLTHROUGH */ |
675 | case DWC3_MODE_HOST: | 676 | case USB_DR_MODE_HOST: |
676 | default: | 677 | default: |
677 | /* do nothing */ | 678 | /* do nothing */ |
678 | break; | 679 | break; |
@@ -700,12 +701,12 @@ static int dwc3_resume(struct device *dev) | |||
700 | 701 | ||
701 | dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl); | 702 | dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl); |
702 | 703 | ||
703 | switch (dwc->mode) { | 704 | switch (dwc->dr_mode) { |
704 | case DWC3_MODE_DEVICE: | 705 | case USB_DR_MODE_PERIPHERAL: |
705 | case DWC3_MODE_DRD: | 706 | case USB_DR_MODE_OTG: |
706 | dwc3_gadget_resume(dwc); | 707 | dwc3_gadget_resume(dwc); |
707 | /* FALLTHROUGH */ | 708 | /* FALLTHROUGH */ |
708 | case DWC3_MODE_HOST: | 709 | case USB_DR_MODE_HOST: |
709 | default: | 710 | default: |
710 | /* do nothing */ | 711 | /* do nothing */ |
711 | break; | 712 | break; |