CyU3PDmaChannelSetSuspend on active, but non-busy, USB egress socket? | Cypress Semiconductor
CyU3PDmaChannelSetSuspend on active, but non-busy, USB egress socket?
I am trying to use the DMA suspend/resume API to work around the FX3 silicon bug that causes incorrect PIDs to go out on ZLPs for high-bandwidth isochronous endpoints (http://www.cypress.com/?app=forum&id=167&rID=62980). This is for UVC, so the DMA channel is configured as TYPE_MANUAL.
In my DMA callback, at a point where I know there are no packets pending for USB transmission (i.e. the video stream has temporarily "bottomed out" and there is a risk of ZLPs being sent), I call
CyU3PDmaChannelSetSuspend( CY_U3P_DMA_SCK_SUSP_NONE, CY_U3P_DMA_SCK_SUSP_CUR_BUF)
Based on the API documentation I expect to receive a DMA callback of type CY_U3P_DMA_CB_CONS_SUSP, but one never comes.
Is it not possible to suspend a MANUAL socket that is active but effectively idle? Does the HW require a DMA buffer to be committed before it will honor the suspend request? The documentation is fuzzy on this point, and I don't see any examples relating to DMA suspend/resume.