* Re: Fwd: Re: CMPCI patch for 2.4.23 (fix multi channel audio, spdiff, game port)
[not found] <20031207201207.ED1F11B246@simpukka.saunalahti.fi>
@ 2003-12-07 20:38 ` Ville Hallivuori
2003-12-08 18:24 ` Anssi Saari
0 siblings, 1 reply; 3+ messages in thread
From: Ville Hallivuori @ 2003-12-07 20:38 UTC (permalink / raw)
To: Anssi Saari; +Cc: davej, linux-kernel
> Indeed, it did, at least what little spdif functionality there was with
> the original 2.4.23 driver. I have an onboard CM8738 on ASUS A7S333 and
> use the optical spdif output exclusively.
> spdif out? spdif AC3 passthrough?
> vanilla 2.4.22 yes yes
> vanilla 2.4.23 yes, if enabled with cmictl no
> this patch no no
>
> The fix isn't quite right, so further work would be much appreciated. I
> sent this mail to you two directly as I'm not sure if I can just post a
> followup to lkml when reading it through usenet.
I don't have spdiff hardware (nor do I have register chart...), so I
can not be certain, but try changing:
#define SPDF_0 0x01
#define SPDF_1 0x02
to
#define SPDF_0 0x02
#define SPDF_1 0x01
And change from function set_spdif_monitor line:
maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDO2DAC, channel == 2 ? SPDO2DAC : 0);
to:
maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDO2DAC, channel == 1 ? SPDO2DAC : 0);
If this does not help. try looking for similar value pairs -- it seems
that channel number assumptions are present in quite many places...
--
[Ville Hallivuori][vph@iki.fi][http://www.iki.fi/vph/]
[ID 8E1AD461][FP16=C9 50 E2 DF 48 F6 33 62 5D 87 47 9D 3F 2B 07 5D]
[ID 58543419][FP20=8731 941D 15AB D4A0 88A0 FC8F B55C F4C4 5854 3419]
[ID 8061C24E][FP20=C722 12DA 841E D811 DBFE 2FB3 174C E291 8061 C24E]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: CMPCI patch for 2.4.23 (fix multi channel audio, spdiff, game port)
2003-12-07 20:38 ` Fwd: Re: CMPCI patch for 2.4.23 (fix multi channel audio, spdiff, game port) Ville Hallivuori
@ 2003-12-08 18:24 ` Anssi Saari
0 siblings, 0 replies; 3+ messages in thread
From: Anssi Saari @ 2003-12-08 18:24 UTC (permalink / raw)
To: Ville Hallivuori; +Cc: davej, linux-kernel
On Sun, Dec 07, 2003 at 10:38:02PM +0200, Ville Hallivuori wrote:
> #define SPDF_0 0x01
> #define SPDF_1 0x02
> to
> #define SPDF_0 0x02
> #define SPDF_1 0x01
>
> And change from function set_spdif_monitor line:
> maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDO2DAC, channel == 2 ? SPDO2DAC : 0);
> to:
> maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDO2DAC, channel == 1 ? SPDO2DAC : 0);
>
> If this does not help. try looking for similar value pairs -- it seems
> that channel number assumptions are present in quite many places...
Yes, that fixed SPDIF out. However, I still don't have working
AC3 passthrough. I wish I knew more about the chip... At least
set_ac3_unlocked() seems to do the same thing for both versions.
^ permalink raw reply [flat|nested] 3+ messages in thread
* CMPCI patch for 2.4.23 (fix multi channel audio, spdiff, game port)
@ 2003-12-07 17:46 Ville Hallivuori
0 siblings, 0 replies; 3+ messages in thread
From: Ville Hallivuori @ 2003-12-07 17:46 UTC (permalink / raw)
To: davej; +Cc: linux-kernel
CMPCI sound driver changes in 2.4.22->2.4.23 broke:
-Multi channel audio
-Input and output channels were swapped -- but it appears
that >2 channel audio works only for ch1 (at least in CM8738).
-Game port
-Incorrect IO address
-Some of spdiff configuration was done to wrong register
-SPDIFF (not tested)
-Some of spdiff configuration was done to wrong register
I have tested two and six channel analog audio out and game port with
this patch (using CM8738 with Soyo Dragon MB). Swapping channels is
lots of mechanical replacing, so it it possible that this patch might
break line in and spdiff functionality.
Whoever maintains cmpci (Dave?), please consider applying this patch
to kernel tree.
--- cmpci.c.old Fri Nov 28 20:26:20 2003
+++ cmpci.c Sun Dec 7 18:24:36 2003
@@ -188,11 +188,11 @@
#define CM_EXTENT_CODEC 0x100
#define CM_EXTENT_MIDI 0x2
#define CM_EXTENT_SYNTH 0x4
-#define CM_EXTENT_GAME 0x8
+#define CM_EXTENT_GAME 0x1 /*0x8*/
// Function Control Register 0 (00h)
-#define CHADC0 0x01
-#define CHADC1 0x02
+#define CHADC0 0x02
+#define CHADC1 0x01
#define PAUSE0 0x04
#define PAUSE1 0x08
@@ -211,8 +211,8 @@
// Function Control Register 1+1 (05h)
#define SPDF_0 0x01
#define SPDF_1 0x02
-#define ASFC 0xe0
-#define DSFC 0x1c
+#define DSFC 0xe0
+#define ASFC 0x1c
#define SPDIF2DAC (SPDF_0 << 8 | SPDO2DAC)
// Channel Format Register (08h)
@@ -292,26 +292,26 @@
#define SPDVALID 0x02
#define CENTR2MIC 0x04
-#define CM_CFMT_DACSHIFT 0
-#define CM_CFMT_ADCSHIFT 2
-#define CM_FREQ_DACSHIFT 2
-#define CM_FREQ_ADCSHIFT 5
-#define RSTDAC RST_CH0
-#define RSTADC RST_CH1
-#define ENDAC CHEN0
-#define ENADC CHEN1
-#define PAUSEDAC PAUSE0
-#define PAUSEADC PAUSE1
-#define CODEC_CMI_DAC_FRAME1 CODEC_CMI_CH0_FRAME1
-#define CODEC_CMI_DAC_FRAME2 CODEC_CMI_CH0_FRAME2
-#define CODEC_CMI_ADC_FRAME1 CODEC_CMI_CH1_FRAME1
-#define CODEC_CMI_ADC_FRAME2 CODEC_CMI_CH1_FRAME2
-#define DACINT CHINT0
-#define ADCINT CHINT1
-#define DACBUSY CH0BUSY
-#define ADCBUSY CH1BUSY
-#define ENDACINT CH0_INT_EN
-#define ENADCINT CH1_INT_EN
+#define CM_CFMT_DACSHIFT 2
+#define CM_CFMT_ADCSHIFT 0
+#define CM_FREQ_DACSHIFT 5
+#define CM_FREQ_ADCSHIFT 2
+#define RSTDAC RST_CH1
+#define RSTADC RST_CH0
+#define ENDAC CHEN1
+#define ENADC CHEN0
+#define PAUSEDAC PAUSE1
+#define PAUSEADC PAUSE0
+#define CODEC_CMI_DAC_FRAME1 CODEC_CMI_CH1_FRAME1
+#define CODEC_CMI_DAC_FRAME2 CODEC_CMI_CH1_FRAME2
+#define CODEC_CMI_ADC_FRAME1 CODEC_CMI_CH0_FRAME1
+#define CODEC_CMI_ADC_FRAME2 CODEC_CMI_CH0_FRAME2
+#define DACINT CHINT1
+#define ADCINT CHINT0
+#define DACBUSY CH1BUSY
+#define ADCBUSY CH0BUSY
+#define ENDACINT CH1_INT_EN
+#define ENADCINT CH0_INT_EN
static const unsigned sample_size[] = { 1, 2, 2, 4 };
static const unsigned sample_shift[] = { 0, 1, 1, 2 };
@@ -731,7 +731,7 @@
{
if (rate == 48000 || rate == 44100) {
// SPDF_0
- maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~0, SPDF_0);
+ maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0, SPDF_0);
// SPDIFI48K SPDF_ACc97
maskl(s->iobase + CODEC_CMI_MISC_CTRL, ~SPDIF48K, rate == 48000 ? SPDIF48K : 0);
// ENSPDOUT
@@ -740,7 +740,7 @@
set_spdif_monitor(s, 2);
s->status |= DO_SPDIF_OUT;
} else {
- maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDF_0, 0);
+ maskb(s->iobase + CODEC_CMI_FUNCTRL1 +1 , ~SPDF_0, 0);
maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~ENSPDOUT, 0);
// monitor none
set_spdif_monitor(s, 0);
@@ -761,12 +761,12 @@
{
if (rate == 48000 || rate == 44100) {
// SPDF_1
- maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~0, SPDF_1);
+ maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0, SPDF_1);
// SPDIFI48K SPDF_AC97
maskl(s->iobase + CODEC_CMI_MISC_CTRL, ~SPDIF48K, rate == 48000 ? SPDIF48K : 0);
s->status |= DO_SPDIF_IN;
} else {
- maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDF_1, 0);
+ maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~SPDF_1, 0);
s->status &= ~DO_SPDIF_IN;
}
}
@@ -3354,7 +3354,7 @@
#endif
s->iosynth = fmio;
s->iomidi = mpuio;
- s->gameport.io = 0x200;
+ s->gameport.io = 0x201;
s->status = 0;
/* range check */
if (speakers < 2)
--
[Ville Hallivuori][vph@iki.fi][http://www.iki.fi/vph/]
[ID 8E1AD461][FP16=C9 50 E2 DF 48 F6 33 62 5D 87 47 9D 3F 2B 07 5D]
[ID 58543419][FP20=8731 941D 15AB D4A0 88A0 FC8F B55C F4C4 5854 3419]
[ID 8061C24E][FP20=C722 12DA 841E D811 DBFE 2FB3 174C E291 8061 C24E]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-12-08 18:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20031207201207.ED1F11B246@simpukka.saunalahti.fi>
2003-12-07 20:38 ` Fwd: Re: CMPCI patch for 2.4.23 (fix multi channel audio, spdiff, game port) Ville Hallivuori
2003-12-08 18:24 ` Anssi Saari
2003-12-07 17:46 Ville Hallivuori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).