usb: otg: Copy usb1 platform data
authorBenoit Goby <benoit@android.com>
Fri, 10 Sep 2010 08:10:57 +0000 (01:10 -0700)
committerColin Cross <ccross@android.com>
Wed, 6 Oct 2010 23:51:31 +0000 (16:51 -0700)
Change-Id: I878339ab53cad1687c1022137f00ecc494b60b9e
Signed-off-by: Benoit Goby <benoit@android.com>
drivers/usb/otg/cpcap-otg.c

index cfb7c3ef0cc17dfbae0cb337133c76e01f519405..4c42f5b9c65c43458923752607afe9ab1c996df8 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/usb/gadget.h>
 #include <linux/usb/hcd.h>
 #include <linux/platform_device.h>
+#include <linux/tegra_usb.h>
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/delay.h>
@@ -55,30 +56,44 @@ static const char *cpcap_state_name(enum usb_otg_state state)
 void cpcap_start_host(struct cpcap_otg_data *cpcap)
 {
        int retval;
+       struct platform_device *pdev;
+       struct platform_device *host = cpcap->host;
+       void *platform_data;
 
-       cpcap->pdev = platform_device_alloc(cpcap->host->name, cpcap->host->id);
-       if (!cpcap->pdev)
+       pdev = platform_device_alloc(host->name, host->id);
+       if (!pdev)
                return;
 
-       if (cpcap->host->resource) {
-               retval = platform_device_add_resources(cpcap->pdev,
-                                               cpcap->host->resource,
-                                               cpcap->host->num_resources);
+       if (host->resource) {
+               retval = platform_device_add_resources(pdev, host->resource,
+                                                       host->num_resources);
                if (retval)
                        goto error;
        }
 
-       cpcap->pdev->dev.dma_mask = cpcap->host->dev.dma_mask;
-       cpcap->pdev->dev.coherent_dma_mask = cpcap->host->dev.coherent_dma_mask;
+       pdev->dev.dma_mask = host->dev.dma_mask;
+       pdev->dev.coherent_dma_mask = host->dev.coherent_dma_mask;
 
-       retval = platform_device_add(cpcap->pdev);
-       if (retval)
+       platform_data = kmalloc(sizeof(struct tegra_ehci_platform_data), GFP_KERNEL);
+       if (!platform_data)
                goto error;
 
+       memcpy(platform_data, host->dev.platform_data,
+                               sizeof(struct tegra_ehci_platform_data));
+       pdev->dev.platform_data = platform_data;
+
+       retval = platform_device_add(pdev);
+       if (retval)
+               goto error_add;
+
+       cpcap->pdev = pdev;
        return;
+
+error_add:
+       kfree(platform_data);
 error:
        pr_err("%s: failed to add the host contoller device\n", __func__);
-       platform_device_put(cpcap->pdev);
+       platform_device_put(pdev);
 }
 
 void cpcap_stop_host(struct cpcap_otg_data *cpcap)