차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
| development:sound:wm8960 [2017/04/12 00:10] – 바깥 편집 127.0.0.1 | development: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 jack_type = 0; | + | int jack_type = 0; |
| pdata = container_of(work, | pdata = container_of(work, | ||
| 줄 16: | 줄 16: | ||
| flag = wm8960_detect_hp(); | flag = wm8960_detect_hp(); | ||
| - | + | ||
| if(pdata-> | if(pdata-> | ||
| - | if(!use_antipop) | + | |
| - | { | + | { |
| - | /* Enable anti pop mode */ | + | /* Enable anti pop mode */ |
| - | snd_soc_update_bits(codec, | + | snd_soc_update_bits(codec, |
| - | | + | WM8960_POBCTRL | WM8960_SOFT_ST | |
| - | | + | WM8960_BUFDCOPEN, |
| - | | + | WM8960_POBCTRL | WM8960_SOFT_ST | |
| - | | + | WM8960_BUFDCOPEN); |
| + | /* Enable VMID at 2*50k */ | ||
| + | snd_soc_update_bits(codec, | ||
| + | WM8960_VMID_MASK, | ||
| - | /* Enable VMID at 2*50k */ | + | |
| - | snd_soc_update_bits(codec, WM8960_POWER1, | + | |
| - | WM8960_VMID_MASK, | + | |
| - | /* Ramp */ | + | |
| - | msleep(100); | + | |
| + | WM8960_VREF, | ||
| - | /* Enable VREF */ | + | msleep(100); |
| - | snd_soc_update_bits(codec, WM8960_POWER1, | + | |
| - | WM8960_VREF, | + | |
| - | msleep(100); | + | |
| - | + | ||
| - | } | + | |
| if (flag == 1) { | if (flag == 1) { | ||
| #ifdef CONFIG_V2_HDMI_AUDIO | #ifdef CONFIG_V2_HDMI_AUDIO | ||
| printk(KERN_INFO " | printk(KERN_INFO " | ||
| - | |||
| - | |||
| /* Speaker */ | /* Speaker */ | ||
| 줄 55: | 줄 52: | ||
| snd_soc_update_bits(codec, | snd_soc_update_bits(codec, | ||
| - | /* DAC Mono Mix clear */ | + | /* DAC Mono Mix clear */ |
| snd_soc_update_bits(codec, | snd_soc_update_bits(codec, | ||
| printk(" | printk(" | ||
| 줄 62: | 줄 59: | ||
| snd_soc_jack_report(& | snd_soc_jack_report(& | ||
| #else | #else | ||
| - | snd_soc_update_bits(codec, | + | |
| - | msleep(100); | + | msleep(100); |
| - | jack_type = wm8960_detect_hp(); | + | jack_type = wm8960_detect_hp(); |
| - | if(jack_type == 1){ | + | if(jack_type == 1){ |
| - | printk(" | + | printk(" |
| - | /* jack report */ | + | /* jack report */ |
| - | snd_soc_jack_report(& | + | snd_soc_jack_report(& |
| - | switch_set_state(& | + | switch_set_state(& |
| - | }else{ | + | }else{ |
| - | printk(" | + | printk(" |
| - | /* jack report */ | + | /* jack report */ |
| - | snd_soc_jack_report(& | + | snd_soc_jack_report(& |
| - | switch_set_state(& | + | switch_set_state(& |
| - | } | + | } |
| #endif | #endif | ||
| } else { | } else { | ||
| 줄 98: | 줄 95: | ||
| snd_soc_update_bits(codec, | snd_soc_update_bits(codec, | ||
| snd_soc_update_bits(codec, | snd_soc_update_bits(codec, | ||
| - | |||
| /* DAC Mono Mix set */ | /* DAC Mono Mix set */ | ||
| snd_soc_update_bits(codec, | snd_soc_update_bits(codec, | ||
| - | # | + | #endif |
| - | switch_set_state(& | + | |
| #endif | #endif | ||
| /* jack report */ | /* jack report */ | ||
| 줄 111: | 줄 107: | ||
| pdata-> | pdata-> | ||
| - | if(!use_antipop) | + | |
| - | { | + | { |
| - | /* Disable VMID and VREF */ | + | |
| - | snd_soc_update_bits(codec, | + | snd_soc_update_bits(codec, |
| - | | + | WM8960_VREF | WM8960_VMID_MASK, |
| - | + | ||
| - | /* Disable HP discharge */ | + | |
| - | snd_soc_update_bits(codec, | + | |
| - | WM8960_DISOP | WM8960_DRES_MASK, | + | |
| - | 0); | + | |
| - | + | ||
| - | /* Disable anti-pop features */ | + | |
| - | snd_soc_update_bits(codec, | + | |
| - | WM8960_POBCTRL | WM8960_SOFT_ST | | + | |
| - | WM8960_BUFDCOPEN, | + | |
| - | WM8960_POBCTRL | WM8960_SOFT_ST | | + | |
| - | WM8960_BUFDCOPEN); | + | |
| - | use_antipop = 1; | + | /* Disable HP discharge */ |
| - | } | + | |
| - | } | + | |
| + | 0); | ||
| + | /* Disable anti-pop features */ | ||
| + | snd_soc_update_bits(codec, | ||
| + | WM8960_POBCTRL | WM8960_SOFT_ST | | ||
| + | WM8960_BUFDCOPEN, | ||
| + | WM8960_POBCTRL | WM8960_SOFT_ST | | ||
| + | WM8960_BUFDCOPEN); | ||
| + | |||
| + | use_antipop = 1; | ||
| + | } | ||
| + | } | ||
| - | |||
| } | } | ||
| - | </code> | + | </sxh> |
| + | |||