es8316 耳机插入时,同时打开2个mic

当耳机插入的时候,把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)
 

Elasticsearch 允许你在同一个集群内创建并同保存文档到多个索引,这样做有以下几个常见的原因: 1. 数据分隔:你可以将不同类型的数据存储在不同的索引中,比如用户数据、日志数据等,方便查询和分析。 2. 版本控制:通过将不同版本的历史数据存放在不同索引,可以更好地支持间旅行搜索。 3. 管理和查询优化:如果需要对某些数据执行特定类型的查询,如实搜索和离线分析,可以选择不同的索引来满足性能需求。 4. 容错性和备份策略:可以设置主索引和副本索引,提高数据的可用性和恢复速度。 要在 Elasticsearch 中同保存到两个索引,你可以采用以下几种方式之一: 1. 使用 `index` 动词的 `into` 参数:在更新操作指定 `into` 关键字,例如 `doc = { ... }; client.update(index="index1", id=1, body=doc, into=["index2"])`。 2. 分片级别的路由(Routing):如果你希望基于某个字段将文档分配到特定的索引,可以在更新操作设置 `routing` 属性。 3. 事件驱动架构:使用 Elasticsearch 的管道 (Pipeline) 或者 Logstash 配合 Beats(如 Filebeat 或 Logstash),可以在数据收集阶段就将其发送到多个目标索引。 记得在设计这种策略要考虑索引的维护成本,以及查询的复杂性。同,应该合理地规划索引的生命周期管理,包括删除过期索引以保持资源的有效利用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值