development:sound:wm8960

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
development:sound:wm8960 [2017/04/12 00:10] – 바깥 편집 127.0.0.1development:sound:wm8960 [2020/09/25 10:12] (현재) – 바깥 편집 127.0.0.1
줄 3: 줄 3:
 ==== resolve pop noise problem ==== ==== resolve pop noise problem ====
  
-<code c>+<sxh c>
 static void wm8960_work_func(struct work_struct *work) static void wm8960_work_func(struct work_struct *work)
 { {
줄 9: 줄 9:
     struct snd_soc_codec *codec = NULL;     struct snd_soc_codec *codec = NULL;
     int flag = -1;     int flag = -1;
- int status = SND_JACK_HEADPHONE; +    int status = SND_JACK_HEADPHONE; 
- int jack_type = 0;+    int jack_type = 0;
  
     pdata = container_of(work, struct wm8960_private_data, work);     pdata = container_of(work, struct wm8960_private_data, work);
줄 16: 줄 16:
  
     flag = wm8960_detect_hp();     flag = wm8960_detect_hp();
- +
     if(pdata->detect_flag != flag) {     if(pdata->detect_flag != flag) {
- if(!use_antipop) +        if(!use_antipop) 
- +        
- /* Enable anti pop mode */ +            /* Enable anti pop mode */ 
- snd_soc_update_bits(codec, WM8960_APOP1, +            snd_soc_update_bits(codec, WM8960_APOP1, 
-     WM8960_POBCTRL | WM8960_SOFT_ST | +                        WM8960_POBCTRL | WM8960_SOFT_ST | 
-     WM8960_BUFDCOPEN, +                        WM8960_BUFDCOPEN, 
-     WM8960_POBCTRL | WM8960_SOFT_ST | +                        WM8960_POBCTRL | WM8960_SOFT_ST | 
-     WM8960_BUFDCOPEN);+                        WM8960_BUFDCOPEN);
  
 +            /* Enable VMID at 2*50k */
 +            snd_soc_update_bits(codec, WM8960_POWER1,
 +                        WM8960_VMID_MASK, 0x80);
  
- /* Enable VMID at 2*50k */ +            /* Ramp */ 
- snd_soc_update_bits(codec, WM8960_POWER1, +            msleep(100);
-     WM8960_VMID_MASK, 0x80);+
  
- /* Ramp */ +            /* Enable VREF */ 
- msleep(100);+            snd_soc_update_bits(codec, WM8960_POWER1, 
 +                        WM8960_VREF, WM8960_VREF);
  
- /* Enable VREF */ +            msleep(100);
- snd_soc_update_bits(codec, WM8960_POWER1, +
-     WM8960_VREF, WM8960_VREF);+
  
- msleep(100); +        }
- +
- } +
         if (flag == 1) {         if (flag == 1) {
 #ifdef CONFIG_V2_HDMI_AUDIO #ifdef CONFIG_V2_HDMI_AUDIO
             printk(KERN_INFO "wm8960 hp pluged\n");             printk(KERN_INFO "wm8960 hp pluged\n");
- 
- 
  
             /* Speaker */             /* Speaker */
줄 55: 줄 52:
             snd_soc_update_bits(codec, WM8960_ROUT1, 0x7f, 0x7f);             snd_soc_update_bits(codec, WM8960_ROUT1, 0x7f, 0x7f);
  
-            /* DAC Mono Mix clear */ +            /* DAC Mono Mix clear */
             snd_soc_update_bits(codec, WM8960_ADDCTL1, 1 << 4, 0);             snd_soc_update_bits(codec, WM8960_ADDCTL1, 1 << 4, 0);
             printk(" 1 === USYS_KKJ clear DAC Mono ===\n");             printk(" 1 === USYS_KKJ clear DAC Mono ===\n");
줄 62: 줄 59:
             snd_soc_jack_report(&pdata->jack, status, SND_JACK_HEADSET);             snd_soc_jack_report(&pdata->jack, status, SND_JACK_HEADSET);
 #else #else
- snd_soc_update_bits(codec, WM8960_POWER1, 2, 2); +            snd_soc_update_bits(codec, WM8960_POWER1, 2, 2); 
- msleep(100); +            msleep(100); 
- jack_type = wm8960_detect_hp(); +            jack_type = wm8960_detect_hp(); 
- if(jack_type == 1){ +            if(jack_type == 1){ 
- printk("wm8960 3 ports hp pluged\n"); +                printk("wm8960 3 ports hp pluged\n"); 
-             /* jack report */ +                /* jack report */ 
-             snd_soc_jack_report(&pdata->jack, SND_JACK_HEADPHONE, SND_JACK_HEADPHONE); +                snd_soc_jack_report(&pdata->jack, SND_JACK_HEADPHONE, SND_JACK_HEADPHONE); 
- switch_set_state(&pdata->sdev, 2); +                switch_set_state(&pdata->sdev, 2); 
- }else{ +            }else{ 
- printk("wm8960 4 ports hs pluged\n"); +                printk("wm8960 4 ports hs pluged\n"); 
-             /* jack report */ +                /* jack report */ 
-             snd_soc_jack_report(&pdata->jack, status, SND_JACK_HEADSET); +                snd_soc_jack_report(&pdata->jack, status, SND_JACK_HEADSET); 
- switch_set_state(&pdata->sdev, 1); +                switch_set_state(&pdata->sdev, 1); 
- }+            }
 #endif #endif
         } else {         } else {
줄 98: 줄 95:
             snd_soc_update_bits(codec, WM8960_LOUT1, 0x70, 0);             snd_soc_update_bits(codec, WM8960_LOUT1, 0x70, 0);
             snd_soc_update_bits(codec, WM8960_ROUT1, 0x70, 0);             snd_soc_update_bits(codec, WM8960_ROUT1, 0x70, 0);
-  
  
             /* DAC Mono Mix set */             /* DAC Mono Mix set */
             snd_soc_update_bits(codec, WM8960_ADDCTL1, 1 << 4, 1 << 4);             snd_soc_update_bits(codec, WM8960_ADDCTL1, 1 << 4, 1 << 4);
-#endif         +#endif
  
- switch_set_state(&pdata->sdev, 0);+            switch_set_state(&pdata->sdev, 0);
 #endif #endif
             /* jack report */             /* jack report */
줄 111: 줄 107:
  
         pdata->detect_flag = flag;         pdata->detect_flag = flag;
- if(!use_antipop) +        if(!use_antipop) 
- {+        {
  
- /* Disable VMID and VREF */ +            /* Disable VMID and VREF */ 
- snd_soc_update_bits(codec, WM8960_POWER1, +            snd_soc_update_bits(codec, WM8960_POWER1, 
-     WM8960_VREF | WM8960_VMID_MASK, 0); +                        WM8960_VREF | WM8960_VMID_MASK, 0);
-  +
- /* Disable HP discharge */ +
- snd_soc_update_bits(codec, WM8960_APOP2, +
- WM8960_DISOP | WM8960_DRES_MASK, +
- 0); +
-  +
- /* Disable anti-pop features */ +
- snd_soc_update_bits(codec, WM8960_APOP1, +
- WM8960_POBCTRL | WM8960_SOFT_ST | +
- WM8960_BUFDCOPEN, +
- WM8960_POBCTRL | WM8960_SOFT_ST | +
- WM8960_BUFDCOPEN);+
  
- use_antipop = 1; +            /* Disable HP discharge */ 
- }  +            snd_soc_update_bits(codec, WM8960_APOP2, 
-    }+                        WM8960_DISOP | WM8960_DRES_MASK, 
 +                        0);
  
 +            /* Disable anti-pop features */
 +            snd_soc_update_bits(codec, WM8960_APOP1,
 +                        WM8960_POBCTRL | WM8960_SOFT_ST |
 +                        WM8960_BUFDCOPEN,
 +                        WM8960_POBCTRL | WM8960_SOFT_ST |
 +                        WM8960_BUFDCOPEN);
 +
 +            use_antipop = 1;
 +        }
 +    }
  
-  
 } }
-</code>+</sxh> 
 + 
  • development/sound/wm8960.1491925240.txt.gz
  • 마지막으로 수정됨: 2020/09/25 10:12
  • (바깥 편집)