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 <david.hennings...@canonical.com>

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 Desktop
Packages, which is subscribed to alsa-driver in Ubuntu.
https://bugs.launchpad.net/bugs/1060729

Title:
  [Lenovo X200s] Headphone Jacks state error

Status in “alsa-driver” package in Ubuntu:
  In Progress

Bug description:
  My Lenovo X200s has only one "Green Color Headphone Jack"
  http://www.thinkwiki.org/wiki/Category:X200s

  But in amixer and I quoted David Henningsson:
  https://bugs.freedesktop.org/show_bug.cgi?id=51354#c6
  >>>
  -------------
  numid=23,iface=CARD,name='Headphone Jack',index=1
    ; type=BOOLEAN,access=r-------,values=1
    : values=on
  -------------
  The problem is that 'Headphone Jack' has an index > 0. This is done by ALSA 
when there are two different headphone jacks and has no other way to 
distinguish them. If there is no other 'Headphone Jack', without an index, it's 
a bug in ALSA.
   >>>
  Therefor I filed this bug report.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1060729/+subscriptions

-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to