diff options
| author | Kumar Gala <galak@kernel.crashing.org> | 2007-02-09 12:40:48 -0500 |
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2007-02-09 12:40:48 -0500 |
| commit | b8583f6872496cdb0145a2f642fbefff002d68cb (patch) | |
| tree | 172dba46240de92865e6a8605cbb5736d2b113aa /arch/powerpc/sysdev | |
| parent | 8f34f6cfa27ddae8faf10aef986db2fda1ba6791 (diff) | |
| parent | 49baa91d6863df480fa05eb57524a274f77fa886 (diff) | |
Merge branch '83xx' into for_paulus
Diffstat (limited to 'arch/powerpc/sysdev')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_soc.c | 78 |
1 files changed, 59 insertions, 19 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 9f2a9a444bfb..34161bc5a02f 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
| @@ -441,7 +441,8 @@ static int __init fsl_usb_of_init(void) | |||
| 441 | { | 441 | { |
| 442 | struct device_node *np; | 442 | struct device_node *np; |
| 443 | unsigned int i; | 443 | unsigned int i; |
| 444 | struct platform_device *usb_dev_mph = NULL, *usb_dev_dr = NULL; | 444 | struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL, |
| 445 | *usb_dev_dr_client = NULL; | ||
| 445 | int ret; | 446 | int ret; |
| 446 | 447 | ||
| 447 | for (np = NULL, i = 0; | 448 | for (np = NULL, i = 0; |
| @@ -507,33 +508,72 @@ static int __init fsl_usb_of_init(void) | |||
| 507 | 508 | ||
| 508 | of_irq_to_resource(np, 0, &r[1]); | 509 | of_irq_to_resource(np, 0, &r[1]); |
| 509 | 510 | ||
| 510 | usb_dev_dr = | 511 | prop = get_property(np, "dr_mode", NULL); |
| 511 | platform_device_register_simple("fsl-ehci", i, r, 2); | 512 | |
| 512 | if (IS_ERR(usb_dev_dr)) { | 513 | if (!prop || !strcmp(prop, "host")) { |
| 513 | ret = PTR_ERR(usb_dev_dr); | 514 | usb_data.operating_mode = FSL_USB2_DR_HOST; |
| 515 | usb_dev_dr_host = platform_device_register_simple( | ||
| 516 | "fsl-ehci", i, r, 2); | ||
| 517 | if (IS_ERR(usb_dev_dr_host)) { | ||
| 518 | ret = PTR_ERR(usb_dev_dr_host); | ||
| 519 | goto err; | ||
| 520 | } | ||
| 521 | } else if (prop && !strcmp(prop, "peripheral")) { | ||
| 522 | usb_data.operating_mode = FSL_USB2_DR_DEVICE; | ||
| 523 | usb_dev_dr_client = platform_device_register_simple( | ||
| 524 | "fsl-usb2-udc", i, r, 2); | ||
| 525 | if (IS_ERR(usb_dev_dr_client)) { | ||
| 526 | ret = PTR_ERR(usb_dev_dr_client); | ||
| 527 | goto err; | ||
| 528 | } | ||
| 529 | } else if (prop && !strcmp(prop, "otg")) { | ||
| 530 | usb_data.operating_mode = FSL_USB2_DR_OTG; | ||
| 531 | usb_dev_dr_host = platform_device_register_simple( | ||
| 532 | "fsl-ehci", i, r, 2); | ||
| 533 | if (IS_ERR(usb_dev_dr_host)) { | ||
| 534 | ret = PTR_ERR(usb_dev_dr_host); | ||
| 535 | goto err; | ||
| 536 | } | ||
| 537 | usb_dev_dr_client = platform_device_register_simple( | ||
| 538 | "fsl-usb2-udc", i, r, 2); | ||
| 539 | if (IS_ERR(usb_dev_dr_client)) { | ||
| 540 | ret = PTR_ERR(usb_dev_dr_client); | ||
| 541 | goto err; | ||
| 542 | } | ||
| 543 | } else { | ||
| 544 | ret = -EINVAL; | ||
| 514 | goto err; | 545 | goto err; |
| 515 | } | 546 | } |
| 516 | 547 | ||
| 517 | usb_dev_dr->dev.coherent_dma_mask = 0xffffffffUL; | ||
| 518 | usb_dev_dr->dev.dma_mask = &usb_dev_dr->dev.coherent_dma_mask; | ||
| 519 | |||
| 520 | usb_data.operating_mode = FSL_USB2_DR_HOST; | ||
| 521 | |||
| 522 | prop = get_property(np, "phy_type", NULL); | 548 | prop = get_property(np, "phy_type", NULL); |
| 523 | usb_data.phy_mode = determine_usb_phy(prop); | 549 | usb_data.phy_mode = determine_usb_phy(prop); |
| 524 | 550 | ||
| 525 | ret = | 551 | if (usb_dev_dr_host) { |
| 526 | platform_device_add_data(usb_dev_dr, &usb_data, | 552 | usb_dev_dr_host->dev.coherent_dma_mask = 0xffffffffUL; |
| 527 | sizeof(struct | 553 | usb_dev_dr_host->dev.dma_mask = &usb_dev_dr_host-> |
| 528 | fsl_usb2_platform_data)); | 554 | dev.coherent_dma_mask; |
| 529 | if (ret) | 555 | if ((ret = platform_device_add_data(usb_dev_dr_host, |
| 530 | goto unreg_dr; | 556 | &usb_data, sizeof(struct |
| 557 | fsl_usb2_platform_data)))) | ||
| 558 | goto unreg_dr; | ||
| 559 | } | ||
| 560 | if (usb_dev_dr_client) { | ||
| 561 | usb_dev_dr_client->dev.coherent_dma_mask = 0xffffffffUL; | ||
| 562 | usb_dev_dr_client->dev.dma_mask = &usb_dev_dr_client-> | ||
| 563 | dev.coherent_dma_mask; | ||
| 564 | if ((ret = platform_device_add_data(usb_dev_dr_client, | ||
| 565 | &usb_data, sizeof(struct | ||
| 566 | fsl_usb2_platform_data)))) | ||
| 567 | goto unreg_dr; | ||
| 568 | } | ||
| 531 | } | 569 | } |
| 532 | return 0; | 570 | return 0; |
| 533 | 571 | ||
| 534 | unreg_dr: | 572 | unreg_dr: |
| 535 | if (usb_dev_dr) | 573 | if (usb_dev_dr_host) |
| 536 | platform_device_unregister(usb_dev_dr); | 574 | platform_device_unregister(usb_dev_dr_host); |
| 575 | if (usb_dev_dr_client) | ||
| 576 | platform_device_unregister(usb_dev_dr_client); | ||
| 537 | unreg_mph: | 577 | unreg_mph: |
| 538 | if (usb_dev_mph) | 578 | if (usb_dev_mph) |
| 539 | platform_device_unregister(usb_dev_mph); | 579 | platform_device_unregister(usb_dev_mph); |
| @@ -699,7 +739,7 @@ static int __init fs_enet_of_init(void) | |||
| 699 | if (ret) | 739 | if (ret) |
| 700 | goto unreg; | 740 | goto unreg; |
| 701 | } | 741 | } |
| 702 | 742 | ||
| 703 | of_node_put(phy); | 743 | of_node_put(phy); |
| 704 | of_node_put(mdio); | 744 | of_node_put(mdio); |
| 705 | 745 | ||
