At Wed, 3 Oct 2012 11:12:53 +0200, David Henningsson wrote: > > In case there is one "Headphone Jack" and one "Dock Headphone Jack", > one of them will get an index, even though that is not needed. > This patch fixes that issue. > > BugLink: https://bugs.launchpad.net/bugs/1060729 > Signed-off-by: David Henningsson <[email protected]>
Applied. This one doesn't need to go to stable, right? Takashi > --- > sound/pci/hda/hda_auto_parser.c | 49 > +++++++++++++++++++++++++++++---------- > 1 file changed, 37 insertions(+), 12 deletions(-) > > Alsa-info at: https://launchpadlibrarian.net/118211803/AlsaInfo > > diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c > index a98e25e..4ec6dc8 100644 > --- a/sound/pci/hda/hda_auto_parser.c > +++ b/sound/pci/hda/hda_auto_parser.c > @@ -498,6 +498,38 @@ static const char *check_output_sfx(hda_nid_t nid, const > hda_nid_t *pins, > return channel_sfx[i]; > } > > +static const char *check_output_pfx(struct hda_codec *codec, hda_nid_t nid) > +{ > + unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); > + int attr = snd_hda_get_input_pin_attr(def_conf); > + > + /* check the location */ > + switch (attr) { > + case INPUT_PIN_ATTR_DOCK: > + return "Dock "; > + case INPUT_PIN_ATTR_FRONT: > + return "Front "; > + } > + return ""; > +} > + > +static int get_hp_label_index(struct hda_codec *codec, hda_nid_t nid, > + const hda_nid_t *pins, int num_pins) > +{ > + int i, j, idx = 0; > + > + const char *pfx = check_output_pfx(codec, nid); > + > + i = find_idx_in_nid_list(nid, pins, num_pins); > + if (i < 0) > + return -1; > + for (j = 0; j < i; j++) > + if (pfx == check_output_pfx(codec, pins[j])) > + idx++; > + > + return idx; > +} > + > static int fill_audio_out_name(struct hda_codec *codec, hda_nid_t nid, > const struct auto_pin_cfg *cfg, > const char *name, char *label, int maxlen, > @@ -505,20 +537,13 @@ static int fill_audio_out_name(struct hda_codec *codec, > hda_nid_t nid, > { > unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); > int attr = snd_hda_get_input_pin_attr(def_conf); > - const char *pfx = "", *sfx = ""; > + const char *pfx, *sfx = ""; > > /* handle as a speaker if it's a fixed line-out */ > if (!strcmp(name, "Line Out") && attr == INPUT_PIN_ATTR_INT) > name = "Speaker"; > - /* check the location */ > - switch (attr) { > - case INPUT_PIN_ATTR_DOCK: > - pfx = "Dock "; > - break; > - case INPUT_PIN_ATTR_FRONT: > - pfx = "Front "; > - break; > - } > + pfx = check_output_pfx(codec, nid); > + > if (cfg) { > /* try to give a unique suffix if needed */ > sfx = check_output_sfx(nid, cfg->line_out_pins, cfg->line_outs, > @@ -528,8 +553,8 @@ static int fill_audio_out_name(struct hda_codec *codec, > hda_nid_t nid, > indexp); > if (!sfx) { > /* don't add channel suffix for Headphone controls */ > - int idx = find_idx_in_nid_list(nid, cfg->hp_pins, > - cfg->hp_outs); > + int idx = get_hp_label_index(codec, nid, cfg->hp_pins, > + cfg->hp_outs); > if (idx >= 0) > *indexp = idx; > sfx = ""; > -- > 1.7.9.5 > -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1060729 Title: [Lenovo X200s] Headphone Jacks state error To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1060729/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
