diff options
author | Ruchika Kharwar | 2013-07-06 07:04:05 -0500 |
---|---|---|
committer | Praneeth Bajjuri | 2013-07-17 17:24:29 -0500 |
commit | 724e921674a35a08e427caa41d80e2fde78acb31 (patch) | |
tree | 114b7695c627d16d83b8f8b8cc6d5ae4714bef22 /drivers | |
parent | b415193c4e6cd79ad292e3952945a55e6527c4d1 (diff) | |
download | kernel-audio-724e921674a35a08e427caa41d80e2fde78acb31.tar.gz kernel-audio-724e921674a35a08e427caa41d80e2fde78acb31.tar.xz kernel-audio-724e921674a35a08e427caa41d80e2fde78acb31.zip |
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.
Change-Id: Ic2c0fb31b23fda1acdda4269b1d09c5eec626417
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Ruchika Kharwar <ruchika@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/dwc3/core.c | 46 | ||||
-rw-r--r-- | drivers/usb/dwc3/core.h | 5 |
2 files changed, 31 insertions, 20 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 94730df489a5..f52a3a033b31 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c | |||
@@ -369,6 +369,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
369 | void *mem; | 369 | void *mem; |
370 | 370 | ||
371 | u8 mode; | 371 | u8 mode; |
372 | u8 dt_mode; | ||
372 | 373 | ||
373 | mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); | 374 | mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL); |
374 | if (!mem) { | 375 | if (!mem) { |
@@ -474,15 +475,30 @@ static int dwc3_probe(struct platform_device *pdev) | |||
474 | goto err0; | 475 | goto err0; |
475 | } | 476 | } |
476 | 477 | ||
477 | if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) | 478 | mode = USB_DR_MODE_UNKNOWN; |
478 | mode = DWC3_MODE_HOST; | 479 | if (node) |
479 | else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) | 480 | dt_mode = of_usb_get_dr_mode(node); |
480 | mode = DWC3_MODE_DEVICE; | 481 | |
481 | else | 482 | if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) { |
482 | mode = DWC3_MODE_DRD; | 483 | mode = USB_DR_MODE_HOST; |
484 | if (node && (mode != dt_mode)) | ||
485 | dev_warn(dev, "dr_mode set to host,check value in DT\n"); | ||
486 | } | ||
487 | else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) { | ||
488 | mode = USB_DR_MODE_PERIPHERAL; | ||
489 | if (node && (mode != dt_mode)) | ||
490 | dev_warn(dev, "dr_mode set to periph,check value in DT\n"); | ||
491 | } | ||
492 | else if (node) | ||
493 | mode = dt_mode; | ||
494 | |||
495 | if (mode == USB_DR_MODE_UNKNOWN) { | ||
496 | mode = USB_DR_MODE_OTG; | ||
497 | dev_warn(dev, "dwc3 mode set to otg default\n"); | ||
498 | } | ||
483 | 499 | ||
484 | switch (mode) { | 500 | switch (mode) { |
485 | case DWC3_MODE_DEVICE: | 501 | case USB_DR_MODE_PERIPHERAL: |
486 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); | 502 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); |
487 | ret = dwc3_gadget_init(dwc); | 503 | ret = dwc3_gadget_init(dwc); |
488 | if (ret) { | 504 | if (ret) { |
@@ -490,7 +506,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
490 | goto err1; | 506 | goto err1; |
491 | } | 507 | } |
492 | break; | 508 | break; |
493 | case DWC3_MODE_HOST: | 509 | case USB_DR_MODE_HOST: |
494 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); | 510 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST); |
495 | ret = dwc3_host_init(dwc); | 511 | ret = dwc3_host_init(dwc); |
496 | if (ret) { | 512 | if (ret) { |
@@ -498,7 +514,7 @@ static int dwc3_probe(struct platform_device *pdev) | |||
498 | goto err1; | 514 | goto err1; |
499 | } | 515 | } |
500 | break; | 516 | break; |
501 | case DWC3_MODE_DRD: | 517 | case USB_DR_MODE_OTG: |
502 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG); | 518 | dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG); |
503 | ret = dwc3_host_init(dwc); | 519 | ret = dwc3_host_init(dwc); |
504 | if (ret) { | 520 | if (ret) { |
@@ -530,13 +546,13 @@ static int dwc3_probe(struct platform_device *pdev) | |||
530 | 546 | ||
531 | err2: | 547 | err2: |
532 | switch (mode) { | 548 | switch (mode) { |
533 | case DWC3_MODE_DEVICE: | 549 | case USB_DR_MODE_PERIPHERAL: |
534 | dwc3_gadget_exit(dwc); | 550 | dwc3_gadget_exit(dwc); |
535 | break; | 551 | break; |
536 | case DWC3_MODE_HOST: | 552 | case USB_DR_MODE_HOST: |
537 | dwc3_host_exit(dwc); | 553 | dwc3_host_exit(dwc); |
538 | break; | 554 | break; |
539 | case DWC3_MODE_DRD: | 555 | case USB_DR_MODE_OTG: |
540 | dwc3_host_exit(dwc); | 556 | dwc3_host_exit(dwc); |
541 | dwc3_gadget_exit(dwc); | 557 | dwc3_gadget_exit(dwc); |
542 | break; | 558 | break; |
@@ -567,13 +583,13 @@ static int dwc3_remove(struct platform_device *pdev) | |||
567 | dwc3_debugfs_exit(dwc); | 583 | dwc3_debugfs_exit(dwc); |
568 | 584 | ||
569 | switch (dwc->mode) { | 585 | switch (dwc->mode) { |
570 | case DWC3_MODE_DEVICE: | 586 | case USB_DR_MODE_PERIPHERAL: |
571 | dwc3_gadget_exit(dwc); | 587 | dwc3_gadget_exit(dwc); |
572 | break; | 588 | break; |
573 | case DWC3_MODE_HOST: | 589 | case USB_DR_MODE_HOST: |
574 | dwc3_host_exit(dwc); | 590 | dwc3_host_exit(dwc); |
575 | break; | 591 | break; |
576 | case DWC3_MODE_DRD: | 592 | case USB_DR_MODE_OTG: |
577 | dwc3_host_exit(dwc); | 593 | dwc3_host_exit(dwc); |
578 | dwc3_gadget_exit(dwc); | 594 | dwc3_gadget_exit(dwc); |
579 | break; | 595 | break; |
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 1b726bad83e3..425466663fca 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h | |||
@@ -562,11 +562,6 @@ struct dwc3_hwparams { | |||
562 | /* HWPARAMS0 */ | 562 | /* HWPARAMS0 */ |
563 | #define DWC3_MODE(n) ((n) & 0x7) | 563 | #define DWC3_MODE(n) ((n) & 0x7) |
564 | 564 | ||
565 | #define DWC3_MODE_DEVICE 0 | ||
566 | #define DWC3_MODE_HOST 1 | ||
567 | #define DWC3_MODE_DRD 2 | ||
568 | #define DWC3_MODE_HUB 3 | ||
569 | |||
570 | #define DWC3_MDWIDTH(n) (((n) & 0xff00) >> 8) | 565 | #define DWC3_MDWIDTH(n) (((n) & 0xff00) >> 8) |
571 | 566 | ||
572 | /* HWPARAMS1 */ | 567 | /* HWPARAMS1 */ |