On Fri, Nov 14, 2014 at 04:33:22PM +0200, Andy Shevchenko wrote:
> Since PHY for Chipidea is optional (not all SoCs having PHY for Chipidea
> should
> be programmed), we register 'nop' PHY for platforms that does not have
> programmable PHY.
>
> Signed-off-by: Andy Shevchenko <[email protected]>
> ---
> drivers/usb/chipidea/ci_hdrc_pci.c | 32 +++++++++++++++++++++++++-------
> 1 file changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/usb/chipidea/ci_hdrc_pci.c
> b/drivers/usb/chipidea/ci_hdrc_pci.c
> index 241ae34..7e0b701 100644
> --- a/drivers/usb/chipidea/ci_hdrc_pci.c
> +++ b/drivers/usb/chipidea/ci_hdrc_pci.c
> @@ -16,10 +16,16 @@
> #include <linux/interrupt.h>
> #include <linux/usb/gadget.h>
> #include <linux/usb/chipidea.h>
> +#include <linux/usb/usb_phy_generic.h>
>
> /* driver name */
> #define UDC_DRIVER_NAME "ci_hdrc_pci"
>
> +struct ci_hdrc_pci {
> + struct platform_device *ci;
> + struct platform_device *phy;
> +};
> +
>
> /******************************************************************************
> * PCI block
>
> *****************************************************************************/
> @@ -52,7 +58,7 @@ static int ci_hdrc_pci_probe(struct pci_dev *pdev,
> const struct pci_device_id *id)
> {
> struct ci_hdrc_platform_data *platdata = (void *)id->driver_data;
> - struct platform_device *plat_ci;
> + struct ci_hdrc_pci *ci;
> struct resource res[3];
> int retval = 0, nres = 2;
>
> @@ -61,6 +67,10 @@ static int ci_hdrc_pci_probe(struct pci_dev *pdev,
> return -ENODEV;
> }
>
> + ci = devm_kzalloc(&pdev->dev, sizeof(*ci), GFP_KERNEL);
> + if (!ci)
> + return -ENOMEM;
> +
> retval = pcim_enable_device(pdev);
> if (retval)
> return retval;
> @@ -73,20 +83,27 @@ static int ci_hdrc_pci_probe(struct pci_dev *pdev,
> pci_set_master(pdev);
> pci_try_set_mwi(pdev);
>
> + /* register a nop PHY */
> + ci->phy = usb_phy_generic_register();
> + if (!ci->phy)
> + return -ENOMEM;
Rebase my next tree where antoine's generic phy support for chipidea
driver in it, and for usb phy, the "phy" changes to "usb_phy".
> +
> memset(res, 0, sizeof(res));
> +
Why this blank line is needed?
> res[0].start = pci_resource_start(pdev, 0);
> res[0].end = pci_resource_end(pdev, 0);
> res[0].flags = IORESOURCE_MEM;
> res[1].start = pdev->irq;
> res[1].flags = IORESOURCE_IRQ;
>
> - plat_ci = ci_hdrc_add_device(&pdev->dev, res, nres, platdata);
> - if (IS_ERR(plat_ci)) {
> + ci->ci = ci_hdrc_add_device(&pdev->dev, res, nres, platdata);
> + if (IS_ERR(ci->ci)) {
> dev_err(&pdev->dev, "ci_hdrc_add_device failed!\n");
> - return PTR_ERR(plat_ci);
> + usb_phy_generic_unregister(ci->phy);
> + return PTR_ERR(ci->ci);
> }
>
> - pci_set_drvdata(pdev, plat_ci);
> + pci_set_drvdata(pdev, ci);
>
> return 0;
> }
> @@ -101,9 +118,10 @@ static int ci_hdrc_pci_probe(struct pci_dev *pdev,
> */
> static void ci_hdrc_pci_remove(struct pci_dev *pdev)
> {
> - struct platform_device *plat_ci = pci_get_drvdata(pdev);
> + struct ci_hdrc_pci *ci = pci_get_drvdata(pdev);
>
> - ci_hdrc_remove_device(plat_ci);
> + ci_hdrc_remove_device(ci->ci);
> + usb_phy_generic_unregister(ci->phy);
> }
>
> /**
> --
> 2.1.3
>
--
Best Regards,
Peter Chen
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html