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)
        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)
        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);
        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));
 }