diff mbox series

[2/2] ASoC: codecs: ad193x: Reset DAC Control 1 register at probe

Message ID 20190626104947.26547-2-codrin.ciubotariu@microchip.com (mailing list archive)
State New, archived
Headers show
Series [1/2] ASoC: codecs: ad193x: Fix memory corruption on BE 64b systems | expand

Commit Message

Codrin Ciubotariu June 26, 2019, 10:49 a.m. UTC
Since the ad193x codecs have no software reset, we have to reinitialize the
registers after a hardware reset. For example, if we change the
device-tree between these resets, changing the audio format of the DAI link
from DSP_A with 8 TDM channels to I2S 2 channels, DAC Control 1 register
will remain configured for 8 channels. This patch resets this register at
probe to its default value.

Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
---
 sound/soc/codecs/ad193x.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Mark Brown June 26, 2019, 11:23 a.m. UTC | #1
On Wed, Jun 26, 2019 at 01:49:47PM +0300, Codrin Ciubotariu wrote:
> Since the ad193x codecs have no software reset, we have to reinitialize the
> registers after a hardware reset. For example, if we change the
> device-tree between these resets, changing the audio format of the DAI link
> from DSP_A with 8 TDM channels to I2S 2 channels, DAC Control 1 register
> will remain configured for 8 channels. This patch resets this register at
> probe to its default value.

Would it not be more robust/complete to have a set of register defaults
and write the whole lot out rather than individually going through and
adding writes for specific registers as needed?
Codrin Ciubotariu June 26, 2019, 12:16 p.m. UTC | #2
On 26.06.2019 14:23, Mark Brown wrote:
> On Wed, Jun 26, 2019 at 01:49:47PM +0300, Codrin Ciubotariu wrote:
>> Since the ad193x codecs have no software reset, we have to reinitialize the
>> registers after a hardware reset. For example, if we change the
>> device-tree between these resets, changing the audio format of the DAI link
>> from DSP_A with 8 TDM channels to I2S 2 channels, DAC Control 1 register
>> will remain configured for 8 channels. This patch resets this register at
>> probe to its default value.
> 
> Would it not be more robust/complete to have a set of register defaults
> and write the whole lot out rather than individually going through and
> adding writes for specific registers as needed?
> 

It would indeed. I will make two patches, one that implements what you 
suggested, for the registers that we touch only, and another one that 
will add AD193X_DAC_CTRL1 to these defaults. You can drop this patch.

Thanks and best regards,
Codrin
diff mbox series

Patch

diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index 3ebc0524f4b2..cda435562a1d 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -427,6 +427,8 @@  static int ad193x_component_probe(struct snd_soc_component *component)
 	regmap_write(ad193x->regmap, AD193X_DAC_CTRL2, 0x1A);
 	/* dac in tdm mode */
 	regmap_write(ad193x->regmap, AD193X_DAC_CTRL0, 0x40);
+	/* reset DAC ctrl1 */
+	regmap_write(ad193x->regmap, AD193X_DAC_CTRL1, 0x00);
 
 	/* adc only */
 	if (ad193x_has_adc(ad193x)) {