차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
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> |
+ |