[alsa-devel] [PATCH 5/5] ASoC: tpa6130a2: Make DAPM registration optional, and direct interface
Peter Ujfalusi
peter.ujfalusi at nokia.com
Tue Nov 30 15:00:04 CET 2010
Users can choose to not add the DAPM routes provided by the
amp driver, but use the direct enable/disable interface
from machine driver with SND_SOC_DAPM_HP's event callback.
In some cases this method must be used to make the audio
path pop noise free.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi at nokia.com>
---
sound/soc/codecs/tpa6130a2.c | 30 +++++++++++++++++++++++++-----
sound/soc/codecs/tpa6130a2.h | 3 ++-
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c
index c97badf..5a38372 100644
--- a/sound/soc/codecs/tpa6130a2.c
+++ b/sound/soc/codecs/tpa6130a2.c
@@ -377,7 +377,26 @@ static const struct snd_soc_dapm_route audio_map[] = {
{"TPA6130A2 Headphone Stereo", NULL, "TPA6130A2 Enable"},
};
-int tpa6130a2_add_controls(struct snd_soc_codec *codec)
+int tpa6130a2_stereo_enable(int enable)
+{
+ int ret = 0;
+ if (enable) {
+ ret = tpa6130a2_power(1);
+ if (ret < 0)
+ return ret;
+ tpa6130a2_channel_enable(TPA6130A2_HP_EN_R | TPA6130A2_HP_EN_L,
+ 1);
+ } else {
+ tpa6130a2_channel_enable(TPA6130A2_HP_EN_R | TPA6130A2_HP_EN_L,
+ 0);
+ ret = tpa6130a2_power(0);
+ }
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(tpa6130a2_stereo_enable);
+
+int tpa6130a2_add_controls(struct snd_soc_codec *codec, int with_dapm)
{
struct tpa6130a2_data *data;
struct snd_soc_dapm_context *dapm = &codec->dapm;
@@ -387,10 +406,11 @@ int tpa6130a2_add_controls(struct snd_soc_codec *codec)
data = i2c_get_clientdata(tpa6130a2_client);
- snd_soc_dapm_new_controls(dapm, tpa6130a2_dapm_widgets,
- ARRAY_SIZE(tpa6130a2_dapm_widgets));
-
- snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
+ if (with_dapm) {
+ snd_soc_dapm_new_controls(dapm, tpa6130a2_dapm_widgets,
+ ARRAY_SIZE(tpa6130a2_dapm_widgets));
+ snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
+ }
if (data->id == TPA6140A2)
return snd_soc_add_controls(codec, tpa6140a2_controls,
diff --git a/sound/soc/codecs/tpa6130a2.h b/sound/soc/codecs/tpa6130a2.h
index 57e867f..e3150d9 100644
--- a/sound/soc/codecs/tpa6130a2.h
+++ b/sound/soc/codecs/tpa6130a2.h
@@ -56,6 +56,7 @@
/* TPA6130A2_REG_VERSION (0x04) */
#define TPA6130A2_VERSION_MASK (0x0f)
-extern int tpa6130a2_add_controls(struct snd_soc_codec *codec);
+extern int tpa6130a2_add_controls(struct snd_soc_codec *codec, int with_dapm);
+extern int tpa6130a2_stereo_enable(int enable);
#endif /* __TPA6130A2_H__ */
--
1.7.3.2
More information about the Alsa-devel
mailing list