Skip to content

Commit

Permalink
usb: renesas_usbhs: fifo: request DMAEngine once
Browse files Browse the repository at this point in the history
DMAEngine uses IRQ if dma_request_channel() was called,
and it is using devm_request_irq() today,
OTOH, dma_request_channel() will be called when each
USB connection happened on this driver.
This means same IRQ will be requested many times
whenever each USB connected,
and this IRQ isn't freed when USB disconnected.
Request DMAEngine once.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Kuninori Morimoto authored and Felipe Balbi committed Dec 12, 2013
1 parent 25acdd0 commit 1b2e21b
Showing 1 changed file with 4 additions and 14 deletions.
18 changes: 4 additions & 14 deletions drivers/usb/renesas_usbhs/fifo.c
Original file line number Diff line number Diff line change
Expand Up @@ -1124,19 +1124,8 @@ void usbhs_fifo_init(struct usbhs_priv *priv)
mod->irq_brdysts = 0;

cfifo->pipe = NULL;
cfifo->tx_chan = NULL;
cfifo->rx_chan = NULL;

d0fifo->pipe = NULL;
d0fifo->tx_chan = NULL;
d0fifo->rx_chan = NULL;

d1fifo->pipe = NULL;
d1fifo->tx_chan = NULL;
d1fifo->rx_chan = NULL;

usbhsf_dma_init(priv, usbhsf_get_d0fifo(priv));
usbhsf_dma_init(priv, usbhsf_get_d1fifo(priv));
}

void usbhs_fifo_quit(struct usbhs_priv *priv)
Expand All @@ -1147,9 +1136,6 @@ void usbhs_fifo_quit(struct usbhs_priv *priv)
mod->irq_ready = NULL;
mod->irq_bempsts = 0;
mod->irq_brdysts = 0;

usbhsf_dma_quit(priv, usbhsf_get_d0fifo(priv));
usbhsf_dma_quit(priv, usbhsf_get_d1fifo(priv));
}

int usbhs_fifo_probe(struct usbhs_priv *priv)
Expand All @@ -1171,6 +1157,7 @@ int usbhs_fifo_probe(struct usbhs_priv *priv)
fifo->ctr = D0FIFOCTR;
fifo->tx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d0_tx_id);
fifo->rx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d0_rx_id);
usbhsf_dma_init(priv, fifo);

/* D1FIFO */
fifo = usbhsf_get_d1fifo(priv);
Expand All @@ -1180,10 +1167,13 @@ int usbhs_fifo_probe(struct usbhs_priv *priv)
fifo->ctr = D1FIFOCTR;
fifo->tx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d1_tx_id);
fifo->rx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d1_rx_id);
usbhsf_dma_init(priv, fifo);

return 0;
}

void usbhs_fifo_remove(struct usbhs_priv *priv)
{
usbhsf_dma_quit(priv, usbhsf_get_d0fifo(priv));
usbhsf_dma_quit(priv, usbhsf_get_d1fifo(priv));
}

0 comments on commit 1b2e21b

Please sign in to comment.