aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/chipidea/udc.c
AgeCommit message (Collapse)AuthorFilesLines
2013-03-30usb: chipidea: big-endian supportSvetoslav Neykov1-28/+31
Convert between big-endian and little-endian format when accessing the usb controller structures which are little-endian by specification. Fix cases where the little-endian memory layout is taken for granted. The patch doesn't have any effect on the already supported little-endian architectures. Signed-off-by: Svetoslav Neykov <[email protected]> [Alex: minor cosmetic fixes] Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-30usb: chipidea: don't redefine __ffs()Felipe Balbi1-6/+6
chipidea's ffs_nr() is pretty much what __ffs() does. Use that one instead. Signed-off-by: Felipe Balbi <[email protected]> [rebased on top of debug infrastructure rework] Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-30usb: chipidea: move debug files creation/removal to the coreAlexander Shishkin1-8/+1
Create and remove debugfs entries in hdrc probe/remove instead of start/stop of the device controller. Gadget specific will not export anything while the controller is in host mode. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-30usb: chipidea: convert debug entries in sysfs to debugfsAlexander Shishkin1-3/+3
Currently, we have a bunch of files in sysfs that display all sorts of debugging information for the device controller, so they have to move to debugfs where they belong. The "registers" interface have been removed, since it doesn't fit into the current driver design as is and it's hardly a good idea to touch the registers from userspace anyway. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-30usb: chipidea: remove home-grown tracing facilityAlexander Shishkin1-32/+1
As part of the legacy from the original driver design, we retain home-grown tracing infrastructure, complete with own ring buffer and timestamps, which among other things has a performance penalty. This patch removes it. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-29Revert "USB: chipidea: add vbus detect for udc"Peter Chen1-38/+1
There are several problems with this patch: + in introduces a sparse warning for a condition that's always negative, + and because of that, it actually doesn't do anything useful, + and vbus detection belongs to otg, not device function anyway. This reverts commit 8c4fc031954b4eb72daf13d3c907a985a3eee208. Signed-off-by: Peter Chen <[email protected]> [Alex: amended the above text] Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-29usb: chipidea: trim include list in udc codeAlexander Shishkin1-7/+1
Some headers included in udc core code are not actually needed, remove them and add irqreturn.h, which was implicitly included via irq.h. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2013-03-18usb: chipidea: udc: don't assign gadget.dev.release directlyFelipe Balbi1-12/+0
udc-core provides a better way to handle release methods, let's use it. Signed-off-by: Felipe Balbi <[email protected]>
2013-03-18usb: gadget: chipidea: remove unnecessary initializationsFelipe Balbi1-3/+0
udc-core now sets dma-related and parent fields for us, we don't need to do it ourselves. Signed-off-by: Felipe Balbi <[email protected]>
2013-03-18usb: gadget: drop now unnecessary flagFelipe Balbi1-1/+0
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 <[email protected]>
2013-03-18usb: chipidea: let udc-core manage gadget->devFelipe Balbi1-11/+2
By simply setting a flag, we can drop some boilerplate code. Signed-off-by: Felipe Balbi <[email protected]>
2013-03-04usb: chipidea: register debugging sysfs on our deviceFelipe Balbi1-3/+3
Don't register anything non-generic under the gadget's device as we don't really *own* it. Signed-off-by: Felipe Balbi <[email protected]>
2012-09-12USB: chipidea: add vbus detect for udcRichard Zhao1-1/+38
Using vbus valid interrupt to detect vbus. Tested-by: Michael Grzeschik <[email protected]> Tested-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Richard Zhao <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-09-12usb: chipidea: udc: don't stall endpoint if request list is empty in ↵Michael Grzeschik1-4/+1
isr_tr_complete_low When attaching an imx28 or imx53 in USB gadget mode to a Windows host and starting a rndis connection we see this message every 4-10 seconds: g_ether gadget: high speed config #2: RNDIS Analysis shows that each time this message is printed, the rndis connection is re-establish due to a reset because of a stalled endpoint (ep 0, dir 1). The endpoint is stalled because the reqeust complete bit on that endpoint is set, but in isr_tr_complete_low() the endpoint request list (mEp->qh.queue) is empty. This patch removed this check, because the code doesn't take the following situation into account: The loop over all endpoints in isr_tr_complete_handler() will call ep_nuke() on both ep0/dir0 and ep/dir1 in the first loop. Pending reqeusts will be flushed and completed here. There seems to be a race condition, the request is nuked, but the request complete bit will be set, too. The subsequent check (in ep0/dir1's loop cycle) for endpoint request list (mEp->qh.queue) empty will fail. Both other mainline chipidea drivers (mv_udc_core.c and fsl_udc_core.c) don't have this check. Cc: stable <[email protected]> Signed-off-by: Michael Grzeschik <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-09-12usb: chipidea: cleanup dma_pool if udc_start() failsMarc Kleine-Budde1-8/+15
If udc_start() fails the qh_pool dma-pool cannot be closed because it's still in use. This patch factors out the dma_pool_free() loop into destroy_eps() and calls it in the error path of udc_start(), too. Cc: stable <[email protected]> Reviewed-by: Richard Zhao <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-09-12usb: chipidea: udc: fix error path in udc_start()Marc Kleine-Budde1-1/+1
This patch fixes the error path of udc_start(). Now NULL is used to unset the peripheral with otg_set_peripheral(). Cc: stable <[email protected]> Reviewed-by: Richard Zhao <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-09-12usb: chipidea: udc: add pullup fuction, needed by the uvc gadgetMichael Grzeschik1-4/+17
Add function to physicaly enable or disable of pullup connection on the USB-D+ line. The uvc gaget will fail, if this function is not implemented. Cc: stable <[email protected]> Signed-off-by: Michael Grzeschik <[email protected]> Acked-by: Felipe Balbi <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-09-12usb: chipidea: udc: fix setup of endpoint maxpacket sizeMichael Grzeschik1-1/+7
This patch changes the setup of the endpoint maxpacket size. All non control endpoints are initialized with an undefined ((unsigned short)~0) maxpacket size. The maxpacket size of Endpoint 0 will be kept at CTRL_PAYLOAD_MAX. Some gadget drivers check for the maxpacket size before they enable the endpoint, which leads to a wrong state in these drivers. Cc: stable <[email protected]> Signed-off-by: Michael Grzeschik <[email protected]> Acked-by: Felipe Balbi <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-07-09usb: chipidea: permit driver bindings pass phy pointerRichard Zhao1-4/+7
Sometimes, the driver bindings may know what phy they use. For example, when using device tree, the usb controller may have a phandler pointing to usb phy. Signed-off-by: Richard Zhao <[email protected]> Reviewed-by: Marek Vasut <[email protected]> Acked-by: Felipe Balbi <[email protected]> Tested-by: Subodh Nijsure <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-07-09USB: Chipidea: rename struct ci13xxx variables from udc to ciRichard Zhao1-314/+314
struct ci13xxx represent the controller, which may be device or host, so name its variables as ci. Signed-off-by: Richard Zhao <[email protected]> Reviewed-by: Felipe Balbi <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Reviewed-by: Marek Vasut <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-07-06USB: Chipidea: rename struct ci13xxx_udc_driver to struct ci13xxx_platform_dataRichard Zhao1-12/+12
This patch rename struct ci13xxx_udc_driver and var with the type. ci13xxx_platform_data reflect it's passed from platfrom driver. Signed-off-by: Richard Zhao <[email protected]> Reviewed-by: Felipe Balbi <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-07-06usb: chipidea: remove unneeded NULL checkAlexander Shishkin1-3/+0
As reported by Dan Carpenter, there is a NULL check in udc_start() that follows a dereference of the pointer that's being checked. However, at that point udc pointer shouldn't ever be NULL and if it is, the dereference should cause an oops. Signed-off-by: Alexander Shishkin <[email protected]> Reported-by: Dan Carpenter <[email protected]> Acked-by: Felipe Balbi <[email protected]> Signed-off-by: Richard Zhao <[email protected]> Acked-by: Marek Vasut <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-07-02usb: phy: fix return value check of usb_get_phyKishon Vijay Abraham I1-4/+5
usb_get_phy will return -ENODEV if it's not able to find the phy. Hence fixed all the callers of usb_get_phy to check for this error condition instead of relying on a non-zero value as success condition. Signed-off-by: Kishon Vijay Abraham I <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2012-06-25usb: otg: support for multiple transceivers by a single controllerKishon Vijay Abraham I1-1/+1
Add a linked list for keeping multiple PHY instances with different types so that we can have separate USB2 and USB3 PHYs on one single board. _get_phy_ has been changed so that the controller gets the transceiver by type. _remove_phy_ has been added to let the phy be removed from the phy list. Signed-off-by: Kishon Vijay Abraham I <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2012-06-25usb: otg: utils: rename function name in OTG utilsKishon Vijay Abraham I1-4/+4
_transceiver() in otg.c is replaced with _phy. usb_set_transceiver is replaced with usb_add_phy to make it similar to other usb standard function names like usb_add_hcd. Signed-off-by: Kishon Vijay Abraham I <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
2012-05-11usb: chipidea: drop unused field "device" from ci13xxx_epAlexander Shishkin1-1/+0
It was used as a shorthand for gadget's device in request mapping/unmapping code, but now it's not used any more. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: use generic map/unmap routinesAlexander Shishkin1-32/+10
We're one of the remaining drivers to map/unmap requests by hand. Switch to using generic gadget routines for that instead. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: add host roleAlexander Shishkin1-4/+4
This adds EHCI host support to the chipidea driver. We want it to be part of the hdrc driver and not a standalone (sub-)driver module, as the structure of ehci-hcd.c suggests, so for chipidea controller we hack it to not provide platform-related code, but only the ehci hcd. The ehci-platform driver won't work for us here too, because the controller uses the same registers for both device and host mode and also otg-related bits, so it's not really possible to put ehci registers into a separate resource. This is not a pretty solution, but the alternative is exporting symbols from the chipidea driver to a ehci-chipidea driver and doing all the module refcounting. Signed-off-by: Alexander Shishkin <[email protected]> Cc: Alan Stern <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: use common definition for USBMODE bitsAlexander Shishkin1-1/+1
Some of the bits of USBMODE register are defined in <usb/ehci_def.h>, use them instead of having our own definitions. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: drop redundant NULL checkAlexander Shishkin1-3/+0
Currently, gadget can't be NULL in _gadget_stop_activity(). Signed-off-by: Alexander Shishkin <[email protected]> Reported-by: Michael Grzeschik <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: isr_reset_handler fix missing lockingMichael Grzeschik1-1/+1
Move spin_lock under the done label, so the lock will also be pulled in the error paths. Signed-off-by: Michael Grzeschik <[email protected]> [rebased on top of the patchset] Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: add support for rolesAlexander Shishkin1-41/+39
Add some generic code for roles and implement simple role switching based on ID pin state and/or a sysfs file. At this, we also rename the device to ci_hdrc, which is what it is. The "manual" switch is made into a sysfs file and not debugfs, because it might be useful even in non-debug context. For some boards, like sheevaplug, it seems to be the only way to switch roles without modifying the hardware, since the ID pin is always grounded. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
2012-05-11usb: chipidea: split the driver code into unitsAlexander Shishkin1-0/+1837
Split the driver into the following parts: * core -- resources, register access, capabilities, etc; * udc -- device controller functionality; * debug -- logging events. Signed-off-by: Alexander Shishkin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>