Hi, On 2018-01-15 20:55, Tony Lindgren wrote: > * Mark Brown <broonie@xxxxxxxxxx> [180115 18:14]: >> On Mon, Jan 15, 2018 at 10:06:26AM -0800, Tony Lindgren wrote: >>> * Mark Brown <broonie@xxxxxxxxxx> [180115 17:56]: >> >>>> Sorry, I didn't actually post it - just suggested adding the >>>> snd_soc_codec_set_regmap() call. >> >>> Oh I see. Yeah that seems like a good long term solution after >>> the regressions are fixed. >> >> I would like to see us do that sooner rather than later assuming it >> addresses the issue, it's quicker and simpler. > > Peter, can you take a look at that? Sorry I have missed the thread... > > Meanwhile, here's a regression fix for Linux next for twl4030 > and 6040 drivers. The .read and the .write in snd_soc_codec_driver is needed. Without it DAPM can not read/write to registers when we have codec driver which does not have regmap. twl4030/6040 is an MFD device and the regmap is owned by the mfd driver, the codec, vibra, gpio, clk, etc sub devices are using callbacks to do IO. I will look at the local caching, but afaik it was needed and can not be done in regmap or mfd level. I will also take a look at the dac33 driver to see if it is broken, but I don't have Nokia n9/n950 where I could test it. Acked-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx> > > Regards, > > Tony > > 8< --------------------- > From tony Mon Sep 17 00:00:00 2001 > From: Tony Lindgren <tony@xxxxxxxxxxx> > Date: Fri, 12 Jan 2018 10:24:36 -0800 > Subject: [PATCH] ASoC: Fix twl4030 and 6040 regression by adding back read > and write > > Commit 3bb0f7c31b1a ("ASoC: don't use snd_soc_write/read on twl4030") > caused regressions for both twl4030 and twl6040 as it assumes the > ASoC driver is using regmap. As a side effect, this also causes a > considerable increase in idle power consumption omap3 boards using > twl4030 as the PMIC. > > This is because the removal of read and write function pointers > causes some of the ASoC IO functions to not do anything. For example, > snd_soc_register_card() calls snd_soc_dapm_new_widgets() that calls > snd_soc_codec_drv_read() that now does nothing. > > A long term solution suggested by Mark Brown <broonie@xxxxxxxxxx> > is to make the twl drivers use regmap by adding a call to > snd_soc_codec_set_regmap(). This however needs more consideration > as currently the driver internal reads do caching and we would have > both regmap access and internal read/write access accessing the same > hardware registers. > > So to fix the regression, let's just do a partial revert adding back > the read and write function pointers. Note that other non-regmap > ASoC drivers may need similar patches. > > Fixes: 3bb0f7c31b1a ("ASoC: don't use snd_soc_write/read on twl4030") > Fixes: 93a00c467fe9 ("ASoC: don't use snd_soc_write/read on twl6040") > Cc: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > Cc: Peter Ujfalusi <peter.ujfalusi@xxxxxx> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> > --- > sound/soc/codecs/twl4030.c | 2 ++ > sound/soc/codecs/twl6040.c | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c > --- a/sound/soc/codecs/twl4030.c > +++ b/sound/soc/codecs/twl4030.c > @@ -2195,6 +2195,8 @@ static int twl4030_soc_remove(struct snd_soc_codec *codec) > static const struct snd_soc_codec_driver soc_codec_dev_twl4030 = { > .probe = twl4030_soc_probe, > .remove = twl4030_soc_remove, > + .read = twl4030_read, > + .write = twl4030_write, > .set_bias_level = twl4030_set_bias_level, > .idle_bias_off = true, > > diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c > --- a/sound/soc/codecs/twl6040.c > +++ b/sound/soc/codecs/twl6040.c > @@ -1158,6 +1158,8 @@ static int twl6040_remove(struct snd_soc_codec *codec) > static const struct snd_soc_codec_driver soc_codec_dev_twl6040 = { > .probe = twl6040_probe, > .remove = twl6040_remove, > + .read = twl6040_read, > + .write = twl6040_write, > .set_bias_level = twl6040_set_bias_level, > .suspend_bias_off = true, > .ignore_pmdown_time = true, > - Péter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html