Date: Sun, 27 Jul 2014 02:50:46 -0700 From: Adrian Chadd <adrian@freebsd.org> To: Alexander Motin <mav@freebsd.org> Cc: "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, Mark Johnston <markj@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org> Subject: Re: svn commit: r268584 - head/sys/dev/sound/pci/hda Message-ID: <CAJ-Vmok0RRvV8QiZPE80CCOJg-wMN6W-00vBdrL_A0ZdYZHQFw@mail.gmail.com> In-Reply-To: <53D4BDF4.3040207@FreeBSD.org> References: <201407131031.s6DAVTja093433@svn.freebsd.org> <CAJ-Vmo=hsK6k6VPcig69srL%2BV_AO5yQo4z%2B2XycvGB6_fRwSGg@mail.gmail.com> <53C335EF.2090606@FreeBSD.org> <CAJ-VmomUm7JdNk-aX2UOKQMO9LhRh6LhPTNBQu8MCJ%2BPtnWLKw@mail.gmail.com> <CAJ-Vmo=SXQYHFFB3wg=CaC1w_ZJG7M1Hq5mW-nL1GRPYrq9tqQ@mail.gmail.com> <CAJ-Vmo=UTQeETt3sqPSApFfoes-oRS7Akq_WOOd3Mdbi_Kr3Ug@mail.gmail.com> <53D4BA51.7070505@FreeBSD.org> <CAJ-Vmok0U%2B=Or2_vtLjpBqoPZ9bsHUFXMTrwV2E8K=f%2BQxVcSg@mail.gmail.com> <CAJ-Vmok06k=SmtkBeWaa-aQUQVsmeQAB6BFir4aBv6ojD8%2BUBQ@mail.gmail.com> <53D4BDF4.3040207@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Ok, I'll test this out and commit a fix to what's in -HEAD. Thanks! -a On 27 July 2014 01:53, Alexander Motin <mav@freebsd.org> wrote: > On 27.07.2014 11:42, Adrian Chadd wrote: >> ... aaand it worked. Woo! > > It worked for playback, but completely broke recording. I've missed that > your CODEC does not support input switching in hardware, while driver > does not support that in software. For playback software switching is > supported by the driver, so it worked. Patch below should give you > automatic switching on playback, but still two separate recording devices. > >> So how'd it actually map the correct selection between headphones and >> speaker? That's now cutting back and forth correctly as I plug in and >> out the headphone jack. > > It tells the driver that those two inputs should be parts of one output > device, and driver following HDA specifications reads jack presence > information from respective CODEC pins. Sound actually played to both > outputs, but driver mutes one of them, depending on jack presence. > > Lenovo engineers configured the CODEC to report each pin as separate > audio device, but the problem that our sound(4) does not support > automatic switching between them. :( > >> On 27 July 2014 01:40, Adrian Chadd <adrian@freebsd.org> wrote: >>> ok, with that it looks like: >>> >>> hdaa0: 2 associations found: >>> hdaa0: Association 0 (1) out: >>> hdaa0: Pin nid=26 seq=0 >>> hdaa0: Pin nid=22 seq=15 >>> hdaa0: Association 1 (2) in: >>> hdaa0: Pin nid=29 seq=0 >>> hdaa0: Pin nid=24 seq=14 >>> hdaa0: Tracing association 0 (1) >>> hdaa0: Pin 26 traced to DAC 16 >>> hdaa0: Pin 22 traced to DAC 16 and hpredir 0 >>> hdaa0: Association 0 (1) trace succeeded >>> hdaa0: Tracing association 1 (2) >>> hdaa0: Pin 29 traced to ADC 20 >>> hdaa0: Unable to trace pin 24 to ADC 20, undo traces >>> hdaa0: Unable to trace pin 29 to ADC 21, undo traces >>> hdaa0: Association 1 (2) trace failed > > Index: hdaa_patches.c > =================================================================== > --- hdaa_patches.c (revision 269151) > +++ hdaa_patches.c (working copy) > @@ -346,6 +346,16 @@ hdac_pin_patch(struct hdaa_widget *w) > patch = "as=1 seq=15"; > break; > } > + } else if (id == HDA_CODEC_CX20561 && > + subid == LENOVO_ZZZ_SUBVENDOR) { > + switch (nid) { > + case 22: > + patch = "as=1 seq=15"; > + break; > + case 26: > + patch = "as=1 seq=0"; > + break; > + } > } else if (id == HDA_CODEC_CX20590 && > (subid == LENOVO_X1_SUBVENDOR || > subid == LENOVO_X220_SUBVENDOR || > Index: hdac.h > =================================================================== > --- hdac.h (revision 269151) > +++ hdac.h (working copy) > @@ -236,6 +236,7 @@ > #define LENOVO_X1CRBN_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21f9) > #define LENOVO_X220_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21da) > #define LENOVO_X300_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x20ac) > +#define LENOVO_ZZZ_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x20f2) > #define LENOVO_T420_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21ce) > #define LENOVO_T430_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21f3) > #define LENOVO_T430S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fb) > > > -- > Alexander Motin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmok0RRvV8QiZPE80CCOJg-wMN6W-00vBdrL_A0ZdYZHQFw>