usb: musb: host: release dma channels if no active io
Currently DMA channels are allocated and they remain allocated even if there is no active data transfer. Added channel_release() whenever there is no pending request. Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
d7dbdb5e5f
commit
8c778db9f0
|
@ -375,11 +375,21 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb,
|
||||||
*/
|
*/
|
||||||
if (list_empty(&qh->hep->urb_list)) {
|
if (list_empty(&qh->hep->urb_list)) {
|
||||||
struct list_head *head;
|
struct list_head *head;
|
||||||
|
struct dma_controller *dma = musb->dma_controller;
|
||||||
|
|
||||||
if (is_in)
|
if (is_in) {
|
||||||
ep->rx_reinit = 1;
|
ep->rx_reinit = 1;
|
||||||
else
|
if (ep->rx_channel) {
|
||||||
|
dma->channel_release(ep->rx_channel);
|
||||||
|
ep->rx_channel = NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
ep->tx_reinit = 1;
|
ep->tx_reinit = 1;
|
||||||
|
if (ep->tx_channel) {
|
||||||
|
dma->channel_release(ep->tx_channel);
|
||||||
|
ep->tx_channel = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Clobber old pointers to this qh */
|
/* Clobber old pointers to this qh */
|
||||||
musb_ep_set_qh(ep, is_in, NULL);
|
musb_ep_set_qh(ep, is_in, NULL);
|
||||||
|
|
Loading…
Reference in New Issue