当耳机插入的时候,把mic2的寄存器通路打开即可
diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
index ccf4ea1..22631d3 100644
--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -670,7 +670,9 @@ static int es8316_pcm_startup(struct snd_pcm_substream *substream,
struct snd_soc_codec *codec = dai->codec;
struct es8316_priv *es8316 = snd_soc_codec_get_drvdata(codec);
bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
+ int ret = 0;
+ printk("====================== es8316_pcm_startup playback %d\n",playback);
snd_soc_write(codec, ES8316_RESET_REG00, 0xC0);
snd_soc_write(codec, ES8316_SYS_PDN_REG0D, 0x00);
/* es8316: both playback and capture need dac mclk */
@@ -698,6 +700,12 @@ static int es8316_pcm_startup(struct snd_pcm_substream *substream,
ES8316_CLKMGR_DAC_MCLK_EN |
ES8316_CLKMGR_DAC_ANALOG_EN);
msleep(50);
+ if(es8316->hp_inserted)
+ snd_soc_write(codec, ES8316_ADC_PDN_LINSEL_REG22, 0x30);
+ else
+ snd_soc_write(codec, ES8316_ADC_PDN_LINSEL_REG22, 0x20);
+ ret = snd_soc_read(codec,ES8316_ADC_PDN_LINSEL_REG22);
+ printk("playback ES8316_ADC_PDN_LINSEL_REG22 val = %d\n",ret);
} else {
snd_soc_update_bits(codec,
ES8316_ADC_PDN_LINSEL_REG22, 0xC0, 0x20);
@@ -718,7 +726,9 @@ static void es8316_pcm_shutdown(struct snd_pcm_substream *substream,
struct snd_soc_codec *codec = rtd->codec;
struct es8316_priv *es8316 = snd_soc_codec_get_drvdata(codec);
bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
-
+ int ret = 0;
+
+ printk("es8316_pcm_shutdown ========================= playback %x \n",playback);
if (playback) {
snd_soc_write(codec, ES8316_CPHP_OUTEN_REG17, 0x00);
snd_soc_write(codec, ES8316_DAC_PDN_REG2F, 0x11);
@@ -734,6 +744,12 @@ static void es8316_pcm_shutdown(struct snd_pcm_substream *substream,
snd_soc_update_bits(codec, ES8316_CLKMGR_CLKSW_REG01,
ES8316_CLKMGR_DAC_ANALOG_MASK,
ES8316_CLKMGR_DAC_ANALOG_DIS);
+ if(es8316->hp_inserted)
+ snd_soc_write(codec, ES8316_ADC_PDN_LINSEL_REG22, 0x30);
+ else
+ snd_soc_write(codec, ES8316_ADC_PDN_LINSEL_REG22, 0x20);
+ ret = snd_soc_read(codec,ES8316_ADC_PDN_LINSEL_REG22);
+ printk("playback es8316_pcm_shutdown val = %x\n",ret);
} else {
snd_soc_write(codec, ES8316_ADC_PDN_LINSEL_REG22, 0xc0);
snd_soc_update_bits(codec, ES8316_CLKMGR_CLKSW_REG01,
@@ -1028,6 +1044,7 @@ static void hp_work(struct work_struct *work)
struct es8316_priv *es8316;
int enable;
+
es8316 = container_of(work, struct es8316_priv, work.work);
enable = gpio_get_value(es8316->hp_det_gpio);
if (es8316->hp_det_invert)
@@ -1040,6 +1057,7 @@ static void hp_work(struct work_struct *work)
else
es8316_enable_spk(es8316, true);
}
}
static int es8316_probe(struct snd_soc_codec *codec)