[POWERPC] 83xx: Add platform_device for USB DR peripheral driver

Add platform_device setup code for OTG/peripheral mode of 834x DR module.
It is needed for USB client driver to work.

Signed-off-by: Li Yang <leoli@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
Li Yang 2007-02-07 13:49:24 +08:00 коммит произвёл Kumar Gala
Родитель c161698287
Коммит 97c5a20ae6
1 изменённых файлов: 59 добавлений и 19 удалений

Просмотреть файл

@ -441,7 +441,8 @@ static int __init fsl_usb_of_init(void)
{ {
struct device_node *np; struct device_node *np;
unsigned int i; 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; int ret;
for (np = NULL, i = 0; for (np = NULL, i = 0;
@ -507,33 +508,72 @@ static int __init fsl_usb_of_init(void)
of_irq_to_resource(np, 0, &r[1]); of_irq_to_resource(np, 0, &r[1]);
usb_dev_dr = prop = get_property(np, "dr_mode", NULL);
platform_device_register_simple("fsl-ehci", i, r, 2);
if (IS_ERR(usb_dev_dr)) { if (!prop || !strcmp(prop, "host")) {
ret = PTR_ERR(usb_dev_dr); 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; goto err;
} }
usb_dev_dr->dev.coherent_dma_mask = 0xffffffffUL;
usb_dev_dr->dev.dma_mask = &usb_dev_dr->dev.coherent_dma_mask;
usb_data.operating_mode = FSL_USB2_DR_HOST;
prop = get_property(np, "phy_type", NULL); prop = get_property(np, "phy_type", NULL);
usb_data.phy_mode = determine_usb_phy(prop); usb_data.phy_mode = determine_usb_phy(prop);
ret = if (usb_dev_dr_host) {
platform_device_add_data(usb_dev_dr, &usb_data, usb_dev_dr_host->dev.coherent_dma_mask = 0xffffffffUL;
sizeof(struct usb_dev_dr_host->dev.dma_mask = &usb_dev_dr_host->
fsl_usb2_platform_data)); dev.coherent_dma_mask;
if (ret) if ((ret = platform_device_add_data(usb_dev_dr_host,
goto unreg_dr; &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; return 0;
unreg_dr: unreg_dr:
if (usb_dev_dr) if (usb_dev_dr_host)
platform_device_unregister(usb_dev_dr); platform_device_unregister(usb_dev_dr_host);
if (usb_dev_dr_client)
platform_device_unregister(usb_dev_dr_client);
unreg_mph: unreg_mph:
if (usb_dev_mph) if (usb_dev_mph)
platform_device_unregister(usb_dev_mph); platform_device_unregister(usb_dev_mph);
@ -699,7 +739,7 @@ static int __init fs_enet_of_init(void)
if (ret) if (ret)
goto unreg; goto unreg;
} }
of_node_put(phy); of_node_put(phy);
of_node_put(mdio); of_node_put(mdio);