From ef39e638be47f753b53cf8132cac20ca2b9b6b64 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AE=8B=E7=A7=80=E6=9D=B0?= Date: Tue, 9 Oct 2012 18:37:39 +0800 Subject: [PATCH] phonepad: rt3261 add HDMI codec_set_spk function. --- sound/soc/codecs/rt3261.c | 23 +++++++++++++++++++++++ sound/soc/codecs/rt3261.h | 2 ++ sound/soc/rk29/rk29_rt3261.c | 14 ++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/sound/soc/codecs/rt3261.c b/sound/soc/codecs/rt3261.c index 6c68e62669ed..a04fc87ae993 100644 --- a/sound/soc/codecs/rt3261.c +++ b/sound/soc/codecs/rt3261.c @@ -484,6 +484,29 @@ static int rt3261_readable_register( } } +void codec_set_spk(bool on) +{ + + struct snd_soc_codec *codec = rt3261_codec; + DBG("%s: %d\n", __func__, on); + + if(!codec) + return; + + if(on){ + DBG("snd_soc_dapm_enable_pin\n"); + snd_soc_dapm_enable_pin(&codec->dapm, "Headphone Jack"); + snd_soc_dapm_enable_pin(&codec->dapm, "Ext Spk"); + }else{ + DBG("snd_soc_dapm_disable_pin\n"); + snd_soc_dapm_disable_pin(&codec->dapm, "Headphone Jack"); + snd_soc_dapm_disable_pin(&codec->dapm, "Ext Spk"); + } + snd_soc_dapm_sync(&codec->dapm); +} + + + /** * rt3261_headset_mic_detect - Detect headset. * @codec: SoC audio codec device. diff --git a/sound/soc/codecs/rt3261.h b/sound/soc/codecs/rt3261.h index 2b798302a43e..2efcf0eea722 100644 --- a/sound/soc/codecs/rt3261.h +++ b/sound/soc/codecs/rt3261.h @@ -2071,6 +2071,8 @@ enum { #define RT3261_HEADSET_DET BIT(1) #define RT3261_HEADPHO_DET BIT(2) +void codec_set_spk(bool on); + int rt3261_headset_mic_detect(int jack_insert); /* System Clock Source */ diff --git a/sound/soc/rk29/rk29_rt3261.c b/sound/soc/rk29/rk29_rt3261.c index 947ff19097fb..c96d7b8c23d2 100644 --- a/sound/soc/rk29/rk29_rt3261.c +++ b/sound/soc/rk29/rk29_rt3261.c @@ -172,6 +172,8 @@ static int rt3261_voice_hw_params(struct snd_pcm_substream *substream, static const struct snd_soc_dapm_widget rt3261_dapm_widgets[] = { SND_SOC_DAPM_MIC("Mic Jack", NULL), SND_SOC_DAPM_MIC("Headset Jack", NULL), + SND_SOC_DAPM_SPK("Ext Spk", NULL), + SND_SOC_DAPM_HP("Headphone Jack", NULL), }; static const struct snd_soc_dapm_route audio_map[]={ @@ -183,11 +185,21 @@ static const struct snd_soc_dapm_route audio_map[]={ // HP MIC {"micbias1", NULL, "Headset Jack"}, {"MIC3", NULL, "micbias1"}, + + {"Ext Spk", NULL, "SPOLP"}, + {"Ext Spk", NULL, "SPOLN"}, + {"Ext Spk", NULL, "SPORP"}, + {"Ext Spk", NULL, "SPORN"}, + + {"Headphone Jack", NULL, "HPOL"}, + {"Headphone Jack", NULL, "HPOR"}, } ; static const struct snd_kcontrol_new rk_controls[] = { SOC_DAPM_PIN_SWITCH("Mic Jack"), SOC_DAPM_PIN_SWITCH("Headset Jack"), + SOC_DAPM_PIN_SWITCH("Ext Spk"), + SOC_DAPM_PIN_SWITCH("Headphone Jack"), }; /* @@ -211,6 +223,8 @@ static int rk29_rt3261_init(struct snd_soc_pcm_runtime *rtd) snd_soc_dapm_enable_pin(dapm, "Mic Jack"); snd_soc_dapm_enable_pin(dapm, "Headset Jack"); + snd_soc_dapm_enable_pin(dapm, "Ext Spk"); + snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); snd_soc_dapm_sync(dapm); return 0; -- 2.34.1