Re: [RFC PATH 2/3] usb: dwc3: add ULPI interface support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, Dec 02, 2013 at 04:24:31PM +0530, Kishon Vijay Abraham I wrote:
> Hi,
> 
> On Thursday 28 November 2013 09:29 PM, Heikki Krogerus wrote:

<snip>

> > diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
> > index dd17601..8bb82bc 100644
> > --- a/drivers/usb/dwc3/Makefile
> > +++ b/drivers/usb/dwc3/Makefile
> > @@ -13,6 +13,10 @@ ifneq ($(filter y,$(CONFIG_USB_DWC3_GADGET) $(CONFIG_USB_DWC3_DUAL_ROLE)),)
> >  	dwc3-y				+= gadget.o ep0.o
> >  endif
> >  
> > +ifneq ($(CONFIG_USB_DWC3_ULPI),)
> > +	dwc3-y				+= ulpi.o
> > +endif
> > +
> >  ifneq ($(CONFIG_DEBUG_FS),)
> >  	dwc3-y				+= debugfs.o
> >  endif
> > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> > index 1c0a69a..94927b2 100644
> > --- a/drivers/usb/dwc3/core.c
> > +++ b/drivers/usb/dwc3/core.c
> > @@ -505,6 +505,12 @@ static int dwc3_probe(struct platform_device *pdev)
> >  	dwc->regs_size	= resource_size(res);
> >  	dwc->dev	= dev;
> >  
> > +	if (!dwc->usb2_generic_phy) {
> > +		ret = dwc3_ulpi_init(dwc);
> 
> shouldn't this be called from dwc3-pci (or any other dwc3 glue)?

It's not going to be possible to put it to the dwc3-pci, but my
motivation for that is actually up and coming ACPI support. I do not
want to create glue driver for it just because this. With ACPI DSDT
there is no guarantee to get device entries for PHYs I'm afraid. You
will have them on some platforms, but on others you don't :(.

The issue with PCI is the device name, which is used when matching the
phy. We don't know it before the device is registered. We can't live
with the assumption there is only one instance in case of PCI. The
damn thing can be hotpluged from some weird dock, like exchangeable
back cover or something similar. So you will be able to register the
phy only after the core.c has probed, and requested the phys, which is
too late.

And besides. The glue drivers should only have platform specific code.
This is definitely platform agnostic feature of the controller.

> > +		if (ret)
> > +			return ret;
> > +	}
> > +
> >  	dev->dma_mask	= dev->parent->dma_mask;
> >  	dev->dma_parms	= dev->parent->dma_parms;
> >  	dma_set_coherent_mask(dev, dev->parent->coherent_dma_mask);

<snip>

> > +{
> > +	int ret;
> > +
> > +	/* First check if there is ULPI PHY */
> > +	ret = dwc3_readl(dwc->regs, DWC3_GHWPARAMS3);
> > +	if (!(ret & DWC3_ULPI_HSPHY))
> > +		return 0;
> > +
> > +	/* Register the interface */
> > +	dwc->ulpi = ulpi_new_interface(dwc->dev,
> > +				       dwc3_ulpi_read, dwc3_ulpi_write, dwc);
> > +	if (IS_ERR(dwc->ulpi)) {
> > +		dev_err(dwc->dev, "failed to register ULPI interface");
> > +		return PTR_ERR(dwc->ulpi);
> > +	}
> > +
> > +	/* Get the ULPI phy instance
> > +	 * REVISIT: There should be no need to get it separately here.
> > +	 */
> > +	dwc->usb2_generic_phy = devm_phy_get(dwc->dev, ULPI_PORT_NAME);
> 
> You shouldn't be needing this. It should get the phy from dwc3 core probe itself.

You don't need this here. I made it like this now just because we
don't yet have your final version of the patches where you introduce
the generic phy support in dwc3.

I want to change the core.c so it set's the dwc->dev and maps the
iomem before requesting the phys. And of course put dwc3_ulpi_init in
between.

Thanks,

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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux