Re: [PATCH v2 7/9] usb: phy: fsl-usb: add IRQ check
Sergey Shtylyov writes: > The driver neglects to check the result of platform_get_irq()'s call and > blithely passes the negative error codes to request_irq() (which takes > *unsigned* IRQ #), causing it to fail with -EINVAL, overriding an original > error code. Stop calling request_irq() with the invalid IRQ #s. > > Fixes: 0807c500a1a6 ("USB: add Freescale USB OTG Transceiver driver") > Signed-off-by: Sergey Shtylyov Acked-by: Felipe Balbi -- balbi
Re: [PATCH 20/20] arch: dts: Fix DWC USB3 DT nodes name
Serge Semin writes: > On Wed, Oct 14, 2020 at 05:09:37PM +0300, Felipe Balbi wrote: >> >> Hi Serge, >> >> Serge Semin writes: >> > In accordance with the DWC USB3 bindings the corresponding node name is >> > suppose to comply with Generic USB HCD DT schema, which requires the USB >> > >> DWC3 is not a simple HDC, though. > > Yeah, strictly speaking it is equipped with a lot of vendor-specific stuff, > which are tuned by the DWC USB3 driver in the kernel. But after that the > controller is registered as xhci-hcd device so it's serviced by the xHCI > driver, in Dual-role or host-only builds, that's correct. We can also have peripheral-only builds (both SW or HW versions) which means xhci isn't even in the picture. -- balbi signature.asc Description: PGP signature
Re: [PATCH 20/20] arch: dts: Fix DWC USB3 DT nodes name
Hi Serge, Serge Semin writes: > In accordance with the DWC USB3 bindings the corresponding node name is > suppose to comply with Generic USB HCD DT schema, which requires the USB DWC3 is not a simple HDC, though. > nodes to have the name acceptable by the regexp: "^usb(@.*)?" . But a lot > of the DWC USB3-compatible nodes defined in the ARM/ARM64 DTS files have > name as "^dwc3@.*" or "^usb[1-3]@.*" or even "^dwusb@.*", which will cause > the dtbs_check procedure failure. Let's fix the nodes naming to be > compatible with the DWC USB3 DT schema to make dtbs_check happy. > > Note we don't change the DWC USB3-compatible nodes names of > arch/arm64/boot/dts/apm/{apm-storm.dtsi,apm-shadowcat.dtsi} since the > in-source comment says that the nodes name need to be preserved as > "^dwusb@.*" for some backward compatibility. interesting, compatibility with what? Some debugfs files, perhaps? :-) In any case, I don't have any problems with this, so I'll let other folks comment. -- balbi signature.asc Description: PGP signature
Re: [trivial PATCH] treewide: Convert switch/case fallthrough; to break;
Hi, Joe Perches writes: > drivers/usb/dwc3/core.c | 2 +- > drivers/usb/gadget/legacy/inode.c | 2 +- > drivers/usb/gadget/udc/pxa25x_udc.c | 4 ++-- > drivers/usb/phy/phy-fsl-usb.c | 2 +- for the drivers above: Acked-by: Felipe Balbi -- balbi signature.asc Description: PGP signature
Re: [PATCH] usb: gadget: fsl: Fix unsigned expression compared with zero in fsl_udc_probe
Joakim Tjernlund writes: > On Mon, 2020-08-24 at 16:58 +0300, Felipe Balbi wrote: >> Joakim Tjernlund writes: >> >> > On Mon, 2020-08-24 at 10:21 +0200, Greg KH wrote: >> > > >> > > On Mon, Aug 24, 2020 at 04:04:37PM +0800, Ye Bin wrote: >> > > > Signed-off-by: Ye Bin >> > > >> > > I can't take patches without any changelog text, sorry. >> > >> > Still taking patches for fsl_udc_core.c ? >> > I figured this driver was obsolete and should be moved to one of the >> > Chipidea drivers. >> >> Nobody sent any patches to switch over the users of this driver to >> chipidea. I would love to delete this driver :-) > > Me too, I got a few local patches here as the driver is quite buggy. > Got to little USB knowledge to switch it over though :( this wouldn't require USB knowledge. It only requires some minor DTS knowledge and HW for testing. -- balbi signature.asc Description: PGP signature
Re: [PATCH] usb: gadget: fsl: Fix unsigned expression compared with zero in fsl_udc_probe
Joakim Tjernlund writes: > On Mon, 2020-08-24 at 10:21 +0200, Greg KH wrote: >> >> On Mon, Aug 24, 2020 at 04:04:37PM +0800, Ye Bin wrote: >> > Signed-off-by: Ye Bin >> >> I can't take patches without any changelog text, sorry. > > Still taking patches for fsl_udc_core.c ? > I figured this driver was obsolete and should be moved to one of the Chipidea > drivers. Nobody sent any patches to switch over the users of this driver to chipidea. I would love to delete this driver :-) -- balbi signature.asc Description: PGP signature
Re: [patch V3 03/20] usb: gadget: Use completion interface instead of open coding it
Thomas Gleixner writes: > From: Thomas Gleixner > > ep_io() uses a completion on stack and open codes the waiting with: > > wait_event_interruptible (done.wait, done.done); > and > wait_event (done.wait, done.done); > > This waits in non-exclusive mode for complete(), but there is no reason to > do so because the completion can only be waited for by the task itself and > complete() wakes exactly one exlusive waiter. > > Replace the open coded implementation with the corresponding > wait_for_completion*() functions. > > No functional change. > > Reported-by: Sebastian Andrzej Siewior > Signed-off-by: Thomas Gleixner > Reviewed-by: Greg Kroah-Hartman > Cc: Felipe Balbi > Cc: linux-...@vger.kernel.org Do you want to carry it via your tree? If so: Acked-by: Felipe Balbi Otherwise, let me know and I'll pick this patch. -- balbi signature.asc Description: PGP signature
Re: [PATCH v2 03/17] compat_ioctl: use correct compat_ptr() translation in drivers
Arnd Bergmann writes: > A handful of drivers all have a trivial wrapper around their ioctl > handler, but don't call the compat_ptr() conversion function at the > moment. In practice this does not matter, since none of them are used > on the s390 architecture and for all other architectures, compat_ptr() > does not do anything, but using the new generic_compat_ioctl_ptrarg > helper makes it more correct in theory, and simplifies the code. > > Signed-off-by: Arnd Bergmann Acked-by: Felipe Balbi -- balbi signature.asc Description: PGP signature
Re: [-next PATCH 0/4] sysfs and DEVICE_ATTR_
Hi, Joe Perches writes: > drivers/usb/phy/phy-tahvo.c| 2 +- Acked-by: Felipe Balbi -- balbi
Re: [PATCH 1/2] usb: dwc2: add amcc,dwc-otg support
alues doesn't work." >>> >>> So, for this to work with the existing canyonlands.dts, I need to have >>> the "amcc,dwc-otg" compatible string. >> >> Ok, if that's the case. But still a bit confused as to what driver was >> working with it before since the binding was not defined for dwc2. >> >>> >>> Of course, it would be great to hear from Rob Herring and/or Mark Rutland >>> about this case. >>> >>> Regards, >>> Christian >>> >>> [0] <https://patchwork.kernel.org/patch/8976221/> >>> [1] >>> <http://lxr.free-electrons.com/source/arch/powerpc/boot/dts/canyonlands.dts#L181> >>> [2] <http://www.spinics.net/lists/devicetree/msg124538.html> >>> >>> >>>>> >>>>> From what I can tell based would be: >>>>> bcm11351, bcm21664, bcm23550, exynos3250, stm32f429, rk3xxx, >>>>> stratix10, meson-gxbb, rt3050 and some Altera FPGAs. >>>>> >>>>>> If that's all you need then a devicetree binding should be enough >>>>>> right? >>>>> Yes. The device is working fine so far. >>>>> >>>>> Regards, >>>>> Christian >>>>> >>>>> --- >>>>> From 70dd4be016b89655a56bc8260f04683b50f07644 Mon Sep 17 00:00:00 2001 >>>>> From: Christian Lamparter >>>>> Date: Sun, 6 Nov 2016 00:39:24 +0100 >>>>> Subject: [PATCH] usb: dwc2: add amcc,dwc-otg support >>>>> >>>>> This patch adds support for the "amcc,usb-otg" device >>>>> which is found in the PowerPC Canyonlands' dts. >>>>> >>>>> The device definition was added by: >>>>> commit c89b3458d8cc ("powerpc/44x: Add USB DWC DTS entry to Canyonlands >>>>> board")' >>>>> but without any driver support as the dwc2 driver wasn't >>>>> available at that time. >>>>> >>>>> Note: The system can't use the generic "snps,dwc2" compatible >>>>> because of the special ahbcfg configuration. The default >>>>> GAHBCFG_HBSTLEN_INCR4 of snps,dwc2 can cause a system hang >>>>> when the USB and SATA is used concurrently. >>>>> >>>>> Cc: Felipe Balbi >>>>> Cc: John Youn >>>>> Signed-off-by: Christian Lamparter >>>>> --- >>>>> v1->v2: >>>>> - moved definitons to params.c >>>>> - removed dma_enable / host_dma parameter >>>>> - added dma_desc_fs_enable parameter >>>>> v2->v3: >>>>> - removed parameters >>>>> >>>>> Please queue this patch until GAHBCFG_HBSTLEN_INCR16 is the default >>>>> for ahbcfg. >>>>> --- >>>>> Documentation/devicetree/bindings/usb/dwc2.txt | 1 + >>>>> drivers/usb/dwc2/params.c | 1 + >>>>> 2 files changed, 2 insertions(+) >>>>> >>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc2.txt >>>>> b/Documentation/devicetree/bindings/usb/dwc2.txt >>>>> index 10a2a4b..6ccfe85 100644 >>>>> --- a/Documentation/devicetree/bindings/usb/dwc2.txt >>>>> +++ b/Documentation/devicetree/bindings/usb/dwc2.txt >>>>> @@ -12,6 +12,7 @@ Required properties: >>>>>- "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX >>>>> SoCs; >>>>>- "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic >>>>> Meson8b SoCs; >>>>>- "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in >>>>> Amlogic S905 SoCs; >>>>> + - "amcc,dwc-otg": The DWC2 USB controller instance in AMCC Canyonlands >>>>> 460EX SoCs; >>>>>- snps,dwc2: A generic DWC2 USB controller with default parameters. >>>>> - reg : Should contain 1 register range (address and length) >>>>> - interrupts : Should contain 1 interrupt >>>>> diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c >>>>> index 64d5c66..9506ab0 100644 >>>>> --- a/drivers/usb/dwc2/params.c >>>>> +++ b/drivers/usb/dwc2/params.c >>>>> @@ -239,6 +239,7 @@ const struct of_device_id dwc2_of_match_table[] = { >>>>> { .compatible = "samsung,s3c6400-hsotg", .data = NULL}, >>>>> { .compatible = "amlogic,meson8b-usb", .data = ¶ms_amlogic }, >>>>> { .compatible = "amlogic,meson-gxbb-usb", .data = ¶ms_amlogic }, >>>>> + { .compatible = "amcc,dwc-otg", .data = NULL }, >>>>> {}, >>>>> }; >>>>> MODULE_DEVICE_TABLE(of, dwc2_of_match_table); >>>>> >> >> For dwc2 part: >> >> Acked-by: John Youn >> > > Hi Felipe, > > Can you drop this from your testing/next? > > I meant for the 2nd version to be applied, without the params > structure. > > I can send you a clean version to apply later today. done -- balbi signature.asc Description: PGP signature
[PATCH 44/82] usb: gadget: udc: fsl: remove unnecessary & operation
Now that usb_endpoint_maxp() only returns the lowest 11 bits from wMaxPacketSize, we can remove the & operation from this driver. Cc: Li Yang Cc: Signed-off-by: Felipe Balbi --- drivers/usb/gadget/udc/fsl_udc_core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c index 4459644b9b55..71094e479a96 100644 --- a/drivers/usb/gadget/udc/fsl_udc_core.c +++ b/drivers/usb/gadget/udc/fsl_udc_core.c @@ -586,7 +586,6 @@ static int fsl_ep_enable(struct usb_ep *_ep, case USB_ENDPOINT_XFER_ISOC: /* Calculate transactions needed for high bandwidth iso */ mult = usb_endpoint_maxp_mult(desc); - max = max & 0x7ff; /* bit 0~10 */ /* 3 transactions at most */ if (mult > 3) goto en_done; -- 2.10.1
[PATCH 20/82] usb: gadget: udc: fsl: make use of new usb_endpoint_maxp_mult()
We have introduced a helper to calculate multiplier value from wMaxPacketSize. Start using it. Cc: Li Yang Cc: Signed-off-by: Felipe Balbi --- drivers/usb/gadget/udc/fsl_udc_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c index aab5221d6c2e..4459644b9b55 100644 --- a/drivers/usb/gadget/udc/fsl_udc_core.c +++ b/drivers/usb/gadget/udc/fsl_udc_core.c @@ -585,7 +585,7 @@ static int fsl_ep_enable(struct usb_ep *_ep, break; case USB_ENDPOINT_XFER_ISOC: /* Calculate transactions needed for high bandwidth iso */ - mult = (unsigned char)(1 + ((max >> 11) & 0x03)); + mult = usb_endpoint_maxp_mult(desc); max = max & 0x7ff; /* bit 0~10 */ /* 3 transactions at most */ if (mult > 3) -- 2.10.1
[RFC/PATCH 43/45] usb: gadget: udc: fsl: remove unnecessary & operation
Now that usb_endpoint_maxp() only returns the lowest 11 bits from wMaxPacketSize, we can remove the & operation from this driver. Cc: Li Yang Cc: Signed-off-by: Felipe Balbi --- drivers/usb/gadget/udc/fsl_udc_core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c index 4459644b9b55..71094e479a96 100644 --- a/drivers/usb/gadget/udc/fsl_udc_core.c +++ b/drivers/usb/gadget/udc/fsl_udc_core.c @@ -586,7 +586,6 @@ static int fsl_ep_enable(struct usb_ep *_ep, case USB_ENDPOINT_XFER_ISOC: /* Calculate transactions needed for high bandwidth iso */ mult = usb_endpoint_maxp_mult(desc); - max = max & 0x7ff; /* bit 0~10 */ /* 3 transactions at most */ if (mult > 3) goto en_done; -- 2.10.0.440.g21f862b
[RFC/PATCH 20/45] usb: gadget: udc: fsl: make use of new usb_endpoint_maxp_mult()
We have introduced a helper to calculate multiplier value from wMaxPacketSize. Start using it. Cc: Li Yang Cc: Signed-off-by: Felipe Balbi --- drivers/usb/gadget/udc/fsl_udc_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c index aab5221d6c2e..4459644b9b55 100644 --- a/drivers/usb/gadget/udc/fsl_udc_core.c +++ b/drivers/usb/gadget/udc/fsl_udc_core.c @@ -585,7 +585,7 @@ static int fsl_ep_enable(struct usb_ep *_ep, break; case USB_ENDPOINT_XFER_ISOC: /* Calculate transactions needed for high bandwidth iso */ - mult = (unsigned char)(1 + ((max >> 11) & 0x03)); + mult = usb_endpoint_maxp_mult(desc); max = max & 0x7ff; /* bit 0~10 */ /* 3 transactions at most */ if (mult > 3) -- 2.10.0.440.g21f862b
Re: [PATCH 00/21] Delete CURRENT_TIME and CURRENT_TIME_SEC macros
Hi, Deepa Dinamani writes: > drivers/usb/gadget/function/f_fs.c | 2 +- > drivers/usb/gadget/legacy/inode.c | 2 +- for drivers/usb/gadget: Acked-by: Felipe Balbi -- balbi signature.asc Description: PGP signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] usb: dwc2: fix regression on big-endian PowerPC/ARM systems
Hi, (Arnd, you didn't Cc dwc2's maintainer. I'm also not part of TI anymore) Arnd Bergmann writes: > On Thursday 12 May 2016 14:25:49 Felipe Balbi wrote: >> > { >> > u32 value = __raw_readl(addr); >> > >> > - /* In order to preserve endianness __raw_* operation is used. >> > Therefore >> > - * a barrier is needed to ensure IO access is not re-ordered across >> > + /* in order to preserve endianness __raw_* operation is used. >> > therefore >> > + * a barrier is needed to ensure io access is not re-ordered across >> >* reads or writes >> >*/ >> > mb(); >> > @@ -81,15 +93,32 @@ static inline void dwc2_writel(u32 value, void __iomem >> > *addr) >> > __raw_writel(value, addr); >> > >> > /* >> > - * In order to preserve endianness __raw_* operation is used. >> > Therefore >> > - * a barrier is needed to ensure IO access is not re-ordered across >> > + * in order to preserve endianness __raw_* operation is used. >> > therefore >> > + * a barrier is needed to ensure io access is not re-ordered across >> >* reads or writes >> >*/ >> > mb(); >> > -#ifdef DWC2_LOG_WRITES >> > - pr_info("INFO:: wrote %08x to %p\n", value, addr); >> > +#ifdef dwc2_log_writes >> > + pr_info("info:: wrote %08x to %p\n", value, addr); >> > #endif >> > } >> > +#else > > Oops, the accidental lowercase conversion is still in here, I'll fix it > up once we agree on the approach. > >> I still think this is something that should be handled at MIPS side, no ? > > As I explained, there isn't really anything we can do in MIPS code > because of the way they have to handle PCI. > >> How many more drivers will we have to 'fix' like this ? > > Endianess problems will keep coming up, and we have hundreds or thousands > of drivers that are written with a particular design in mind that could > be wrong as soon as someone chooses to build an SoC that does things > differently. Once that happens, we'll fix them. > > Also, Christian has already posted a better version of the patch > that fixes this driver in an architecture independent way, but we still > need a workaround for the stable backports. hmmm, at least dwc3 (also from SNPS) has a couple bits where we can choose endianess for registers and DMA descriptors. John, do we have the same for dwc2 ? Wouldn't that be a better way to solve the problem ? -- balbi ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] usb: dwc2: fix regression on big-endian PowerPC/ARM systems
Hi, Arnd Bergmann writes: > A patch that went into Linux-4.4 to fix big-endian mode on a Lantiq > MIPS system unfortunately broke big-endian operation on PowerPC > APM82181 as reported by Christian Lamparter, and likely other > systems. > > It actually introduced multiple issues: > > - it broke big-endian ARM kernels: any machine that was working > correctly with a little-endian kernel is no longer using byteswaps > on big-endian kernels, which clearly breaks them. > - On PowerPC the same thing must be true: if it was working before, > using big-endian kernels is now broken. Unlike ARM, 32-bit PowerPC > usually uses big-endian kernels, so they are likely all broken. > - The barrier for dwc2_writel is on the wrong side of the __raw_writel(), > so the MMIO no longer synchronizes with DMA operations. > - On architectures that require specific CPU instructions for MMIO > access, using the __raw_ variant may turn this into a pointer > dereference that does not have the same effect as the readl/writel. > > This patch is a simple revert for all architectures other than MIPS, > in the hope that we can more easily backport it to fix the regression > on PowerPC and ARM systems without breaking the Lantiq system again. > > We should follow this up with a more elaborate change to add runtime > detection of endianess, to make sure it also works on all other > combinations of architectures and implementations of the usb-dwc2 > device. That patch however will be fairly large and not appropriate > for backports to stable kernels. > > Signed-off-by: Arnd Bergmann > Fixes: 95c8bc360944 ("usb: dwc2: Use platform endianness when accessing > registers") > --- > drivers/usb/dwc2/core.h | 41 +++-- > 1 file changed, 35 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h > index 3c58d633ce80..1f8ed149a40f 100644 > --- a/drivers/usb/dwc2/core.h > +++ b/drivers/usb/dwc2/core.h > @@ -64,12 +64,24 @@ > DWC2_TRACE_SCHEDULER_VB(pr_fmt("%s: SCH: " fmt),\ > dev_name(hsotg->dev), ##__VA_ARGS__) > > + > +#ifdef CONFIG_MIPS > +/* > + * There are some MIPS machines that can run in either big-endian > + * or little-endian mode and that use the dwc2 register without > + * a byteswap in both ways. > + * Unlike other architectures, MIPS does not require a barrier > + * before the __raw_writel() to synchronize with DMA but does > + * require the barrier after the writel() to serialize a series > + * of writes. This set of operations was added specifically for > + * MIPS and should only be used there. > + */ > static inline u32 dwc2_readl(const void __iomem *addr) > { > u32 value = __raw_readl(addr); > > - /* In order to preserve endianness __raw_* operation is used. Therefore > - * a barrier is needed to ensure IO access is not re-ordered across > + /* in order to preserve endianness __raw_* operation is used. therefore > + * a barrier is needed to ensure io access is not re-ordered across >* reads or writes >*/ > mb(); > @@ -81,15 +93,32 @@ static inline void dwc2_writel(u32 value, void __iomem > *addr) > __raw_writel(value, addr); > > /* > - * In order to preserve endianness __raw_* operation is used. Therefore > - * a barrier is needed to ensure IO access is not re-ordered across > + * in order to preserve endianness __raw_* operation is used. therefore > + * a barrier is needed to ensure io access is not re-ordered across >* reads or writes >*/ > mb(); > -#ifdef DWC2_LOG_WRITES > - pr_info("INFO:: wrote %08x to %p\n", value, addr); > +#ifdef dwc2_log_writes > + pr_info("info:: wrote %08x to %p\n", value, addr); > #endif > } > +#else I still think this is something that should be handled at MIPS side, no ? How many more drivers will we have to 'fix' like this ? -- balbi ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: usb: dwc2: regression on MyBook Live Duo / Canyonlands since 4.3.0-rc4
Hi, Arnd Bergmann writes: > On Monday 09 May 2016 10:23:22 Benjamin Herrenschmidt wrote: >> On Sun, 2016-05-08 at 13:44 +0200, Christian Lamparter wrote: >> > On Sunday, May 08, 2016 08:40:55 PM Benjamin Herrenschmidt wrote: >> > > >> > > On Sun, 2016-05-08 at 00:54 +0200, Christian Lamparter via Linuxppc-dev >> > > wrote: >> > > > >> > > > I've been looking in getting the MyBook Live Duo's USB OTG port >> > > > to function. The SoC is a APM82181. Which has a PowerPC 464 core >> > > > and related to the supported canyonlands architecture in >> > > > arch/powerpc/. >> > > > >> > > > Currently in -next the dwc2 module doesn't load: >> > > Smells like the APM implementation is little endian. You might need to >> > > use a flag to indicate what endian to use instead and set it >> > > appropriately based on some DT properties. >> > I tried. As per common-properties[0], I added little-endian; but it has no >> > effect. I looked in dwc2_driver_probe and found no way of specifying the >> > endian of the device. It all comes down to the dwc2_readl & dwc2_writel >> > accessors. These - sadly - have been hardwired to use __raw_readl and >> > __raw_writel. So, it's always "native-endian". While common-properties >> > says little-endian should be preferred. >> >> Right, I meant, you should produce a patch adding a runtime test inside >> those functions based on a device-tree property, a bit like we do for >> some of the HCDs like OHCI, EHCI etc... >> >> > > The patch that caused the problem had multiple issues: > > - it broke big-endian ARM kernels: any machine that was working > correctly with a little-endian kernel is no longer using byteswaps > on big-endian kernels, which clearly breaks them. > - On PowerPC the same thing must be true: if it was working before, > using big-endian kernels is now broken. Unlike ARM, 32-bit PowerPC > usually uses big-endian kernels, so they are likely all broken. > - The barrier for dwc2_writel is on the wrong side of the __raw_writel(), > so the MMIO no longer synchronizes with DMA operations. > - On architectures that require specific CPU instructions for MMIO > access, using the __raw_ variant may turn this into a pointer > dereference that does not have the same effect as the readl/writel. > > I think we can simply make this set of accessors architecture-dependent > (MIPS vs. the rest of the world) to revert ARM and PowerPC back to > the working version. and patch all drivers similarly? Shouldn't arch/mips itself deal with it and hide it from drivers ? -- balbi signature.asc Description: PGP signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 01/46] usb: gadget: encapsulate endpoint claiming mechanism
Hi, On Thu, Aug 20, 2015 at 07:16:48PM +0200, Robert Baldyga wrote: > On 08/20/2015 06:48 PM, Felipe Balbi wrote: > >On Thu, Aug 20, 2015 at 06:28:14PM +0200, Robert Baldyga wrote: > >>Hi Felipe, > >> > >>On 08/20/2015 05:35 PM, Felipe Balbi wrote: > >>[...] > >>>just letting you know that this regresses all gadget drivers making them > >>>try to disable previously disabled endpoints and enable previously > >>>enabled endpoints. > >>> > >>>I have a possible fix (see below) but then it shows a problem on the > >>>host side when using with g_zero (see further below): > >>> > >>>commit 3b8932100aacb6cfbffe288ca93025d8b8430c00 > >>>Author: Felipe Balbi > >>>Date: Wed Aug 19 18:05:27 2015 -0500 > >>> > >>> usb: gadget: fix ep->claimed lifetime > >>> > >>> In order to fix a regression introduced by commit > >>> cc476b42a39d ("usb: gadget: encapsulate endpoint > >>> claiming mechanism") we have to introduce a simple > >>> helper to check if a particular is enabled or not. > >>> > >>> After that, we need to move ep->claimed lifetime to > >>> usb_ep_enable() and usb_ep_disable() since those > >>> are the only functions which actually enable and > >>> disable endpoints. > >>> > >>> A follow-up patch will come to drop all driver_data > >>> checks from function drivers, since those are, now, > >>> pointless. > >>> > >>> Fixes: cc476b42a39d ("usb: gadget: encapsulate endpoint > >>> claiming mechanism") > >>> Cc: Robert Baldyga > >>> Signed-off-by: Felipe Balbi > >>> > >>>diff --git a/drivers/usb/gadget/epautoconf.c > >>>b/drivers/usb/gadget/epautoconf.c > >>>index 978435a51038..ad45070cd76f 100644 > >>>--- a/drivers/usb/gadget/epautoconf.c > >>>+++ b/drivers/usb/gadget/epautoconf.c > >>>@@ -126,7 +126,6 @@ found_ep: > >>> ep->address = desc->bEndpointAddress; > >>> ep->desc = NULL; > >>> ep->comp_desc = NULL; > >>>- ep->claimed = true; > >> > >>Removing this line causes autoconfig can return the same endpoint many > >>times. This probably causes problems with g_zero. > >> > >>I will try to fix it ASAP. > > > >I was considering the same thing, but the lifetime of ->claimed doesn't > >look correct to me either way. Note that once the flag is enabled, it > >won't get disabled by most gadget drivers. > > And it should not be. This flag is indicator, that endpoint is used by some > function. It should be set once by usb_ep_autoconfig() and cleared by > usb_ep_autoconfig_reset(). have you considered switching interfaces and/or alternate settings ? > I wonder what is reason of this enable/disable regression. Maybe the problem > is that we don't set ep->driver_data to NULL in usb_ep_autoconfig_reset() > (so far it was done). Does this problem occur while gadget is binded to UDC > for the first time, or at any next time? Unfortunately at this moment I > don't have access to my hardware, so it will take a moment before I will > setup some testing environment. yeah, that's okay. We've got time. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 01/46] usb: gadget: encapsulate endpoint claiming mechanism
On Thu, Aug 20, 2015 at 06:28:14PM +0200, Robert Baldyga wrote: > Hi Felipe, > > On 08/20/2015 05:35 PM, Felipe Balbi wrote: > [...] > >just letting you know that this regresses all gadget drivers making them > >try to disable previously disabled endpoints and enable previously > >enabled endpoints. > > > >I have a possible fix (see below) but then it shows a problem on the > >host side when using with g_zero (see further below): > > > >commit 3b8932100aacb6cfbffe288ca93025d8b8430c00 > >Author: Felipe Balbi > >Date: Wed Aug 19 18:05:27 2015 -0500 > > > > usb: gadget: fix ep->claimed lifetime > > > > In order to fix a regression introduced by commit > > cc476b42a39d ("usb: gadget: encapsulate endpoint > > claiming mechanism") we have to introduce a simple > > helper to check if a particular is enabled or not. > > > > After that, we need to move ep->claimed lifetime to > > usb_ep_enable() and usb_ep_disable() since those > > are the only functions which actually enable and > > disable endpoints. > > > > A follow-up patch will come to drop all driver_data > > checks from function drivers, since those are, now, > > pointless. > > > > Fixes: cc476b42a39d ("usb: gadget: encapsulate endpoint > > claiming mechanism") > > Cc: Robert Baldyga > > Signed-off-by: Felipe Balbi > > > >diff --git a/drivers/usb/gadget/epautoconf.c > >b/drivers/usb/gadget/epautoconf.c > >index 978435a51038..ad45070cd76f 100644 > >--- a/drivers/usb/gadget/epautoconf.c > >+++ b/drivers/usb/gadget/epautoconf.c > >@@ -126,7 +126,6 @@ found_ep: > > ep->address = desc->bEndpointAddress; > > ep->desc = NULL; > > ep->comp_desc = NULL; > >-ep->claimed = true; > > Removing this line causes autoconfig can return the same endpoint many > times. This probably causes problems with g_zero. > > I will try to fix it ASAP. I was considering the same thing, but the lifetime of ->claimed doesn't look correct to me either way. Note that once the flag is enabled, it won't get disabled by most gadget drivers. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 01/46] usb: gadget: encapsulate endpoint claiming mechanism
Hi, On Fri, Jul 31, 2015 at 04:00:13PM +0200, Robert Baldyga wrote: > So far it was necessary for usb functions to set ep->driver_data in > endpoint obtained from autoconfig to non-null value, to indicate that > endpoint is claimed by function (in autoconfig it was checked if endpoint > has set this field to non-null value, and if it has, it was assumed that > it is claimed). It could cause bugs because if some function doesn't > set this field autoconfig could return the same endpoint more than one > time. > > To help to avoid such bugs this patch adds claimed flag to struct usb_ep, > and encapsulates endpoint claiming mechanism inside usb_ep_autoconfig_ss() > and usb_ep_autoconfig_reset(), so now usb functions don't need to perform > any additional actions to mark endpoint obtained from autoconfig as claimed. > > Signed-off-by: Robert Baldyga just letting you know that this regresses all gadget drivers making them try to disable previously disabled endpoints and enable previously enabled endpoints. I have a possible fix (see below) but then it shows a problem on the host side when using with g_zero (see further below): commit 3b8932100aacb6cfbffe288ca93025d8b8430c00 Author: Felipe Balbi Date: Wed Aug 19 18:05:27 2015 -0500 usb: gadget: fix ep->claimed lifetime In order to fix a regression introduced by commit cc476b42a39d ("usb: gadget: encapsulate endpoint claiming mechanism") we have to introduce a simple helper to check if a particular is enabled or not. After that, we need to move ep->claimed lifetime to usb_ep_enable() and usb_ep_disable() since those are the only functions which actually enable and disable endpoints. A follow-up patch will come to drop all driver_data checks from function drivers, since those are, now, pointless. Fixes: cc476b42a39d ("usb: gadget: encapsulate endpoint claiming mechanism") Cc: Robert Baldyga Signed-off-by: Felipe Balbi diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c index 978435a51038..ad45070cd76f 100644 --- a/drivers/usb/gadget/epautoconf.c +++ b/drivers/usb/gadget/epautoconf.c @@ -126,7 +126,6 @@ found_ep: ep->address = desc->bEndpointAddress; ep->desc = NULL; ep->comp_desc = NULL; - ep->claimed = true; return ep; } EXPORT_SYMBOL_GPL(usb_ep_autoconfig_ss); @@ -182,11 +181,6 @@ EXPORT_SYMBOL_GPL(usb_ep_autoconfig); */ void usb_ep_autoconfig_reset (struct usb_gadget *gadget) { - struct usb_ep *ep; - - list_for_each_entry (ep, &gadget->ep_list, ep_list) { - ep->claimed = false; - } gadget->in_epnum = 0; gadget->out_epnum = 0; } diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index c14a69b36d27..9b3d60c1cf9f 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -243,6 +243,22 @@ static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep, } /** + * usb_ep_enabled - is endpoint enabled ? + * @ep: the endpoint being checked. may not be the endpoint named "ep0". + * + * Whenever a function driver wants to check if a particular endpoint is + * enabled or not, it must check using this helper function. This will + * encapsulate details about how the endpoint is checked, saving the function + * driver from using private methods for doing so. + * + * return true if endpoint is enabled, false otherwise. + */ +static inline bool usb_ep_enabled(struct usb_ep *ep) +{ + return ep->claimed; +} + +/** * usb_ep_enable - configure endpoint, making it usable * @ep:the endpoint being configured. may not be the endpoint named "ep0". * drivers discover endpoints through the ep_list of a usb_gadget. @@ -264,7 +280,18 @@ static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep, */ static inline int usb_ep_enable(struct usb_ep *ep) { - return ep->ops->enable(ep, ep->desc); + int ret; + + if (usb_ep_enabled(ep)) + return 0; + + ret = ep->ops->enable(ep, ep->desc); + if (ret) + return ret; + + ep->claimed = true; + + return 0; } /** @@ -281,7 +308,18 @@ static inline int usb_ep_enable(struct usb_ep *ep) */ static inline int usb_ep_disable(struct usb_ep *ep) { - return ep->ops->disable(ep); + int ret; + + if (!usb_ep_enabled(ep)) + return 0; + + ret = ep->ops->disable(ep); + if (ret) + return ret; + + ep->claimed = false; + + return 0; } /** [ 73.290345] WARNING: CPU: 0 PID: 300 at lib/kobject.c:240 kobject_add_internal+0x25c/0x2d8() [ 73.299172] kobject_add_internal failed for ep_81 with -EEXIST, don't try to register things with the same name in the same d
Re: [PATCH v5 40/46] usb: gadget: epautoconf: rework ep_matches() function
On Fri, Jul 31, 2015 at 04:00:52PM +0200, Robert Baldyga wrote: > Rework ep_matches() function to make it shorter and more readable. > > Signed-off-by: Robert Baldyga this regresses at least mass storage. How did you test it ? I'll keep all patches up to this one, please fix the problem, rebase on testing/next and resend the remaining patches. cheers -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 00/46] usb: gadget: rework ep matching and claiming mechanism
Hi, On Fri, Jul 31, 2015 at 04:00:12PM +0200, Robert Baldyga wrote: > Hello, > > This patch series reworks endpoint matching and claiming mechanism in > epautoconf. From v2 there are couple of new patches adding 'ep_match' > to usb_gadget_ops and removing chip-specific quirk handling from generic > code of autoconfig. > > I'm not sure if this patch set isn't too long, as it has 46 patches, > but I decided to send it as single series to avoid problems with patch > applying order. > > The aim of whole patchset is to rework epautoconf code to get rid of > things like name-based endpoint matching and UDC name-based quirks in > generic code. These needed to do some modifications in framework like > adding 'endpoint capabilities flags' feature or adding 'match_ep'. > > Following paragraphs contain brief description of what modifications are > done by particular parts of this patch set: > > Patch (1) introduces new safer endpoint claiming method, basing on new > 'claimed' flag. It was discussed here [1]. I proposed this solution over > year ago and it was accepted, but I apparently forgot to send the final > version of my patch. > > Patches (2-3) add the 'capabilities flags' structure and helper macros. > This solution is inspired by the 'feature flags' originally proposed > by Felipe Balbi in 2013 [2], but unfortunately implementation of this > feature has never been completed. > > Patches (4-36) add' capabilites flags' support to all UDC drivers present > in the kernel tree. It's needed to be done before replacing old endpoint > matching mechanism, otherwise UDC drivers which doesn't set 'capabilities > flags' won't work with new matching function. > > Patch (37) finally replaces old endpoint matching method with the new > one basing on capabilities flags. > > These changes aims to get rid of code, which guesses endpoint capabilities > basing on it's name, and introduce new better replacement. In result > we have better way to describe types and directions supported by each > endpoint. > > For example the old name-based method didn't allow to have endpoint > supporing two types of transfers - there were only ability to support > one or all of endpoint types. The 'capabilities flags' feature supply > precise, flexible and extensible mechanism of description of endpoint > hardware limitations, which is desired for proper endpoint matching. > > Patch (38) removes chip-specific quirk from ep_matches() function. > > Patches (39-40) remove code modifying endpoint and descriptor structures > from ep_matches() function and cleans it up to make it simpler and more > readable. > > Patch (41) add 'match_ep' callback to usb_gadget_ops and make use of > it in epautoconf. This callback allows UDC drivers to supply non-standard > endpoint matching algorithms. > > Patches (42-43) move ep_matches() and find_ep() functions outside > epautoconf and rename them to usb_gadget_ep_match_desc() and > gadget_find_ep_by_name(). It's because they may be useful in 'match_ep' > callbacks in UDC drivers to avoid writing repetitive code. > > Patches (44-46) move chip-specific enpoint matching algorithms from > generic code of usb_ep_autoconfig_ss() function to UDC controller drivers > using 'match_ep' callback. > > In the result we have epautoconf source free of chip-specific code, plus > two new mechanisms allowing to handle non-standard hardware limitations. > > [1] https://lkml.org/lkml/2014/6/16/94 > [2] http://www.spinics.net/lists/linux-usb/msg99662.html adding these to my testing/next after fixing a few build warnings and the comment I had on dwc3 patch. Let's hope it just works :-) -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 07/46] usb: dwc3: gadget: add ep capabilities support
On Fri, Jul 31, 2015 at 04:00:19PM +0200, Robert Baldyga wrote: > Convert endpoint configuration to new capabilities model. > > Signed-off-by: Robert Baldyga > --- > drivers/usb/dwc3/gadget.c | 13 + > 1 file changed, 13 insertions(+) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 2feed9e..bd4c3db 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -1715,6 +1715,19 @@ static int dwc3_gadget_init_hw_endpoints(struct dwc3 > *dwc, > return ret; > } > > + if (epnum == 0 || epnum == 1) { > + dep->endpoint.caps.type_control = true; > + } else { > + dep->endpoint.caps.type_iso = true; > + dep->endpoint.caps.type_bulk = true; > + dep->endpoint.caps.type_int = true; > + } > + > + if (direction) > + dep->endpoint.caps.dir_in = true; > + else > + dep->endpoint.caps.dir_out = true; you can avoid the branch for the direction: dep->endpoint.caps.dir_in = !!direction; dep->endpoint.caps.dir_out = !direction; -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 02/46] usb: gadget: add endpoint capabilities flags
Hi, On Fri, Jul 31, 2015 at 03:51:52PM +, David Laight wrote: > From: Robert Baldyga > > Sent: 31 July 2015 15:00 > > Introduce struct usb_ep_caps which contains information about capabilities > > of usb endpoints - supported transfer types and directions. This structure > > should be filled by UDC driver for each of its endpoints, and will be > > used in epautoconf in new ep matching mechanism which will replace ugly > > guessing of endpoint capabilities basing on its name. > > > > Signed-off-by: Robert Baldyga > > --- > > include/linux/usb/gadget.h | 21 + > > 1 file changed, 21 insertions(+) > > > > diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h > > index 68fb5e8..a9a4959 100644 > > --- a/include/linux/usb/gadget.h > > +++ b/include/linux/usb/gadget.h > > @@ -141,10 +141,29 @@ struct usb_ep_ops { > > }; > ... > > +struct usb_ep_caps { > > + unsigned type_control:1; > > + unsigned type_iso:1; > > + unsigned type_bulk:1; > > + unsigned type_int:1; > > + unsigned dir_in:1; > > + unsigned dir_out:1; > > +}; > > With the way this is used (eg below from 13/46) > > + > + if (i == 0) { > + ep->ep.caps.type_control = true; > + } else { > + ep->ep.caps.type_iso = true; > + ep->ep.caps.type_bulk = true; > + ep->ep.caps.type_int = true; > + } > + > + ep->ep.caps.dir_in = true; > + ep->ep.caps.dir_out = true; > > I think it would be more obvious if you used a u8 and explicit bitmasks. > The initialisation (as above) would the be explicitly assigning 'not > supported' > to the other fields. > The compiler will also generate much better code... compiler should convert single bit flags into u32 just fine. It's all static data anyway. Besides, single bit flags allow us to have as many as we need without ending up with stuff like: u32 flags; u32 flags1; u32 flags2; etc. Just let the compiler do those conversions for us. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 04/46] staging: emxx_udc: add ep capabilities support
Hi, On Thu, Jul 30, 2015 at 09:15:38AM +0200, Robert Baldyga wrote: > On 07/29/2015 05:20 PM, Felipe Balbi wrote: > > On Mon, Jul 27, 2015 at 11:16:14AM +0200, Robert Baldyga wrote: > >> Convert endpoint configuration to new capabilities model. > >> > >> Fixed typo in "epc-nulk" to "epc-bulk". > >> > >> Signed-off-by: Robert Baldyga > >> --- > >> drivers/staging/emxx_udc/emxx_udc.c | 60 > >> ++--- > >> 1 file changed, 29 insertions(+), 31 deletions(-) > >> > >> diff --git a/drivers/staging/emxx_udc/emxx_udc.c > >> b/drivers/staging/emxx_udc/emxx_udc.c > >> index 3b7aa36..0d64bee 100644 > >> --- a/drivers/staging/emxx_udc/emxx_udc.c > >> +++ b/drivers/staging/emxx_udc/emxx_udc.c > >> @@ -3153,36 +3153,33 @@ static const struct usb_gadget_ops > >> nbu2ss_gadget_ops = { > >>.ioctl = nbu2ss_gad_ioctl, > >> }; > >> > >> -static const char g_ep0_name[] = "ep0"; > >> -static const char g_ep1_name[] = "ep1-bulk"; > >> -static const char g_ep2_name[] = "ep2-bulk"; > >> -static const char g_ep3_name[] = "ep3in-int"; > >> -static const char g_ep4_name[] = "ep4-iso"; > >> -static const char g_ep5_name[] = "ep5-iso"; > >> -static const char g_ep6_name[] = "ep6-bulk"; > >> -static const char g_ep7_name[] = "ep7-bulk"; > >> -static const char g_ep8_name[] = "ep8in-int"; > >> -static const char g_ep9_name[] = "ep9-iso"; > >> -static const char g_epa_name[] = "epa-iso"; > >> -static const char g_epb_name[] = "epb-bulk"; > >> -static const char g_epc_name[] = "epc-nulk"; > >> -static const char g_epd_name[] = "epdin-int"; > >> - > >> -static const char *gp_ep_name[NUM_ENDPOINTS] = { > >> - g_ep0_name, > >> - g_ep1_name, > >> - g_ep2_name, > >> - g_ep3_name, > >> - g_ep4_name, > >> - g_ep5_name, > >> - g_ep6_name, > >> - g_ep7_name, > >> - g_ep8_name, > >> - g_ep9_name, > >> - g_epa_name, > >> - g_epb_name, > >> - g_epc_name, > >> - g_epd_name, > >> +static const struct { > >> + const char *name; > >> + const struct usb_ep_caps caps; > >> +} ep_info[NUM_ENDPOINTS] = { > >> +#define EP_INFO(_name, _type, _dir) \ > >> + { \ > >> + .name = _name, \ > >> + .caps = USB_EP_CAPS(USB_EP_CAPS_TYPE_ ## _type, \ > >> + USB_EP_CAPS_DIR_ ## _dir), \ > >> + } > >> + > >> + EP_INFO("ep0", CONTROL, ALL), > >> + EP_INFO("ep1-bulk", BULK, ALL), > >> + EP_INFO("ep2-bulk", BULK, ALL), > >> + EP_INFO("ep3in-int",INT,IN), > >> + EP_INFO("ep4-iso", INT,ALL), > >> + EP_INFO("ep5-iso", ISO,ALL), > >> + EP_INFO("ep6-bulk", ISO,ALL), > >> + EP_INFO("ep7-bulk", BULK, ALL), > >> + EP_INFO("ep8in-int",INT,IN), > >> + EP_INFO("ep9-iso", ISO,ALL), > >> + EP_INFO("epa-iso", ISO,ALL), > >> + EP_INFO("epb-bulk", BULK, ALL), > >> + EP_INFO("epc-bulk", BULK, ALL), > >> + EP_INFO("epdin-int",INT,IN), > > > > IMO, this is pointless obfuscation. It just makes it a pain to grep > > source around. Why don't you have UDC drivers initialize the 1-bit flags > > directly ? > > > > Do you mean something like this? It just makes it a pain to scroll this > source ;) but it's at least easy to grep. Another option would be the following: EP_INFO("ep0", USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, USB_EP_CAPS_DIR_ALL)), that also helps grepping. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v4 04/46] staging: emxx_udc: add ep capabilities support
On Mon, Jul 27, 2015 at 11:16:14AM +0200, Robert Baldyga wrote: > Convert endpoint configuration to new capabilities model. > > Fixed typo in "epc-nulk" to "epc-bulk". > > Signed-off-by: Robert Baldyga > --- > drivers/staging/emxx_udc/emxx_udc.c | 60 > ++--- > 1 file changed, 29 insertions(+), 31 deletions(-) > > diff --git a/drivers/staging/emxx_udc/emxx_udc.c > b/drivers/staging/emxx_udc/emxx_udc.c > index 3b7aa36..0d64bee 100644 > --- a/drivers/staging/emxx_udc/emxx_udc.c > +++ b/drivers/staging/emxx_udc/emxx_udc.c > @@ -3153,36 +3153,33 @@ static const struct usb_gadget_ops nbu2ss_gadget_ops > = { > .ioctl = nbu2ss_gad_ioctl, > }; > > -static const char g_ep0_name[] = "ep0"; > -static const char g_ep1_name[] = "ep1-bulk"; > -static const char g_ep2_name[] = "ep2-bulk"; > -static const char g_ep3_name[] = "ep3in-int"; > -static const char g_ep4_name[] = "ep4-iso"; > -static const char g_ep5_name[] = "ep5-iso"; > -static const char g_ep6_name[] = "ep6-bulk"; > -static const char g_ep7_name[] = "ep7-bulk"; > -static const char g_ep8_name[] = "ep8in-int"; > -static const char g_ep9_name[] = "ep9-iso"; > -static const char g_epa_name[] = "epa-iso"; > -static const char g_epb_name[] = "epb-bulk"; > -static const char g_epc_name[] = "epc-nulk"; > -static const char g_epd_name[] = "epdin-int"; > - > -static const char *gp_ep_name[NUM_ENDPOINTS] = { > - g_ep0_name, > - g_ep1_name, > - g_ep2_name, > - g_ep3_name, > - g_ep4_name, > - g_ep5_name, > - g_ep6_name, > - g_ep7_name, > - g_ep8_name, > - g_ep9_name, > - g_epa_name, > - g_epb_name, > - g_epc_name, > - g_epd_name, > +static const struct { > + const char *name; > + const struct usb_ep_caps caps; > +} ep_info[NUM_ENDPOINTS] = { > +#define EP_INFO(_name, _type, _dir) \ > + { \ > + .name = _name, \ > + .caps = USB_EP_CAPS(USB_EP_CAPS_TYPE_ ## _type, \ > + USB_EP_CAPS_DIR_ ## _dir), \ > + } > + > + EP_INFO("ep0", CONTROL, ALL), > + EP_INFO("ep1-bulk", BULK, ALL), > + EP_INFO("ep2-bulk", BULK, ALL), > + EP_INFO("ep3in-int",INT,IN), > + EP_INFO("ep4-iso", INT,ALL), > + EP_INFO("ep5-iso", ISO,ALL), > + EP_INFO("ep6-bulk", ISO,ALL), > + EP_INFO("ep7-bulk", BULK, ALL), > + EP_INFO("ep8in-int",INT,IN), > + EP_INFO("ep9-iso", ISO,ALL), > + EP_INFO("epa-iso", ISO,ALL), > + EP_INFO("epb-bulk", BULK, ALL), > + EP_INFO("epc-bulk", BULK, ALL), > + EP_INFO("epdin-int",INT,IN), IMO, this is pointless obfuscation. It just makes it a pain to grep source around. Why don't you have UDC drivers initialize the 1-bit flags directly ? -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 07/46] usb: dwc3: gadget: add ep capabilities support
Hi, On Wed, Jul 15, 2015 at 08:31:54AM +0200, Robert Baldyga wrote: > Convert endpoint configuration to new capabilities model. > > Signed-off-by: Robert Baldyga > --- > drivers/usb/dwc3/gadget.c | 13 + > 1 file changed, 13 insertions(+) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 333a7c0..8d1f768 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -1713,6 +1713,19 @@ static int dwc3_gadget_init_hw_endpoints(struct dwc3 > *dwc, > return ret; > } > > + if (epnum == 0) { > + dep->endpoint.caps.type_control = true; as the name says, this function deals with hw endpoints. This means ep1 is also control. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] cleanup on stack DECLARE_COMPLETIONs
On Tue, Dec 23, 2014 at 06:34:08PM +0100, Nicholas Mc Guire wrote: > fixups for incorrect use of DECLARE_COMPLETION. see also commit > 6e9a4738 ("completions: lockdep annotate on stack completions") > The only somewhat special case being > drivers/misc/sgi-gru/grukservices.c:quicktest2 > which had a static qualifier in the original DECLARE_COMPLETION() > but that seems to be wrong (why should the completion persisted between > successive calls ?) so the conversion to DECLARE_COMPLETION_ONSTACK > was also applied and the static qualifier removed. > > Not sure if this is suitable in this form or if it should go out as > 5 seperate patches ? > > This was only code reviewed and compile tested > > Signed-off-by: Nicholas Mc Guire please split drivers/usb/gadget out of this patch so I can take it through my tree. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH] [resend] net: get rid of SET_ETHTOOL_OPS
On Sun, May 11, 2014 at 12:12:32AM +, Wilfried Klaebe wrote: > net: get rid of SET_ETHTOOL_OPS > > Dave Miller mentioned he'd like to see SET_ETHTOOL_OPS gone. > This does that. > > Mostly done via coccinelle script: > @@ > struct ethtool_ops *ops; > struct net_device *dev; > @@ > - SET_ETHTOOL_OPS(dev, ops); > + dev->ethtool_ops = ops; > > Compile tested only, but I'd seriously wonder if this broke anything. > > Suggested-by: Dave Miller > Signed-off-by: Wilfried Klaebe for drivers/usb/gadget/: Acked-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [RFC PATCH 0/2] usb: Reuse fsl driver code for synopsys usb controller
On Sun, Apr 20, 2014 at 09:57:03PM +0530, Punnaiah Choudary Kalluri wrote: > Zynq soc contains a dual role usb controller and this IP is from synopsys. We > observed that there is driver available for this controller from freescale and > decided to reuse this driver for zynq use. > > Here is the link for zynq soc TRM. Please refer chapter 15 for usb controller > related information. > http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf > > The following series of patches add initial support for zynq soc in fsl > gadget controller > driver and fsl host controller driver. > > Based on these patches, I have the following concerns and sugesstions > > Since the freescale usb driver is for synopsys IP, Please consider rebranding > this driver name and config options to reflect that it is a sysnopsys IP. So > that other vendors who using this IP can reuse thie driver. > > Also the ehci-fsl.c is for powerpc based soc's, and zynq is ARM based, i have > protected the code which is specifc to freescale with CONFIG_FSL_SOC. Please > suggest if there is a better way of doing this? > > Punnaiah Choudary Kalluri (2): > usb: gadget: fsl_udc: Add support for zynq usb device controller > usb: ehci-fsl: Add support for zynq usb host controller > > drivers/usb/gadget/Kconfig|2 +- > drivers/usb/gadget/Makefile |1 + > drivers/usb/gadget/fsl_mxc_udc.c | 21 > drivers/usb/gadget/fsl_udc_core.c |5 +++ > drivers/usb/gadget/fsl_usb2_udc.h |2 +- > drivers/usb/host/Kconfig |2 +- > drivers/usb/host/ehci-fsl.c | 63 > - > drivers/usb/host/fsl-mph-dr-of.c |9 + > 8 files changed, 101 insertions(+), 4 deletions(-) as somebody else already mentioned, chipidea is the way to go. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 42/51] DMA-API: usb: musb: use platform_device_register_full() to avoid directly messing with dma masks
Hi, On Fri, Sep 20, 2013 at 02:49:38PM +0100, Russell King - ARM Linux wrote: > On Fri, Sep 20, 2013 at 08:11:25AM -0500, Felipe Balbi wrote: > > Hi, > > > > On Fri, Sep 20, 2013 at 12:14:38AM +0100, Russell King wrote: > > > Use platform_device_register_full() for those drivers which can, to > > > avoid messing directly with DMA masks. This can only be done when > > > the driver does not need to access the allocated musb platform device > > > from within its callbacks, which may be called during the musb > > > device probing. > > > > > > Signed-off-by: Russell King > > > > you want me to carry this one through my tree or you prefer getting my > > Acked-by ? Either way works for me: > > > > Acked-by: Felipe Balbi > > > > there's also the third option of me setting up a branch with only this > > patch and we both merge it, that'd also work. > > I think this patch is sufficiently stand-alone that it should be fine > if you want to take it through your tree. That may be better in the > long run to avoid conflicts with this patch and any future work in > this area during this cycle. awesome, i'll take this one early next week. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 36/51] DMA-API: usb: use dma_set_coherent_mask()
Hi, On Thu, Sep 19, 2013 at 11:01:03PM +0100, Russell King wrote: > diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c > index 2f2e88a..c10b324 100644 > --- a/drivers/usb/dwc3/dwc3-exynos.c > +++ b/drivers/usb/dwc3/dwc3-exynos.c > @@ -121,8 +121,9 @@ static int dwc3_exynos_probe(struct platform_device *pdev) >*/ > if (!dev->dma_mask) > dev->dma_mask = &dev->coherent_dma_mask; > - if (!dev->coherent_dma_mask) > - dev->coherent_dma_mask = DMA_BIT_MASK(32); > + ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); > + if (ret) > + goto err1; > > platform_set_drvdata(pdev, exynos); > > diff --git a/drivers/usb/gadget/lpc32xx_udc.c > b/drivers/usb/gadget/lpc32xx_udc.c > index 67128be..6a2a65a 100644 > --- a/drivers/usb/gadget/lpc32xx_udc.c > +++ b/drivers/usb/gadget/lpc32xx_udc.c > @@ -3078,7 +3078,9 @@ static int __init lpc32xx_udc_probe(struct > platform_device *pdev) >udc->isp1301_i2c_client->addr); > > pdev->dev.dma_mask = &lpc32xx_usbd_dmamask; > - pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); > + retval = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); > + if (retval) > + goto resource_fail; > > udc->board = &lpc32xx_usbddata; > for dwc3 and drivers/usb/gadget: Acked-by: Felipe Balbi pretty cool work :-) -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 37/51] DMA-API: usb: use new dma_coerce_mask_and_coherent()
Hi, On Thu, Sep 19, 2013 at 11:02:03PM +0100, Russell King wrote: > diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c > index c10b324..8b20c70 100644 > --- a/drivers/usb/dwc3/dwc3-exynos.c > +++ b/drivers/usb/dwc3/dwc3-exynos.c > @@ -119,9 +119,7 @@ static int dwc3_exynos_probe(struct platform_device *pdev) >* Since shared usb code relies on it, set it here for now. >* Once we move to full device tree support this will vanish off. >*/ > - if (!dev->dma_mask) > - dev->dma_mask = &dev->coherent_dma_mask; > - ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); > + ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32)); > if (ret) > goto err1; > > diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c > index d0759c5..6fa82d6 100644 > --- a/drivers/usb/host/ehci-omap.c > +++ b/drivers/usb/host/ehci-omap.c > @@ -144,9 +144,7 @@ static int ehci_hcd_omap_probe(struct platform_device > *pdev) >* Since shared usb code relies on it, set it here for now. >* Once we have dma capability bindings this can go away. >*/ > - if (!dev->dma_mask) > - dev->dma_mask = &dev->coherent_dma_mask; > - ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); > + ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32)); > if (ret) > return ret; for dwc3 and ehci-omap: Acked-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 42/51] DMA-API: usb: musb: use platform_device_register_full() to avoid directly messing with dma masks
Hi, On Fri, Sep 20, 2013 at 12:14:38AM +0100, Russell King wrote: > Use platform_device_register_full() for those drivers which can, to > avoid messing directly with DMA masks. This can only be done when > the driver does not need to access the allocated musb platform device > from within its callbacks, which may be called during the musb > device probing. > > Signed-off-by: Russell King you want me to carry this one through my tree or you prefer getting my Acked-by ? Either way works for me: Acked-by: Felipe Balbi there's also the third option of me setting up a branch with only this patch and we both merge it, that'd also work. cheers -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH RESEND] i2c: move of helpers into the core
On Mon, Aug 19, 2013 at 07:59:40PM +0200, Wolfram Sang wrote: > I2C of helpers used to live in of_i2c.c but experience (from SPI) shows > that it is much cleaner to have this in the core. This also removes a > circular dependency between the helpers and the core, and so we can > finally register child nodes in the core instead of doing this manually > in each driver. So, fix the drivers and documentation, too. > > Signed-off-by: Wolfram Sang for i2c-omap.c: Reviewed-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [RFC/PATCH 29/32] usb: gadget: pxa27x_udc: let udc-core manage gadget->dev
On Mon, Jan 28, 2013 at 09:18:29PM +0100, Robert Jarzmik wrote: > Felipe Balbi writes: > > > By simply setting a flag, we can drop some > > boilerplate code. > > > > Signed-off-by: Felipe Balbi > > --- > > drivers/usb/gadget/pxa27x_udc.c | 9 + > Acked-by: Robert Jarzmik > > And I tested also your patch and it works in my environment. For next patches > I'd like to be CCed for pxa27x_udc stuff as I'm maintaining that one since its > beginning (and yes, I know, I didn't put that in MAINTAINERS ...). you should add yourself to MAINTAINERS. Please send a patch to Greg when you have time. No need to prepare a tree, though. I just need you to give your Acked-by and I'll queue the patches myself. cheers -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [RFC/PATCH 32/32] usb: gadget: drop now unnecessary flag
On Thu, Jan 24, 2013 at 07:52:52PM +0100, Tomasz Figa wrote: > Hi Felipe, > > On Thursday 24 of January 2013 17:46:10 Felipe Balbi wrote: > > We don't need the ->register_my_device flag > > anymore because all UDC drivers have been > > properly converted. > > > > Let's remove every history of it. > > > > Signed-off-by: Felipe Balbi > > --- > > drivers/usb/chipidea/udc.c | 1 - > > drivers/usb/dwc3/gadget.c | 1 - > > drivers/usb/gadget/amd5536udc.c| 1 - > > drivers/usb/gadget/at91_udc.c | 1 - > > drivers/usb/gadget/atmel_usba_udc.c| 1 - > > drivers/usb/gadget/bcm63xx_udc.c | 1 - > > drivers/usb/gadget/dummy_hcd.c | 1 - > > drivers/usb/gadget/fsl_qe_udc.c| 1 - > > drivers/usb/gadget/fsl_udc_core.c | 1 - > > drivers/usb/gadget/fusb300_udc.c | 1 - > > drivers/usb/gadget/goku_udc.c | 1 - > > drivers/usb/gadget/imx_udc.c | 1 - > > drivers/usb/gadget/lpc32xx_udc.c | 1 - > > drivers/usb/gadget/m66592-udc.c| 1 - > > drivers/usb/gadget/mv_u3d_core.c | 1 - > > drivers/usb/gadget/mv_udc_core.c | 1 - > > drivers/usb/gadget/net2272.c | 1 - > > drivers/usb/gadget/net2280.c | 1 - > > drivers/usb/gadget/omap_udc.c | 1 - > > drivers/usb/gadget/pch_udc.c | 1 - > > drivers/usb/gadget/pxa25x_udc.c| 1 - > > drivers/usb/gadget/pxa27x_udc.c| 1 - > > drivers/usb/gadget/r8a66597-udc.c | 1 - > > drivers/usb/gadget/s3c-hsotg.c | 1 - > > drivers/usb/gadget/s3c-hsudc.c | 1 - > > drivers/usb/gadget/s3c2410_udc.c | 1 - > > drivers/usb/gadget/udc-core.c | 3 --- > > drivers/usb/musb/musb_gadget.c | 1 - > > drivers/usb/renesas_usbhs/mod_gadget.c | 1 - > > include/linux/usb/gadget.h | 4 > > 30 files changed, 35 deletions(-) > > > [snip] > > diff --git a/drivers/usb/gadget/udc-core.c > > b/drivers/usb/gadget/udc-core.c index 9195054..4ee0efc 100644 > > --- a/drivers/usb/gadget/udc-core.c > > +++ b/drivers/usb/gadget/udc-core.c > > @@ -173,7 +173,6 @@ int usb_add_gadget_udc(struct device *parent, struct > > usb_gadget *gadget) if (!udc) > > goto err1; > > > > - if (gadget->register_my_device) { > > dev_set_name(&gadget->dev, "gadget"); > > > > ret = device_register(&gadget->dev); > > @@ -211,7 +210,6 @@ err3: > > put_device(&udc->dev); > > > > err2: > > - if (gadget->register_my_device) > > put_device(&gadget->dev); > > err1: > > return ret; > > @@ -267,7 +265,6 @@ found: > > kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE); > > device_unregister(&udc->dev); > > > > - if (gadget->register_my_device) > > device_unregister(&gadget->dev); > > Correct me if I am wrong, but doesn't this patch leave us with incorrect > indentation? right, I fixed it up on my branch, see [1]. That was me trusting my poor sed skills and not verifying the result ;-) [1] http://git.kernel.org/?p=linux/kernel/git/balbi/usb.git;a=commitdiff;h=d0bdf2970dd68677c65671be9bd56759593cfaf1 -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 32/32] usb: gadget: drop now unnecessary flag
We don't need the ->register_my_device flag anymore because all UDC drivers have been properly converted. Let's remove every history of it. Signed-off-by: Felipe Balbi --- drivers/usb/chipidea/udc.c | 1 - drivers/usb/dwc3/gadget.c | 1 - drivers/usb/gadget/amd5536udc.c| 1 - drivers/usb/gadget/at91_udc.c | 1 - drivers/usb/gadget/atmel_usba_udc.c| 1 - drivers/usb/gadget/bcm63xx_udc.c | 1 - drivers/usb/gadget/dummy_hcd.c | 1 - drivers/usb/gadget/fsl_qe_udc.c| 1 - drivers/usb/gadget/fsl_udc_core.c | 1 - drivers/usb/gadget/fusb300_udc.c | 1 - drivers/usb/gadget/goku_udc.c | 1 - drivers/usb/gadget/imx_udc.c | 1 - drivers/usb/gadget/lpc32xx_udc.c | 1 - drivers/usb/gadget/m66592-udc.c| 1 - drivers/usb/gadget/mv_u3d_core.c | 1 - drivers/usb/gadget/mv_udc_core.c | 1 - drivers/usb/gadget/net2272.c | 1 - drivers/usb/gadget/net2280.c | 1 - drivers/usb/gadget/omap_udc.c | 1 - drivers/usb/gadget/pch_udc.c | 1 - drivers/usb/gadget/pxa25x_udc.c| 1 - drivers/usb/gadget/pxa27x_udc.c| 1 - drivers/usb/gadget/r8a66597-udc.c | 1 - drivers/usb/gadget/s3c-hsotg.c | 1 - drivers/usb/gadget/s3c-hsudc.c | 1 - drivers/usb/gadget/s3c2410_udc.c | 1 - drivers/usb/gadget/udc-core.c | 3 --- drivers/usb/musb/musb_gadget.c | 1 - drivers/usb/renesas_usbhs/mod_gadget.c | 1 - include/linux/usb/gadget.h | 4 30 files changed, 35 deletions(-) diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index e95e8bb..1b65ac8 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -1721,7 +1721,6 @@ static int udc_start(struct ci13xxx *ci) ci->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask; ci->gadget.dev.parent = dev; ci->gadget.dev.release = udc_release; - ci->gadget.register_my_device = true; /* alloc resources */ ci->qh_pool = dma_pool_create("ci13xxx_qh", dev, diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 7002cf6..067ba6ad 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2423,7 +2423,6 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc->gadget.dev.dma_parms = dwc->dev->dma_parms; dwc->gadget.dev.dma_mask= dwc->dev->dma_mask; dwc->gadget.dev.release = dwc3_gadget_release; - dwc->gadget.register_my_device = true; dwc->gadget.name= "dwc3-gadget"; /* diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c index 1827d4c..35ab5d3 100644 --- a/drivers/usb/gadget/amd5536udc.c +++ b/drivers/usb/gadget/amd5536udc.c @@ -3275,7 +3275,6 @@ static int udc_probe(struct udc *dev) dev->gadget.dev.release = gadget_release; dev->gadget.name = name; dev->gadget.max_speed = USB_SPEED_HIGH; - dev->gadget.register_my_device = true; /* init registers, interrupts, ... */ startup_registers(dev); diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 177b56d..dc3682c 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -1726,7 +1726,6 @@ static int at91udc_probe(struct platform_device *pdev) /* init software state */ udc = &controller; - udc->gadget.register_my_device = true; udc->gadget.dev.parent = dev; if (pdev->dev.of_node) at91udc_of_init(udc, pdev->dev.of_node); diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c index f0f9423..b197b75 100644 --- a/drivers/usb/gadget/atmel_usba_udc.c +++ b/drivers/usb/gadget/atmel_usba_udc.c @@ -1902,7 +1902,6 @@ static int __init usba_udc_probe(struct platform_device *pdev) udc->gadget.dev.parent = &pdev->dev; udc->gadget.dev.dma_mask = pdev->dev.dma_mask; - udc->gadget.register_my_device = true; platform_set_drvdata(pdev, udc); diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c index 10b0475..96a585ee 100644 --- a/drivers/usb/gadget/bcm63xx_udc.c +++ b/drivers/usb/gadget/bcm63xx_udc.c @@ -2373,7 +2373,6 @@ static int bcm63xx_udc_probe(struct platform_device *pdev) udc->gadget.dev.parent = dev; udc->gadget.dev.release = bcm63xx_udc_gadget_release; udc->gadget.dev.dma_mask = dev->dma_mask; - udc->gadget.register_my_device = true; if (!pd->use_fullspeed && !use_fullspeed) udc->gadget.max_speed = USB_SPEED_HIGH; diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index 8155d4a..7fe600f 100644 --- a/drivers/usb/gadget/dummy_hcd.
[RFC/PATCH 28/32] usb: gadget: pxa25x_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/pxa25x_udc.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c index fa9c344..9deffd3 100644 --- a/drivers/usb/gadget/pxa25x_udc.c +++ b/drivers/usb/gadget/pxa25x_udc.c @@ -1266,13 +1266,6 @@ static int pxa25x_udc_start(struct usb_gadget *g, dev->gadget.dev.driver = &driver->driver; dev->pullup = 1; - retval = device_add (&dev->gadget.dev); - if (retval) { - dev->driver = NULL; - dev->gadget.dev.driver = NULL; - return retval; - } - /* ... then enable host detection and ep0; and we're ready * for set_configuration as well as eventual disconnect. */ @@ -1331,7 +1324,6 @@ static int pxa25x_udc_stop(struct usb_gadget*g, dev->gadget.dev.driver = NULL; dev->driver = NULL; - device_del (&dev->gadget.dev); dump_state(dev); return 0; @@ -2140,9 +2132,9 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev) dev->timer.function = udc_watchdog; dev->timer.data = (unsigned long) dev; - device_initialize(&dev->gadget.dev); dev->gadget.dev.parent = &pdev->dev; dev->gadget.dev.dma_mask = pdev->dev.dma_mask; + dev->gadget.register_my_device = true; the_controller = dev; platform_set_drvdata(pdev, dev); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 31/32] usb: chipidea: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/chipidea/udc.c | 13 ++--- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index f64fbea..e95e8bb 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -1717,11 +1717,11 @@ static int udc_start(struct ci13xxx *ci) INIT_LIST_HEAD(&ci->gadget.ep_list); - dev_set_name(&ci->gadget.dev, "gadget"); ci->gadget.dev.dma_mask = dev->dma_mask; ci->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask; ci->gadget.dev.parent = dev; ci->gadget.dev.release = udc_release; + ci->gadget.register_my_device = true; /* alloc resources */ ci->qh_pool = dma_pool_create("ci13xxx_qh", dev, @@ -1761,15 +1761,9 @@ static int udc_start(struct ci13xxx *ci) hw_enable_vbus_intr(ci); } - retval = device_register(&ci->gadget.dev); - if (retval) { - put_device(&ci->gadget.dev); - goto put_transceiver; - } - retval = dbg_create_files(ci->dev); if (retval) - goto unreg_device; + goto put_transceiver; if (!IS_ERR_OR_NULL(ci->transceiver)) { retval = otg_set_peripheral(ci->transceiver->otg, @@ -1797,8 +1791,6 @@ remove_trans: dev_err(dev, "error = %i\n", retval); remove_dbg: dbg_remove_files(ci->dev); -unreg_device: - device_unregister(&ci->gadget.dev); put_transceiver: if (!IS_ERR_OR_NULL(ci->transceiver) && ci->global_phy) usb_put_phy(ci->transceiver); @@ -1837,7 +1829,6 @@ static void udc_stop(struct ci13xxx *ci) usb_put_phy(ci->transceiver); } dbg_remove_files(ci->dev); - device_unregister(&ci->gadget.dev); /* my kobject is dynamic, I swear! */ memset(&ci->gadget, 0, sizeof(ci->gadget)); } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 30/32] usb: chipidea: register debugging syfs on our device
Don't register anything non-generic under the gadget's device as we don't really *own* it. Signed-off-by: Felipe Balbi --- drivers/usb/chipidea/udc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 2f45bba..f64fbea 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -1767,7 +1767,7 @@ static int udc_start(struct ci13xxx *ci) goto put_transceiver; } - retval = dbg_create_files(&ci->gadget.dev); + retval = dbg_create_files(ci->dev); if (retval) goto unreg_device; @@ -1796,7 +1796,7 @@ remove_trans: dev_err(dev, "error = %i\n", retval); remove_dbg: - dbg_remove_files(&ci->gadget.dev); + dbg_remove_files(ci->dev); unreg_device: device_unregister(&ci->gadget.dev); put_transceiver: @@ -1836,7 +1836,7 @@ static void udc_stop(struct ci13xxx *ci) if (ci->global_phy) usb_put_phy(ci->transceiver); } - dbg_remove_files(&ci->gadget.dev); + dbg_remove_files(ci->dev); device_unregister(&ci->gadget.dev); /* my kobject is dynamic, I swear! */ memset(&ci->gadget, 0, sizeof(ci->gadget)); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 27/32] usb: renesas_usbhs: gadget: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/renesas_usbhs/mod_gadget.c | 11 ++- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index dd41f61..b42d81d 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c @@ -981,15 +981,12 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv) /* * init gadget */ - dev_set_name(&gpriv->gadget.dev, "gadget"); gpriv->gadget.dev.parent= dev; gpriv->gadget.dev.release = usbhs_mod_gadget_release; gpriv->gadget.name = "renesas_usbhs_udc"; gpriv->gadget.ops = &usbhsg_gadget_ops; gpriv->gadget.max_speed = USB_SPEED_HIGH; - ret = device_register(&gpriv->gadget.dev); - if (ret < 0) - goto err_add_udc; + gpriv->gadget.register_my_device = true; INIT_LIST_HEAD(&gpriv->gadget.ep_list); @@ -1018,15 +1015,13 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv) ret = usb_add_gadget_udc(dev, &gpriv->gadget); if (ret) - goto err_register; + goto err_add_udc; dev_info(dev, "gadget probed\n"); return 0; -err_register: - device_unregister(&gpriv->gadget.dev); err_add_udc: kfree(gpriv->uep); @@ -1042,8 +1037,6 @@ void usbhs_mod_gadget_remove(struct usbhs_priv *priv) usb_del_gadget_udc(&gpriv->gadget); - device_unregister(&gpriv->gadget.dev); - kfree(gpriv->uep); kfree(gpriv); } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 29/32] usb: gadget: pxa27x_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/pxa27x_udc.c | 9 + 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index f7d2579..23a3eed 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c @@ -1814,11 +1814,6 @@ static int pxa27x_udc_start(struct usb_gadget *g, udc->gadget.dev.driver = &driver->driver; dplus_pullup(udc, 1); - retval = device_add(&udc->gadget.dev); - if (retval) { - dev_err(udc->dev, "device_add error %d\n", retval); - goto fail; - } if (!IS_ERR_OR_NULL(udc->transceiver)) { retval = otg_set_peripheral(udc->transceiver->otg, &udc->gadget); @@ -1876,8 +1871,6 @@ static int pxa27x_udc_stop(struct usb_gadget *g, udc->driver = NULL; - device_del(&udc->gadget.dev); - if (!IS_ERR_OR_NULL(udc->transceiver)) return otg_set_peripheral(udc->transceiver->otg, NULL); return 0; @@ -2462,9 +2455,9 @@ static int __init pxa_udc_probe(struct platform_device *pdev) goto err_map; } - device_initialize(&udc->gadget.dev); udc->gadget.dev.parent = &pdev->dev; udc->gadget.dev.dma_mask = NULL; + udc->gadget.register_my_device = true; udc->vbus_sensed = 0; the_controller = udc; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 24/32] usb: gadget: s3c-hsotg: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/s3c-hsotg.c | 14 +- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c index 833d85b..bd8292d 100644 --- a/drivers/usb/gadget/s3c-hsotg.c +++ b/drivers/usb/gadget/s3c-hsotg.c @@ -3552,17 +3552,13 @@ static int s3c_hsotg_probe(struct platform_device *pdev) dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq); - device_initialize(&hsotg->gadget.dev); - - dev_set_name(&hsotg->gadget.dev, "gadget"); - hsotg->gadget.max_speed = USB_SPEED_HIGH; hsotg->gadget.ops = &s3c_hsotg_gadget_ops; hsotg->gadget.name = dev_name(dev); - hsotg->gadget.dev.parent = dev; hsotg->gadget.dev.dma_mask = dev->dma_mask; hsotg->gadget.dev.release = s3c_hsotg_release; + hsotg->gadget.register_my_device = true; /* reset the system */ @@ -3643,12 +3639,6 @@ static int s3c_hsotg_probe(struct platform_device *pdev) s3c_hsotg_phy_disable(hsotg); - ret = device_add(&hsotg->gadget.dev); - if (ret) { - put_device(&hsotg->gadget.dev); - goto err_ep_mem; - } - ret = usb_add_gadget_udc(&pdev->dev, &hsotg->gadget); if (ret) goto err_ep_mem; @@ -3687,10 +3677,8 @@ static int s3c_hsotg_remove(struct platform_device *pdev) } s3c_hsotg_phy_disable(hsotg); - clk_disable_unprepare(hsotg->clk); - device_unregister(&hsotg->gadget.dev); return 0; } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 25/32] usb: gadget: s3c-hsudc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/s3c-hsudc.c | 11 +-- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/usb/gadget/s3c-hsudc.c b/drivers/usb/gadget/s3c-hsudc.c index 4a3d620..dee6810 100644 --- a/drivers/usb/gadget/s3c-hsudc.c +++ b/drivers/usb/gadget/s3c-hsudc.c @@ -1304,18 +1304,16 @@ static int s3c_hsudc_probe(struct platform_device *pdev) spin_lock_init(&hsudc->lock); - dev_set_name(&hsudc->gadget.dev, "gadget"); - hsudc->gadget.max_speed = USB_SPEED_HIGH; hsudc->gadget.ops = &s3c_hsudc_gadget_ops; hsudc->gadget.name = dev_name(dev); hsudc->gadget.dev.parent = dev; hsudc->gadget.dev.dma_mask = dev->dma_mask; hsudc->gadget.ep0 = &hsudc->ep[0].ep; - hsudc->gadget.is_otg = 0; hsudc->gadget.is_a_peripheral = 0; hsudc->gadget.speed = USB_SPEED_UNKNOWN; + hsudc->gadget.register_my_device = true; s3c_hsudc_setup_ep(hsudc); @@ -1346,12 +1344,6 @@ static int s3c_hsudc_probe(struct platform_device *pdev) disable_irq(hsudc->irq); local_irq_enable(); - ret = device_register(&hsudc->gadget.dev); - if (ret) { - put_device(&hsudc->gadget.dev); - goto err_add_device; - } - ret = usb_add_gadget_udc(&pdev->dev, &hsudc->gadget); if (ret) goto err_add_udc; @@ -1360,7 +1352,6 @@ static int s3c_hsudc_probe(struct platform_device *pdev) return 0; err_add_udc: - device_unregister(&hsudc->gadget.dev); err_add_device: clk_disable(hsudc->uclk); err_res: -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 26/32] usb: gadget: s3c2410_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/s3c2410_udc.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index fc07b43..302e137 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c @@ -1677,13 +1677,6 @@ static int s3c2410_udc_start(struct usb_gadget *g, udc->driver = driver; udc->gadget.dev.driver = &driver->driver; - /* Bind the driver */ - retval = device_add(&udc->gadget.dev); - if (retval) { - dev_err(&udc->gadget.dev, "Error in device_add() : %d\n", retval); - goto register_error; - } - /* Enable udc */ s3c2410_udc_enable(udc); @@ -1700,7 +1693,6 @@ static int s3c2410_udc_stop(struct usb_gadget *g, { struct s3c2410_udc *udc = to_s3c2410(g); - device_del(&udc->gadget.dev); udc->driver = NULL; /* Disable udc */ @@ -1838,9 +1830,9 @@ static int s3c2410_udc_probe(struct platform_device *pdev) goto err_mem; } - device_initialize(&udc->gadget.dev); udc->gadget.dev.parent = &pdev->dev; udc->gadget.dev.dma_mask = pdev->dev.dma_mask; + udc->gadget.register_my_device = true; the_controller = udc; platform_set_drvdata(pdev, udc); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 20/32] usb: gadget: net2272: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/net2272.c | 10 ++ 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c index d226058..635248f 100644 --- a/drivers/usb/gadget/net2272.c +++ b/drivers/usb/gadget/net2272.c @@ -2209,7 +2209,6 @@ net2272_remove(struct net2272 *dev) free_irq(dev->irq, dev); iounmap(dev->base_addr); - device_unregister(&dev->gadget.dev); device_remove_file(dev->dev, &dev_attr_registers); dev_info(dev->dev, "unbind\n"); @@ -2236,11 +2235,11 @@ static struct net2272 *net2272_probe_init(struct device *dev, unsigned int irq) ret->gadget.max_speed = USB_SPEED_HIGH; /* the "gadget" abstracts/virtualizes the controller */ - dev_set_name(&ret->gadget.dev, "gadget"); ret->gadget.dev.parent = dev; ret->gadget.dev.dma_mask = dev->dma_mask; ret->gadget.dev.release = net2272_gadget_release; ret->gadget.name = driver_name; + ret->gadget.register_my_device = true; return ret; } @@ -2275,12 +2274,9 @@ net2272_probe_fin(struct net2272 *dev, unsigned int irqflags) dma_mode_string()); dev_info(dev->dev, "version: %s\n", driver_vers); - ret = device_register(&dev->gadget.dev); - if (ret) - goto err_irq; ret = device_create_file(dev->dev, &dev_attr_registers); if (ret) - goto err_dev_reg; + goto err_irq; ret = usb_add_gadget_udc(dev->dev, &dev->gadget); if (ret) @@ -2290,8 +2286,6 @@ net2272_probe_fin(struct net2272 *dev, unsigned int irqflags) err_add_udc: device_remove_file(dev->dev, &dev_attr_registers); - err_dev_reg: - device_unregister(&dev->gadget.dev); err_irq: free_irq(dev->irq, dev); err: -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 23/32] usb: gadget: r8a66597-udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/r8a66597-udc.c | 12 ++-- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/usb/gadget/r8a66597-udc.c b/drivers/usb/gadget/r8a66597-udc.c index 5a80751..40ef4bd 100644 --- a/drivers/usb/gadget/r8a66597-udc.c +++ b/drivers/usb/gadget/r8a66597-udc.c @@ -1837,7 +1837,6 @@ static int __exit r8a66597_remove(struct platform_device *pdev) clk_put(r8a66597->clk); } - device_unregister(&r8a66597->gadget.dev); kfree(r8a66597); return 0; } @@ -1915,17 +1914,12 @@ static int __init r8a66597_probe(struct platform_device *pdev) r8a66597->irq_sense_low = irq_trigger == IRQF_TRIGGER_LOW; r8a66597->gadget.ops = &r8a66597_gadget_ops; - dev_set_name(&r8a66597->gadget.dev, "gadget"); r8a66597->gadget.max_speed = USB_SPEED_HIGH; r8a66597->gadget.dev.parent = &pdev->dev; r8a66597->gadget.dev.dma_mask = pdev->dev.dma_mask; r8a66597->gadget.dev.release = pdev->dev.release; r8a66597->gadget.name = udc_name; - ret = device_register(&r8a66597->gadget.dev); - if (ret < 0) { - dev_err(&pdev->dev, "device_register failed\n"); - goto clean_up; - } + r8a66597->gadget.register_my_device = true; init_timer(&r8a66597->timer); r8a66597->timer.function = r8a66597_timer; @@ -1939,7 +1933,7 @@ static int __init r8a66597_probe(struct platform_device *pdev) dev_err(&pdev->dev, "cannot get clock \"%s\"\n", clk_name); ret = PTR_ERR(r8a66597->clk); - goto clean_up_dev; + goto clean_up; } clk_enable(r8a66597->clk); } @@ -2007,8 +2001,6 @@ clean_up2: clk_disable(r8a66597->clk); clk_put(r8a66597->clk); } -clean_up_dev: - device_unregister(&r8a66597->gadget.dev); clean_up: if (r8a66597) { if (r8a66597->sudmac_reg) -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 22/32] usb: gadget: pch_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/pch_udc.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c index a787a8e..7032145 100644 --- a/drivers/usb/gadget/pch_udc.c +++ b/drivers/usb/gadget/pch_udc.c @@ -358,7 +358,6 @@ struct pch_udc_dev { prot_stall:1, irq_registered:1, mem_region:1, - registered:1, suspended:1, connected:1, vbus_session:1, @@ -3078,8 +3077,6 @@ static void pch_udc_remove(struct pci_dev *pdev) pci_resource_len(pdev, PCH_UDC_PCI_BAR)); if (dev->active) pci_disable_device(pdev); - if (dev->registered) - device_unregister(&dev->gadget.dev); kfree(dev); pci_set_drvdata(pdev, NULL); } @@ -3196,17 +3193,12 @@ static int pch_udc_probe(struct pci_dev *pdev, if (retval) goto finished; - dev_set_name(&dev->gadget.dev, "gadget"); dev->gadget.dev.parent = &pdev->dev; dev->gadget.dev.dma_mask = pdev->dev.dma_mask; dev->gadget.dev.release = gadget_release; dev->gadget.name = KBUILD_MODNAME; dev->gadget.max_speed = USB_SPEED_HIGH; - - retval = device_register(&dev->gadget.dev); - if (retval) - goto finished; - dev->registered = 1; + dev->gadget.register_my_device = true; /* Put the device in disconnected state till a driver is bound */ pch_udc_set_disconnect(dev); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 21/32] usb: gadget: net2280: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/net2280.c | 5 + 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index 708c0b5..630f715 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c @@ -2667,7 +2667,6 @@ static void net2280_remove (struct pci_dev *pdev) pci_resource_len (pdev, 0)); if (dev->enabled) pci_disable_device (pdev); - device_unregister (&dev->gadget.dev); device_remove_file (&pdev->dev, &dev_attr_registers); pci_set_drvdata (pdev, NULL); @@ -2699,11 +2698,11 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id) dev->gadget.max_speed = USB_SPEED_HIGH; /* the "gadget" abstracts/virtualizes the controller */ - dev_set_name(&dev->gadget.dev, "gadget"); dev->gadget.dev.parent = &pdev->dev; dev->gadget.dev.dma_mask = pdev->dev.dma_mask; dev->gadget.dev.release = gadget_release; dev->gadget.name = driver_name; + dev->gadget.register_my_device = true; /* now all the pci goodies ... */ if (pci_enable_device (pdev) < 0) { @@ -2811,8 +2810,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id) use_dma ? (use_dma_chaining ? "chaining" : "enabled") : "disabled"); - retval = device_register (&dev->gadget.dev); - if (retval) goto done; retval = device_create_file (&pdev->dev, &dev_attr_registers); if (retval) goto done; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 19/32] usb: gadget: mv_udc_core: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/mv_udc_core.c | 12 ++-- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/usb/gadget/mv_udc_core.c b/drivers/usb/gadget/mv_udc_core.c index 67d72f9..60741af 100644 --- a/drivers/usb/gadget/mv_udc_core.c +++ b/drivers/usb/gadget/mv_udc_core.c @@ -2138,8 +2138,6 @@ static int mv_udc_remove(struct platform_device *pdev) mv_udc_disable(udc); - device_unregister(&udc->gadget.dev); - /* free dev, wait for the release() finished */ wait_for_completion(udc->done); @@ -2311,15 +2309,11 @@ static int mv_udc_probe(struct platform_device *pdev) udc->gadget.max_speed = USB_SPEED_HIGH; /* support dual speed */ /* the "gadget" abstracts/virtualizes the controller */ - dev_set_name(&udc->gadget.dev, "gadget"); udc->gadget.dev.parent = &pdev->dev; udc->gadget.dev.dma_mask = pdev->dev.dma_mask; udc->gadget.dev.release = gadget_release; udc->gadget.name = driver_name; /* gadget name */ - - retval = device_register(&udc->gadget.dev); - if (retval) - goto err_destroy_dma; + udc->gadget.register_my_device = true; eps_init(udc); @@ -2342,7 +2336,7 @@ static int mv_udc_probe(struct platform_device *pdev) if (!udc->qwork) { dev_err(&pdev->dev, "cannot create workqueue\n"); retval = -ENOMEM; - goto err_unregister; + goto err_destroy_dma; } INIT_WORK(&udc->vbus_work, mv_udc_vbus_work); @@ -2370,8 +2364,6 @@ static int mv_udc_probe(struct platform_device *pdev) err_create_workqueue: destroy_workqueue(udc->qwork); -err_unregister: - device_unregister(&udc->gadget.dev); err_destroy_dma: dma_pool_destroy(udc->dtd_pool); err_free_dma: -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 17/32] usb: gadget: mv_u3d_core: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/mv_u3d_core.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c index b5cea27..565addc 100644 --- a/drivers/usb/gadget/mv_u3d_core.c +++ b/drivers/usb/gadget/mv_u3d_core.c @@ -1792,8 +1792,6 @@ static int mv_u3d_remove(struct platform_device *dev) clk_put(u3d->clk); - device_unregister(&u3d->gadget.dev); - platform_set_drvdata(dev, NULL); kfree(u3d); @@ -1957,15 +1955,11 @@ static int mv_u3d_probe(struct platform_device *dev) u3d->gadget.speed = USB_SPEED_UNKNOWN; /* speed */ /* the "gadget" abstracts/virtualizes the controller */ - dev_set_name(&u3d->gadget.dev, "gadget"); u3d->gadget.dev.parent = &dev->dev; u3d->gadget.dev.dma_mask = dev->dev.dma_mask; u3d->gadget.dev.release = mv_u3d_gadget_release; u3d->gadget.name = driver_name; /* gadget name */ - - retval = device_register(&u3d->gadget.dev); - if (retval) - goto err_register_gadget_device; + u3d->gadget.register_my_device = true; mv_u3d_eps_init(u3d); @@ -1991,8 +1985,6 @@ static int mv_u3d_probe(struct platform_device *dev) return 0; err_unregister: - device_unregister(&u3d->gadget.dev); -err_register_gadget_device: free_irq(u3d->irq, &dev->dev); err_request_irq: err_get_irq: -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 16/32] usb: gadget: m66592-udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/m66592-udc.c | 13 + 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c index 0a35db1..c5d1b39 100644 --- a/drivers/usb/gadget/m66592-udc.c +++ b/drivers/usb/gadget/m66592-udc.c @@ -1538,7 +1538,6 @@ static int __exit m66592_remove(struct platform_device *pdev) struct m66592 *m66592 = dev_get_drvdata(&pdev->dev); usb_del_gadget_udc(&m66592->gadget); - device_del(&m66592->gadget.dev); del_timer_sync(&m66592->timer); iounmap(m66592->reg); @@ -1608,13 +1607,12 @@ static int __init m66592_probe(struct platform_device *pdev) dev_set_drvdata(&pdev->dev, m66592); m66592->gadget.ops = &m66592_gadget_ops; - device_initialize(&m66592->gadget.dev); - dev_set_name(&m66592->gadget.dev, "gadget"); m66592->gadget.max_speed = USB_SPEED_HIGH; m66592->gadget.dev.parent = &pdev->dev; m66592->gadget.dev.dma_mask = pdev->dev.dma_mask; m66592->gadget.dev.release = pdev->dev.release; m66592->gadget.name = udc_name; + m66592->gadget.register_my_device = true; init_timer(&m66592->timer); m66592->timer.function = m66592_timer; @@ -1674,12 +1672,6 @@ static int __init m66592_probe(struct platform_device *pdev) init_controller(m66592); - ret = device_add(&m66592->gadget.dev); - if (ret) { - pr_err("device_add error (%d)\n", ret); - goto err_device_add; - } - ret = usb_add_gadget_udc(&pdev->dev, &m66592->gadget); if (ret) goto err_add_udc; @@ -1688,9 +1680,6 @@ static int __init m66592_probe(struct platform_device *pdev) return 0; err_add_udc: - device_del(&m66592->gadget.dev); - -err_device_add: m66592_free_request(&m66592->ep[0].ep, m66592->ep0_req); clean_up3: -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 18/32] usb: gadget: mv_u3d_core: fix a compile warning
Fix the following compile warning: mv_u3d_core.c:1766:12: warning: 'mv_u3d_remove' \ defined but not used [-Wunused-function] Signed-off-by: Felipe Balbi --- drivers/usb/gadget/mv_u3d_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/gadget/mv_u3d_core.c b/drivers/usb/gadget/mv_u3d_core.c index 565addc..734ade1 100644 --- a/drivers/usb/gadget/mv_u3d_core.c +++ b/drivers/usb/gadget/mv_u3d_core.c @@ -2072,7 +2072,7 @@ static void mv_u3d_shutdown(struct platform_device *dev) static struct platform_driver mv_u3d_driver = { .probe = mv_u3d_probe, - .remove = __exit_p(mv_u3d_remove), + .remove = mv_u3d_remove, .shutdown = mv_u3d_shutdown, .driver = { .owner = THIS_MODULE, -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 13/32] usb: gadget: goku_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/goku_udc.c | 10 +- drivers/usb/gadget/goku_udc.h | 3 +-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/drivers/usb/gadget/goku_udc.c b/drivers/usb/gadget/goku_udc.c index 85742d4..b4ea2cf 100644 --- a/drivers/usb/gadget/goku_udc.c +++ b/drivers/usb/gadget/goku_udc.c @@ -1716,8 +1716,6 @@ static void goku_remove(struct pci_dev *pdev) pci_resource_len (pdev, 0)); if (dev->enabled) pci_disable_device(pdev); - if (dev->registered) - device_unregister(&dev->gadget.dev); pci_set_drvdata(pdev, NULL); dev->regs = NULL; @@ -1756,11 +1754,11 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id) dev->gadget.max_speed = USB_SPEED_FULL; /* the "gadget" abstracts/virtualizes the controller */ - dev_set_name(&dev->gadget.dev, "gadget"); dev->gadget.dev.parent = &pdev->dev; dev->gadget.dev.dma_mask = pdev->dev.dma_mask; dev->gadget.dev.release = gadget_release; dev->gadget.name = driver_name; + dev->gadget.register_my_device = true; /* now all the pci goodies ... */ retval = pci_enable_device(pdev); @@ -1810,12 +1808,6 @@ static int goku_probe(struct pci_dev *pdev, const struct pci_device_id *id) create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev); #endif - retval = device_register(&dev->gadget.dev); - if (retval) { - put_device(&dev->gadget.dev); - goto err; - } - dev->registered = 1; retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget); if (retval) goto err; diff --git a/drivers/usb/gadget/goku_udc.h b/drivers/usb/gadget/goku_udc.h index b4470d2..86d2ada 100644 --- a/drivers/usb/gadget/goku_udc.h +++ b/drivers/usb/gadget/goku_udc.h @@ -250,8 +250,7 @@ struct goku_udc { got_region:1, req_config:1, configured:1, - enabled:1, - registered:1; + enabled:1; /* pci state used to access those endpoints */ struct pci_dev *pdev; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 15/32] usb: gadget: lpc32xx_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/lpc32xx_udc.c | 11 +-- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/usb/gadget/lpc32xx_udc.c b/drivers/usb/gadget/lpc32xx_udc.c index dd1c9b1..077e021 100644 --- a/drivers/usb/gadget/lpc32xx_udc.c +++ b/drivers/usb/gadget/lpc32xx_udc.c @@ -3090,6 +3090,7 @@ static int __init lpc32xx_udc_probe(struct platform_device *pdev) /* init software state */ udc->gadget.dev.parent = dev; + udc->gadget.register_my_device = true; udc->pdev = pdev; udc->dev = &pdev->dev; udc->enabled = 0; @@ -3248,12 +3249,6 @@ static int __init lpc32xx_udc_probe(struct platform_device *pdev) udc_disable(udc); udc_reinit(udc); - retval = device_register(&udc->gadget.dev); - if (retval < 0) { - dev_err(udc->dev, "Device registration failure\n"); - goto dev_register_fail; - } - /* Request IRQs - low and high priority USB device IRQs are routed to * the same handler, while the DMA interrupt is routed elsewhere */ retval = request_irq(udc->udp_irq[IRQ_USB_LP], lpc32xx_usb_lp_irq, @@ -3320,8 +3315,6 @@ irq_dev_fail: irq_hp_fail: free_irq(udc->udp_irq[IRQ_USB_LP], udc); irq_lp_fail: - device_unregister(&udc->gadget.dev); -dev_register_fail: dma_pool_destroy(udc->dd_cache); dma_alloc_fail: dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE, @@ -3376,8 +3369,6 @@ static int lpc32xx_udc_remove(struct platform_device *pdev) free_irq(udc->udp_irq[IRQ_USB_HP], udc); free_irq(udc->udp_irq[IRQ_USB_LP], udc); - device_unregister(&udc->gadget.dev); - clk_disable(udc->usb_otg_clk); clk_put(udc->usb_otg_clk); clk_disable(udc->usb_slv_clk); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 14/32] usb: gadget: imx_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/imx_udc.c | 13 + 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/usb/gadget/imx_udc.c b/drivers/usb/gadget/imx_udc.c index a0eb857..c8b5da3 100644 --- a/drivers/usb/gadget/imx_udc.c +++ b/drivers/usb/gadget/imx_udc.c @@ -1341,20 +1341,12 @@ static int imx_udc_start(struct usb_gadget *gadget, imx_usb->driver = driver; imx_usb->gadget.dev.driver = &driver->driver; - retval = device_add(&imx_usb->gadget.dev); - if (retval) - goto fail; - D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n", __func__, driver->driver.name); imx_udc_enable(imx_usb); return 0; -fail: - imx_usb->driver = NULL; - imx_usb->gadget.dev.driver = NULL; - return retval; } static int imx_udc_stop(struct usb_gadget *gadget, @@ -1370,8 +1362,6 @@ static int imx_udc_stop(struct usb_gadget *gadget, imx_usb->gadget.dev.driver = NULL; imx_usb->driver = NULL; - device_del(&imx_usb->gadget.dev); - D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n", __func__, driver->driver.name); @@ -1472,8 +1462,7 @@ static int __init imx_udc_probe(struct platform_device *pdev) imx_usb->clk = clk; imx_usb->dev = &pdev->dev; - device_initialize(&imx_usb->gadget.dev); - + imx_usb->gadget.register_my_device = true; imx_usb->gadget.dev.parent = &pdev->dev; imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 12/32] usb: gadget: fusb300_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/fusb300_udc.c | 14 +- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c index 8c2372f..798a25b 100644 --- a/drivers/usb/gadget/fusb300_udc.c +++ b/drivers/usb/gadget/fusb300_udc.c @@ -1422,15 +1422,12 @@ static int __init fusb300_probe(struct platform_device *pdev) fusb300->gadget.ops = &fusb300_gadget_ops; - device_initialize(&fusb300->gadget.dev); - - dev_set_name(&fusb300->gadget.dev, "gadget"); - fusb300->gadget.max_speed = USB_SPEED_HIGH; fusb300->gadget.dev.parent = &pdev->dev; fusb300->gadget.dev.dma_mask = pdev->dev.dma_mask; fusb300->gadget.dev.release = pdev->dev.release; fusb300->gadget.name = udc_name; + fusb300->gadget.register_my_device = true; fusb300->reg = reg; ret = request_irq(ires->start, fusb300_irq, IRQF_SHARED, @@ -1478,19 +1475,10 @@ static int __init fusb300_probe(struct platform_device *pdev) if (ret) goto err_add_udc; - ret = device_add(&fusb300->gadget.dev); - if (ret) { - pr_err("device_add error (%d)\n", ret); - goto err_add_device; - } - dev_info(&pdev->dev, "version %s\n", DRIVER_VERSION); return 0; -err_add_device: - usb_del_gadget_udc(&fusb300->gadget); - err_add_udc: fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 10/32] usb: gadget: fsl_qe_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/fsl_qe_udc.c | 15 ++- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c index ec50f18..08c8432 100644 --- a/drivers/usb/gadget/fsl_qe_udc.c +++ b/drivers/usb/gadget/fsl_qe_udc.c @@ -2523,13 +2523,9 @@ static int qe_udc_probe(struct platform_device *ofdev) /* name: Identifies the controller hardware type. */ udc->gadget.name = driver_name; - - device_initialize(&udc->gadget.dev); - - dev_set_name(&udc->gadget.dev, "gadget"); - udc->gadget.dev.release = qe_udc_release; udc->gadget.dev.parent = &ofdev->dev; + udc->gadget.register_my_device = true; /* initialize qe_ep struct */ for (i = 0; i < USB_MAX_ENDPOINTS ; i++) { @@ -2592,13 +2588,9 @@ static int qe_udc_probe(struct platform_device *ofdev) goto err5; } - ret = device_add(&udc->gadget.dev); - if (ret) - goto err6; - ret = usb_add_gadget_udc(&ofdev->dev, &udc->gadget); if (ret) - goto err7; + goto err6; dev_set_drvdata(&ofdev->dev, udc); dev_info(udc->dev, @@ -2606,8 +2598,6 @@ static int qe_udc_probe(struct platform_device *ofdev) (udc->soc_type == PORT_QE) ? "QE" : "CPM"); return 0; -err7: - device_unregister(&udc->gadget.dev); err6: free_irq(udc->usb_irq, udc); err5: @@ -2702,7 +2692,6 @@ static int qe_udc_remove(struct platform_device *ofdev) iounmap(udc->usb_regs); - device_unregister(&udc->gadget.dev); /* wait for release() of gadget.dev to free udc */ wait_for_completion(&done); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 07/32] usb: gadget: atmel_usba_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/atmel_usba_udc.c | 13 + 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c index a7aed84..f0f9423 100644 --- a/drivers/usb/gadget/atmel_usba_udc.c +++ b/drivers/usb/gadget/atmel_usba_udc.c @@ -1900,9 +1900,9 @@ static int __init usba_udc_probe(struct platform_device *pdev) dev_info(&pdev->dev, "FIFO at 0x%08lx mapped at %p\n", (unsigned long)fifo->start, udc->fifo); - device_initialize(&udc->gadget.dev); udc->gadget.dev.parent = &pdev->dev; udc->gadget.dev.dma_mask = pdev->dev.dma_mask; + udc->gadget.register_my_device = true; platform_set_drvdata(pdev, udc); @@ -1962,12 +1962,6 @@ static int __init usba_udc_probe(struct platform_device *pdev) } udc->irq = irq; - ret = device_add(&udc->gadget.dev); - if (ret) { - dev_dbg(&pdev->dev, "Could not add gadget: %d\n", ret); - goto err_device_add; - } - if (gpio_is_valid(pdata->vbus_pin)) { if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) { udc->vbus_pin = pdata->vbus_pin; @@ -2007,9 +2001,6 @@ err_add_udc: gpio_free(udc->vbus_pin); } - device_unregister(&udc->gadget.dev); - -err_device_add: free_irq(irq, udc); err_request_irq: kfree(usba_ep); @@ -2053,8 +2044,6 @@ static int __exit usba_udc_remove(struct platform_device *pdev) clk_put(udc->hclk); clk_put(udc->pclk); - device_unregister(&udc->gadget.dev); - return 0; } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 11/32] usb: gadget: fsl_udc_core: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/fsl_udc_core.c | 9 ++--- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c index 49642d4..b78b734 100644 --- a/drivers/usb/gadget/fsl_udc_core.c +++ b/drivers/usb/gadget/fsl_udc_core.c @@ -2526,9 +2526,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev) udc_controller->gadget.dev.release = fsl_udc_release; udc_controller->gadget.dev.parent = &pdev->dev; udc_controller->gadget.dev.of_node = pdev->dev.of_node; - ret = device_register(&udc_controller->gadget.dev); - if (ret < 0) - goto err_free_irq; + udc_controller->gadget.register_my_device = true; if (!IS_ERR_OR_NULL(udc_controller->transceiver)) udc_controller->gadget.is_otg = 1; @@ -2561,7 +2559,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev) DTD_ALIGNMENT, UDC_DMA_BOUNDARY); if (udc_controller->td_pool == NULL) { ret = -ENOMEM; - goto err_unregister; + goto err_free_irq; } ret = usb_add_gadget_udc(&pdev->dev, &udc_controller->gadget); @@ -2573,8 +2571,6 @@ static int __init fsl_udc_probe(struct platform_device *pdev) err_del_udc: dma_pool_destroy(udc_controller->td_pool); -err_unregister: - device_unregister(&udc_controller->gadget.dev); err_free_irq: free_irq(udc_controller->irq, udc_controller); err_iounmap: @@ -2624,7 +2620,6 @@ static int __exit fsl_udc_remove(struct platform_device *pdev) if (pdata->operating_mode == FSL_USB2_DR_DEVICE) release_mem_region(res->start, resource_size(res)); - device_unregister(&udc_controller->gadget.dev); /* free udc --wait for the release() finished */ wait_for_completion(&done); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 09/32] usb: gadget: dummy_hcd: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/dummy_hcd.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index 95d584d..8155d4a 100644 --- a/drivers/usb/gadget/dummy_hcd.c +++ b/drivers/usb/gadget/dummy_hcd.c @@ -982,16 +982,10 @@ static int dummy_udc_probe(struct platform_device *pdev) dum->gadget.name = gadget_name; dum->gadget.ops = &dummy_ops; dum->gadget.max_speed = USB_SPEED_SUPER; + dum->gadget.register_my_device = true; - dev_set_name(&dum->gadget.dev, "gadget"); dum->gadget.dev.parent = &pdev->dev; dum->gadget.dev.release = dummy_gadget_release; - rc = device_register(&dum->gadget.dev); - if (rc < 0) { - put_device(&dum->gadget.dev); - return rc; - } - init_dummy_udc_hw(dum); rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget); @@ -1007,7 +1001,6 @@ static int dummy_udc_probe(struct platform_device *pdev) err_dev: usb_del_gadget_udc(&dum->gadget); err_udc: - device_unregister(&dum->gadget.dev); return rc; } @@ -1018,7 +1011,6 @@ static int dummy_udc_remove(struct platform_device *pdev) usb_del_gadget_udc(&dum->gadget); platform_set_drvdata(pdev, NULL); device_remove_file(&dum->gadget.dev, &dev_attr_function); - device_unregister(&dum->gadget.dev); return 0; } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 00/32] usb: refactor gadget->dev registration
Hi folks, Please comment on this series as I need help testing it on all UDC controllers so we can send it for v3.10 merge window. NOTE: I will queue this series for v3.10 merge window, so make sure to test and comment. cheers Felipe Balbi (32): usb: gadget: udc-core: allow udc class register gadget device usb: dwc3: gadget: let udc-core manage gadget->dev usb: musb: gadget: let udc-core manage gadget-dev usb: gadget: omap_udc: let udc-core manage gadget->dev usb: gadget: amd5536udc: let udc-core manage gadget->dev usb: gadget: at91_udc: let udc-core manage gadget->dev usb: gadget: atmel_usba_udc: let udc-core manage gadget->dev usb: gadget: bcm63xx_udc: let udc-core manage gadget->dev usb: gadget: dummy_hcd: let udc-core manage gadget->dev usb: gadget: fsl_qe_udc: let udc-core manage gadget->dev usb: gadget: fsl_udc_core: let udc-core manage gadget->dev usb: gadget: fusb300_udc: let udc-core manage gadget->dev usb: gadget: goku_udc: let udc-core manage gadget->dev usb: gadget: imx_udc: let udc-core manage gadget->dev usb: gadget: lpc32xx_udc: let udc-core manage gadget->dev usb: gadget: m66592-udc: let udc-core manage gadget->dev usb: gadget: mv_u3d_core: let udc-core manage gadget->dev usb: gadget: mv_u3d_core: fix a compile warning usb: gadget: mv_udc_core: let udc-core manage gadget->dev usb: gadget: net2272: let udc-core manage gadget->dev usb: gadget: net2280: let udc-core manage gadget->dev usb: gadget: pch_udc: let udc-core manage gadget->dev usb: gadget: r8a66597-udc: let udc-core manage gadget->dev usb: gadget: s3c-hsotg: let udc-core manage gadget->dev usb: gadget: s3c-hsudc: let udc-core manage gadget->dev usb: gadget: s3c2410_udc: let udc-core manage gadget->dev usb: renesas_usbhs: gadget: let udc-core manage gadget->dev usb: gadget: pxa25x_udc: let udc-core manage gadget->dev usb: gadget: pxa27x_udc: let udc-core manage gadget->dev usb: chipidea: register debugging syfs on our device usb: chipidea: let udc-core manage gadget->dev usb: gadget: drop now unnecessary flag drivers/usb/chipidea/udc.c | 18 -- drivers/usb/dwc3/gadget.c | 16 +--- drivers/usb/gadget/amd5536udc.c| 8 drivers/usb/gadget/at91_udc.c | 12 +--- drivers/usb/gadget/atmel_usba_udc.c| 12 drivers/usb/gadget/bcm63xx_udc.c | 6 -- drivers/usb/gadget/dummy_hcd.c | 9 - drivers/usb/gadget/fsl_qe_udc.c| 14 +- drivers/usb/gadget/fsl_udc_core.c | 8 +--- drivers/usb/gadget/fusb300_udc.c | 13 - drivers/usb/gadget/goku_udc.c | 9 - drivers/usb/gadget/goku_udc.h | 3 +-- drivers/usb/gadget/imx_udc.c | 12 drivers/usb/gadget/lpc32xx_udc.c | 10 -- drivers/usb/gadget/m66592-udc.c| 12 drivers/usb/gadget/mv_u3d_core.c | 11 +-- drivers/usb/gadget/mv_udc_core.c | 11 +-- drivers/usb/gadget/net2272.c | 9 + drivers/usb/gadget/net2280.c | 4 drivers/usb/gadget/omap_udc.c | 11 +++ drivers/usb/gadget/pch_udc.c | 9 - drivers/usb/gadget/pxa25x_udc.c| 9 - drivers/usb/gadget/pxa27x_udc.c| 8 drivers/usb/gadget/r8a66597-udc.c | 11 +-- drivers/usb/gadget/s3c-hsotg.c | 13 - drivers/usb/gadget/s3c-hsudc.c | 10 -- drivers/usb/gadget/s3c2410_udc.c | 9 - drivers/usb/gadget/udc-core.c | 20 drivers/usb/musb/musb_gadget.c | 9 - drivers/usb/renesas_usbhs/mod_gadget.c | 10 +- 30 files changed, 33 insertions(+), 283 deletions(-) -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 05/32] usb: gadget: amd5536udc: let udc-core manage gadget->dev
By simply setting a flag, we drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/amd5536udc.c | 9 + 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c index 3dac001..1827d4c 100644 --- a/drivers/usb/gadget/amd5536udc.c +++ b/drivers/usb/gadget/amd5536udc.c @@ -3080,7 +3080,6 @@ static void udc_pci_remove(struct pci_dev *pdev) if (dev->active) pci_disable_device(pdev); - device_unregister(&dev->gadget.dev); pci_set_drvdata(pdev, NULL); udc_remove(dev); @@ -3276,6 +3275,7 @@ static int udc_probe(struct udc *dev) dev->gadget.dev.release = gadget_release; dev->gadget.name = name; dev->gadget.max_speed = USB_SPEED_HIGH; + dev->gadget.register_my_device = true; /* init registers, interrupts, ... */ startup_registers(dev); @@ -3301,13 +3301,6 @@ static int udc_probe(struct udc *dev) if (retval) goto finished; - retval = device_register(&dev->gadget.dev); - if (retval) { - usb_del_gadget_udc(&dev->gadget); - put_device(&dev->gadget.dev); - goto finished; - } - /* timer init */ init_timer(&udc_timer); udc_timer.function = udc_timer_function; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 02/32] usb: dwc3: gadget: let udc-core manage gadget->dev
We don't need to register that device ourselves if we simply set gadget->register_my_device. Signed-off-by: Felipe Balbi --- drivers/usb/dwc3/gadget.c | 17 ++--- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 2e43b33..7002cf6 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2412,8 +2412,6 @@ int dwc3_gadget_init(struct dwc3 *dwc) goto err3; } - dev_set_name(&dwc->gadget.dev, "gadget"); - dwc->gadget.ops = &dwc3_gadget_ops; dwc->gadget.max_speed = USB_SPEED_SUPER; dwc->gadget.speed = USB_SPEED_UNKNOWN; @@ -2425,6 +2423,7 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc->gadget.dev.dma_parms = dwc->dev->dma_parms; dwc->gadget.dev.dma_mask= dwc->dev->dma_mask; dwc->gadget.dev.release = dwc3_gadget_release; + dwc->gadget.register_my_device = true; dwc->gadget.name= "dwc3-gadget"; /* @@ -2480,24 +2479,14 @@ int dwc3_gadget_init(struct dwc3 *dwc) dwc3_gadget_usb3_phy_suspend(dwc, false); } - ret = device_register(&dwc->gadget.dev); - if (ret) { - dev_err(dwc->dev, "failed to register gadget device\n"); - put_device(&dwc->gadget.dev); - goto err6; - } - ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget); if (ret) { dev_err(dwc->dev, "failed to register udc\n"); - goto err7; + goto err6; } return 0; -err7: - device_unregister(&dwc->gadget.dev); - err6: dwc3_writel(dwc->regs, DWC3_DEVTEN, 0x00); free_irq(irq, dwc); @@ -2546,6 +2535,4 @@ void dwc3_gadget_exit(struct dwc3 *dwc) dma_free_coherent(dwc->dev, sizeof(*dwc->ctrl_req), dwc->ctrl_req, dwc->ctrl_req_addr); - - device_unregister(&dwc->gadget.dev); } -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 06/32] usb: gadget: at91_udc: let udc-core manage gadget->dev
By simply setting a flag, we can remove some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/at91_udc.c | 13 ++--- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 10f45fa..177b56d 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -1726,6 +1726,7 @@ static int at91udc_probe(struct platform_device *pdev) /* init software state */ udc = &controller; + udc->gadget.register_my_device = true; udc->gadget.dev.parent = dev; if (pdev->dev.of_node) at91udc_of_init(udc, pdev->dev.of_node); @@ -1780,13 +1781,7 @@ static int at91udc_probe(struct platform_device *pdev) DBG("clocks missing\n"); retval = -ENODEV; /* NOTE: we "know" here that refcounts on these are NOPs */ - goto fail0b; - } - - retval = device_register(&udc->gadget.dev); - if (retval < 0) { - put_device(&udc->gadget.dev); - goto fail0b; + goto fail1; } /* don't do anything until we have both gadget driver and VBUS */ @@ -1857,8 +1852,6 @@ fail3: fail2: free_irq(udc->udp_irq, udc); fail1: - device_unregister(&udc->gadget.dev); -fail0b: iounmap(udc->udp_baseaddr); fail0a: if (cpu_is_at91rm9200()) @@ -1892,8 +1885,6 @@ static int __exit at91udc_remove(struct platform_device *pdev) gpio_free(udc->board.vbus_pin); } free_irq(udc->udp_irq, udc); - device_unregister(&udc->gadget.dev); - iounmap(udc->udp_baseaddr); if (cpu_is_at91rm9200()) -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 08/32] usb: gadget: bcm63xx_udc: let udc-core manage gadget->dev
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/bcm63xx_udc.c | 7 +-- 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/usb/gadget/bcm63xx_udc.c b/drivers/usb/gadget/bcm63xx_udc.c index 47a4993..10b0475 100644 --- a/drivers/usb/gadget/bcm63xx_udc.c +++ b/drivers/usb/gadget/bcm63xx_udc.c @@ -2367,13 +2367,13 @@ static int bcm63xx_udc_probe(struct platform_device *pdev) spin_lock_init(&udc->lock); INIT_WORK(&udc->ep0_wq, bcm63xx_ep0_process); - dev_set_name(&udc->gadget.dev, "gadget"); udc->gadget.ops = &bcm63xx_udc_ops; udc->gadget.name = dev_name(dev); udc->gadget.dev.parent = dev; udc->gadget.dev.release = bcm63xx_udc_gadget_release; udc->gadget.dev.dma_mask = dev->dma_mask; + udc->gadget.register_my_device = true; if (!pd->use_fullspeed && !use_fullspeed) udc->gadget.max_speed = USB_SPEED_HIGH; @@ -2413,10 +2413,6 @@ static int bcm63xx_udc_probe(struct platform_device *pdev) } } - rc = device_register(&udc->gadget.dev); - if (rc) - goto out_uninit; - bcm63xx_udc_init_debugfs(udc); rc = usb_add_gadget_udc(dev, &udc->gadget); if (!rc) @@ -2439,7 +2435,6 @@ static int bcm63xx_udc_remove(struct platform_device *pdev) bcm63xx_udc_cleanup_debugfs(udc); usb_del_gadget_udc(&udc->gadget); - device_unregister(&udc->gadget.dev); BUG_ON(udc->driver); platform_set_drvdata(pdev, NULL); -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 04/32] usb: gadget: omap_udc: let udc-core manage gadget->dev
By simply setting a flag, we drop some boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/omap_udc.c | 12 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c index d0c87b1..234e82b 100644 --- a/drivers/usb/gadget/omap_udc.c +++ b/drivers/usb/gadget/omap_udc.c @@ -2631,10 +2631,9 @@ omap_udc_setup(struct platform_device *odev, struct usb_phy *xceiv) udc->gadget.max_speed = USB_SPEED_FULL; udc->gadget.name = driver_name; - device_initialize(&udc->gadget.dev); - dev_set_name(&udc->gadget.dev, "gadget"); udc->gadget.dev.release = omap_udc_release; udc->gadget.dev.parent = &odev->dev; + udc->gadget.register_my_device = true; if (use_dma) udc->gadget.dev.dma_mask = odev->dev.dma_mask; @@ -2911,14 +2910,12 @@ bad_on_1710: } create_proc_file(); - status = device_add(&udc->gadget.dev); + status = usb_add_gadget_udc(&pdev->dev, &udc->gadget); if (status) goto cleanup4; - status = usb_add_gadget_udc(&pdev->dev, &udc->gadget); - if (!status) - return status; - /* If fail, fall through */ + return 0; + cleanup4: remove_proc_file(); @@ -2989,7 +2986,6 @@ static int omap_udc_remove(struct platform_device *pdev) release_mem_region(pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start + 1); - device_unregister(&udc->gadget.dev); wait_for_completion(&done); return 0; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 03/32] usb: musb: gadget: let udc-core manage gadget-dev
By simply setting a flag, we can delete a little boilerplate code. Signed-off-by: Felipe Balbi --- drivers/usb/musb/musb_gadget.c | 10 +- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 8767874..1c4a8e8 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -1871,12 +1871,11 @@ int musb_gadget_setup(struct musb *musb) musb->g.speed = USB_SPEED_UNKNOWN; /* this "gadget" abstracts/virtualizes the controller */ - dev_set_name(&musb->g.dev, "gadget"); musb->g.dev.parent = musb->controller; musb->g.dev.dma_mask = musb->controller->dma_mask; musb->g.dev.release = musb_gadget_release; musb->g.name = musb_driver_name; - + musb->g.register_my_device = true; musb->g.is_otg = 1; musb_g_init_endpoints(musb); @@ -1884,11 +1883,6 @@ int musb_gadget_setup(struct musb *musb) musb->is_active = 0; musb_platform_try_idle(musb, 0); - status = device_register(&musb->g.dev); - if (status != 0) { - put_device(&musb->g.dev); - return status; - } status = usb_add_gadget_udc(musb->controller, &musb->g); if (status) goto err; @@ -1903,8 +1897,6 @@ err: void musb_gadget_cleanup(struct musb *musb) { usb_del_gadget_udc(&musb->g); - if (musb->g.dev.parent) - device_unregister(&musb->g.dev); } /* -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[RFC/PATCH 01/32] usb: gadget: udc-core: allow udc class register gadget device
Currently all UDC drivers are calling device_register() before calling usb_add_gadget_udc(). In order to avoid code duplication, we can allow udc-core.c register that device. However that would become a really large patch, so to cope with the meanwhile and allow us to write bite-sized patches, we're adding a flag which will be set by UDC driver once it removes the code for registering the gadget device. Once all are converted, the new flag will be removed. Signed-off-by: Felipe Balbi --- drivers/usb/gadget/udc-core.c | 23 +++ include/linux/usb/gadget.h| 4 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c index 2a9cd36..9195054 100644 --- a/drivers/usb/gadget/udc-core.c +++ b/drivers/usb/gadget/udc-core.c @@ -173,6 +173,14 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget) if (!udc) goto err1; + if (gadget->register_my_device) { + dev_set_name(&gadget->dev, "gadget"); + + ret = device_register(&gadget->dev); + if (ret) + goto err2; + } + device_initialize(&udc->dev); udc->dev.release = usb_udc_release; udc->dev.class = udc_class; @@ -180,7 +188,7 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget) udc->dev.parent = parent; ret = dev_set_name(&udc->dev, "%s", kobject_name(&parent->kobj)); if (ret) - goto err2; + goto err3; udc->gadget = gadget; @@ -189,18 +197,22 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget) ret = device_add(&udc->dev); if (ret) - goto err3; + goto err4; mutex_unlock(&udc_lock); return 0; -err3: + +err4: list_del(&udc->list); mutex_unlock(&udc_lock); -err2: +err3: put_device(&udc->dev); +err2: + if (gadget->register_my_device) + put_device(&gadget->dev); err1: return ret; } @@ -254,6 +266,9 @@ found: kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE); device_unregister(&udc->dev); + + if (gadget->register_my_device) + device_unregister(&gadget->dev); } EXPORT_SYMBOL_GPL(usb_del_gadget_udc); diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 2e297e8..fcd9ef8 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -494,6 +494,9 @@ struct usb_gadget_ops { * only supports HNP on a different root port. * @b_hnp_enable: OTG device feature flag, indicating that the A-Host * enabled HNP support. + * @register_my_device: Flag telling udc-core that UDC driver didn't + * register the gadget device to the driver model. Temporary until + * all UDC drivers are fixed up properly. * @name: Identifies the controller hardware type. Used in diagnostics * and sometimes configuration. * @dev: Driver model state for this abstract device. @@ -531,6 +534,7 @@ struct usb_gadget { unsignedb_hnp_enable:1; unsigneda_hnp_support:1; unsigneda_alt_hnp_support:1; + unsignedregister_my_device:1; const char *name; struct device dev; unsignedout_epnum; -- 1.8.1.rc1.5.g7e0651a ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [RFC PATCH 0/6] USB: Add multiple PHYs of same type
On Wed, Jan 16, 2013 at 08:30:56PM +0530, Kishon Vijay Abraham I wrote: > New platforms are being added which has multiple PHY's (of same type) and > which has multiple USB controllers. The binding information has to be > present in the PHY library (otg.c) in order for it to return the > appropriate PHY whenever the USB controller request for the PHY. So > added a new API to pass the binding information. This API should be > called by platform specific initialization code. > > So the binding should be done something like > usb_bind_phy("musb-hdrc.0.auto", 0, "omap-usb2.1.auto"); specifying the USB > controller device name, index, and the PHY device name. > I have done this binding for OMAP platforms, but it should be done for > all the platforms. > > After this design, the phy can be got by passing the USB controller device > pointer and the index. > > Developed this patch series on > git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git xceiv > after applying "usb: musb: add driver for control module" patch series. > > Did basic enumeration testing in omap4 panda, omap4 sdp and omap3 beagle. please resend without RFC so I can apply. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [RFC PATCH 1/6] usb: otg: Add an API to bind the USB controller and PHY
On Thu, Jan 17, 2013 at 04:44:52PM +0530, kishon wrote: > >>@@ -171,6 +188,11 @@ static inline void devm_usb_put_phy(struct device > >>*dev, struct usb_phy *x) > >> { > >> } > >> > >>+static inline struct usb_phy_bind *usb_bind_phy(const char *dev_name, u8 > >>index, > >>+ const char *phy_dev_name) > >>+{ > >>+ return NULL; > >>+} > >> #endif > >> > >> static inline int > >> > > > >Controllers like ehci-omap which don't need OTG functionality would > >benefit from this API. Can we make these PHY APIs not dependent on OTG / > >OTG_UTILS? > > Actually much of whatever is in otg.c can be used by controllers > which don't have OTG functionality (except otg_state_string). I > vaguely remember, there was a patch that renamed otg.c to phy.c etc.. > I'm not sure what happened to that. right, that has to be done eventually ;-) -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v6 3/3] ARM: i.MX clock: Change the connection-id for fsl-usb2-udc
On Thu, Jan 17, 2013 at 06:03:17PM +0800, Peter Chen wrote: > As we use platform_device_id for fsl-usb2-udc driver, it needs to > change clk connection-id, or the related devm_clk_get will be failed. > > Signed-off-by: Peter Chen do I get Acked-by for this one ? -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
Hi, On Thu, Jan 17, 2013 at 05:28:30PM +0800, Peter Chen wrote: > > > > From what I understand balbi's comment, he dislikes this full list of > > > > device id. Instead, he prefers to something like below. > > > > > > > > static const struct platform_device_id fsl_udc_devtype[] = { > > > > { > > > > .name = "imx-udc-mx27", > > > > }, { > > > > .name = "imx-udc-mx51", > > > > } > > > > }; > > > > > > > > It basically tells that we are handling two type of devices here, one > > > > is imx-udc-mx27 type and the other is imx-udc-mx51 type, with mx25/31/35 > > > > completely compatible with mx27 type. We choose mx27 instead of mx25 > > > > to define the type because mx27 Si came out earlier than mx25. That > > > > said, we generally choose the earlies SoC name to define a particular > > > > version of IP block, since hardware version is mostly unavailable or > > > > unreliable. > > > > > > > > But that also means in platform code which create the platform_device, > > > > you will need to use name "imx-udc-mx27" for even mx25/31/35. > > > > > > > > imx_fsl_usb2_udc_data_entry_single(MX25, "imx-udc-mx27"); > > > > imx_fsl_usb2_udc_data_entry_single(MX31, "imx-udc-mx27"); > > > > imx_fsl_usb2_udc_data_entry_single(MX35, "imx-udc-mx27"); > > > > > > > > Considering this is a piece of code we will not use for any new > > > > hardware, I'm fine with either way. > > > > > > > > So, balbi, it's all your call to accept the series as it is or ask for > > > > another iteration. > > > > right :-) > > > > > Thanks Shawn. Let's see Felipe's comment, nevertheless, I will send v6 > > > patch > > > due to a compile error at mx25 > > > > Shawn is right. > > In fact, this driver is just the temp solution, we will use chipidea > in future, so just take all i.mx usb as two kinds of ip are ok. > > Do you want me to change like Shawn said, or current version is ok? yes, please resend with changes. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v5 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
On Wed, Jan 16, 2013 at 09:48:25AM +0800, Peter Chen wrote: > On Tue, Jan 15, 2013 at 10:03:46PM +0800, Shawn Guo wrote: > > On Tue, Jan 15, 2013 at 10:29:33AM +0800, Peter Chen wrote: > > > As mach/hardware.h is deleted, we need to use platform_device_id to > > > differentiate SoCs. Besides, one cpu_is_mx35 is useless as it has > > > already used pdata to differentiate runtime > > > > > > Meanwhile we update the platform code accordingly. > > > > > > Signed-off-by: Peter Chen > > > --- > > > arch/arm/mach-imx/devices/devices-common.h|1 + > > > arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c | 15 --- > > > drivers/usb/gadget/fsl_mxc_udc.c | 24 +--- > > > drivers/usb/gadget/fsl_udc_core.c | 42 > > > + > > > 4 files changed, 45 insertions(+), 37 deletions(-) > > > > Since we are splitting the original patch anyway, it's a bit strange > > to me that you are mixing arch/arm/mach-imx and drivers/usb/gadget > > in this patch. I'm fine with it, since I assume all the patches to > > go via USB tree anyway. > > > > > > > > diff --git a/arch/arm/mach-imx/devices/devices-common.h > > > b/arch/arm/mach-imx/devices/devices-common.h > > > index 6277baf..9bd5777 100644 > > > --- a/arch/arm/mach-imx/devices/devices-common.h > > > +++ b/arch/arm/mach-imx/devices/devices-common.h > > > @@ -63,6 +63,7 @@ struct platform_device *__init imx_add_flexcan( > > > > > > #include > > > struct imx_fsl_usb2_udc_data { > > > + const char *devid; > > > resource_size_t iobase; > > > resource_size_t irq; > > > }; > > > diff --git a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c > > > b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c > > > index 37e4439..fb527c7 100644 > > > --- a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c > > > +++ b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c > > > @@ -11,35 +11,36 @@ > > > #include "../hardware.h" > > > #include "devices-common.h" > > > > > > -#define imx_fsl_usb2_udc_data_entry_single(soc) > > > \ > > > +#define imx_fsl_usb2_udc_data_entry_single(soc, _devid) > > > \ > > > { \ > > > + .devid = _devid,\ > > > .iobase = soc ## _USB_OTG_BASE_ADDR,\ > > > .irq = soc ## _INT_USB_OTG, \ > > > } > > > > > > #ifdef CONFIG_SOC_IMX25 > > > const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst = > > > - imx_fsl_usb2_udc_data_entry_single(MX25); > > > + imx_fsl_usb2_udc_data_entry_single(MX25, "imx-udc-mx25"); > > > #endif /* ifdef CONFIG_SOC_IMX25 */ > > > > > > #ifdef CONFIG_SOC_IMX27 > > > const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst = > > > - imx_fsl_usb2_udc_data_entry_single(MX27); > > > + imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27"); > > > #endif /* ifdef CONFIG_SOC_IMX27 */ > > > > > > #ifdef CONFIG_SOC_IMX31 > > > const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst = > > > - imx_fsl_usb2_udc_data_entry_single(MX31); > > > + imx_fsl_usb2_udc_data_entry_single(MX31, "imx-udc-mx31"); > > > #endif /* ifdef CONFIG_SOC_IMX31 */ > > > > > > #ifdef CONFIG_SOC_IMX35 > > > const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst = > > > - imx_fsl_usb2_udc_data_entry_single(MX35); > > > + imx_fsl_usb2_udc_data_entry_single(MX35, "imx-udc-mx35"); > > > #endif /* ifdef CONFIG_SOC_IMX35 */ > > > > > > #ifdef CONFIG_SOC_IMX51 > > > const struct imx_fsl_usb2_udc_data imx51_fsl_usb2_udc_data __initconst = > > > - imx_fsl_usb2_udc_data_entry_single(MX51); > > > + imx_fsl_usb2_udc_data_entry_single(MX51, "imx-udc-mx51"); > > > #endif > > > > > > struct platform_device *__init imx_add_fsl_usb2_udc( > > > @@ -57,7 +58,7 @@ struct platform_device *__init imx_add_fsl_usb2_udc( > > > .flags = IORESOURCE_IRQ, > > > }, > > > }; > > > - return imx_add_platform_device_dmamask("fsl-usb2-udc", -1, > > > + return imx_add_platform_device_dmamask(data->devid, -1, > > > res, ARRAY_SIZE(res), > > > pdata, sizeof(*pdata), DMA_BIT_MASK(32)); > > > } > > > > > > > > > +static const struct platform_device_id fsl_udc_devtype[] = { > > > + { > > > + .name = "imx-udc-mx25", > > > + }, { > > > + .name = "imx-udc-mx27", > > > + }, { > > > + .name = "imx-udc-mx31", > > > + }, { > > > + .name = "imx-udc-mx35", > > > + }, { > > > + .name = "imx-udc-mx51", > > > + } > > > +}; > > > > From what I understand balbi's comment, he dislikes this full list of > > device id. Instead, he prefers to something like below. > > > > static const struct platform_device_id fsl_udc_devtype[] = { > > { > > .name = "imx-udc-mx27", > > }, { > > .name = "imx-udc-mx5
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
On Mon, Jan 14, 2013 at 06:54:22PM +0100, Marc Kleine-Budde wrote: > On 01/14/2013 06:40 PM, Felipe Balbi wrote: > > Hi, > > > > On Mon, Jan 14, 2013 at 08:56:33PM +0800, Peter Chen wrote: > > > > > > > >>>> Usually there isn't any Changelog between IP cores used in the different > >>>> fsl processors (at least available outside of fsl), that makes it quite > >>>> difficult to say if something found on one imx is really the same as on > >>>> the other one. And they (usually) don't provide any versioning > >>>> information in a register or the documentation. > >>>> > >>>> just my 2¢ > >>> > >>> $SUBJECT is trying to differentiate a single feature (or maybe two) to > >>> replace cpu_is_xxx(), then expose that on driver_data without creating > >>> one enum value for each release from fsl. > >> > >> Felipe, every one or two SoCs may have their special operations for > >> integrate PHY interface, clk operation, or workaround for IC > >> limitation. > > > > the particular PHY and clk used should be hidden by phy layer and clk > > API respectively. Workarounds, fair enough, we need to handle them; but > > ideally those should be based on runtime revision detection, not some > > hackery using driver_data. > > If this is actually possible, I'd love to do this. But IP vendor don't > include a version register in their cores. :( then fair enough, driver_data or platform_data is the way to go, still my point (a) below is valid. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
Hi, On Mon, Jan 14, 2013 at 08:56:33PM +0800, Peter Chen wrote: > > > Usually there isn't any Changelog between IP cores used in the different > > > fsl processors (at least available outside of fsl), that makes it quite > > > difficult to say if something found on one imx is really the same as on > > > the other one. And they (usually) don't provide any versioning > > > information in a register or the documentation. > > > > > > just my 2¢ > > > > $SUBJECT is trying to differentiate a single feature (or maybe two) to > > replace cpu_is_xxx(), then expose that on driver_data without creating > > one enum value for each release from fsl. > > Felipe, every one or two SoCs may have their special operations for > integrate PHY interface, clk operation, or workaround for IC > limitation. the particular PHY and clk used should be hidden by phy layer and clk API respectively. Workarounds, fair enough, we need to handle them; but ideally those should be based on runtime revision detection, not some hackery using driver_data. > Maybe, it will add more future or SoCs (maybe not for this driver) in > the future, using enum is easier than string comparison for expanding > something. a) I never told you to *not* use enum. I said that creating DEVICE_A, DEVICE_B, DEVICE_C, DEVICE_D and DEVICE_E values when DEVICE_B, DEVICE_C and DEVICE_E behave exactly the same is unnecessary. b) you can't be expecting to add future SoCs support to fsl udc, I have already said and will repeat for the last time: move to chipidea ASAP. New SoCs cannot be added to fsl udc, you *must* use chipidea for anything new and move the legacy to chipidea eventually. I will wait for a full year for you to do that, but after that I will have to start deleting drivers for the sake of avoid duplication of effort. cheers -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
On Mon, Jan 14, 2013 at 12:03:04PM +0100, Marc Kleine-Budde wrote: > On 01/14/2013 11:53 AM, Felipe Balbi wrote: > > Hi, > > > > On Mon, Jan 14, 2013 at 11:50:41AM +0100, Marc Kleine-Budde wrote: > >> On 01/14/2013 11:39 AM, Felipe Balbi wrote: > >>> On Mon, Jan 14, 2013 at 11:34:05AM +0100, Marc Kleine-Budde wrote: > >>>> On 01/14/2013 11:24 AM, Felipe Balbi wrote: > >>>>> On Mon, Jan 14, 2013 at 11:18:53AM +0100, Marc Kleine-Budde wrote: > >>>>>> On 01/14/2013 11:16 AM, Felipe Balbi wrote: > >>>>>>> Hi, > >>>>>>> > >>>>>>> On Mon, Jan 14, 2013 at 06:12:39PM +0800, Peter Chen wrote: > >>>>>>>> @@ -2756,22 +2753,41 @@ static int fsl_udc_otg_resume(struct device > >>>>>>>> *dev) > >>>>>>>> > >>>>>>>> return fsl_udc_resume(NULL); > >>>>>>>> } > >>>>>>>> - > >>>>>>>> > >>>>>>>> /*- > >>>>>>>> Register entry point for the peripheral controller driver > >>>>>>>> > >>>>>>>> --*/ > >>>>>>>> - > >>>>>>>> +static const struct platform_device_id fsl_udc_devtype[] = { > >>>>>>>> +{ > >>>>>>>> +.name = "imx-udc-mx25", > >>>>>>>> +.driver_data = IMX25_UDC, > >>>>>>>> +}, { > >>>>>>>> +.name = "imx-udc-mx27", > >>>>>>>> +.driver_data = IMX27_UDC, > >>>>>>>> +}, { > >>>>>>>> +.name = "imx-udc-mx31", > >>>>>>>> +.driver_data = IMX31_UDC, > >>>>>>>> +}, { > >>>>>>>> +.name = "imx-udc-mx35", > >>>>>>>> +.driver_data = IMX35_UDC, > >>>>>>>> +}, { > >>>>>>>> +.name = "imx-udc-mx51", > >>>>>>>> +.driver_data = IMX51_UDC, > >>>>>>>> +} > >>>>>>>> +}; > >>>>>>> > >>>>>>> I wonder if your driver-data is actually needed since you can use > >>>>>>> string > >>>>>>> comparisson to achieve the exact same outcome. > >>>>>> > >>>>>> Why use a string compare, if the kernel infrastructure already does > >>>>>> this > >>>>>> for you? > >>>>> > >>>>> what do you mean ? What kernel infrastructure is doing waht for me ? > >>>> > >>>> The kernel infrastructure is doing the string compare for you to match > >>>> the device against the driver (via platform_device_id->name). You get > >>>> the a pointer to the driver_data for free. So you don't need any string > >>>> compare in the driver later. > >>> > >>> but current driver data is just duplicating name with an integer, it's > >>> pretty useless driver data. > >> > >> I don't think so - another argument: > >> Less code. As struct platform_device_id is a static array the space is > >> allocated anyway. So it doesn't make any difference if driver_data is > >> NULL or not. Later you just need to make an integer comparison instead > >> of a call to a strcmp(), if you have a switch/case and IMX*_UDC is an > >> enum, the compiler will warn you if you've missed an IMX variant. > > > > fair enough, but then don't create a different enum value for each imx > > instance if they're mostly the same. Differentiate only what's actually > > different. > > Usually there isn't any Changelog between IP cores used in the different > fsl processors (at least available outside of fsl), that makes it quite > difficult to say if something found on one imx is really the same as on > the other one. And they (usually) don't provide any versioning > information in a register or the documentation. > > just my 2¢ $SUBJECT is trying to differentiate a single feature (or maybe two) to replace cpu_is_xxx(), then expose that on driver_data without creating one enum value for each release from fsl. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
Hi, On Mon, Jan 14, 2013 at 11:50:41AM +0100, Marc Kleine-Budde wrote: > On 01/14/2013 11:39 AM, Felipe Balbi wrote: > > On Mon, Jan 14, 2013 at 11:34:05AM +0100, Marc Kleine-Budde wrote: > >> On 01/14/2013 11:24 AM, Felipe Balbi wrote: > >>> On Mon, Jan 14, 2013 at 11:18:53AM +0100, Marc Kleine-Budde wrote: > >>>> On 01/14/2013 11:16 AM, Felipe Balbi wrote: > >>>>> Hi, > >>>>> > >>>>> On Mon, Jan 14, 2013 at 06:12:39PM +0800, Peter Chen wrote: > >>>>>> @@ -2756,22 +2753,41 @@ static int fsl_udc_otg_resume(struct device > >>>>>> *dev) > >>>>>> > >>>>>>return fsl_udc_resume(NULL); > >>>>>> } > >>>>>> - > >>>>>> > >>>>>> /*- > >>>>>>Register entry point for the peripheral controller driver > >>>>>> > >>>>>> --*/ > >>>>>> - > >>>>>> +static const struct platform_device_id fsl_udc_devtype[] = { > >>>>>> + { > >>>>>> + .name = "imx-udc-mx25", > >>>>>> + .driver_data = IMX25_UDC, > >>>>>> + }, { > >>>>>> + .name = "imx-udc-mx27", > >>>>>> + .driver_data = IMX27_UDC, > >>>>>> + }, { > >>>>>> + .name = "imx-udc-mx31", > >>>>>> + .driver_data = IMX31_UDC, > >>>>>> + }, { > >>>>>> + .name = "imx-udc-mx35", > >>>>>> + .driver_data = IMX35_UDC, > >>>>>> + }, { > >>>>>> + .name = "imx-udc-mx51", > >>>>>> + .driver_data = IMX51_UDC, > >>>>>> + } > >>>>>> +}; > >>>>> > >>>>> I wonder if your driver-data is actually needed since you can use string > >>>>> comparisson to achieve the exact same outcome. > >>>> > >>>> Why use a string compare, if the kernel infrastructure already does this > >>>> for you? > >>> > >>> what do you mean ? What kernel infrastructure is doing waht for me ? > >> > >> The kernel infrastructure is doing the string compare for you to match > >> the device against the driver (via platform_device_id->name). You get > >> the a pointer to the driver_data for free. So you don't need any string > >> compare in the driver later. > > > > but current driver data is just duplicating name with an integer, it's > > pretty useless driver data. > > I don't think so - another argument: > Less code. As struct platform_device_id is a static array the space is > allocated anyway. So it doesn't make any difference if driver_data is > NULL or not. Later you just need to make an integer comparison instead > of a call to a strcmp(), if you have a switch/case and IMX*_UDC is an > enum, the compiler will warn you if you've missed an IMX variant. fair enough, but then don't create a different enum value for each imx instance if they're mostly the same. Differentiate only what's actually different. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
On Mon, Jan 14, 2013 at 11:34:05AM +0100, Marc Kleine-Budde wrote: > On 01/14/2013 11:24 AM, Felipe Balbi wrote: > > On Mon, Jan 14, 2013 at 11:18:53AM +0100, Marc Kleine-Budde wrote: > >> On 01/14/2013 11:16 AM, Felipe Balbi wrote: > >>> Hi, > >>> > >>> On Mon, Jan 14, 2013 at 06:12:39PM +0800, Peter Chen wrote: > >>>> @@ -2756,22 +2753,41 @@ static int fsl_udc_otg_resume(struct device *dev) > >>>> > >>>> return fsl_udc_resume(NULL); > >>>> } > >>>> - > >>>> > >>>> /*- > >>>> Register entry point for the peripheral controller driver > >>>> > >>>> --*/ > >>>> - > >>>> +static const struct platform_device_id fsl_udc_devtype[] = { > >>>> +{ > >>>> +.name = "imx-udc-mx25", > >>>> +.driver_data = IMX25_UDC, > >>>> +}, { > >>>> +.name = "imx-udc-mx27", > >>>> +.driver_data = IMX27_UDC, > >>>> +}, { > >>>> +.name = "imx-udc-mx31", > >>>> +.driver_data = IMX31_UDC, > >>>> +}, { > >>>> +.name = "imx-udc-mx35", > >>>> +.driver_data = IMX35_UDC, > >>>> +}, { > >>>> +.name = "imx-udc-mx51", > >>>> +.driver_data = IMX51_UDC, > >>>> +} > >>>> +}; > >>> > >>> I wonder if your driver-data is actually needed since you can use string > >>> comparisson to achieve the exact same outcome. > >> > >> Why use a string compare, if the kernel infrastructure already does this > >> for you? > > > > what do you mean ? What kernel infrastructure is doing waht for me ? > > The kernel infrastructure is doing the string compare for you to match > the device against the driver (via platform_device_id->name). You get > the a pointer to the driver_data for free. So you don't need any string > compare in the driver later. but current driver data is just duplicating name with an integer, it's pretty useless driver data. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
On Mon, Jan 14, 2013 at 11:18:53AM +0100, Marc Kleine-Budde wrote: > On 01/14/2013 11:16 AM, Felipe Balbi wrote: > > Hi, > > > > On Mon, Jan 14, 2013 at 06:12:39PM +0800, Peter Chen wrote: > >> @@ -2756,22 +2753,41 @@ static int fsl_udc_otg_resume(struct device *dev) > >> > >>return fsl_udc_resume(NULL); > >> } > >> - > >> > >> /*- > >>Register entry point for the peripheral controller driver > >> > >> --*/ > >> - > >> +static const struct platform_device_id fsl_udc_devtype[] = { > >> + { > >> + .name = "imx-udc-mx25", > >> + .driver_data = IMX25_UDC, > >> + }, { > >> + .name = "imx-udc-mx27", > >> + .driver_data = IMX27_UDC, > >> + }, { > >> + .name = "imx-udc-mx31", > >> + .driver_data = IMX31_UDC, > >> + }, { > >> + .name = "imx-udc-mx35", > >> + .driver_data = IMX35_UDC, > >> + }, { > >> + .name = "imx-udc-mx51", > >> + .driver_data = IMX51_UDC, > >> + } > >> +}; > > > > I wonder if your driver-data is actually needed since you can use string > > comparisson to achieve the exact same outcome. > > Why use a string compare, if the kernel infrastructure already does this > for you? what do you mean ? What kernel infrastructure is doing waht for me ? -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 2/3] usb: fsl_mxc_udc: replace MX35_IO_ADDRESS to ioremap
On Mon, Jan 14, 2013 at 06:12:40PM +0800, Peter Chen wrote: > As mach/hardware.h is deleted, we can't visit platform code at driver. > It has no phy driver to combine with this controller, so it has to use > ioremap to map phy address as a workaround. > > Signed-off-by: Peter Chen > --- > drivers/usb/gadget/fsl_mxc_udc.c | 12 +++- > 1 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/gadget/fsl_mxc_udc.c > b/drivers/usb/gadget/fsl_mxc_udc.c > index 6df45f7..0e858e6 100644 > --- a/drivers/usb/gadget/fsl_mxc_udc.c > +++ b/drivers/usb/gadget/fsl_mxc_udc.c > @@ -23,7 +23,8 @@ static struct clk *mxc_per_clk; > static struct clk *mxc_ipg_clk; > > /* workaround ENGcm09152 for i.MX35 */ > -#define USBPHYCTRL_OTGBASE_OFFSET0x608 > +#define MX35_USBPHYCTRL_OFFSET 0x600 > +#define USBPHYCTRL_OTGBASE_OFFSET0x8 > #define USBPHYCTRL_EVDO (1 << 23) > > int fsl_udc_clk_init(enum fsl_udc_type devtype, struct platform_device *pdev) > @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, > struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; > if (devtype == IMX35_UDC) { > unsigned int v; > + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + > + MX35_USBPHYCTRL_OFFSET, 512); as I said before, this should be passed via struct resource, not pdata. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v3 1/3] usb: fsl-mxc-udc: replace cpu_is_xxx() with platform_device_id
Hi, On Mon, Jan 14, 2013 at 06:12:39PM +0800, Peter Chen wrote: > @@ -2756,22 +2753,41 @@ static int fsl_udc_otg_resume(struct device *dev) > > return fsl_udc_resume(NULL); > } > - > /*- > Register entry point for the peripheral controller driver > --*/ > - > +static const struct platform_device_id fsl_udc_devtype[] = { > + { > + .name = "imx-udc-mx25", > + .driver_data = IMX25_UDC, > + }, { > + .name = "imx-udc-mx27", > + .driver_data = IMX27_UDC, > + }, { > + .name = "imx-udc-mx31", > + .driver_data = IMX31_UDC, > + }, { > + .name = "imx-udc-mx35", > + .driver_data = IMX35_UDC, > + }, { > + .name = "imx-udc-mx51", > + .driver_data = IMX51_UDC, > + } > +}; I wonder if your driver-data is actually needed since you can use string comparisson to achieve the exact same outcome. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v2 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
On Mon, Jan 14, 2013 at 05:13:44PM +0800, Peter Chen wrote: > On Mon, Jan 14, 2013 at 10:50:27AM +0200, Felipe Balbi wrote: > > Hi, > > > > On Mon, Jan 14, 2013 at 04:17:35PM +0800, Peter Chen wrote: > > > On Mon, Jan 14, 2013 at 09:48:58AM +0200, Felipe Balbi wrote: > > > > Hi, > > > > > > > > On Mon, Jan 14, 2013 at 03:18:17PM +0800, Peter Chen wrote: > > > > > It changes the driver to use platform_device_id rather than cpu_is_xxx > > > > > to determine the SoC type, and updates the platform code accordingly. > > > > > > > > > > Compile ok at imx_v6_v7_defconfig with CONFIG_USB_FSL_USB2 enable. > > > > > Tested at mx51 bbg board, it works ok after enable phy clock > > > > > (Need another patch to fix this problem) > > > > > > > > > > Signed-off-by: Peter Chen > > > > > > > > not good for -rc. You have to break this down as you're solving at least > > > > three different problems with this patch. > > > > > > Felipe, all my changes are for this problem, these are fix build error and > > > let it work. > > > > > > arch/arm/mach-imx/clk-imx25.c |6 +- > > > arch/arm/mach-imx/clk-imx27.c |6 +- > > > arch/arm/mach-imx/clk-imx31.c |6 +- > > > arch/arm/mach-imx/clk-imx35.c |6 +- > > > arch/arm/mach-imx/clk-imx51-imx53.c |6 +- > > > > > > As we change the connection-id, we need to change clock file or > > > the devm_clk_get will be failed. > > > > right right, that's ok. > > > > > arch/arm/mach-imx/devices/devices-common.h|1 + > > > arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c | 15 +++--- > > > > > > We need to differentiate SoCs, so I use platform_device_id to > > > instead of cpu_ix_xxx(), this is for machine file change > > > > fair enough. > > > > > drivers/usb/gadget/fsl_mxc_udc.c | 23 + > > > drivers/usb/gadget/fsl_udc_core.c | 52 > > > +--- > > > drivers/usb/gadget/fsl_usb2_udc.h | 13 -- > > > include/linux/fsl_devices.h |8 +++ > > > > > > Need to get platform_device_id at driver, and replace the cpu_is_xxx to > > > platform_device_id. Meanwhile, needs a solution for replace > > > MX35_IO_ADDRESS. > > > > ok, here we go: > > > > You just listed to me three different fixes and each fix should be on a > > separate patch. Meaning that you should have one single patch to convert > > MX35_IO_ADDRESS() into ioremap(), another patch should be removing > > cpu_is_xxx() and the third one fixing connection-id. > > > > As you might remember, we want patches to be self-contained logical > > units and your patch contains 3 of such logical units. > > > > OK, three patches. Thanks. > > The reason I thought two patches is this build break contains two problems, > (MX35_IO_ADDRESS & cpu_is_xxx()). > I would like fix it together, in that case, the git bisect will only > show one build error at most. right, still those are two different problems, so they should be fixed in two separate patches, I'm sorry. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v2 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
Hi, On Mon, Jan 14, 2013 at 04:17:35PM +0800, Peter Chen wrote: > On Mon, Jan 14, 2013 at 09:48:58AM +0200, Felipe Balbi wrote: > > Hi, > > > > On Mon, Jan 14, 2013 at 03:18:17PM +0800, Peter Chen wrote: > > > It changes the driver to use platform_device_id rather than cpu_is_xxx > > > to determine the SoC type, and updates the platform code accordingly. > > > > > > Compile ok at imx_v6_v7_defconfig with CONFIG_USB_FSL_USB2 enable. > > > Tested at mx51 bbg board, it works ok after enable phy clock > > > (Need another patch to fix this problem) > > > > > > Signed-off-by: Peter Chen > > > > not good for -rc. You have to break this down as you're solving at least > > three different problems with this patch. > > Felipe, all my changes are for this problem, these are fix build error and > let it work. > > arch/arm/mach-imx/clk-imx25.c |6 +- > arch/arm/mach-imx/clk-imx27.c |6 +- > arch/arm/mach-imx/clk-imx31.c |6 +- > arch/arm/mach-imx/clk-imx35.c |6 +- > arch/arm/mach-imx/clk-imx51-imx53.c |6 +- > > As we change the connection-id, we need to change clock file or > the devm_clk_get will be failed. right right, that's ok. > arch/arm/mach-imx/devices/devices-common.h|1 + > arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c | 15 +++--- > > We need to differentiate SoCs, so I use platform_device_id to > instead of cpu_ix_xxx(), this is for machine file change fair enough. > drivers/usb/gadget/fsl_mxc_udc.c | 23 + > drivers/usb/gadget/fsl_udc_core.c | 52 +--- > drivers/usb/gadget/fsl_usb2_udc.h | 13 -- > include/linux/fsl_devices.h |8 +++ > > Need to get platform_device_id at driver, and replace the cpu_is_xxx to > platform_device_id. Meanwhile, needs a solution for replace > MX35_IO_ADDRESS. ok, here we go: You just listed to me three different fixes and each fix should be on a separate patch. Meaning that you should have one single patch to convert MX35_IO_ADDRESS() into ioremap(), another patch should be removing cpu_is_xxx() and the third one fixing connection-id. As you might remember, we want patches to be self-contained logical units and your patch contains 3 of such logical units. > > Besides there are parts which are not related to the build break. > > I can split this patch to two patches, one is driver part, the other is > machine part. It can also fix build break, but it needs two > patches to let the udc work. you will need as many patches as necessary, but they need to the broken correclty, the way you suggested above is wrong. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
On Mon, Jan 14, 2013 at 09:12:43AM +0800, Shawn Guo wrote: > Balbi, > > On Fri, Jan 11, 2013 at 02:50:59PM +0200, Felipe Balbi wrote: > > As I said before, this patch is too big for -rc and is unnecessary > > considering patch I wrote above. Note that there is no problems in > > checking if ULPI PHY clk is 60MHz on all arches and, for the workaround, > > you already have a runtime check. > > > Ok, I did not have these facts on my mind. If these are true, the > cpu_is_xxx() shouldn't be necessary there from the beginning, and we > can simply remove them then. > > > Shawn, it can be broken down into smaller pieces because you can *FIX > > THE COMPILE BREAKAGE* with a very small patch as above (only issue now > > is usage of MX32_IO_ADDRESS()). > > > The MX35_IO_ADDRESS() also seems unnecessary, since as Peter's patch > suggested that pdata->regs can be used instead. pdata->regs is a hack. The 'canonical' way to pass addresses to drivers is via struct resource. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH v2 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
Hi, On Mon, Jan 14, 2013 at 03:18:17PM +0800, Peter Chen wrote: > It changes the driver to use platform_device_id rather than cpu_is_xxx > to determine the SoC type, and updates the platform code accordingly. > > Compile ok at imx_v6_v7_defconfig with CONFIG_USB_FSL_USB2 enable. > Tested at mx51 bbg board, it works ok after enable phy clock > (Need another patch to fix this problem) > > Signed-off-by: Peter Chen not good for -rc. You have to break this down as you're solving at least three different problems with this patch. Besides there are parts which are not related to the build break. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
Hi, On Fri, Jan 11, 2013 at 05:56:28PM +0800, Peter Chen wrote: > It changes the driver to use platform_device_id rather than cpu_is_xxx > to determine the SoC type, and updates the platform code accordingly. > > Compile ok at imx_v6_v7_defconfig with CONFIG_USB_FSL_USB2 enable. > Tested at mx51 bbg board, it works ok after enable phy clock > (Need another patch to fix this problem) > > Signed-off-by: Peter Chen > --- > arch/arm/mach-imx/clk-imx25.c |6 +- > arch/arm/mach-imx/clk-imx27.c |6 +- > arch/arm/mach-imx/clk-imx31.c |6 +- > arch/arm/mach-imx/clk-imx35.c |6 +- > arch/arm/mach-imx/clk-imx51-imx53.c |6 +- > arch/arm/mach-imx/devices/devices-common.h|1 + > arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c | 15 +++--- > drivers/usb/gadget/fsl_mxc_udc.c | 17 +++ > drivers/usb/gadget/fsl_udc_core.c | 52 +--- > drivers/usb/gadget/fsl_usb2_udc.h | 13 -- > include/linux/fsl_devices.h |8 +++ > 11 files changed, 82 insertions(+), 54 deletions(-) > > diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c > index b197aa7..67e353d 100644 > --- a/arch/arm/mach-imx/clk-imx25.c > +++ b/arch/arm/mach-imx/clk-imx25.c > @@ -254,9 +254,9 @@ int __init mx25_clocks_init(void) > clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2"); > clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.2"); > clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2"); > - clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); > + clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx25"); > + clk_register_clkdev(clk[usbotg_ahb], "ahb", "imx-udc-mx25"); > + clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx25"); > clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0"); > /* i.mx25 has the i.mx35 type cspi */ > clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0"); > diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c > index 4c1d1e4..1ffe3b5 100644 > --- a/arch/arm/mach-imx/clk-imx27.c > +++ b/arch/arm/mach-imx/clk-imx27.c > @@ -236,9 +236,9 @@ int __init mx27_clocks_init(unsigned long fref) > clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); > clk_register_clkdev(clk[csi_ahb_gate], "ahb", "imx27-camera.0"); > clk_register_clkdev(clk[per4_gate], "per", "imx27-camera.0"); > - clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); > + clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27"); > + clk_register_clkdev(clk[usb_ipg_gate], "ipg", "imx-udc-mx27"); > + clk_register_clkdev(clk[usb_ahb_gate], "ahb", "imx-udc-mx27"); > clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0"); > clk_register_clkdev(clk[usb_ipg_gate], "ipg", "mxc-ehci.0"); > clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.0"); > diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c > index 8be64e0..ef66eaf 100644 > --- a/arch/arm/mach-imx/clk-imx31.c > +++ b/arch/arm/mach-imx/clk-imx31.c > @@ -139,9 +139,9 @@ int __init mx31_clocks_init(unsigned long fref) > clk_register_clkdev(clk[usb_div_post], "per", "mxc-ehci.2"); > clk_register_clkdev(clk[usb_gate], "ahb", "mxc-ehci.2"); > clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2"); > - clk_register_clkdev(clk[usb_div_post], "per", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usb_gate], "ahb", "fsl-usb2-udc"); > - clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); > + clk_register_clkdev(clk[usb_div_post], "per", "imx-udc-mx31"); > + clk_register_clkdev(clk[usb_gate], "ahb", "imx-udc-mx31"); > + clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx31"); > clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); > /* i.mx31 has the i.mx21 type uart */ > clk_register_clkdev(clk[uart1_gate], "per", "imx21-uart.0"); > diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c > index 66f3d65..69fe9c8 100644 > --- a/arch/arm/mach-imx/clk-imx35.c > +++ b/arch/arm/mach-imx/clk-imx35.c > @@ -251,9 +251,9 @@ int __init mx35_clocks_init() > clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2"); > clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2"); > clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.2"); > - clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); > - clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); > - clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc"); > + clk_register_clkdev(clk[usb_div]
Re: [PATCH 1/1] usb: fsl-mxc-udc: fix build error due to mach/hardware.h
Hi, On Fri, Jan 11, 2013 at 05:56:28PM +0800, Peter Chen wrote: > It changes the driver to use platform_device_id rather than cpu_is_xxx > to determine the SoC type, and updates the platform code accordingly. > > Compile ok at imx_v6_v7_defconfig with CONFIG_USB_FSL_USB2 enable. > Tested at mx51 bbg board, it works ok after enable phy clock > (Need another patch to fix this problem) > > Signed-off-by: Peter Chen this is too big for -rc, can you break it down into smaller pieces ? -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [BUILD BREAK] usb: gadget: fsl_mxc_udc can't compile on current v3.8-rc3
Hi, On Fri, Jan 11, 2013 at 09:24:16AM +, Li Yang-R58472 wrote: > > > > -Original Message- > > From: Felipe Balbi [mailto:ba...@ti.com] > > Sent: Friday, January 11, 2013 4:41 PM > > To: Chen Peter-B29397 > > Cc: ba...@ti.com; ker...@pengutronix.de; Li Yang-R58472; Greg KH; linux- > > u...@vger.kernel.org; linuxppc-dev@lists.ozlabs.org > > Subject: Re: [BUILD BREAK] usb: gadget: fsl_mxc_udc can't compile on > > current v3.8-rc3 > > > > Hi, > > > > On Fri, Jan 11, 2013 at 08:35:29AM +, Chen Peter-B29397 wrote: > > > > > I am working on it, but there are two versions, this one and > > chipidea's. > > > > > > > > > > Anyway, I will send a patch to fix this problem. > > > > > > > > if you're already using chipidea, then send me a patch removing this > > > > driver and focus your effort on chipidea. > > > > > > > Added Sascha > > > > > > Now, not all of FSL i.mx USB can move to use chipidea due to some > > > platform and USB PHY problem. > > > > then we need to target fixing those problems and moving to chipidea > > completely at some point. There's no reason to duplicate efforts if we > > already have a re-usable driver in tree, right ? > > > > Let's fix this build break and focus on making sure all i.MX platforms > > can use chipidea so we can drop fsl udc on next merge window. That would > > be a great patchset to see. > > I do agree that we need move to use the chipidea driver and eventually > remove the fsl udc driver, but there were many users of the current > driver such as PowerPC and Coldfire platforms besides the i.MX > platforms. The support for them with chipidea driver could also be > broken for now. I would suggest to have a transitional period that > both drivers are kept while new development be based on the new > driver. right, right. That can be done as long as 'transitional period' isn't 20 years. At least make a plan to remove fsl udc, if it doesn't happen in the next 4 merge windows, I will remove it myself to force people to reuse other drivers. There is no reason to keep both drivers around. > Added Ramneek. What do you think of the current status for chipidea > driver on PowerPC platforms? that would be great to know, indeed. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [BUILD BREAK] usb: gadget: fsl_mxc_udc can't compile on current v3.8-rc3
Hi, On Fri, Jan 11, 2013 at 08:35:29AM +, Chen Peter-B29397 wrote: > > > I am working on it, but there are two versions, this one and chipidea's. > > > > > > Anyway, I will send a patch to fix this problem. > > > > if you're already using chipidea, then send me a patch removing this > > driver and focus your effort on chipidea. > > > Added Sascha > > Now, not all of FSL i.mx USB can move to use chipidea due to some platform > and USB > PHY problem. then we need to target fixing those problems and moving to chipidea completely at some point. There's no reason to duplicate efforts if we already have a re-usable driver in tree, right ? Let's fix this build break and focus on making sure all i.MX platforms can use chipidea so we can drop fsl udc on next merge window. That would be a great patchset to see. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [BUILD BREAK] usb: gadget: fsl_mxc_udc can't compile on current v3.8-rc3
On Fri, Jan 11, 2013 at 03:23:59AM +, Chen Peter-B29397 wrote: > > > > > > > > > Some recent patch has caused fsl_mxc_udc.c driver to fail compilation > > > > because it can't find anymore. > > > > > > > > I would like this to be fixed still during this -rc cycle. > > > > > > Me too, who's sending a patch? :) > > > > Hi Peter, > > > > Who is currently working on the i.mx USB? > > > > I am working on it, but there are two versions, this one and chipidea's. > > Anyway, I will send a patch to fix this problem. if you're already using chipidea, then send me a patch removing this driver and focus your effort on chipidea. -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[BUILD BREAK] usb: gadget: fsl_mxc_udc can't compile on current v3.8-rc3
Hi, Some recent patch has caused fsl_mxc_udc.c driver to fail compilation because it can't find anymore. I would like this to be fixed still during this -rc cycle. Thank you -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 431/493] usb: remove use of __devexit
Hi, On Mon, Nov 19, 2012 at 01:26:20PM -0500, Bill Pemberton wrote: > CONFIG_HOTPLUG is going away as an option so __devexit is no > longer needed. > > Signed-off-by: Bill Pemberton > Cc: Peter Korsgaard > Cc: Alexander Shishkin > Cc: Felipe Balbi > Cc: Li Yang > Cc: Alan Stern > Cc: Wan ZongShun > Cc: Ben Dooks > Cc: Kukjin Kim > Cc: linux-...@vger.kernel.org > Cc: linux-o...@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: linux-arm-ker...@lists.infradead.org > Cc: linux-samsung-...@vger.kernel.org > --- > drivers/usb/c67x00/c67x00-drv.c | 2 +- > drivers/usb/chipidea/ci13xxx_imx.c | 2 +- > drivers/usb/chipidea/ci13xxx_msm.c | 2 +- > drivers/usb/chipidea/ci13xxx_pci.c | 2 +- > drivers/usb/chipidea/core.c | 2 +- > drivers/usb/chipidea/usbmisc_imx6q.c | 2 +- > drivers/usb/dwc3/core.c | 2 +- > drivers/usb/dwc3/debugfs.c | 2 +- > drivers/usb/dwc3/dwc3-exynos.c | 2 +- > drivers/usb/dwc3/dwc3-omap.c | 2 +- > drivers/usb/dwc3/dwc3-pci.c | 2 +- > drivers/usb/gadget/bcm63xx_udc.c | 2 +- > drivers/usb/gadget/fsl_qe_udc.c | 2 +- > drivers/usb/gadget/hid.c | 2 +- > drivers/usb/gadget/lpc32xx_udc.c | 2 +- > drivers/usb/gadget/mv_u3d_core.c | 2 +- > drivers/usb/gadget/mv_udc_core.c | 2 +- > drivers/usb/gadget/net2272.c | 10 +- > drivers/usb/gadget/omap_udc.c| 2 +- > drivers/usb/gadget/s3c-hsotg.c | 4 ++-- > drivers/usb/host/bcma-hcd.c | 2 +- > drivers/usb/host/ehci-atmel.c| 2 +- > drivers/usb/host/ehci-msm.c | 2 +- > drivers/usb/host/ehci-platform.c | 2 +- > drivers/usb/host/ehci-s5p.c | 2 +- > drivers/usb/host/ehci-w90x900.c | 2 +- > drivers/usb/host/fhci-hcd.c | 4 ++-- > drivers/usb/host/fsl-mph-dr-of.c | 4 ++-- > drivers/usb/host/isp1362-hcd.c | 2 +- > drivers/usb/host/isp1760-if.c| 2 +- > drivers/usb/host/ohci-at91.c | 6 +++--- > drivers/usb/host/ohci-exynos.c | 2 +- > drivers/usb/host/ohci-jz4740.c | 2 +- > drivers/usb/host/ohci-omap3.c| 2 +- > drivers/usb/host/ohci-platform.c | 2 +- > drivers/usb/host/ohci-s3c2410.c | 2 +- > drivers/usb/host/ohci-tmio.c | 2 +- > drivers/usb/host/r8a66597-hcd.c | 2 +- > drivers/usb/host/sl811-hcd.c | 2 +- > drivers/usb/host/ssb-hcd.c | 4 ++-- > drivers/usb/host/u132-hcd.c | 2 +- > drivers/usb/musb/am35x.c | 2 +- > drivers/usb/musb/blackfin.c | 2 +- > drivers/usb/musb/da8xx.c | 2 +- > drivers/usb/musb/davinci.c | 2 +- > drivers/usb/musb/musb_core.c | 2 +- > drivers/usb/musb/musb_dsps.c | 2 +- > drivers/usb/musb/omap2430.c | 2 +- > drivers/usb/musb/tusb6010.c | 2 +- > drivers/usb/musb/ux500.c | 2 +- > drivers/usb/otg/ab8500-usb.c | 2 +- > drivers/usb/otg/fsl_otg.c| 2 +- > drivers/usb/otg/msm_otg.c| 2 +- > drivers/usb/otg/mxs-phy.c| 2 +- > drivers/usb/otg/nop-usb-xceiv.c | 2 +- > drivers/usb/phy/omap-usb2.c | 2 +- > drivers/usb/phy/rcar-phy.c | 2 +- > drivers/usb/renesas_usbhs/common.c | 2 +- For drivers/usb/gadget, drivers/usb/dwc3/, drivers/usb/musb/, drivers/usb/otg/, drivers/usb/phy, and drivers/usb/renesas_usbhs: Acked-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 371/493] usb: remove use of __devinitconst
Hi, On Mon, Nov 19, 2012 at 01:25:20PM -0500, Bill Pemberton wrote: > CONFIG_HOTPLUG is going away as an option so __devinitconst is no > longer needed. > > Signed-off-by: Bill Pemberton > Cc: Li Yang > Cc: Felipe Balbi > Cc: linux-...@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > --- > drivers/usb/gadget/fsl_qe_udc.c | 2 +- > drivers/usb/host/bcma-hcd.c | 2 +- > drivers/usb/host/pci-quirks.c | 2 +- > drivers/usb/host/ssb-hcd.c | 2 +- > drivers/usb/musb/musb_dsps.c| 6 +++--- > 5 files changed, 7 insertions(+), 7 deletions(-) For drivers/usb/gadget, drivers/usb/musb/: Acked-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 159/493] usb: remove use of __devinit
Hi, On Mon, Nov 19, 2012 at 01:21:48PM -0500, Bill Pemberton wrote: > CONFIG_HOTPLUG is going away as an option so __devinit is no longer > needed. > > Signed-off-by: Bill Pemberton > Cc: Peter Korsgaard > Cc: Alexander Shishkin > Cc: Felipe Balbi > Cc: Li Yang > Cc: Alan Stern > Cc: Geoff Levand > Cc: Wan ZongShun > Cc: Olav Kongas > Cc: Lennert Buytenhek > Cc: Ben Dooks > Cc: Kukjin Kim > Cc: linux-...@vger.kernel.org > Cc: linux-o...@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: cbe-oss-...@lists.ozlabs.org > Cc: linux-arm-ker...@lists.infradead.org > Cc: linux-samsung-...@vger.kernel.org > --- > drivers/usb/c67x00/c67x00-drv.c | 2 +- > drivers/usb/chipidea/ci13xxx_imx.c | 2 +- > drivers/usb/chipidea/ci13xxx_msm.c | 2 +- > drivers/usb/chipidea/ci13xxx_pci.c | 2 +- > drivers/usb/chipidea/core.c | 2 +- > drivers/usb/chipidea/usbmisc_imx6q.c | 2 +- > drivers/usb/dwc3/core.c | 11 +-- > drivers/usb/dwc3/debugfs.c | 2 +- > drivers/usb/dwc3/dwc3-exynos.c | 4 ++-- > drivers/usb/dwc3/dwc3-omap.c | 4 ++-- > drivers/usb/dwc3/dwc3-pci.c | 4 ++-- > drivers/usb/dwc3/gadget.c| 4 ++-- > drivers/usb/gadget/at91_udc.c| 4 ++-- > drivers/usb/gadget/bcm63xx_udc.c | 2 +- > drivers/usb/gadget/f_uac2.c | 2 +- > drivers/usb/gadget/fsl_qe_udc.c | 8 > drivers/usb/gadget/mv_udc_core.c | 2 +- > drivers/usb/gadget/net2272.c | 13 ++--- > drivers/usb/gadget/omap_udc.c| 6 +++--- > drivers/usb/gadget/s3c-hsotg.c | 6 +++--- > drivers/usb/gadget/s3c-hsudc.c | 2 +- > drivers/usb/host/bcma-hcd.c | 9 - > drivers/usb/host/ehci-atmel.c| 2 +- > drivers/usb/host/ehci-grlib.c| 2 +- > drivers/usb/host/ehci-orion.c| 4 ++-- > drivers/usb/host/ehci-platform.c | 2 +- > drivers/usb/host/ehci-ppc-of.c | 4 ++-- > drivers/usb/host/ehci-ps3.c | 2 +- > drivers/usb/host/ehci-s5p.c | 2 +- > drivers/usb/host/ehci-w90x900.c | 4 ++-- > drivers/usb/host/ehci-xilinx-of.c| 2 +- > drivers/usb/host/fhci-hcd.c | 2 +- > drivers/usb/host/fsl-mph-dr-of.c | 8 > drivers/usb/host/imx21-hcd.c | 2 +- > drivers/usb/host/isp116x-hcd.c | 2 +- > drivers/usb/host/isp1362-hcd.c | 2 +- > drivers/usb/host/isp1760-if.c| 4 ++-- > drivers/usb/host/ohci-at91.c | 12 ++-- > drivers/usb/host/ohci-ep93xx.c | 2 +- > drivers/usb/host/ohci-exynos.c | 2 +- > drivers/usb/host/ohci-jz4740.c | 2 +- > drivers/usb/host/ohci-nxp.c | 4 ++-- > drivers/usb/host/ohci-octeon.c | 2 +- > drivers/usb/host/ohci-omap3.c| 2 +- > drivers/usb/host/ohci-pci.c | 2 +- > drivers/usb/host/ohci-platform.c | 2 +- > drivers/usb/host/ohci-ppc-of.c | 4 ++-- > drivers/usb/host/ohci-ps3.c | 4 ++-- > drivers/usb/host/ohci-pxa27x.c | 6 +++--- > drivers/usb/host/ohci-s3c2410.c | 2 +- > drivers/usb/host/ohci-sa.c | 2 +- > drivers/usb/host/ohci-spear.c| 2 +- > drivers/usb/host/ohci-tmio.c | 2 +- > drivers/usb/host/pci-quirks.c| 14 +++--- > drivers/usb/host/r8a66597-hcd.c | 2 +- > drivers/usb/host/sl811-hcd.c | 2 +- > drivers/usb/host/ssb-hcd.c | 11 +-- > drivers/usb/host/u132-hcd.c | 2 +- > drivers/usb/host/uhci-grlib.c| 2 +- > drivers/usb/host/uhci-platform.c | 2 +- > drivers/usb/musb/am35x.c | 2 +- > drivers/usb/musb/blackfin.c | 2 +- > drivers/usb/musb/cppi_dma.c | 3 +-- > drivers/usb/musb/da8xx.c | 2 +- > drivers/usb/musb/davinci.c | 2 +- > drivers/usb/musb/musb_core.c | 15 +++ > drivers/usb/musb/musb_debugfs.c | 2 +- > drivers/usb/musb/musb_dma.h | 3 +-- > drivers/usb/musb/musb_dsps.c | 4 ++-- > drivers/usb/musb/musb_gadget.c | 6 +++--- > drivers/usb/musb/musbhsdma.c | 3 +-- > drivers/usb/musb/omap2430.c | 2 +- > drivers/usb/musb/tusb6010.c | 2 +- > drivers/usb/musb/tusb6010_omap.c | 3 +-- > drivers/usb/musb/ux500.c | 2 +- > drivers/usb/musb/ux500_dma.c | 3 +-- > drivers/usb/otg/ab8500-usb.c | 2 +- > drivers/usb/otg/fsl_otg.c| 2 +- > drivers/usb/otg/isp1301_omap.c | 2 +- > drivers/usb/otg/nop-usb-xceiv.c | 2 +- > drivers/usb/otg/twl4030-usb.c| 2 +- > drivers/usb/
Re: [PATCH 119/493] usb: remove use of __devexit_p
Hi, On Mon, Nov 19, 2012 at 01:21:08PM -0500, Bill Pemberton wrote: > CONFIG_HOTPLUG is going away as an option so __devexit_p is no longer > needed. > > Signed-off-by: Bill Pemberton > Cc: Peter Korsgaard > Cc: Alexander Shishkin > Cc: Felipe Balbi > Cc: Li Yang > Cc: Alan Stern > Cc: Wan ZongShun > Cc: Ben Dooks > Cc: Kukjin Kim > Cc: linux-...@vger.kernel.org > Cc: linux-o...@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: linux-arm-ker...@lists.infradead.org > Cc: linux-samsung-...@vger.kernel.org > --- > drivers/usb/c67x00/c67x00-drv.c | 2 +- > drivers/usb/chipidea/ci13xxx_imx.c | 2 +- > drivers/usb/chipidea/ci13xxx_msm.c | 2 +- > drivers/usb/chipidea/ci13xxx_pci.c | 2 +- > drivers/usb/chipidea/core.c | 2 +- > drivers/usb/chipidea/usbmisc_imx6q.c | 2 +- > drivers/usb/dwc3/core.c | 2 +- > drivers/usb/dwc3/dwc3-exynos.c | 2 +- > drivers/usb/dwc3/dwc3-omap.c | 2 +- > drivers/usb/dwc3/dwc3-pci.c | 2 +- > drivers/usb/gadget/bcm63xx_udc.c | 2 +- > drivers/usb/gadget/fsl_qe_udc.c | 2 +- > drivers/usb/gadget/hid.c | 2 +- > drivers/usb/gadget/lpc32xx_udc.c | 2 +- > drivers/usb/gadget/net2272.c | 4 ++-- > drivers/usb/gadget/omap_udc.c| 2 +- > drivers/usb/gadget/s3c-hsotg.c | 2 +- > drivers/usb/host/bcma-hcd.c | 2 +- > drivers/usb/host/ehci-atmel.c| 2 +- > drivers/usb/host/ehci-msm.c | 2 +- > drivers/usb/host/ehci-platform.c | 2 +- > drivers/usb/host/ehci-s5p.c | 2 +- > drivers/usb/host/ehci-w90x900.c | 2 +- > drivers/usb/host/fhci-hcd.c | 2 +- > drivers/usb/host/fsl-mph-dr-of.c | 2 +- > drivers/usb/host/isp1362-hcd.c | 2 +- > drivers/usb/host/isp1760-if.c| 2 +- > drivers/usb/host/ohci-at91.c | 2 +- > drivers/usb/host/ohci-exynos.c | 2 +- > drivers/usb/host/ohci-jz4740.c | 2 +- > drivers/usb/host/ohci-omap3.c| 2 +- > drivers/usb/host/ohci-platform.c | 2 +- > drivers/usb/host/ohci-s3c2410.c | 2 +- > drivers/usb/host/ohci-tmio.c | 2 +- > drivers/usb/host/r8a66597-hcd.c | 2 +- > drivers/usb/host/sl811-hcd.c | 2 +- > drivers/usb/host/ssb-hcd.c | 2 +- > drivers/usb/host/u132-hcd.c | 2 +- > drivers/usb/musb/am35x.c | 2 +- > drivers/usb/musb/da8xx.c | 2 +- > drivers/usb/musb/davinci.c | 2 +- > drivers/usb/musb/musb_core.c | 2 +- > drivers/usb/musb/musb_dsps.c | 2 +- > drivers/usb/musb/omap2430.c | 2 +- > drivers/usb/musb/tusb6010.c | 2 +- > drivers/usb/musb/ux500.c | 2 +- > drivers/usb/otg/ab8500-usb.c | 2 +- > drivers/usb/otg/fsl_otg.c| 2 +- > drivers/usb/otg/msm_otg.c| 2 +- > drivers/usb/otg/mxs-phy.c| 2 +- > drivers/usb/otg/nop-usb-xceiv.c | 2 +- > drivers/usb/phy/mv_u3d_phy.c | 2 +- > drivers/usb/phy/omap-usb2.c | 2 +- > drivers/usb/phy/rcar-phy.c | 2 +- > drivers/usb/renesas_usbhs/common.c | 2 +- > 55 files changed, 56 insertions(+), 56 deletions(-) For drivers/usb/gadget, drivers/usb/dwc3/, drivers/usb/musb/, drivers/usb/otg/, drivers/usb/phy, and drivers/usb/renesas_usbhs: Acked-by: Felipe Balbi -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/3] usb: gadget: fsl_qe_udc: do not use tasklet_disable before tasklet_kill
Hi, On Wed, Oct 31, 2012 at 10:35:37PM +0800, Li Yang wrote: > On Wed, Oct 31, 2012 at 9:26 PM, Felipe Balbi wrote: > > On Wed, Oct 31, 2012 at 04:06:00PM +0800, Xiaotian Feng wrote: > >> If tasklet_disable() is called before related tasklet handled, > >> tasklet_kill will never be finished. tasklet_kill is enough. > > > > how did you test this ? Why changing FSL driver instead of switching > > over to chipidea which is supposed to be shared by every licensee of the > > chipidea core ? > > The QE UDC is an private controller that is not compatible with the > Chipidea core. thanks for the clarification, but you still haven't answered how you tested this ;-) -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/3] usb: gadget: fsl_qe_udc: do not use tasklet_disable before tasklet_kill
On Wed, Oct 31, 2012 at 04:06:00PM +0800, Xiaotian Feng wrote: > If tasklet_disable() is called before related tasklet handled, > tasklet_kill will never be finished. tasklet_kill is enough. how did you test this ? Why changing FSL driver instead of switching over to chipidea which is supposed to be shared by every licensee of the chipidea core ? > Signed-off-by: Xiaotian Feng > Cc: Li Yang > Cc: Felipe Balbi > Cc: Greg Kroah-Hartman > Cc: linux-...@vger.kernel.org > Cc: linuxppc-dev@lists.ozlabs.org > --- > drivers/usb/gadget/fsl_qe_udc.c |4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c > index b09452d..4ad3b82 100644 > --- a/drivers/usb/gadget/fsl_qe_udc.c > +++ b/drivers/usb/gadget/fsl_qe_udc.c > @@ -2661,7 +2661,7 @@ static int __devexit qe_udc_remove(struct > platform_device *ofdev) > usb_del_gadget_udc(&udc->gadget); > > udc->done = &done; > - tasklet_disable(&udc->rx_tasklet); > + tasklet_kill(&udc->rx_tasklet); > > if (udc->nullmap) { > dma_unmap_single(udc->gadget.dev.parent, > @@ -2698,8 +2698,6 @@ static int __devexit qe_udc_remove(struct > platform_device *ofdev) > free_irq(udc->usb_irq, udc); > irq_dispose_mapping(udc->usb_irq); > > - tasklet_kill(&udc->rx_tasklet); > - > iounmap(udc->usb_regs); > > device_unregister(&udc->gadget.dev); > -- > 1.7.9.5 > -- balbi signature.asc Description: Digital signature ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev