Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a07055a authored by Jarkko Nikula's avatar Jarkko Nikula Committed by Tony Lindgren
Browse files

ARM: OMAP: Fixes to omap_mcbsp_request function



Bootloader may let McBSP logic running so make sure that block is idle
before requesting IRQs. Also make sure that TX and RX waitqueues are
initialized before request_irq.

Signed-off-by: default avatarJarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 05228c35
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -234,8 +234,16 @@ int omap_mcbsp_request(unsigned int id)
	mcbsp->free = 0;
	spin_unlock(&mcbsp->lock);

	/*
	 * Make sure that transmitter, receiver and sample-rate generator are
	 * not running before activating IRQs.
	 */
	OMAP_MCBSP_WRITE(mcbsp->io_base, SPCR1, 0);
	OMAP_MCBSP_WRITE(mcbsp->io_base, SPCR2, 0);

	if (mcbsp->io_type == OMAP_MCBSP_IRQ_IO) {
		/* We need to get IRQs here */
		init_completion(&mcbsp->tx_irq_completion);
		err = request_irq(mcbsp->tx_irq, omap_mcbsp_tx_irq_handler,
					0, "McBSP", (void *)mcbsp);
		if (err != 0) {
@@ -245,8 +253,7 @@ int omap_mcbsp_request(unsigned int id)
			return err;
		}

		init_completion(&mcbsp->tx_irq_completion);

		init_completion(&mcbsp->rx_irq_completion);
		err = request_irq(mcbsp->rx_irq, omap_mcbsp_rx_irq_handler,
					0, "McBSP", (void *)mcbsp);
		if (err != 0) {
@@ -256,8 +263,6 @@ int omap_mcbsp_request(unsigned int id)
			free_irq(mcbsp->tx_irq, (void *)mcbsp);
			return err;
		}

		init_completion(&mcbsp->rx_irq_completion);
	}

	return 0;