Loading arch/powerpc/sysdev/fsl_soc.c +59 −19 Original line number Diff line number Diff line Loading @@ -441,7 +441,8 @@ static int __init fsl_usb_of_init(void) { struct device_node *np; unsigned int i; struct platform_device *usb_dev_mph = NULL, *usb_dev_dr = NULL; struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL, *usb_dev_dr_client = NULL; int ret; for (np = NULL, i = 0; Loading Loading @@ -507,33 +508,72 @@ static int __init fsl_usb_of_init(void) of_irq_to_resource(np, 0, &r[1]); usb_dev_dr = platform_device_register_simple("fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr)) { ret = PTR_ERR(usb_dev_dr); goto err; } usb_dev_dr->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr->dev.dma_mask = &usb_dev_dr->dev.coherent_dma_mask; prop = get_property(np, "dr_mode", NULL); if (!prop || !strcmp(prop, "host")) { usb_data.operating_mode = FSL_USB2_DR_HOST; usb_dev_dr_host = platform_device_register_simple( "fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr_host)) { ret = PTR_ERR(usb_dev_dr_host); goto err; } } else if (prop && !strcmp(prop, "peripheral")) { usb_data.operating_mode = FSL_USB2_DR_DEVICE; usb_dev_dr_client = platform_device_register_simple( "fsl-usb2-udc", i, r, 2); if (IS_ERR(usb_dev_dr_client)) { ret = PTR_ERR(usb_dev_dr_client); goto err; } } else if (prop && !strcmp(prop, "otg")) { usb_data.operating_mode = FSL_USB2_DR_OTG; usb_dev_dr_host = platform_device_register_simple( "fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr_host)) { ret = PTR_ERR(usb_dev_dr_host); goto err; } usb_dev_dr_client = platform_device_register_simple( "fsl-usb2-udc", i, r, 2); if (IS_ERR(usb_dev_dr_client)) { ret = PTR_ERR(usb_dev_dr_client); goto err; } } else { ret = -EINVAL; goto err; } prop = get_property(np, "phy_type", NULL); usb_data.phy_mode = determine_usb_phy(prop); ret = platform_device_add_data(usb_dev_dr, &usb_data, sizeof(struct fsl_usb2_platform_data)); if (ret) if (usb_dev_dr_host) { usb_dev_dr_host->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr_host->dev.dma_mask = &usb_dev_dr_host-> dev.coherent_dma_mask; if ((ret = platform_device_add_data(usb_dev_dr_host, &usb_data, sizeof(struct fsl_usb2_platform_data)))) goto unreg_dr; } if (usb_dev_dr_client) { usb_dev_dr_client->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr_client->dev.dma_mask = &usb_dev_dr_client-> dev.coherent_dma_mask; if ((ret = platform_device_add_data(usb_dev_dr_client, &usb_data, sizeof(struct fsl_usb2_platform_data)))) goto unreg_dr; } } return 0; unreg_dr: if (usb_dev_dr) platform_device_unregister(usb_dev_dr); if (usb_dev_dr_host) platform_device_unregister(usb_dev_dr_host); if (usb_dev_dr_client) platform_device_unregister(usb_dev_dr_client); unreg_mph: if (usb_dev_mph) platform_device_unregister(usb_dev_mph); Loading Loading
arch/powerpc/sysdev/fsl_soc.c +59 −19 Original line number Diff line number Diff line Loading @@ -441,7 +441,8 @@ static int __init fsl_usb_of_init(void) { struct device_node *np; unsigned int i; struct platform_device *usb_dev_mph = NULL, *usb_dev_dr = NULL; struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL, *usb_dev_dr_client = NULL; int ret; for (np = NULL, i = 0; Loading Loading @@ -507,33 +508,72 @@ static int __init fsl_usb_of_init(void) of_irq_to_resource(np, 0, &r[1]); usb_dev_dr = platform_device_register_simple("fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr)) { ret = PTR_ERR(usb_dev_dr); goto err; } usb_dev_dr->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr->dev.dma_mask = &usb_dev_dr->dev.coherent_dma_mask; prop = get_property(np, "dr_mode", NULL); if (!prop || !strcmp(prop, "host")) { usb_data.operating_mode = FSL_USB2_DR_HOST; usb_dev_dr_host = platform_device_register_simple( "fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr_host)) { ret = PTR_ERR(usb_dev_dr_host); goto err; } } else if (prop && !strcmp(prop, "peripheral")) { usb_data.operating_mode = FSL_USB2_DR_DEVICE; usb_dev_dr_client = platform_device_register_simple( "fsl-usb2-udc", i, r, 2); if (IS_ERR(usb_dev_dr_client)) { ret = PTR_ERR(usb_dev_dr_client); goto err; } } else if (prop && !strcmp(prop, "otg")) { usb_data.operating_mode = FSL_USB2_DR_OTG; usb_dev_dr_host = platform_device_register_simple( "fsl-ehci", i, r, 2); if (IS_ERR(usb_dev_dr_host)) { ret = PTR_ERR(usb_dev_dr_host); goto err; } usb_dev_dr_client = platform_device_register_simple( "fsl-usb2-udc", i, r, 2); if (IS_ERR(usb_dev_dr_client)) { ret = PTR_ERR(usb_dev_dr_client); goto err; } } else { ret = -EINVAL; goto err; } prop = get_property(np, "phy_type", NULL); usb_data.phy_mode = determine_usb_phy(prop); ret = platform_device_add_data(usb_dev_dr, &usb_data, sizeof(struct fsl_usb2_platform_data)); if (ret) if (usb_dev_dr_host) { usb_dev_dr_host->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr_host->dev.dma_mask = &usb_dev_dr_host-> dev.coherent_dma_mask; if ((ret = platform_device_add_data(usb_dev_dr_host, &usb_data, sizeof(struct fsl_usb2_platform_data)))) goto unreg_dr; } if (usb_dev_dr_client) { usb_dev_dr_client->dev.coherent_dma_mask = 0xffffffffUL; usb_dev_dr_client->dev.dma_mask = &usb_dev_dr_client-> dev.coherent_dma_mask; if ((ret = platform_device_add_data(usb_dev_dr_client, &usb_data, sizeof(struct fsl_usb2_platform_data)))) goto unreg_dr; } } return 0; unreg_dr: if (usb_dev_dr) platform_device_unregister(usb_dev_dr); if (usb_dev_dr_host) platform_device_unregister(usb_dev_dr_host); if (usb_dev_dr_client) platform_device_unregister(usb_dev_dr_client); unreg_mph: if (usb_dev_mph) platform_device_unregister(usb_dev_mph); Loading