At Thu, 19 Jan 2012 12:39:28 +0100, David Henningsson wrote:
On 01/19/2012 12:17 PM, Takashi Iwai wrote:
At Thu, 19 Jan 2012 11:35:23 +0100, Takashi Iwai wrote:
At Wed, 18 Jan 2012 17:28:32 +0100, David Henningsson wrote:
Hi Takashi,
I'm troubleshooting a problem with the Realtek quirk/model parsers. The problem is basically that add_jack_kctls call snd_hda_jack_detect_enable, which in turn overwrites the current unsol tag.
E g, first the model parser sets a pin to AC_USRSP_EN | ALC_HP_EVENT, then comes snd_hda_jack_detect_enable and does AC_USRSP_EN | jack->tag.
I'm not sure of the best way to resolve this; either keep the current tag (and mark all jacks as dirty on an unsol event), or read back the current tag and set it as jack->action (and then always use the jack table). What do you think?
I think a safer way is to avoid calling snd_hda_jack_add_kctls() for non-auto-parser, and let quirks use its own unsol_event handler instead of alc_sku_unsol_event(). snd_hda_jack_detect() itself works both with or without jack-kctls.
I'll fix up the upstream tree.
The patch below.
Thanks for quick handling. This will mean no jack kctls for model parsers, which is a bit sad, but hopefully its an incentive for people to move to auto-parsers.
One review comment below:
@@ -645,6 +638,19 @@ static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) snd_hda_jack_report_sync(codec); }
+/* unsolicited event for HP jack sensing */ +static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) +{
- struct alc_spec *spec = codec->spec;
- if (codec->vendor_id == 0x10ec0880)
res>>= 28;
- else
res>>= 26;
- if (spec->use_jack_tbl)
res = snd_hda_jack_get_action(codec, res);
Can the check for spec->use_jack_tbl can be removed here?
Hm, good point. Actually, the whole changes for creating own unsol_event() weren't necessary.
OTOH, separating the handlers makes cleaner, i.e. eventually we can drop spec->use_jack_tbl field completely. Let's do it in another patch.
thanks,
Takashi