Date: Tue, 11 Dec 2007 10:50:01 GMT From: Ariff Abdullah <ariff@FreeBSD.org> To: freebsd-multimedia@FreeBSD.org Subject: Re: kern/118546: snd_ich: recording broken Message-ID: <200712111050.lBBAo19S025803@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/118546; it has been noted by GNATS. From: Ariff Abdullah <ariff@FreeBSD.org> To: bug-followup@FreeBSD.org, uyamba@gmail.com Cc: Subject: Re: kern/118546: snd_ich: recording broken Date: Tue, 11 Dec 2007 18:44:42 +0800 This is a multi-part message in MIME format. --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit > pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 9 bufsz 16384 > kld snd_ich [MPSAFE] (1p:1v/2r:1v channels duplex default) ^^ I have doubt for this 2nd record channel for a long time.. 1) Try disabling vchan for record channel (vrec) through sysctl dev.pcm.0.rec.vchans=0. This basically restore 6.x behaviour. 2) If #1 works, try the attached patch even with vrec enabled. -- Ariff Abdullah FreeBSD ... Recording in stereo is obviously too advanced and confusing for us idiot ***** users :P ........ --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn Content-Type: text/x-diff; name="ich.c.diff" Content-Disposition: attachment; filename="ich.c.diff" Content-Transfer-Encoding: 7bit Index: src/sys/dev/sound/pci/ich.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pci/ich.c,v retrieving revision 1.78 diff -u -r1.78 ich.c --- src/sys/dev/sound/pci/ich.c 11 Jul 2007 14:27:45 -0000 1.78 +++ src/sys/dev/sound/pci/ich.c 11 Dec 2007 09:52:27 -0000 @@ -91,6 +91,7 @@ #define ICH_FIXED_RATE (1 << 3) #define ICH_DMA_NOCACHE (1 << 4) #define ICH_HIGH_LATENCY (1 << 5) +#define ICH_MCH_ENABLED (1 << 6) static const struct ich_type { uint16_t vendor; @@ -980,6 +981,10 @@ device_get_unit(dev), "fixedrate", &i) == 0 && i != 0) sc->flags |= ICH_FIXED_RATE; + if (resource_int_value(device_get_name(dev), + device_get_unit(dev), "mch_enabled", &i) == 0 && i != 0) + sc->flags |= ICH_MCH_ENABLED; + sc->irqid = 0; sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid, RF_ACTIVE | RF_SHAREABLE); @@ -1026,7 +1031,11 @@ extcaps = ac97_getextcaps(sc->codec); sc->hasvra = extcaps & AC97_EXTCAP_VRA; sc->hasvrm = extcaps & AC97_EXTCAP_VRM; - sc->hasmic = ac97_getcaps(sc->codec) & AC97_CAP_MICCHANNEL; + if ((sc->flags & ICH_MCH_ENABLED) && + (ac97_getcaps(sc->codec) & AC97_CAP_MICCHANNEL)) + sc->hasmic = 1; + else + sc->flags &= ~ICH_MCH_ENABLED; ac97_setextmode(sc->codec, sc->hasvra | sc->hasvrm); sc->dtbl_size = sizeof(struct ich_desc) * ICH_DTBL_LENGTH * --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200712111050.lBBAo19S025803>