NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/52912: hdafg: no sound from jack port on a laptop
On Mon, 8 Jan 2018 19:25:00 +0000 (UTC)
Fekete Zoltán <fekete.zoltan%minux.hu@localhost> wrote:
> The following reply was made to PR kern/52912; it has been noted by
> GNATS.
>
> From: =?UTF-8?Q?Fekete_Zolt=C3=A1n?= <fekete.zoltan%minux.hu@localhost>
> To: gnats-bugs%netbsd.org@localhost
> Cc:
> Subject: Re: kern/52912: hdafg: no sound from jack port on a laptop
> Date: Mon, 08 Jan 2018 20:22:05 +0100
>
> 2018-01-08 07:50 időpontban jake.slazenger%yandex.com@localhost ezt írta:
> >> Number: 52912
> >> Category: kern
> >> Synopsis: hdafg: no sound from jack port on a laptop
> >> Confidential: no
> >> Severity: non-critical
> >> Priority: medium
> >> Responsible: kern-bug-people
> >> State: open
> >> Class: sw-bug
> >> Submitter-Id: net
> >> Arrival-Date: Mon Jan 08 06:50:00 +0000 2018
> >> Originator: Jake Slazenger
> >> Release: CURRENT-8.0-171230
> >> Organization:
> >> Environment:
> > NetBSD localhost 8.0_BETA NetBSD 8.0_BETA (RUSTY) #0: Sun Jan 7
> > 16:30:08 MSK 2018
> > rusty@localhost:/usr/src/171230/src/sys/arch/amd64/compile/RUSTY
> > amd64
> >> Description:
> > When I connect headphones to jack port on my laptop with Realtek
> > ALC268 sound chip, sound is not switching to the headphones and
> > continues to come out from built-in speakers.
> >
> > For example, on Linux-based systems sound is automatically switches
> > when headphones is connected.
> >
> > Is it a bug, or I do something wrong and it can be switched
> > manually?
> >> How-To-Repeat:
> > Connect headphones to jack port on a laptop with Realtek ALC268
> > sound chip.
> >> Fix:
>
>
> Hi Jake,
>
> I had a similar problem, and finally I could figure out how to set
> jack up. Probably your codec is not set up correctly, and it is not a
> bug. There are several different codecs/setups, and kernel developers
> do not have the capacity to program each one.
>
> So, you have to solve it yourself. It's not really obvious however.
>
> 1. You have to read carefully the snd_hda man page. There you will
> understand how the hda driver groups the different in/out parts
>
> 2. Try to find a technical manual for your sound chip. Similar to
> mine here (Analog Devices 1984A):
> http://www.analog.com/media/en/technical-documentation/obsolete-data-sheets/AD1984.pdf
>
> 3. Use hdaudioctl get command to gain your current settings. You
> have to read and decode hexadecimal numbers...
>
> 4. Then modify the xml file you got in point 3, and use hdaudioctl
> set command with the modified file apply changes. Then try jack.
> Repeat 3-4 until success.
>
> Another aproach: if you can program, you could modify the kernel,
> and recompile. Here is my patch, but this is device-dependent:
> https://minux.hu/netbsd-hdaudio-jack-detection
>
> Good luck!
>
> I'm working on a script that translates that output file into human
> readable form. Just time is always an issue.
>
> Rgds,
>
> FeZ
>
Thank you very much, FeZ, for the such detailed answer!
But, anyway, I didn't understand how association and sequence numbers
works (yes, I'm a little bit stupid).
So I looked to FreeBSD sources to find required assoc and seq numbers:
https://github.com/freebsd/freebsd/blob/d8596f6f687a64b994b065f3058155405dfc39db/sys/dev/sound/pci/hda/hdaa_patches.c
And used it with Fekete's patches... And it worked!
So problem is partially solved, I think.
And again, thank you very much for the help, FeZ!
Oh, and yes. I'm sorry for my very bad English.
Patch for 7.1.1 kernel:
--- src/sys/dev/pci/hdaudio/hdafg.c.orig 2018-02-15 15:23:24.000000000 +0300
+++ src/sys/dev/pci/hdaudio/hdafg.c 2018-02-15 23:37:49.000000000 +0300
@@ -657,6 +657,21 @@
}
#endif
+ /* XXX ALC268 */
+ if (sc->sc_vendor == HDA_VENDOR_REALTEK && sc->sc_product == 0x0268) {
+ if (COP_CFG_PORT_CONNECTIVITY(w->w_pin.config) == COP_PORT_JACK) {
+ /* nid 20 */
+ if (w->w_nid == 0x14) {
+ /* set assoc=1 */
+ w->w_pin.config &= ~0xf0;
+ w->w_pin.config |= 0x10;
+ /* set seq=15 */
+ w->w_pin.config &= ~0x0f;
+ w->w_pin.config |= 0x0f;
+ }
+ }
+ }
+
conn = COP_CFG_PORT_CONNECTIVITY(w->w_pin.config);
color = COP_CFG_COLOR(w->w_pin.config);
defdev = COP_CFG_DEFAULT_DEVICE(w->w_pin.config);
Home |
Main Index |
Thread Index |
Old Index