lkml.org 
[lkml]   [2012]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 056/241] ALSA: hda - Fix empty DAC filling in patch_via.c
    Date
    3.5.7.2 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Takashi Iwai <tiwai@suse.de>

    commit 5b3761954dac2d1393beef8210eb8cee81d16b8d upstream.

    In via_auto_fill_adc_nids(), the parser tries to fill dac_nids[] at
    the point of the current line-out (i). When no valid path is found
    for this output, this results in dac = 0, thus it creates a hole in
    dac_nids[]. This confuses is_empty_dac() and trims the detected DAC
    in later reference.

    This patch fixes the bug by appending DAC properly to dac_nids[] in
    via_auto_fill_adc_nids().

    Reported-by: Massimo Del Fedele <max@veneto.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
    ---
    sound/pci/hda/patch_via.c | 11 ++++-------
    1 file changed, 4 insertions(+), 7 deletions(-)

    diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
    index 92dff3e..b601888 100644
    --- a/sound/pci/hda/patch_via.c
    +++ b/sound/pci/hda/patch_via.c
    @@ -1866,11 +1866,11 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
    {
    struct via_spec *spec = codec->spec;
    const struct auto_pin_cfg *cfg = &spec->autocfg;
    - int i, dac_num;
    + int i;
    hda_nid_t nid;

    + spec->multiout.num_dacs = 0;
    spec->multiout.dac_nids = spec->private_dac_nids;
    - dac_num = 0;
    for (i = 0; i < cfg->line_outs; i++) {
    hda_nid_t dac = 0;
    nid = cfg->line_out_pins[i];
    @@ -1881,16 +1881,13 @@ static int via_auto_fill_dac_nids(struct hda_codec *codec)
    if (!i && parse_output_path(codec, nid, dac, 1,
    &spec->out_mix_path))
    dac = spec->out_mix_path.path[0];
    - if (dac) {
    - spec->private_dac_nids[i] = dac;
    - dac_num++;
    - }
    + if (dac)
    + spec->private_dac_nids[spec->multiout.num_dacs++] = dac;
    }
    if (!spec->out_path[0].depth && spec->out_mix_path.depth) {
    spec->out_path[0] = spec->out_mix_path;
    spec->out_mix_path.depth = 0;
    }
    - spec->multiout.num_dacs = dac_num;
    return 0;
    }

    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-12-13 15:21    [W:2.409 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site