ASoC: sun4i-i2s: Fix setting of FIFO modes
Because SUN4I_I2S_FIFO_CTRL_REG is volatile, writes done while the regmap is cache-only are ignored. To work around this, move the configuration to a callback that runs while the ASoC core has a runtime PM reference to the device. Signed-off-by: Samuel Holland <samuel@sholland.org> Reviewed-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <mripard@kernel.org> Signed-off-by: Clément Péron <peron.clem@gmail.com> Link: https://lore.kernel.org/r/20201030144648.397824-9-peron.clem@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
64359246ab
commit
38d7adc0a0
@ -596,6 +596,13 @@ static int sun4i_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Set significant bits in our FIFOs */
|
||||
regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
|
||||
SUN4I_I2S_FIFO_CTRL_TX_MODE_MASK |
|
||||
SUN4I_I2S_FIFO_CTRL_RX_MODE_MASK,
|
||||
SUN4I_I2S_FIFO_CTRL_TX_MODE(1) |
|
||||
SUN4I_I2S_FIFO_CTRL_RX_MODE(1));
|
||||
|
||||
switch (params_physical_width(params)) {
|
||||
case 16:
|
||||
width = DMA_SLAVE_BUSWIDTH_2_BYTES;
|
||||
@ -924,13 +931,6 @@ static int sun4i_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Set significant bits in our FIFOs */
|
||||
regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
|
||||
SUN4I_I2S_FIFO_CTRL_TX_MODE_MASK |
|
||||
SUN4I_I2S_FIFO_CTRL_RX_MODE_MASK,
|
||||
SUN4I_I2S_FIFO_CTRL_TX_MODE(1) |
|
||||
SUN4I_I2S_FIFO_CTRL_RX_MODE(1));
|
||||
|
||||
i2s->format = fmt;
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user