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 |
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?
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 --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)) {
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(+)