[alsa-devel] snd jack report and unsolicited event ad1988

Takashi Iwai tiwai at suse.de
Mon May 9 14:09:52 CEST 2011


At Mon, 9 May 2011 11:56:11 +0800,
Raymond Yau wrote:
> 
> 2011/5/5 Takashi Iwai <tiwai at suse.de>
> 
> >> This mean that the driver need to define FRONT_MIC_EVENT, REAR_MIC_EVENT,
> >> LINE_IN_EVENT in addition to HP_EVENT
> 
> >Does it mean that the codec can't accept the same id tag for multiple
> >pins?
> 
> No, the event can be received by the event handler but there is no way to
> know the event is related to which jack

Yeah, sure, if you want to distinguish each pin, you have to assign
different ids.  But it's independent from my question.

Your statement sounded as if the multiple pins aren't allowed to have
the same tag on AD codec.  But, it seems that it's OK, judging from
your follow up.


> >> Can  snd_jack_report used to report the mic event of two pink jacks
> (front
> >> panel and rear panel) of the desktop to the user space program?
> 
> > I assumed so, but someone needs to confirm.
> > Assigning different tags is easy and safe, so even if it worked, we
> > can go forward for individual tags.
> 
> So  the point is whether the user space program need to know
> 
> 1) the event is related to the plug in or out of the front mic jack / rear
> mic jack
> 2) whether earphone or speaker is plugged into correct/wrong jacks by
> measured impedance .

In some time future, yes, a program like PulseAudio would like to know
and behave reactively to the plug state.  But, in that case, the whole
driver design should be changed -- the kernel driver should do as
little as possible regarding the jack task switching.

> 
>  So, adding some delay like below makes it working?
> >
> 
>        if (!codec->no_trigger_sense) {
> >                pincap = snd_hda_query_pin_caps(codec, nid);
> > -               if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
> > +               if (pincap & AC_PINCAP_TRIG_REQ) { /* need trigger? */
> >                        snd_hda_codec_read(codec, nid, 0,
> >                                        AC_VERB_SET_PIN_SENSE, 0);
> > +                       if (codec->trigger_delay > 0)
> > +                               mdelay(codec->trigger_delay);
> > +               }
> >        }
> >        return snd_hda_codec_read(codec, nid, 0,
> >                                  AC_VERB_GET_PIN_SENSE, 0);
> >
> 
> Noise appear  when delay is add at here

In which situation?  From unplugged to plugged?

> Have to wait until someone find a safe way to get the impedance without any
> side effect

Looks so.

>        spec->vmaster_nid = 0x04;
> >
> > -       codec->no_trigger_sense = 1;
> > +       /* codec->no_trigger_sense = 1; */
> > +       codec->trigger_delay = 5;
> >        codec->no_sticky_stream = 1;
> >
> >        return 0;
> >
> 
> 
> So no need to change if the objective of snd_hda_jack_detect() is to get
> presence detect bit
> 
> As mentioned in 729d55ba972348234759f8e40abf8d
> e020f0d505
> 
> use tigger at pin-sensing seem generate a lot of responses

When the unsol events are triggered, more exactly?
If these are issued at once, the events can be filtered out by
checking some flag or checking some timeout, etc.  If an event is
still triggered at 100ms after the actual plugging, it's a bit
problem...


Takashi


More information about the Alsa-devel mailing list