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

Reply via email to