Changeset 76 for GPL/trunk/alsa-kernel/pci/ac97
- Timestamp:
- Apr 9, 2006, 12:09:39 PM (20 years ago)
- Location:
- GPL/trunk/alsa-kernel/pci/ac97
- Files:
-
- 3 edited
-
ac97_codec.c (modified) (40 diffs)
-
ac97_patch.c (modified) (25 diffs)
-
ac97_patch.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk/alsa-kernel/pci/ac97/ac97_codec.c
r72 r76 144 144 { 0x49434511, 0xffffffff, "ICE1232", NULL, NULL }, // alias VIA VT1611A? 145 145 { 0x49434514, 0xffffffff, "ICE1232A", NULL, NULL }, 146 { 0x49434551, 0xffffffff, "VT1616", patch_vt1616, NULL }, 146 { 0x49434551, 0xffffffff, "VT1616", patch_vt1616, NULL }, 147 147 { 0x49434552, 0xffffffff, "VT1616i", patch_vt1616, NULL }, // VT1616 compatible (chipset integrated) 148 148 { 0x49544520, 0xffffffff, "IT2226E", NULL, NULL }, … … 151 151 { 0x4e534331, 0xffffffff, "LM4549", NULL, NULL }, 152 152 { 0x4e534350, 0xffffffff, "LM4550", NULL, NULL }, 153 { 0x4e534350, 0xffffffff, "LM4550", patch_lm4550, NULL }, // volume wrap fix 153 154 { 0x50534304, 0xffffffff, "UCB1400", NULL, NULL }, 154 155 { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH }, … … 192 193 static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg) 193 194 { 194 if (ac97->limited_regs && ! test_bit(reg, ac97->reg_accessed))195 return 0;196 197 195 /* filter some registers for buggy codecs */ 198 196 switch (ac97->id) { … … 257 255 /** 258 256 * snd_ac97_read - read a value from the given register 259 * 257 * 260 258 * @ac97: the ac97 instance 261 259 * @reg: the register to read … … 411 409 { 412 410 struct ac97_enum *e = (struct ac97_enum *)kcontrol->private_value; 413 411 414 412 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 415 413 uinfo->count = e->shift_l == e->shift_r ? 1 : 2; 416 414 uinfo->value.enumerated.items = e->mask; 417 415 418 416 if (uinfo->value.enumerated.item > e->mask - 1) 419 417 uinfo->value.enumerated.item = e->mask - 1; … … 427 425 struct ac97_enum *e = (struct ac97_enum *)kcontrol->private_value; 428 426 unsigned short val, bitmask; 429 427 430 428 for (bitmask = 1; bitmask < e->mask; bitmask <<= 1) 431 429 ; … … 444 442 unsigned short val; 445 443 unsigned short mask, bitmask; 446 444 447 445 for (bitmask = 1; bitmask < e->mask; bitmask <<= 1) 448 446 ; … … 530 528 int err, page_save; 531 529 unsigned short val, val2, val_mask; 532 530 533 531 page_save = snd_ac97_page_save(ac97, reg, kcontrol); 534 532 val = (ucontrol->value.integer.value[0] & mask); … … 580 578 }; 581 579 582 static const struct snd_kcontrol_new snd_ac97_control_capture_src = 583 AC97_ENUM("Capture Source", std_enum[0]); 580 static const struct snd_kcontrol_new snd_ac97_control_capture_src = 581 AC97_ENUM("Capture Source", std_enum[0]); 584 582 585 583 static const struct snd_kcontrol_new snd_ac97_control_capture_vol = … … 648 646 return 0; 649 647 } 650 648 651 649 static int snd_ac97_spdif_cmask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 652 650 { … … 660 658 return 0; 661 659 } 662 660 663 661 static int snd_ac97_spdif_pmask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 664 662 { … … 683 681 return 0; 684 682 } 685 683 686 684 static int snd_ac97_spdif_default_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 687 685 { … … 735 733 v = new & (IEC958_AES0_CON_EMPHASIS_5015|IEC958_AES0_CON_NOT_COPYRIGHT) ? 0 : AC97_CXR_COPYRGT; 736 734 v |= new & IEC958_AES0_NONAUDIO ? AC97_CXR_SPDIF_AC3 : AC97_CXR_SPDIF_PCM; 737 change |= snd_ac97_update_bits_nolock(ac97, AC97_CXR_AUDIO_MISC, 735 change |= snd_ac97_update_bits_nolock(ac97, AC97_CXR_AUDIO_MISC, 738 736 AC97_CXR_SPDIF_MASK | AC97_CXR_COPYRGT, 739 737 v); … … 845 843 int rshift = (kcontrol->private_value >> 12) & 0x0f; 846 844 int mask = (kcontrol->private_value >> 16) & 0xff; 847 845 848 846 ucontrol->value.integer.value[0] = mask - ((ac97->spec.ad18xx.pcmreg[codec] >> lshift) & mask); 849 847 if (lshift != rshift && (ac97->flags & AC97_STEREO_MUTES)) … … 860 858 int mask = (kcontrol->private_value >> 16) & 0xff; 861 859 unsigned short val, valmask; 862 860 863 861 val = (mask - (ucontrol->value.integer.value[0] & mask)) << lshift; 864 862 valmask = mask << lshift; … … 888 886 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); 889 887 int codec = kcontrol->private_value & 3; 890 888 891 889 down(&ac97->page_mutex); 892 890 ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31); … … 901 899 int codec = kcontrol->private_value & 3; 902 900 unsigned short val1, val2; 903 901 904 902 val1 = 31 - (ucontrol->value.integer.value[0] & 31); 905 903 val2 = 31 - (ucontrol->value.integer.value[1] & 31); … … 1008 1006 } 1009 1007 1010 if (ac97->limited_regs && test_bit(reg, ac97->reg_accessed))1011 return 1; /* allow without check */1012 1013 1008 val = snd_ac97_read(ac97, reg); 1014 1009 if (!(val & mask)) { … … 1030 1025 int i; 1031 1026 1032 *lo_max = *hi_max = 0; 1027 /* first look up the static resolution table */ 1028 if (ac97->res_table) { 1029 const struct snd_ac97_res_table *tbl; 1030 for (tbl = ac97->res_table; tbl->reg; tbl++) { 1031 if (tbl->reg == reg) { 1032 *lo_max = tbl->bits & 0xff; 1033 *hi_max = (tbl->bits >> 8) & 0xff; 1034 return; 1035 } 1036 } 1037 } 1038 1039 *lo_max = *hi_max = 0; 1033 1040 for (i = 0 ; i < ARRAY_SIZE(cbit); i++) { 1034 1041 unsigned short val; … … 1243 1250 /* build master controls */ 1244 1251 /* AD claims to remove this control from AD1887, although spec v2.2 does not allow this */ 1245 if (snd_ac97_try_volume_mix(ac97, AC97_MASTER)) { 1252 if (snd_ac97_try_volume_mix(ac97, AC97_MASTER)) { 1253 #ifndef TARGET_OS2 1246 1254 if (ac97->flags & AC97_HAS_NO_MASTER_VOL) 1247 1255 err = snd_ac97_cmute_new(card, "Master Playback Switch", AC97_MASTER, ac97); 1248 else 1256 else 1257 #endif 1249 1258 err = snd_ac97_cmix_new(card, "Master Playback", AC97_MASTER, ac97); 1250 1259 if (err < 0) … … 1290 1299 return err; 1291 1300 } 1292 1301 1293 1302 /* build master mono controls */ 1294 1303 if (snd_ac97_try_volume_mix(ac97, AC97_MASTER_MONO)) { … … 1296 1305 return err; 1297 1306 } 1298 1307 1299 1308 /* build master tone controls */ 1300 1309 if (!(ac97->flags & AC97_HAS_NO_TONE)) { … … 1311 1320 } 1312 1321 } 1313 1322 1314 1323 /* build PC Speaker controls */ 1315 if (!(ac97->flags & AC97_HAS_NO_PC_BEEP) && 1324 if (!(ac97->flags & AC97_HAS_NO_PC_BEEP) && 1316 1325 ((ac97->flags & AC97_HAS_PC_BEEP) || 1317 1326 snd_ac97_try_volume_mix(ac97, AC97_PC_BEEP))) { … … 1322 1331 snd_ac97_read(ac97, AC97_PC_BEEP) | 0x801e); 1323 1332 } 1324 1333 1325 1334 /* build Phone controls */ 1326 1335 if (!(ac97->flags & AC97_HAS_NO_PHONE)) { … … 1330 1339 } 1331 1340 } 1332 1341 1333 1342 /* build MIC controls */ 1334 1343 if (!(ac97->flags & AC97_HAS_NO_MIC)) { … … 1346 1355 return err; 1347 1356 } 1348 1357 1349 1358 /* build CD controls */ 1350 1359 if (!(ac97->flags & AC97_HAS_NO_CD)) { … … 1354 1363 } 1355 1364 } 1356 1365 1357 1366 /* build Video controls */ 1358 1367 if (!(ac97->flags & AC97_HAS_NO_VIDEO)) { … … 1397 1406 snd_ac97_write_cache(ac97, AC97_PCM, init_val); 1398 1407 } else { 1399 if (!(ac97->flags & AC97_HAS_NO_STD_PCM)) { 1408 if (!(ac97->flags & AC97_HAS_NO_STD_PCM)) { 1409 #ifndef TARGET_OS2 1400 1410 if (ac97->flags & AC97_HAS_NO_PCM_VOL) 1401 1411 err = snd_ac97_cmute_new(card, "PCM Playback Switch", AC97_PCM, ac97); 1402 else 1412 else 1413 #endif 1403 1414 err = snd_ac97_cmix_new(card, "PCM Playback", AC97_PCM, ac97); 1404 1415 if (err < 0) … … 1514 1525 ac97->spdif_status = SNDRV_PCM_DEFAULT_CON_SPDIF; 1515 1526 } 1516 1527 1517 1528 /* build chip specific controls */ 1518 1529 if (ac97->build_ops->build_specific) … … 1575 1586 unsigned short saved; 1576 1587 1577 if (ac97->bus->no_vra) {1588 if (ac97->bus->no_vra || !(ac97->ext_id & AC97_EI_VRA) ) { 1578 1589 *r_result = SNDRV_PCM_RATE_48000; 1579 1590 if ((ac97->flags & AC97_DOUBLE_RATE) && … … 1678 1689 (! modem && ! (pid->flags & AC97_MODEM_PATCH))) 1679 1690 pid->patch(ac97); 1680 } 1691 } 1681 1692 1682 1693 pid = look_for_codec_id(snd_ac97_codec_ids, id); … … 1722 1733 end_time = jiffies + timeout; 1723 1734 do { 1724 1735 1725 1736 /* use preliminary reads to settle the communication */ 1726 1737 snd_ac97_read(ac97, AC97_RESET); … … 1765 1776 * The ops table must include valid callbacks (at least read and 1766 1777 * write). The other callbacks, wait and reset, are not mandatory. 1767 * 1778 * 1768 1779 * The clock is set to 48000. If another clock is needed, set 1769 1780 * (*rbus)->clock manually. … … 1860 1871 * The template must include the codec number (num) and address (addr), 1861 1872 * and the private data (private_data). 1862 * 1873 * 1863 1874 * The ac97 instance is registered as a low-level device, so you don't 1864 1875 * have to release it manually. … … 1897 1908 ac97->addr = template->addr; 1898 1909 ac97->scaps = template->scaps; 1899 ac97->limited_regs = template->limited_regs; 1900 memcpy(ac97->reg_accessed, template->reg_accessed, sizeof(ac97->reg_accessed)); 1910 ac97->res_table = template->res_table; 1901 1911 bus->codec[ac97->num] = ac97; 1902 1912 init_MUTEX(&ac97->reg_mutex); … … 1955 1965 if (pid) 1956 1966 ac97->flags |= pid->flags; 1957 1967 1958 1968 /* test for AC'97 */ 1959 1969 if (!(ac97->scaps & AC97_SCAP_SKIP_AUDIO) && !(ac97->scaps & AC97_SCAP_AUDIO)) { … … 2040 2050 snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS)); 2041 2051 } 2042 2052 2043 2053 __ready_ok: 2044 2054 if (ac97_is_audio(ac97)) … … 2139 2149 if (ac97->scaps && ac97_is_audio(ac97)) { 2140 2150 reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS); 2141 if (ac97->scaps & AC97_SCAP_SURROUND_DAC) 2151 if (ac97->scaps & AC97_SCAP_SURROUND_DAC) 2142 2152 reg &= ~AC97_EA_PRJ; 2143 if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC) 2153 if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC) 2144 2154 reg &= ~(AC97_EA_PRI | AC97_EA_PRK); 2145 2155 snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg); … … 2316 2326 else 2317 2327 strcpy(dst, src); 2318 } 2328 } 2319 2329 2320 2330 /* remove the control with the given name and optional suffix */ … … 2443 2453 } 2444 2454 2445 static const struct snd_kcontrol_new snd_ac97_alc_jack_detect = 2455 static const struct snd_kcontrol_new snd_ac97_alc_jack_detect = 2446 2456 AC97_SINGLE("Jack Detect", AC97_ALC650_CLOCK, 5, 1, 0); 2447 2457 -
GPL/trunk/alsa-kernel/pci/ac97/ac97_patch.c
r72 r76 390 390 /* This is known to work for the ViewSonic ViewPad 1000 391 391 * Randolph Bentson <bentson@holmsjoen.com> 392 * WM9703/9707/9708/9717 392 * WM9703/9707/9708/9717 393 393 */ 394 394 int err, i; 395 395 396 396 for (i = 0; i < ARRAY_SIZE(wm97xx_snd_ac97_controls); i++) { 397 397 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm97xx_snd_ac97_controls[i], ac97))) < 0) … … 474 474 static const char* wm9711_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"}; 475 475 static const char* wm9711_mic[] = {"Mic 1", "Differential", "Mic 2", "Stereo"}; 476 static const char* wm9711_rec_sel[] = 476 static const char* wm9711_rec_sel[] = 477 477 {"Mic 1", "NC", "NC", "Master Mix", "Line", "Headphone Mix", "Phone Mix", "Phone"}; 478 478 static const char* wm9711_ng_type[] = {"Constant Gain", "Mute"}; … … 572 572 { 573 573 int err, i; 574 574 575 575 for (i = 0; i < ARRAY_SIZE(wm9711_snd_ac97_controls); i++) { 576 576 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm9711_snd_ac97_controls[i], ac97))) < 0) … … 597 597 ac97->flags |= AC97_HAS_NO_REC_GAIN | AC97_STEREO_MUTES | AC97_HAS_NO_MIC | 598 598 AC97_HAS_NO_PC_BEEP | AC97_HAS_NO_VIDEO | AC97_HAS_NO_CD; 599 599 600 600 return 0; 601 601 } … … 603 603 static const char* wm9713_mic_mixer[] = {"Stereo", "Mic 1", "Mic 2", "Mute"}; 604 604 static const char* wm9713_rec_mux[] = {"Stereo", "Left", "Right", "Mute"}; 605 static const char* wm9713_rec_src[] = 606 {"Mic 1", "Mic 2", "Line", "Mono In", "Headphone Mix", "Master Mix", 605 static const char* wm9713_rec_src[] = 606 {"Mic 1", "Mic 2", "Line", "Mono In", "Headphone Mix", "Master Mix", 607 607 "Mono Mix", "Zh"}; 608 608 static const char* wm9713_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"}; 609 609 static const char* wm9713_alc_select[] = {"None", "Left", "Right", "Stereo"}; 610 610 static const char* wm9713_mono_pga[] = {"Vmid", "Zh", "Mono Mix", "Inv 1"}; 611 static const char* wm9713_spk_pga[] = 611 static const char* wm9713_spk_pga[] = 612 612 {"Vmid", "Zh", "Headphone Mix", "Master Mix", "Inv", "NC", "NC", "NC"}; 613 613 static const char* wm9713_hp_pga[] = {"Vmid", "Zh", "Headphone Mix", "NC"}; 614 614 static const char* wm9713_out3_pga[] = {"Vmid", "Zh", "Inv 1", "NC"}; 615 615 static const char* wm9713_out4_pga[] = {"Vmid", "Zh", "Inv 2", "NC"}; 616 static const char* wm9713_dac_inv[] = 617 {"Off", "Mono Mix", "Master Mix", "Headphone Mix L", "Headphone Mix R", 616 static const char* wm9713_dac_inv[] = 617 {"Off", "Mono Mix", "Master Mix", "Headphone Mix L", "Headphone Mix R", 618 618 "Headphone Mix Mono", "NC", "Vmid"}; 619 619 static const char* wm9713_base[] = {"Linear Control", "Adaptive Boost"}; … … 739 739 { 740 740 int err, i; 741 741 742 742 for (i = 0; i < ARRAY_SIZE(wm13_snd_ac97_controls_3d); i++) { 743 743 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls_3d[i], ac97))) < 0) … … 750 750 { 751 751 int err, i; 752 752 753 753 for (i = 0; i < ARRAY_SIZE(wm13_snd_ac97_controls); i++) { 754 754 if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls[i], ac97))) < 0) … … 783 783 .build_specific = patch_wolfson_wm9713_specific, 784 784 .build_3d = patch_wolfson_wm9713_3d, 785 #ifdef CONFIG_PM 785 #ifdef CONFIG_PM 786 786 .suspend = patch_wolfson_wm9713_suspend, 787 787 .resume = patch_wolfson_wm9713_resume … … 1184 1184 1185 1185 /* Gateway M675 notebook */ 1186 if (ac97->pci && 1186 if (ac97->pci && 1187 1187 ac97->subsystem_vendor == 0x107b && 1188 1188 ac97->subsystem_device == 0x0601) … … 1248 1248 1249 1249 ac97->build_ops = &patch_cirrus_ops; 1250 ac97->flags |= AC97_CS_SPDIF; 1250 ac97->flags |= AC97_CS_SPDIF; 1251 1251 ac97->rates[AC97_RATES_SPDIF] &= ~SNDRV_PCM_RATE_32000; 1252 1252 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ … … 1259 1259 /* force the detection of PC Beep */ 1260 1260 ac97->flags |= AC97_HAS_PC_BEEP; 1261 1261 1262 1262 return patch_cirrus_spdif(ac97); 1263 1263 } … … 1398 1398 static int cfg_bits[3] = { 1<<12, 1<<14, 1<<13 }; 1399 1399 unsigned short val; 1400 1400 1401 1401 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, cfg_bits[idx]); 1402 1402 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0004); // SDIE … … 1449 1449 {0, 1} 1450 1450 }; 1451 1451 1452 1452 // patch for Analog Devices 1453 1453 unsigned short codecs[3]; … … 1487 1487 /* ok, deselect all ID bits */ 1488 1488 snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0000); 1489 ac97->spec.ad18xx.codec_cfg[0] = 1490 ac97->spec.ad18xx.codec_cfg[1] = 1489 ac97->spec.ad18xx.codec_cfg[0] = 1490 ac97->spec.ad18xx.codec_cfg[1] = 1491 1491 ac97->spec.ad18xx.codec_cfg[2] = 0x0000; 1492 1492 } … … 1846 1846 { 1847 1847 unsigned short misc; 1848 1848 1849 1849 patch_ad1881(ac97); 1850 1850 ac97->build_ops = &patch_ad1888_build_ops; … … 1920 1920 { 1921 1921 unsigned short misc; 1922 1922 1923 1923 patch_ad1881(ac97); 1924 1924 ac97->build_ops = &patch_ad1985_build_ops; … … 1949 1949 { 1950 1950 int shared; 1951 1951 1952 1952 /* shared Line-In */ 1953 1953 shared = is_shared_linein(ac97); … … 2041 2041 2042 2042 /* enable AC97_ALC650_GPIO_SETUP, AC97_ALC650_CLOCK for R/W */ 2043 snd_ac97_write_cache(ac97, AC97_ALC650_GPIO_STATUS, 2043 snd_ac97_write_cache(ac97, AC97_ALC650_GPIO_STATUS, 2044 2044 snd_ac97_read(ac97, AC97_ALC650_GPIO_STATUS) | 0x8000); 2045 2045 … … 2076 2076 { 2077 2077 int shared; 2078 2078 2079 2079 /* shared Line-In */ 2080 2080 shared = is_shared_linein(ac97); … … 2222 2222 { 2223 2223 int shared; 2224 2224 2225 2225 /* shared Line-In */ 2226 2226 shared = is_shared_linein(ac97); … … 2365 2365 2366 2366 return snd_ac97_update_bits(ac97, AC97_CM9739_SPDIF_CTRL, 2367 0x01 << 1, 2367 0x01 << 1, 2368 2368 (ucontrol->value.enumerated.item[0] & 0x01) << 1); 2369 2369 } … … 2381 2381 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Valid Switch", AC97_CM9739_SPDIF_CTRL, 2, 1, 0), 2382 2382 /* BIT 3: SPI2F */ 2383 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Monitor", AC97_CM9739_SPDIF_CTRL, 3, 1, 0), 2383 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Monitor", AC97_CM9739_SPDIF_CTRL, 3, 1, 0), 2384 2384 /* BIT 4: SPI2SDI */ 2385 2385 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), AC97_CM9739_SPDIF_CTRL, 4, 1, 0), … … 2569 2569 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Valid Switch", AC97_CM9761_SPDIF_CTRL, 2, 1, 0), 2570 2570 /* BIT 3: SPI2F */ 2571 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Monitor", AC97_CM9761_SPDIF_CTRL, 3, 1, 0), 2571 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Monitor", AC97_CM9761_SPDIF_CTRL, 3, 1, 0), 2572 2572 /* BIT 4: SPI2SDI */ 2573 2573 AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), AC97_CM9761_SPDIF_CTRL, 4, 1, 0), … … 2661 2661 return 0; 2662 2662 } 2663 2663 2664 2664 #define AC97_CM9780_SIDE 0x60 2665 2665 #define AC97_CM9780_JACK 0x62 … … 2824 2824 return 0; 2825 2825 } 2826 2827 /* 2828 * LM 4550 Codec 2829 * 2830 * We use a static resolution table since LM4550 codec cannot be 2831 * properly autoprobed to determine the resolution via 2832 * check_volume_resolution(). 2833 */ 2834 2835 static struct snd_ac97_res_table lm4550_restbl[] = { 2836 { AC97_MASTER, 0x1f1f }, 2837 { AC97_HEADPHONE, 0x1f1f }, 2838 { AC97_MASTER_MONO, 0x001f }, 2839 { AC97_PC_BEEP, 0x001f }, /* LSB is ignored */ 2840 { AC97_PHONE, 0x001f }, 2841 { AC97_MIC, 0x001f }, 2842 { AC97_LINE, 0x1f1f }, 2843 { AC97_CD, 0x1f1f }, 2844 { AC97_VIDEO, 0x1f1f }, 2845 { AC97_AUX, 0x1f1f }, 2846 { AC97_PCM, 0x1f1f }, 2847 { AC97_REC_GAIN, 0x0f0f }, 2848 {0} /* terminator */ 2849 }; 2850 2851 int patch_lm4550(struct snd_ac97 *ac97) 2852 { 2853 ac97->res_table = lm4550_restbl; 2854 return 0; 2855 } 2856 -
GPL/trunk/alsa-kernel/pci/ac97/ac97_patch.h
r72 r76 60 60 int patch_it2646(struct snd_ac97 * ac97); 61 61 int mpatch_si3036(struct snd_ac97 * ac97); 62 int patch_lm4550(struct snd_ac97 * ac97);
Note:
See TracChangeset
for help on using the changeset viewer.
