Comment 22 for bug 939161

Revision history for this message
Takashi Iwai (tiwai) wrote : Re: [PATCH] ALSA: hda - Remove ignore_misc_bit

At Fri, 7 Sep 2012 07:25:44 +0200,
David Henningsson wrote:
>
> The purpose of this flag is unclear. If the problem is that some machines
> have broken misc/NO_PRESENCE bits, they should be fixed by pin fixups.
>
> In addition, this causes jack detection functionality to be flawed on
> the M31EI, where there are two jacks without jack detection (which is
> properly marked as NO_PRESENCE), but due to ignore_misc_bit, these
> jacks are instead being reported as being present but always unplugged.
>
> BugLink: https://bugs.launchpad.net/bugs/939161
> Signed-off-by: David Henningsson <email address hidden>

So this will fix this one case but will break some others certainly.
It's a difficult to judge, but more removal is better, so I'll take
this.

But I still wonder why PulseAudio cares the headphone jack state even
though this has only one output at all?

Takashi

> ---
> sound/pci/hda/hda_auto_parser.c | 4 ----
> sound/pci/hda/hda_codec.h | 1 -
> sound/pci/hda/hda_jack.c | 5 ++---
> 3 files changed, 2 insertions(+), 8 deletions(-)
>
> diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
> index 4f7d2df..9acd5a9 100644
> --- a/sound/pci/hda/hda_auto_parser.c
> +++ b/sound/pci/hda/hda_auto_parser.c
> @@ -141,7 +141,6 @@ int snd_hda_parse_pin_defcfg(struct hda_codec *codec,
> memset(sequences_hp, 0, sizeof(sequences_hp));
> assoc_line_out = 0;
>
> - codec->ignore_misc_bit = true;
> end_nid = codec->start_nid + codec->num_nodes;
> for (nid = codec->start_nid; nid < end_nid; nid++) {
> unsigned int wid_caps = get_wcaps(codec, nid);
> @@ -157,9 +156,6 @@ int snd_hda_parse_pin_defcfg(struct hda_codec *codec,
> continue;
>
> def_conf = snd_hda_codec_get_pincfg(codec, nid);
> - if (!(get_defcfg_misc(snd_hda_codec_get_pincfg(codec, nid)) &
> - AC_DEFCFG_MISC_NO_PRESENCE))
> - codec->ignore_misc_bit = false;
> conn = get_defcfg_connect(def_conf);
> if (conn == AC_JACK_PORT_NONE)
> continue;
> diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
> index 8fd9f63..ee4ae8e 100644
> --- a/sound/pci/hda/hda_codec.h
> +++ b/sound/pci/hda/hda_codec.h
> @@ -861,7 +861,6 @@ struct hda_codec {
> unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */
> unsigned int pins_shutup:1; /* pins are shut up */
> unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
> - unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */
> unsigned int no_jack_detect:1; /* Machine has no jack-detection */
> unsigned int pcm_format_first:1; /* PCM format must be set first */
> unsigned int epss:1; /* supporting EPSS? */
> diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c
> index aaccc02..c9333c9 100644
> --- a/sound/pci/hda/hda_jack.c
> +++ b/sound/pci/hda/hda_jack.c
> @@ -26,9 +26,8 @@ bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)
> return false;
> if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT))
> return false;
> - if (!codec->ignore_misc_bit &&
> - (get_defcfg_misc(snd_hda_codec_get_pincfg(codec, nid)) &
> - AC_DEFCFG_MISC_NO_PRESENCE))
> + if (get_defcfg_misc(snd_hda_codec_get_pincfg(codec, nid)) &
> + AC_DEFCFG_MISC_NO_PRESENCE)
> return false;
> if (!(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP))
> return false;
> --
> 1.7.9.5
>