aboutsummaryrefslogtreecommitdiff
path: root/sound/soc/s3c24xx/om_3d7k_wm8753.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/s3c24xx/om_3d7k_wm8753.c')
-rw-r--r--sound/soc/s3c24xx/om_3d7k_wm8753.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/sound/soc/s3c24xx/om_3d7k_wm8753.c b/sound/soc/s3c24xx/om_3d7k_wm8753.c
index 6a49cf87c50..82238d0d442 100644
--- a/sound/soc/s3c24xx/om_3d7k_wm8753.c
+++ b/sound/soc/s3c24xx/om_3d7k_wm8753.c
@@ -369,6 +369,30 @@ static int om_3d7k_get_handset_spk(struct snd_kcontrol *kcontrol,
return 0;
}
+static int om_3d7k_set_headset_spk(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ int val = ucontrol->value.integer.value[0];
+
+ snd_soc_dapm_set_endpoint(codec, "Headset Spk", val);
+
+ snd_soc_dapm_sync(codec);
+
+ return 0;
+}
+
+static int om_3d7k_get_headset_spk(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+
+ ucontrol->value.integer.value[0] =
+ snd_soc_dapm_get_endpoint(codec, "Headset Spk");
+
+ return 0;
+}
+
static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
SND_SOC_DAPM_LINE("Stereo Out", NULL),
SND_SOC_DAPM_LINE("GSM Line Out", NULL),
@@ -376,6 +400,7 @@ static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
SND_SOC_DAPM_MIC("Headset Mic", NULL),
SND_SOC_DAPM_MIC("Handset Mic", NULL),
SND_SOC_DAPM_SPK("Handset Spk", NULL),
+ SND_SOC_DAPM_SPK("Headset Spk", NULL),
};
@@ -404,6 +429,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
{"Handset Spk", NULL, "OUT3"},
{"Handset Spk", NULL, "LOUT1"},
+ {"Headset Spk", NULL, "ROUT1"},
+ {"Headset Spk", NULL, "LOUT1"},
+
/* Connect the ALC pins */
{"ACIN", NULL, "ACOP"},
};
@@ -427,6 +455,9 @@ static const struct snd_kcontrol_new wm8753_om_3d7k_controls[] = {
SOC_SINGLE_EXT("DAPM Handset Spk Switch", 5, 0, 1, 0,
om_3d7k_get_handset_spk,
om_3d7k_set_handset_spk),
+ SOC_SINGLE_EXT("DAPM Headset Spk Switch", 6, 0, 1, 0,
+ om_3d7k_get_headset_spk,
+ om_3d7k_set_headset_spk),
};
/*
@@ -466,6 +497,7 @@ static int om_3d7k_wm8753_init(struct snd_soc_codec *codec)
snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
snd_soc_dapm_set_endpoint(codec, "Handset Mic", 0);
snd_soc_dapm_set_endpoint(codec, "Handset Spk", 0);
+ snd_soc_dapm_set_endpoint(codec, "Headset Spk", 0);
snd_soc_dapm_sync(codec);