From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [Alsa-user] 4 channel stereo with ALC650 (MSI KT3-ultra) Date: Mon, 14 Oct 2002 15:47:09 +0200 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: References: <200210111624.36543.bernatik@kn.vutbr.cz> <200210121718.49766.bernatik@kn.vutbr.cz> Mime-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: multipart/mixed; boundary="Multipart_Mon_Oct_14_15:47:09_2002-1" Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <200210121718.49766.bernatik@kn.vutbr.cz> Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: bernatik@kn.vutbr.cz Cc: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org --Multipart_Mon_Oct_14_15:47:09_2002-1 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit At Sat, 12 Oct 2002 17:18:49 +0200, Jan Bernatík wrote: > > Dne pá 11. říjen 2002 16:41 Takashi Iwai napsal(a): > > At Fri, 11 Oct 2002 16:24:36 +0200, > > > > Jan Bernatík wrote: > > > Hallo everyone > > > > > > I have alsa drivers 0.9rc3 working with my via8233 (ALC650) onboard > > > soundcard. But I really don't know, if there is some way to play > > > 4-channel stereo (neither with S-bracket nor without it). In alsamixer I > > > don't have "rear speaker" option or something like that ... I installed > > > windows just to try if it's working there, and it is (with new driver > > > downloaded from realtek, whan i open windows sound mixer i have "rear > > > speaker" option). So I'm asking for help or some documentation about that > > > ... if it exist. > > > > the via82xx driver itself supports the multi-channel playback, simply > > by setting up and passing 4-channel interleaved samples. > > but, i guess, the problem is the multi-channel output on this codec. > > there are some vendor-specific registers for multichannel controls on > > ALC650, but they are still not supported on the alsa driver, mainly > > due to lack of hardware for tests. > > > > i'll let you know if the experimental patch is ready. > > > > > > ciao, > > > > Takashi > > Thank U a lot. > I think U are probably really busy, but i want to thank you > for what are you doing. I'm starting with programming, i want to contribute to > opensource as well. the attached is a patch to control switches for surround, center/lfe pins. you'll have "Line-In As Surround" and "Mic As Center/LFE". if you don't get sounds even after changing "Surround" and "Center", "LFE" volumes and switches, please try to change the values above. Takashi --Multipart_Mon_Oct_14_15:47:09_2002-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="alc650-fix.dif" Content-Transfer-Encoding: 7bit Index: alsa-kernel/include/ac97_codec.h =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/include/ac97_codec.h,v retrieving revision 1.14 diff -u -r1.14 ac97_codec.h --- alsa-kernel/include/ac97_codec.h 17 Sep 2002 13:40:06 -0000 1.14 +++ alsa-kernel/include/ac97_codec.h 14 Oct 2002 13:33:58 -0000 @@ -195,6 +195,10 @@ #define AC97_CXR_SPDIF_PCM 0x0 #define AC97_CXR_SPDIF_AC3 0x2 +/* specific - ALC */ +#define AC97_ALC650_MULTICH 0x6a +#define AC97_ALC650_CLOCK 0x7a + /* ac97->scaps */ #define AC97_SCAP_AUDIO (1<<0) /* audio AC'97 codec */ #define AC97_SCAP_MODEM (1<<1) /* modem AC'97 codec */ Index: alsa-kernel/pci/ac97/ac97_codec.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/ac97/ac97_codec.c,v retrieving revision 1.37 diff -u -r1.37 ac97_codec.c --- alsa-kernel/pci/ac97/ac97_codec.c 18 Sep 2002 12:25:21 -0000 1.37 +++ alsa-kernel/pci/ac97/ac97_codec.c 14 Oct 2002 13:33:27 -0000 @@ -105,7 +105,7 @@ { 0x414c4310, 0xfffffff0, "RL5382", NULL }, { 0x414c4320, 0xfffffff0, "RL5383", NULL }, { 0x414c4710, 0xfffffff0, "ALC200/200P", NULL }, -{ 0x414c4720, 0xfffffff0, "ALC650", NULL }, +{ 0x414c4720, 0xfffffff0, "ALC650", patch_alc650 }, { 0x414c4730, 0xffffffff, "ALC101", NULL }, { 0x414c4740, 0xfffffff0, "ALC202", NULL }, { 0x414c4750, 0xfffffff0, "ALC250", NULL }, @@ -915,6 +915,25 @@ }; /* + * ALC650 + */ +static const snd_kcontrol_new_t snd_ac97_controls_alc650[] = { + AC97_SINGLE("Duplicate Front", AC97_ALC650_MULTICH, 0, 1, 0), + AC97_SINGLE("Surround Down Mix", AC97_ALC650_MULTICH, 1, 1, 0), + AC97_SINGLE("Center/LFE Down Mix", AC97_ALC650_MULTICH, 2, 1, 0), + AC97_SINGLE("Exchange Center/LFE", AC97_ALC650_MULTICH, 3, 1, 0), + AC97_SINGLE("Line-In As Surround", AC97_ALC650_MULTICH, 9, 1, 0), + AC97_SINGLE("Mic As Center/LFE", AC97_ALC650_MULTICH, 10, 1, 0), + AC97_SINGLE("IEC958 Capture Switch", AC97_ALC650_MULTICH, 11, 1, 0), + AC97_SINGLE("Analog to IEC958 Output", AC97_ALC650_MULTICH, 12, 1, 0), + AC97_SINGLE("IEC958 Input Monitor", AC97_ALC650_MULTICH, 13, 1, 0), +#if 0 /* always set in patch_alc650 */ + AC97_SINGLE("IEC958 Input Clock Enable", AC97_ALC650_CLOCK, 0, 1, 0), + AC97_SINGLE("IEC958 Input Pin Enable", AC97_ALC650_CLOCK, 1, 1, 0), +#endif +}; + +/* * */ @@ -1340,7 +1359,7 @@ } /* build S/PDIF controls */ - if (ac97->ext_id & AC97_EA_SPDIF) { + if (ac97->ext_id & AC97_EI_SPDIF) { if (ac97->flags & AC97_CS_SPDIF) { for (idx = 0; idx < 3; idx++) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_spdif[idx], ac97))) < 0) @@ -1379,7 +1398,7 @@ ac97->spdif_status = SNDRV_PCM_DEFAULT_CON_SPDIF; } - /* build Sigmatel specific controls */ + /* build chip specific controls */ switch (ac97->id) { case AC97_ID_STAC9700: case AC97_ID_STAC9708: @@ -1393,6 +1412,12 @@ if (snd_ac97_try_bit(ac97, AC97_SIGMATEL_ANALOG, 0)) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_sigmatel_controls[1], ac97))) < 0) return err; + break; + case AC97_ID_ALC650: + for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_alc650); idx++) + if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_alc650[idx], ac97))) < 0) + return err; + break; default: /* nothing */ break; Index: alsa-kernel/pci/ac97/ac97_id.h =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/ac97/ac97_id.h,v retrieving revision 1.2 diff -u -r1.2 ac97_id.h --- alsa-kernel/pci/ac97/ac97_id.h 4 Sep 2002 13:06:58 -0000 1.2 +++ alsa-kernel/pci/ac97/ac97_id.h 14 Oct 2002 13:33:47 -0000 @@ -43,3 +43,4 @@ #define AC97_ID_CS4299 0x43525930 #define AC97_ID_CS4201 0x43525948 #define AC97_ID_CS4205 0x43525958 +#define AC97_ID_ALC650 0x414c4720 Index: alsa-kernel/pci/ac97/ac97_patch.c =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/ac97/ac97_patch.c,v retrieving revision 1.4 diff -u -r1.4 ac97_patch.c --- alsa-kernel/pci/ac97/ac97_patch.c 11 Sep 2002 08:53:51 -0000 1.4 +++ alsa-kernel/pci/ac97/ac97_patch.c 14 Oct 2002 13:35:11 -0000 @@ -168,7 +168,7 @@ ac97->flags |= AC97_CS_SPDIF; ac97->rates[AC97_RATES_SPDIF] &= ~SNDRV_PCM_RATE_32000; - ac97->ext_id |= AC97_EA_SPDIF; /* force the detection of spdif */ + ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ snd_ac97_write_cache(ac97, AC97_CSR_ACMODE, 0x0080); return 0; } @@ -184,7 +184,7 @@ int patch_conexant(ac97_t * ac97) { ac97->flags |= AC97_CX_SPDIF; - ac97->ext_id |= AC97_EA_SPDIF; /* force the detection of spdif */ + ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ return 0; } @@ -334,5 +334,13 @@ /* it seems that most vendors connect line-out connector to headphone out of AC'97 */ misc = snd_ac97_read(ac97, AC97_AD_MISC); snd_ac97_write_cache(ac97, AC97_AD_MISC, misc | 0x0420); + return 0; +} + +int patch_alc650(ac97_t * ac97) +{ + /* enable spdif in */ + snd_ac97_write_cache(ac97, AC97_ALC650_CLOCK, + snd_ac97_read(ac97, AC97_ALC650_CLOCK) | 0x03); return 0; } Index: alsa-kernel/pci/ac97/ac97_patch.h =================================================================== RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/ac97/ac97_patch.h,v retrieving revision 1.3 diff -u -r1.3 ac97_patch.h --- alsa-kernel/pci/ac97/ac97_patch.h 11 Sep 2002 08:53:51 -0000 1.3 +++ alsa-kernel/pci/ac97/ac97_patch.h 14 Oct 2002 13:28:26 -0000 @@ -38,3 +38,4 @@ int patch_ad1885(ac97_t * ac97); int patch_ad1886(ac97_t * ac97); int patch_ad1980(ac97_t * ac97); +int patch_alc650(ac97_t * ac97); --Multipart_Mon_Oct_14_15:47:09_2002-1-- ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf