diff options
Diffstat (limited to 'sound/pci/ac97/ac97_patch.c')
-rw-r--r-- | sound/pci/ac97/ac97_patch.c | 66 |
1 files changed, 40 insertions, 26 deletions
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 818a77d2deff..5f69b9c9f1b3 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
@@ -190,14 +190,28 @@ static inline int is_clfe_on(struct snd_ac97 *ac97) | |||
190 | return ac97->channel_mode >= 2; | 190 | return ac97->channel_mode >= 2; |
191 | } | 191 | } |
192 | 192 | ||
193 | /* system has shared jacks with surround out enabled */ | ||
194 | static inline int is_shared_surrout(struct snd_ac97 *ac97) | ||
195 | { | ||
196 | return !ac97->indep_surround && is_surround_on(ac97); | ||
197 | } | ||
198 | |||
199 | /* system has shared jacks with center/lfe out enabled */ | ||
200 | static inline int is_shared_clfeout(struct snd_ac97 *ac97) | ||
201 | { | ||
202 | return !ac97->indep_surround && is_clfe_on(ac97); | ||
203 | } | ||
204 | |||
205 | /* system has shared jacks with line in enabled */ | ||
193 | static inline int is_shared_linein(struct snd_ac97 *ac97) | 206 | static inline int is_shared_linein(struct snd_ac97 *ac97) |
194 | { | 207 | { |
195 | return ! ac97->indep_surround && is_surround_on(ac97); | 208 | return !ac97->indep_surround && !is_surround_on(ac97); |
196 | } | 209 | } |
197 | 210 | ||
211 | /* system has shared jacks with mic in enabled */ | ||
198 | static inline int is_shared_micin(struct snd_ac97 *ac97) | 212 | static inline int is_shared_micin(struct snd_ac97 *ac97) |
199 | { | 213 | { |
200 | return ! ac97->indep_surround && is_clfe_on(ac97); | 214 | return !ac97->indep_surround && !is_clfe_on(ac97); |
201 | } | 215 | } |
202 | 216 | ||
203 | 217 | ||
@@ -2017,12 +2031,12 @@ static void alc650_update_jacks(struct snd_ac97 *ac97) | |||
2017 | { | 2031 | { |
2018 | int shared; | 2032 | int shared; |
2019 | 2033 | ||
2020 | /* shared Line-In */ | 2034 | /* shared Line-In / Surround Out */ |
2021 | shared = is_shared_linein(ac97); | 2035 | shared = is_shared_surrout(ac97); |
2022 | snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 1 << 9, | 2036 | snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 1 << 9, |
2023 | shared ? (1 << 9) : 0); | 2037 | shared ? (1 << 9) : 0); |
2024 | /* update shared Mic */ | 2038 | /* update shared Mic In / Center/LFE Out */ |
2025 | shared = is_shared_micin(ac97); | 2039 | shared = is_shared_clfeout(ac97); |
2026 | /* disable/enable vref */ | 2040 | /* disable/enable vref */ |
2027 | snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, | 2041 | snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, |
2028 | shared ? (1 << 12) : 0); | 2042 | shared ? (1 << 12) : 0); |
@@ -2152,12 +2166,12 @@ static void alc655_update_jacks(struct snd_ac97 *ac97) | |||
2152 | { | 2166 | { |
2153 | int shared; | 2167 | int shared; |
2154 | 2168 | ||
2155 | /* shared Line-In */ | 2169 | /* shared Line-In / Surround Out */ |
2156 | shared = is_shared_linein(ac97); | 2170 | shared = is_shared_surrout(ac97); |
2157 | ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 1 << 9, | 2171 | ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 1 << 9, |
2158 | shared ? (1 << 9) : 0, 0); | 2172 | shared ? (1 << 9) : 0, 0); |
2159 | /* update shared mic */ | 2173 | /* update shared Mic In / Center/LFE Out */ |
2160 | shared = is_shared_micin(ac97); | 2174 | shared = is_shared_clfeout(ac97); |
2161 | /* misc control; vrefout disable */ | 2175 | /* misc control; vrefout disable */ |
2162 | snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, | 2176 | snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12, |
2163 | shared ? (1 << 12) : 0); | 2177 | shared ? (1 << 12) : 0); |
@@ -2301,16 +2315,16 @@ static void alc850_update_jacks(struct snd_ac97 *ac97) | |||
2301 | { | 2315 | { |
2302 | int shared; | 2316 | int shared; |
2303 | 2317 | ||
2304 | /* shared Line-In */ | 2318 | /* shared Line-In / Surround Out */ |
2305 | shared = is_shared_linein(ac97); | 2319 | shared = is_shared_surrout(ac97); |
2306 | /* SURR 1kOhm (bit4), Amp (bit5) */ | 2320 | /* SURR 1kOhm (bit4), Amp (bit5) */ |
2307 | snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<4)|(1<<5), | 2321 | snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<4)|(1<<5), |
2308 | shared ? (1<<5) : (1<<4)); | 2322 | shared ? (1<<5) : (1<<4)); |
2309 | /* LINE-IN = 0, SURROUND = 2 */ | 2323 | /* LINE-IN = 0, SURROUND = 2 */ |
2310 | snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 12, | 2324 | snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 12, |
2311 | shared ? (2<<12) : (0<<12)); | 2325 | shared ? (2<<12) : (0<<12)); |
2312 | /* update shared mic */ | 2326 | /* update shared Mic In / Center/LFE Out */ |
2313 | shared = is_shared_micin(ac97); | 2327 | shared = is_shared_clfeout(ac97); |
2314 | /* Vref disable (bit12), 1kOhm (bit13) */ | 2328 | /* Vref disable (bit12), 1kOhm (bit13) */ |
2315 | snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<12)|(1<<13), | 2329 | snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<12)|(1<<13), |
2316 | shared ? (1<<12) : (1<<13)); | 2330 | shared ? (1<<12) : (1<<13)); |
@@ -2383,9 +2397,9 @@ int patch_alc850(struct snd_ac97 *ac97) | |||
2383 | */ | 2397 | */ |
2384 | static void cm9738_update_jacks(struct snd_ac97 *ac97) | 2398 | static void cm9738_update_jacks(struct snd_ac97 *ac97) |
2385 | { | 2399 | { |
2386 | /* shared Line-In */ | 2400 | /* shared Line-In / Surround Out */ |
2387 | snd_ac97_update_bits(ac97, AC97_CM9738_VENDOR_CTRL, 1 << 10, | 2401 | snd_ac97_update_bits(ac97, AC97_CM9738_VENDOR_CTRL, 1 << 10, |
2388 | is_shared_linein(ac97) ? (1 << 10) : 0); | 2402 | is_shared_surrout(ac97) ? (1 << 10) : 0); |
2389 | } | 2403 | } |
2390 | 2404 | ||
2391 | static const struct snd_kcontrol_new snd_ac97_cm9738_controls[] = { | 2405 | static const struct snd_kcontrol_new snd_ac97_cm9738_controls[] = { |
@@ -2467,12 +2481,12 @@ static const struct snd_kcontrol_new snd_ac97_cm9739_controls_spdif[] = { | |||
2467 | 2481 | ||
2468 | static void cm9739_update_jacks(struct snd_ac97 *ac97) | 2482 | static void cm9739_update_jacks(struct snd_ac97 *ac97) |
2469 | { | 2483 | { |
2470 | /* shared Line-In */ | 2484 | /* shared Line-In / Surround Out */ |
2471 | snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 1 << 10, | 2485 | snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 1 << 10, |
2472 | is_shared_linein(ac97) ? (1 << 10) : 0); | 2486 | is_shared_surrout(ac97) ? (1 << 10) : 0); |
2473 | /* shared Mic */ | 2487 | /* shared Mic In / Center/LFE Out **/ |
2474 | snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 0x3000, | 2488 | snd_ac97_update_bits(ac97, AC97_CM9739_MULTI_CHAN, 0x3000, |
2475 | is_shared_micin(ac97) ? 0x1000 : 0x2000); | 2489 | is_shared_clfeout(ac97) ? 0x1000 : 0x2000); |
2476 | } | 2490 | } |
2477 | 2491 | ||
2478 | static const struct snd_kcontrol_new snd_ac97_cm9739_controls[] = { | 2492 | static const struct snd_kcontrol_new snd_ac97_cm9739_controls[] = { |
@@ -2584,8 +2598,8 @@ static void cm9761_update_jacks(struct snd_ac97 *ac97) | |||
2584 | 2598 | ||
2585 | val |= surr_on[ac97->spec.dev_flags][is_surround_on(ac97)]; | 2599 | val |= surr_on[ac97->spec.dev_flags][is_surround_on(ac97)]; |
2586 | val |= clfe_on[ac97->spec.dev_flags][is_clfe_on(ac97)]; | 2600 | val |= clfe_on[ac97->spec.dev_flags][is_clfe_on(ac97)]; |
2587 | val |= surr_shared[ac97->spec.dev_flags][is_shared_linein(ac97)]; | 2601 | val |= surr_shared[ac97->spec.dev_flags][is_shared_surrout(ac97)]; |
2588 | val |= clfe_shared[ac97->spec.dev_flags][is_shared_micin(ac97)]; | 2602 | val |= clfe_shared[ac97->spec.dev_flags][is_shared_clfeout(ac97)]; |
2589 | 2603 | ||
2590 | snd_ac97_update_bits(ac97, AC97_CM9761_MULTI_CHAN, 0x3c88, val); | 2604 | snd_ac97_update_bits(ac97, AC97_CM9761_MULTI_CHAN, 0x3c88, val); |
2591 | } | 2605 | } |
@@ -2832,12 +2846,12 @@ int patch_vt1617a(struct snd_ac97 * ac97) | |||
2832 | */ | 2846 | */ |
2833 | static void it2646_update_jacks(struct snd_ac97 *ac97) | 2847 | static void it2646_update_jacks(struct snd_ac97 *ac97) |
2834 | { | 2848 | { |
2835 | /* shared Line-In */ | 2849 | /* shared Line-In / Surround Out */ |
2836 | snd_ac97_update_bits(ac97, 0x76, 1 << 9, | 2850 | snd_ac97_update_bits(ac97, 0x76, 1 << 9, |
2837 | is_shared_linein(ac97) ? (1<<9) : 0); | 2851 | is_shared_surrout(ac97) ? (1<<9) : 0); |
2838 | /* shared Mic */ | 2852 | /* shared Mic / Center/LFE Out */ |
2839 | snd_ac97_update_bits(ac97, 0x76, 1 << 10, | 2853 | snd_ac97_update_bits(ac97, 0x76, 1 << 10, |
2840 | is_shared_micin(ac97) ? (1<<10) : 0); | 2854 | is_shared_clfeout(ac97) ? (1<<10) : 0); |
2841 | } | 2855 | } |
2842 | 2856 | ||
2843 | static const struct snd_kcontrol_new snd_ac97_controls_it2646[] = { | 2857 | static const struct snd_kcontrol_new snd_ac97_controls_it2646[] = { |