aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuchika Kharwar2013-07-06 07:04:05 -0500
committerPraneeth Bajjuri2013-07-17 17:24:29 -0500
commit724e921674a35a08e427caa41d80e2fde78acb31 (patch)
tree114b7695c627d16d83b8f8b8cc6d5ae4714bef22 /drivers
parentb415193c4e6cd79ad292e3952945a55e6527c4d1 (diff)
downloadkernel-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.c46
-rw-r--r--drivers/usb/dwc3/core.h5
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
531err2: 547err2:
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 */