On 2014-10-24 22:33, Sjoerd Simons wrote: > In case there are two independent jacks for one port (e.g. Dock > Headphone Jack and Headphone Jack), the availability ends up being > incorrect for one of the first was _NO (not plugged) and the second gets > _YES (plugged). Also pulse complains about the state being inconsistent > which isn't true. > > Fix this by preferring higher states (_YES > _NO > _UNKNOWN) Thanks, I agree with this conclusion. I didn't really know what to do with one jack being yes and another being no, but the above reasoning makes sense. I'm not sure I'm happy with just a simple ">" comparison - in case we add more jack states in the future, they might not fit with the ">" scheme. But maybe we should deal with that when the problem comes and just take your patch as-is now. What do other people think? > --- > src/modules/alsa/module-alsa-card.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c > index ed332e0..0026e0f 100644 > --- a/src/modules/alsa/module-alsa-card.c > +++ b/src/modules/alsa/module-alsa-card.c > @@ -335,14 +335,8 @@ static void report_port_state(pa_device_port *p, struct userdata *u) { > > cpa = jack->plugged_in ? jack->state_plugged : jack->state_unplugged; > > - /* "Yes" and "no" trumphs "unknown" if we have more than one jack */ > - if (cpa == PA_AVAILABLE_UNKNOWN) > - continue; > - > - if ((cpa == PA_AVAILABLE_NO && pa == PA_AVAILABLE_YES) || > - (pa == PA_AVAILABLE_NO && cpa == PA_AVAILABLE_YES)) > - pa_log_warn("Availability of port '%s' is inconsistent!", p->name); > - else > + /* Prefer going towards _YES in case of multiple jacks */ > + if (cpa > pa) > pa = cpa; > } > > -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic