On Fri, 7 Jun 2013, Manjunath Goudar wrote:

> Separate the  Samsung OHCI EXYNOS host controller driver from ohci-hcd
> host code so that it can be built as a separate driver module.
> This work is part of enabling multi-platform kernels on ARM.

> -static void exynos_ohci_phy_enable(struct exynos_ohci_hcd *exynos_ohci)
> +static void exynos_ohci_phy_enable(struct platform_device *pdev)
>  {
> -     struct platform_device *pdev = to_platform_device(exynos_ohci->dev);
> +     struct exynos_ohci_hcd *exynos_ohci = platform_get_drvdata(pdev);

This is wrong.  platform_get_drvdata() will return the hcd, not the 
exynos_ohci_hcd structure.

> @@ -37,9 +51,9 @@ static void exynos_ohci_phy_enable(struct exynos_ohci_hcd 
> *exynos_ohci)
>               exynos_ohci->pdata->phy_init(pdev, USB_PHY_TYPE_HOST);
>  }
>  
> -static void exynos_ohci_phy_disable(struct exynos_ohci_hcd *exynos_ohci)
> +static void exynos_ohci_phy_disable(struct platform_device *pdev)
>  {
> -     struct platform_device *pdev = to_platform_device(exynos_ohci->dev);
> +     struct exynos_ohci_hcd *exynos_ohci = platform_get_drvdata(pdev);

Same problem here.

> @@ -121,15 +83,18 @@ static int exynos_ohci_probe(struct platform_device 
> *pdev)
>       if (!pdev->dev.coherent_dma_mask)
>               pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
>  
> -     exynos_ohci = devm_kzalloc(&pdev->dev, sizeof(struct exynos_ohci_hcd),
> -                                     GFP_KERNEL);
> -     if (!exynos_ohci)
> +     hcd = usb_create_hcd(&exynos_ohci_hc_driver,
> +                             &pdev->dev, dev_name(&pdev->dev));
> +     if (!hcd) {
> +             dev_err(&pdev->dev, "Unable to create HCD\n");
>               return -ENOMEM;
>  
>       if (of_device_is_compatible(pdev->dev.of_node,
>                                       "samsung,exynos5440-ohci"))
>               goto skip_phy;
>  
> +     }

This close brace belongs with the previous "if" statement.

> @@ -146,7 +111,6 @@ static int exynos_ohci_probe(struct platform_device *pdev)
>  
>  skip_phy:
>  
> -     exynos_ohci->dev = &pdev->dev;
>  
>       hcd = usb_create_hcd(&exynos_ohci_hc_driver, &pdev->dev,
>                                       dev_name(&pdev->dev));

This needs to be deleted, because it was done already.

Manjunath, I have already asked you to proof-read your patches before 
posting them.  Please do so.  New patches should _not_ have this kind 
of error.

> @@ -192,13 +155,11 @@ skip_phy:
>       }
>  
>       if (exynos_ohci->otg)
> -             exynos_ohci->otg->set_host(exynos_ohci->otg,
> -                                     &exynos_ohci->hcd->self);
> +             exynos_ohci->otg->set_host(exynos_ohci->otg, &hcd->self);
>  
> -     exynos_ohci_phy_enable(exynos_ohci);
> +     exynos_ohci_phy_enable(pdev);

This call will not work, because you don't set pdev's platform_data
until later.  The call to platform_set_drvdata() must be moved before
this line.

>  
> -     ohci = hcd_to_ohci(hcd);
> -     ohci_hcd_init(ohci);
> +     ohci_setup(hcd);

There's no need to call ohci_setup(), because it will get called anyway
as the .reset member of the ohci_hc_driver structure.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to