Date: Tue, 27 Feb 2007 21:44:33 +0900 From: Watanabe Kazuhiro <CQG00620@nifty.ne.jp> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/109599: [patch] Cannot control treble/bass functions on YAMAHA YMF753 AC97 codec Message-ID: <20070227124438.1269A2EBBC@mail.asahi-net.or.jp> Resent-Message-ID: <200702271310.l1RDA6nh010012@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 109599 >Category: kern >Synopsis: [patch] Cannot control treble/bass functions on YAMAHA YMF753 AC97 codec >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Feb 27 13:10:05 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Watanabe Kazuhiro >Release: FreeBSD 7.0-CURRENT i386 >Organization: >Environment: System: FreeBSD capricorn.sign.local 7.0-CURRENT FreeBSD 7.0-CURRENT #3: Mon Feb 26 16:31:22 JST 2007 nabe@capricorn:/FreeBSD/obj/FreeBSD/HEAD/src/sys/GENERIC i386 Sound: SiS 7012 ICH controller with YAMAHA YMF753 AC97 codec >Description: I have a PC which uses SiS 7012 ICH controller with YAMAHA YMF753 AC'97 codec. It works well with snd_ich driver, but cannot control the treble/bass functions. YAMAHA AC'97 codecs (YMF743/752/753) has treble/bass and 3D enhancement functions. YMF743 and YMF753 has both functions, and YMF752 have only 3D control. But these functions are not indicated in the Reset register (0x00). * AC'97 Component Specification Revision 2.2, p.50 http://www.alsa-project.org/alsa/ftp/manuals/intel/ac97r22.pdf * YAMAHA YMF753 datasheet, p.6 http://www.yamaha.co.jp/english/product/lsi/us/products/pdf/4MF753A20.pdf >How-To-Repeat: * before applied the patch: $ cat /dev/sndstat FreeBSD Audio Driver (newpcm: 32bit) Installed devices: pcm0: <SiS 7012> at io 0x1400, 0x1080 irq 18 bufsz 16384 kld snd_ich (1p/1r/1v c hannels duplex default) $ dmesg | grep ^pcm pcm0: <SiS 7012> port 0x1400-0x14ff,0x1080-0x10ff irq 18 at device 2.7 on pci0 pcm0: Reserved 0x100 bytes for rid 0x10 type 4 at 0x1400 pcm0: Reserved 0x80 bytes for rid 0x14 type 4 at 0x1080 pcm0: [MPSAFE] pcm0: [ITHREAD] pcm0: <Yamaha YMF753 AC97 Codec (id = 0x594d4803)> pcm0: Codec features 18 bit DAC, 5 bit master volume, no 3D Stereo Enhancement pcm0: Primary codec extended features reserved 1, AMAP, reserved 4 pcm0: ac97 codec dac ready count: 0 pcm0: Mixer "vol": pcm0: Mixer "pcm": pcm0: Mixer "speaker": pcm0: Mixer "line": pcm0: Mixer "mic": pcm0: Mixer "cd": pcm0: Mixer "rec": pcm0: Mixer "igain": pcm0: Mixer "line1": pcm0: Mixer "phin": pcm0: Mixer "phout": pcm0: Mixer "video": pcm0: sndbuf_setmap e9f6000, 4000; 0xcbf08000 -> e9f6000 pcm0: sndbuf_setmap e9f2000, 4000; 0xcbf0c000 -> e9f2000 pcm0: measured ac97 link rate at 48021 Hz, will use 48000 Hz $ mixer Mixer vol is currently set to 75:75 Mixer pcm is currently set to 75:75 Mixer speaker is currently set to 75:75 Mixer line is currently set to 75:75 Mixer mic is currently set to 0:0 Mixer cd is currently set to 75:75 Mixer rec is currently set to 0:0 Mixer igain is currently set to 0:0 Mixer line1 is currently set to 75:75 Mixer phin is currently set to 0:0 Mixer phout is currently set to 0:0 Mixer video is currently set to 75:75 Recording source: mic * after applied the patch: $ dmesg | grep ^pcm pcm0: <SiS 7012> port 0x1400-0x14ff,0x1080-0x10ff irq 18 at device 2.7 on pci0 pcm0: Reserved 0x100 bytes for rid 0x10 type 4 at 0x1400 pcm0: Reserved 0x80 bytes for rid 0x14 type 4 at 0x1080 pcm0: [MPSAFE] pcm0: [ITHREAD] pcm0: <Yamaha YMF753 AC97 Codec (id = 0x594d4803)> pcm0: Codec features tone, 18 bit DAC, 5 bit master volume, Yamaha Ymersion pcm0: Primary codec extended features reserved 1, AMAP, reserved 4 pcm0: ac97 codec dac ready count: 0 pcm0: Mixer "vol": pcm0: Mixer "bass": pcm0: Mixer "treble": pcm0: Mixer "pcm": pcm0: Mixer "speaker": pcm0: Mixer "line": pcm0: Mixer "mic": pcm0: Mixer "cd": pcm0: Mixer "rec": pcm0: Mixer "igain": pcm0: Mixer "line1": pcm0: Mixer "phin": pcm0: Mixer "phout": pcm0: Mixer "video": pcm0: sndbuf_setmap e9f6000, 4000; 0xcbf08000 -> e9f6000 pcm0: sndbuf_setmap e9f2000, 4000; 0xcbf0c000 -> e9f2000 pcm0: measured ac97 link rate at 48013 Hz, will use 48000 Hz >Fix: This patch has tested on 7-current (and 6.2-RELEASE). Index: sys/dev/sound/pcm/ac97.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pcm/ac97.c,v retrieving revision 1.64 diff -u -r1.64 ac97.c --- sys/dev/sound/pcm/ac97.c 26 Nov 2006 12:24:05 -0000 1.64 +++ sys/dev/sound/pcm/ac97.c 27 Feb 2007 08:24:36 -0000 @@ -538,6 +538,23 @@ static void ac97_fix_tone(struct ac97_info *codec) { + /* + * YMF chips does not indicate tone and 3D enhancement capability + * in the AC97_REG_RESET register. + */ + switch (codec->id) { + case 0x594d4800: /* YMF743 */ + case 0x594d4803: /* YMF753 */ + codec->caps |= AC97_CAP_TONE; + codec->se |= 0x04; + break; + case 0x594d4802: /* YMF752 */ + codec->se |= 0x04; + break; + default: + break; + } + /* Hide treble and bass if they don't exist */ if ((codec->caps & AC97_CAP_TONE) == 0) { bzero(&codec->mix[SOUND_MIXER_BASS], This code should be pushed out to a patch function (e.g. ymf_patch()). But the patch function (codec_patch) is called after ac97_fix_tone(). So it is a little difficult. The similar code is also appeared in the ALSA driver. http://alsa.cvs.sourceforge.net/alsa/alsa-kernel/pci/ac97/ac97_patch.c?r1=1.5&r2=1.6 >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070227124438.1269A2EBBC>