Commit 7e885d21 authored by John Keeping's avatar John Keeping Committed by Mark Brown
Browse files

ASoC: rockchip: Revert "ASoC: rockchip: i2s: separate capture and playback"



This reverts commit eba65d17.

This broke audio on Veyron Jerry Chromebooks and I now cannot reproduce
the problem I was trying to fix even with this commit reverted, so it
seems that this was completely the wrong thing to do.

Reported-by: default avatarEnric Balletbo Serra <eballetbo@gmail.com>
Signed-off-by: default avatarJohn Keeping <john@metanate.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent a6e806c4
Loading
Loading
Loading
Loading
+40 −32
Original line number Original line Diff line number Diff line
@@ -82,8 +82,8 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
				   I2S_DMACR_TDE_ENABLE, I2S_DMACR_TDE_ENABLE);
				   I2S_DMACR_TDE_ENABLE, I2S_DMACR_TDE_ENABLE);


		regmap_update_bits(i2s->regmap, I2S_XFER,
		regmap_update_bits(i2s->regmap, I2S_XFER,
				   I2S_XFER_TXS_START,
				   I2S_XFER_TXS_START | I2S_XFER_RXS_START,
				   I2S_XFER_TXS_START);
				   I2S_XFER_TXS_START | I2S_XFER_RXS_START);


		i2s->tx_start = true;
		i2s->tx_start = true;
	} else {
	} else {
@@ -92,18 +92,21 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
		regmap_update_bits(i2s->regmap, I2S_DMACR,
		regmap_update_bits(i2s->regmap, I2S_DMACR,
				   I2S_DMACR_TDE_ENABLE, I2S_DMACR_TDE_DISABLE);
				   I2S_DMACR_TDE_ENABLE, I2S_DMACR_TDE_DISABLE);


		if (!i2s->rx_start) {
			regmap_update_bits(i2s->regmap, I2S_XFER,
			regmap_update_bits(i2s->regmap, I2S_XFER,
				   I2S_XFER_TXS_START,
					   I2S_XFER_TXS_START |
				   I2S_XFER_TXS_STOP);
					   I2S_XFER_RXS_START,
					   I2S_XFER_TXS_STOP |
					   I2S_XFER_RXS_STOP);


			regmap_update_bits(i2s->regmap, I2S_CLR,
			regmap_update_bits(i2s->regmap, I2S_CLR,
				   I2S_CLR_TXC,
					   I2S_CLR_TXC | I2S_CLR_RXC,
				   I2S_CLR_TXC);
					   I2S_CLR_TXC | I2S_CLR_RXC);


			regmap_read(i2s->regmap, I2S_CLR, &val);
			regmap_read(i2s->regmap, I2S_CLR, &val);


			/* Should wait for clear operation to finish */
			/* Should wait for clear operation to finish */
		while (val & I2S_CLR_TXC) {
			while (val) {
				regmap_read(i2s->regmap, I2S_CLR, &val);
				regmap_read(i2s->regmap, I2S_CLR, &val);
				retry--;
				retry--;
				if (!retry) {
				if (!retry) {
@@ -113,6 +116,7 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
			}
			}
		}
		}
	}
	}
}


static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
{
{
@@ -124,8 +128,8 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
				   I2S_DMACR_RDE_ENABLE, I2S_DMACR_RDE_ENABLE);
				   I2S_DMACR_RDE_ENABLE, I2S_DMACR_RDE_ENABLE);


		regmap_update_bits(i2s->regmap, I2S_XFER,
		regmap_update_bits(i2s->regmap, I2S_XFER,
				   I2S_XFER_RXS_START,
				   I2S_XFER_TXS_START | I2S_XFER_RXS_START,
				   I2S_XFER_RXS_START);
				   I2S_XFER_TXS_START | I2S_XFER_RXS_START);


		i2s->rx_start = true;
		i2s->rx_start = true;
	} else {
	} else {
@@ -134,18 +138,21 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
		regmap_update_bits(i2s->regmap, I2S_DMACR,
		regmap_update_bits(i2s->regmap, I2S_DMACR,
				   I2S_DMACR_RDE_ENABLE, I2S_DMACR_RDE_DISABLE);
				   I2S_DMACR_RDE_ENABLE, I2S_DMACR_RDE_DISABLE);


		if (!i2s->tx_start) {
			regmap_update_bits(i2s->regmap, I2S_XFER,
			regmap_update_bits(i2s->regmap, I2S_XFER,
					   I2S_XFER_TXS_START |
					   I2S_XFER_RXS_START,
					   I2S_XFER_RXS_START,
					   I2S_XFER_TXS_STOP |
					   I2S_XFER_RXS_STOP);
					   I2S_XFER_RXS_STOP);


			regmap_update_bits(i2s->regmap, I2S_CLR,
			regmap_update_bits(i2s->regmap, I2S_CLR,
				   I2S_CLR_RXC,
					   I2S_CLR_TXC | I2S_CLR_RXC,
				   I2S_CLR_RXC);
					   I2S_CLR_TXC | I2S_CLR_RXC);


			regmap_read(i2s->regmap, I2S_CLR, &val);
			regmap_read(i2s->regmap, I2S_CLR, &val);


			/* Should wait for clear operation to finish */
			/* Should wait for clear operation to finish */
		while (val & I2S_CLR_RXC) {
			while (val) {
				regmap_read(i2s->regmap, I2S_CLR, &val);
				regmap_read(i2s->regmap, I2S_CLR, &val);
				retry--;
				retry--;
				if (!retry) {
				if (!retry) {
@@ -155,6 +162,7 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
			}
			}
		}
		}
	}
	}
}


static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
				unsigned int fmt)
				unsigned int fmt)