Ignore:
Timestamp:
Apr 9, 2006, 12:09:39 PM (20 years ago)
Author:
vladest
Message:

Latest ALSA patches
HDA patches
Patch for Intel from Rudy's
Fixes locks on NM256 chipsets
Fixes PM on Maestro3 chipsets

Location:
GPL/trunk/alsa-kernel/pci/ac97
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk/alsa-kernel/pci/ac97/ac97_codec.c

    r72 r76  
    144144{ 0x49434511, 0xffffffff, "ICE1232",            NULL,           NULL }, // alias VIA VT1611A?
    145145{ 0x49434514, 0xffffffff, "ICE1232A",           NULL,           NULL },
    146 { 0x49434551, 0xffffffff, "VT1616",             patch_vt1616,   NULL }, 
     146{ 0x49434551, 0xffffffff, "VT1616",             patch_vt1616,   NULL },
    147147{ 0x49434552, 0xffffffff, "VT1616i",            patch_vt1616,   NULL }, // VT1616 compatible (chipset integrated)
    148148{ 0x49544520, 0xffffffff, "IT2226E",            NULL,           NULL },
     
    151151{ 0x4e534331, 0xffffffff, "LM4549",             NULL,           NULL },
    152152{ 0x4e534350, 0xffffffff, "LM4550",             NULL,           NULL },
     153{ 0x4e534350, 0xffffffff, "LM4550",             patch_lm4550,   NULL }, // volume wrap fix
    153154{ 0x50534304, 0xffffffff, "UCB1400",            NULL,           NULL },
    154155{ 0x53494c20, 0xffffffe0, "Si3036,8",           mpatch_si3036,  mpatch_si3036, AC97_MODEM_PATCH },
     
    192193static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg)
    193194{
    194         if (ac97->limited_regs && ! test_bit(reg, ac97->reg_accessed))
    195                 return 0;
    196 
    197195        /* filter some registers for buggy codecs */
    198196        switch (ac97->id) {
     
    257255/**
    258256 * snd_ac97_read - read a value from the given register
    259  * 
     257 *
    260258 * @ac97: the ac97 instance
    261259 * @reg: the register to read
     
    411409{
    412410        struct ac97_enum *e = (struct ac97_enum *)kcontrol->private_value;
    413        
     411
    414412        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
    415413        uinfo->count = e->shift_l == e->shift_r ? 1 : 2;
    416414        uinfo->value.enumerated.items = e->mask;
    417        
     415
    418416        if (uinfo->value.enumerated.item > e->mask - 1)
    419417                uinfo->value.enumerated.item = e->mask - 1;
     
    427425        struct ac97_enum *e = (struct ac97_enum *)kcontrol->private_value;
    428426        unsigned short val, bitmask;
    429        
     427
    430428        for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
    431429                ;
     
    444442        unsigned short val;
    445443        unsigned short mask, bitmask;
    446        
     444
    447445        for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
    448446                ;
     
    530528        int err, page_save;
    531529        unsigned short val, val2, val_mask;
    532        
     530
    533531        page_save = snd_ac97_page_save(ac97, reg, kcontrol);
    534532        val = (ucontrol->value.integer.value[0] & mask);
     
    580578};
    581579
    582 static const struct snd_kcontrol_new snd_ac97_control_capture_src = 
    583 AC97_ENUM("Capture Source", std_enum[0]); 
     580static const struct snd_kcontrol_new snd_ac97_control_capture_src =
     581AC97_ENUM("Capture Source", std_enum[0]);
    584582
    585583static const struct snd_kcontrol_new snd_ac97_control_capture_vol =
     
    648646        return 0;
    649647}
    650                        
     648
    651649static int snd_ac97_spdif_cmask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
    652650{
     
    660658        return 0;
    661659}
    662                        
     660
    663661static int snd_ac97_spdif_pmask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
    664662{
     
    683681        return 0;
    684682}
    685                        
     683
    686684static int snd_ac97_spdif_default_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
    687685{
     
    735733                v = new & (IEC958_AES0_CON_EMPHASIS_5015|IEC958_AES0_CON_NOT_COPYRIGHT) ? 0 : AC97_CXR_COPYRGT;
    736734                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,
    738736                                                      AC97_CXR_SPDIF_MASK | AC97_CXR_COPYRGT,
    739737                                                      v);
     
    845843        int rshift = (kcontrol->private_value >> 12) & 0x0f;
    846844        int mask = (kcontrol->private_value >> 16) & 0xff;
    847        
     845
    848846        ucontrol->value.integer.value[0] = mask - ((ac97->spec.ad18xx.pcmreg[codec] >> lshift) & mask);
    849847        if (lshift != rshift && (ac97->flags & AC97_STEREO_MUTES))
     
    860858        int mask = (kcontrol->private_value >> 16) & 0xff;
    861859        unsigned short val, valmask;
    862        
     860
    863861        val = (mask - (ucontrol->value.integer.value[0] & mask)) << lshift;
    864862        valmask = mask << lshift;
     
    888886        struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol);
    889887        int codec = kcontrol->private_value & 3;
    890        
     888
    891889        down(&ac97->page_mutex);
    892890        ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31);
     
    901899        int codec = kcontrol->private_value & 3;
    902900        unsigned short val1, val2;
    903        
     901
    904902        val1 = 31 - (ucontrol->value.integer.value[0] & 31);
    905903        val2 = 31 - (ucontrol->value.integer.value[1] & 31);
     
    10081006        }
    10091007
    1010         if (ac97->limited_regs && test_bit(reg, ac97->reg_accessed))
    1011                 return 1; /* allow without check */
    1012 
    10131008        val = snd_ac97_read(ac97, reg);
    10141009        if (!(val & mask)) {
     
    10301025        int i;
    10311026
    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;
    10331040        for (i = 0 ; i < ARRAY_SIZE(cbit); i++) {
    10341041                unsigned short val;
     
    12431250        /* build master controls */
    12441251        /* 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
    12461254                if (ac97->flags & AC97_HAS_NO_MASTER_VOL)
    12471255                        err = snd_ac97_cmute_new(card, "Master Playback Switch", AC97_MASTER, ac97);
    1248                 else
     1256                else
     1257#endif
    12491258                        err = snd_ac97_cmix_new(card, "Master Playback", AC97_MASTER, ac97);
    12501259                if (err < 0)
     
    12901299                        return err;
    12911300        }
    1292        
     1301
    12931302        /* build master mono controls */
    12941303        if (snd_ac97_try_volume_mix(ac97, AC97_MASTER_MONO)) {
     
    12961305                        return err;
    12971306        }
    1298        
     1307
    12991308        /* build master tone controls */
    13001309        if (!(ac97->flags & AC97_HAS_NO_TONE)) {
     
    13111320                }
    13121321        }
    1313        
     1322
    13141323        /* build PC Speaker controls */
    1315         if (!(ac97->flags & AC97_HAS_NO_PC_BEEP) && 
     1324        if (!(ac97->flags & AC97_HAS_NO_PC_BEEP) &&
    13161325                ((ac97->flags & AC97_HAS_PC_BEEP) ||
    13171326            snd_ac97_try_volume_mix(ac97, AC97_PC_BEEP))) {
     
    13221331                                     snd_ac97_read(ac97, AC97_PC_BEEP) | 0x801e);
    13231332        }
    1324        
     1333
    13251334        /* build Phone controls */
    13261335        if (!(ac97->flags & AC97_HAS_NO_PHONE)) {
     
    13301339                }
    13311340        }
    1332        
     1341
    13331342        /* build MIC controls */
    13341343        if (!(ac97->flags & AC97_HAS_NO_MIC)) {
     
    13461355                        return err;
    13471356        }
    1348        
     1357
    13491358        /* build CD controls */
    13501359        if (!(ac97->flags & AC97_HAS_NO_CD)) {
     
    13541363                }
    13551364        }
    1356        
     1365
    13571366        /* build Video controls */
    13581367        if (!(ac97->flags & AC97_HAS_NO_VIDEO)) {
     
    13971406                snd_ac97_write_cache(ac97, AC97_PCM, init_val);
    13981407        } else {
    1399                 if (!(ac97->flags & AC97_HAS_NO_STD_PCM)) {
     1408            if (!(ac97->flags & AC97_HAS_NO_STD_PCM)) {
     1409#ifndef TARGET_OS2
    14001410                        if (ac97->flags & AC97_HAS_NO_PCM_VOL)
    14011411                                err = snd_ac97_cmute_new(card, "PCM Playback Switch", AC97_PCM, ac97);
    1402                         else
     1412                        else
     1413#endif
    14031414                                err = snd_ac97_cmix_new(card, "PCM Playback", AC97_PCM, ac97);
    14041415                        if (err < 0)
     
    15141525                ac97->spdif_status = SNDRV_PCM_DEFAULT_CON_SPDIF;
    15151526        }
    1516        
     1527
    15171528        /* build chip specific controls */
    15181529        if (ac97->build_ops->build_specific)
     
    15751586        unsigned short saved;
    15761587
    1577         if (ac97->bus->no_vra) {
     1588        if (ac97->bus->no_vra || !(ac97->ext_id & AC97_EI_VRA) ) {
    15781589                *r_result = SNDRV_PCM_RATE_48000;
    15791590                if ((ac97->flags & AC97_DOUBLE_RATE) &&
     
    16781689                    (! modem && ! (pid->flags & AC97_MODEM_PATCH)))
    16791690                        pid->patch(ac97);
    1680         } 
     1691        }
    16811692
    16821693        pid = look_for_codec_id(snd_ac97_codec_ids, id);
     
    17221733        end_time = jiffies + timeout;
    17231734        do {
    1724                
     1735
    17251736                /* use preliminary reads to settle the communication */
    17261737                snd_ac97_read(ac97, AC97_RESET);
     
    17651776 * The ops table must include valid callbacks (at least read and
    17661777 * write).  The other callbacks, wait and reset, are not mandatory.
    1767  * 
     1778 *
    17681779 * The clock is set to 48000.  If another clock is needed, set
    17691780 * (*rbus)->clock manually.
     
    18601871 * The template must include the codec number (num) and address (addr),
    18611872 * and the private data (private_data).
    1862  * 
     1873 *
    18631874 * The ac97 instance is registered as a low-level device, so you don't
    18641875 * have to release it manually.
     
    18971908        ac97->addr = template->addr;
    18981909        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;
    19011911        bus->codec[ac97->num] = ac97;
    19021912        init_MUTEX(&ac97->reg_mutex);
     
    19551965        if (pid)
    19561966                ac97->flags |= pid->flags;
    1957        
     1967
    19581968        /* test for AC'97 */
    19591969        if (!(ac97->scaps & AC97_SCAP_SKIP_AUDIO) && !(ac97->scaps & AC97_SCAP_AUDIO)) {
     
    20402050                snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
    20412051        }
    2042        
     2052
    20432053      __ready_ok:
    20442054        if (ac97_is_audio(ac97))
     
    21392149        if (ac97->scaps && ac97_is_audio(ac97)) {
    21402150                reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS);
    2141                 if (ac97->scaps & AC97_SCAP_SURROUND_DAC) 
     2151                if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
    21422152                        reg &= ~AC97_EA_PRJ;
    2143                 if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC) 
     2153                if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC)
    21442154                        reg &= ~(AC97_EA_PRI | AC97_EA_PRK);
    21452155                snd_ac97_write_cache(ac97, AC97_EXTENDED_STATUS, reg);
     
    23162326        else
    23172327                strcpy(dst, src);
    2318 }       
     2328}
    23192329
    23202330/* remove the control with the given name and optional suffix */
     
    24432453}
    24442454
    2445 static const struct snd_kcontrol_new snd_ac97_alc_jack_detect = 
     2455static const struct snd_kcontrol_new snd_ac97_alc_jack_detect =
    24462456AC97_SINGLE("Jack Detect", AC97_ALC650_CLOCK, 5, 1, 0);
    24472457
  • GPL/trunk/alsa-kernel/pci/ac97/ac97_patch.c

    r72 r76  
    390390        /* This is known to work for the ViewSonic ViewPad 1000
    391391         * Randolph Bentson <bentson@holmsjoen.com>
    392          * WM9703/9707/9708/9717 
     392         * WM9703/9707/9708/9717
    393393         */
    394394        int err, i;
    395        
     395
    396396        for (i = 0; i < ARRAY_SIZE(wm97xx_snd_ac97_controls); i++) {
    397397                if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm97xx_snd_ac97_controls[i], ac97))) < 0)
     
    474474static const char* wm9711_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
    475475static const char* wm9711_mic[] = {"Mic 1", "Differential", "Mic 2", "Stereo"};
    476 static const char* wm9711_rec_sel[] = 
     476static const char* wm9711_rec_sel[] =
    477477        {"Mic 1", "NC", "NC", "Master Mix", "Line", "Headphone Mix", "Phone Mix", "Phone"};
    478478static const char* wm9711_ng_type[] = {"Constant Gain", "Mute"};
     
    572572{
    573573        int err, i;
    574        
     574
    575575        for (i = 0; i < ARRAY_SIZE(wm9711_snd_ac97_controls); i++) {
    576576                if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm9711_snd_ac97_controls[i], ac97))) < 0)
     
    597597        ac97->flags |= AC97_HAS_NO_REC_GAIN | AC97_STEREO_MUTES | AC97_HAS_NO_MIC |
    598598                AC97_HAS_NO_PC_BEEP | AC97_HAS_NO_VIDEO | AC97_HAS_NO_CD;
    599        
     599
    600600        return 0;
    601601}
     
    603603static const char* wm9713_mic_mixer[] = {"Stereo", "Mic 1", "Mic 2", "Mute"};
    604604static 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", 
     605static const char* wm9713_rec_src[] =
     606        {"Mic 1", "Mic 2", "Line", "Mono In", "Headphone Mix", "Master Mix",
    607607        "Mono Mix", "Zh"};
    608608static const char* wm9713_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
    609609static const char* wm9713_alc_select[] = {"None", "Left", "Right", "Stereo"};
    610610static const char* wm9713_mono_pga[] = {"Vmid", "Zh", "Mono Mix", "Inv 1"};
    611 static const char* wm9713_spk_pga[] = 
     611static const char* wm9713_spk_pga[] =
    612612        {"Vmid", "Zh", "Headphone Mix", "Master Mix", "Inv", "NC", "NC", "NC"};
    613613static const char* wm9713_hp_pga[] = {"Vmid", "Zh", "Headphone Mix", "NC"};
    614614static const char* wm9713_out3_pga[] = {"Vmid", "Zh", "Inv 1", "NC"};
    615615static 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", 
     616static const char* wm9713_dac_inv[] =
     617        {"Off", "Mono Mix", "Master Mix", "Headphone Mix L", "Headphone Mix R",
    618618        "Headphone Mix Mono", "NC", "Vmid"};
    619619static const char* wm9713_base[] = {"Linear Control", "Adaptive Boost"};
     
    739739{
    740740        int err, i;
    741    
     741
    742742        for (i = 0; i < ARRAY_SIZE(wm13_snd_ac97_controls_3d); i++) {
    743743                if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls_3d[i], ac97))) < 0)
     
    750750{
    751751        int err, i;
    752        
     752
    753753        for (i = 0; i < ARRAY_SIZE(wm13_snd_ac97_controls); i++) {
    754754                if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&wm13_snd_ac97_controls[i], ac97))) < 0)
     
    783783        .build_specific = patch_wolfson_wm9713_specific,
    784784        .build_3d = patch_wolfson_wm9713_3d,
    785 #ifdef CONFIG_PM       
     785#ifdef CONFIG_PM
    786786        .suspend = patch_wolfson_wm9713_suspend,
    787787        .resume = patch_wolfson_wm9713_resume
     
    11841184
    11851185        /* Gateway M675 notebook */
    1186         if (ac97->pci && 
     1186        if (ac97->pci &&
    11871187            ac97->subsystem_vendor == 0x107b &&
    11881188            ac97->subsystem_device == 0x0601)
     
    12481248
    12491249        ac97->build_ops = &patch_cirrus_ops;
    1250         ac97->flags |= AC97_CS_SPDIF; 
     1250        ac97->flags |= AC97_CS_SPDIF;
    12511251        ac97->rates[AC97_RATES_SPDIF] &= ~SNDRV_PCM_RATE_32000;
    12521252        ac97->ext_id |= AC97_EI_SPDIF;  /* force the detection of spdif */
     
    12591259        /* force the detection of PC Beep */
    12601260        ac97->flags |= AC97_HAS_PC_BEEP;
    1261        
     1261
    12621262        return patch_cirrus_spdif(ac97);
    12631263}
     
    13981398        static int cfg_bits[3] = { 1<<12, 1<<14, 1<<13 };
    13991399        unsigned short val;
    1400        
     1400
    14011401        snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, cfg_bits[idx]);
    14021402        snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0004);  // SDIE
     
    14491449                {0, 1}
    14501450        };
    1451        
     1451
    14521452        // patch for Analog Devices
    14531453        unsigned short codecs[3];
     
    14871487                /* ok, deselect all ID bits */
    14881488                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] =
    14911491                        ac97->spec.ad18xx.codec_cfg[2] = 0x0000;
    14921492        }
     
    18461846{
    18471847        unsigned short misc;
    1848        
     1848
    18491849        patch_ad1881(ac97);
    18501850        ac97->build_ops = &patch_ad1888_build_ops;
     
    19201920{
    19211921        unsigned short misc;
    1922        
     1922
    19231923        patch_ad1881(ac97);
    19241924        ac97->build_ops = &patch_ad1985_build_ops;
     
    19491949{
    19501950        int shared;
    1951        
     1951
    19521952        /* shared Line-In */
    19531953        shared = is_shared_linein(ac97);
     
    20412041
    20422042        /* 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,
    20442044                snd_ac97_read(ac97, AC97_ALC650_GPIO_STATUS) | 0x8000);
    20452045
     
    20762076{
    20772077        int shared;
    2078        
     2078
    20792079        /* shared Line-In */
    20802080        shared = is_shared_linein(ac97);
     
    22222222{
    22232223        int shared;
    2224        
     2224
    22252225        /* shared Line-In */
    22262226        shared = is_shared_linein(ac97);
     
    23652365
    23662366        return snd_ac97_update_bits(ac97, AC97_CM9739_SPDIF_CTRL,
    2367                                     0x01 << 1, 
     2367                                    0x01 << 1,
    23682368                                    (ucontrol->value.enumerated.item[0] & 0x01) << 1);
    23692369}
     
    23812381        AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Valid Switch", AC97_CM9739_SPDIF_CTRL, 2, 1, 0),
    23822382        /* 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),
    23842384        /* BIT 4: SPI2SDI */
    23852385        AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), AC97_CM9739_SPDIF_CTRL, 4, 1, 0),
     
    25692569        AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Valid Switch", AC97_CM9761_SPDIF_CTRL, 2, 1, 0),
    25702570        /* 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),
    25722572        /* BIT 4: SPI2SDI */
    25732573        AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), AC97_CM9761_SPDIF_CTRL, 4, 1, 0),
     
    26612661        return 0;
    26622662}
    2663        
     2663
    26642664#define AC97_CM9780_SIDE        0x60
    26652665#define AC97_CM9780_JACK        0x62
     
    28242824        return 0;
    28252825}
     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
     2835static 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
     2851int 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  
    6060int patch_it2646(struct snd_ac97 * ac97);
    6161int mpatch_si3036(struct snd_ac97 * ac97);
     62int patch_lm4550(struct snd_ac97 * ac97);
Note: See TracChangeset for help on using the changeset viewer.