[alsa-devel] es18xx: Enable wavetable input from ESS chips
From: Krzysztof Helt krzysztof.h1@wp.pl
This patch enables wavetable chips ES689/ES69X connected to ESS ES18xx chips. The wavetable chip uses FM DAC if the clock signal from the wavetable is active. It has no effect if there is no ESS wavetable chip present.
Signed-off-by: Krzysztof Helt krzysztof.h1@wp.pl
---
This patch has a gotcha. In theory, the OPL synthesis or wavetable input should use FM DAC depending on the active clock signal from the wavetable chip. Unfortunately, the default state of the wavetable chip from ESS (ES689/ES690/ES692) is to send clock signal all the time. This blocks OPL3 signal if the wavetable chip is present.
This problem can be solved with sysex command 4 send to the wavetable chip. It sets the wavetable chip to auto-deactivate mode which switches the wavetable off if there are 5 seconds without midi input (according to the es1879 datasheet).
I tested this patch on the es1868 chip without the wavetable. The OPL3 synthesis worked (no clock signal from the wavetable).
I tested it on the card with es1868 chip and es690 wavetable. The OPL3 synthesis did not work, the wavetable worked. Both the OPL3 and wavetable worked if the sysex command 4 was sent to the wavetable chip (e.g. by amidi tool).
Is it ok to add this sysex command sending to the driver? How? The wavetable clock signal can be detected (there is status bit which says if wavetable is active).
Another question is about ES938 chip (bass, treble and 3D control) on the card. This chip is controlled by sysex midi commands. It can be detected (by reading settings with sysex commands). Is it possible to add this to the alsamixer or external tool for setting these controls is recommended?
Regards, Krzysztof
diff -urp linux-2.6.24/sound/isa/es18xx.c linux-new/sound/isa/es18xx.c --- linux-2.6.24/sound/isa/es18xx.c 2007-12-25 23:23:03.000000000 +0100 +++ linux-new/sound/isa/es18xx.c 2007-12-26 16:30:08.000000000 +0100 @@ -1442,6 +1442,8 @@ static int __devinit snd_es18xx_initiali snd_es18xx_write(chip, 0xB2, 0x50); /* Enable MPU and hardware volume interrupt */ snd_es18xx_mixer_write(chip, 0x64, 0x42); + /* Enable ESS wavetable input */ + snd_es18xx_mixer_bits(chip, 0x48, 0x10, 0x10); } else { int irqmask, dma1mask, dma2mask;
---------------------------------------------------------------------- Rozdajemy nagrody! Wygraj samochod!
Sprawdz >> http://link.interia.pl/f1cb8
At Wed, 26 Dec 2007 23:48:37 +0100, Krzysztof Helt wrote:
From: Krzysztof Helt krzysztof.h1@wp.pl
This patch enables wavetable chips ES689/ES69X connected to ESS ES18xx chips. The wavetable chip uses FM DAC if the clock signal from the wavetable is active. It has no effect if there is no ESS wavetable chip present.
Signed-off-by: Krzysztof Helt krzysztof.h1@wp.pl
Applied to HG tree now. Thanks.
This patch has a gotcha. In theory, the OPL synthesis or wavetable input should use FM DAC depending on the active clock signal from the wavetable chip. Unfortunately, the default state of the wavetable chip from ESS (ES689/ES690/ES692) is to send clock signal all the time. This blocks OPL3 signal if the wavetable chip is present.
This problem can be solved with sysex command 4 send to the wavetable chip. It sets the wavetable chip to auto-deactivate mode which switches the wavetable off if there are 5 seconds without midi input (according to the es1879 datasheet).
I tested this patch on the es1868 chip without the wavetable. The OPL3 synthesis worked (no clock signal from the wavetable).
I tested it on the card with es1868 chip and es690 wavetable. The OPL3 synthesis did not work, the wavetable worked. Both the OPL3 and wavetable worked if the sysex command 4 was sent to the wavetable chip (e.g. by amidi tool).
Is it ok to add this sysex command sending to the driver? How? The wavetable clock signal can be detected (there is status bit which says if wavetable is active).
You can use snd_rawmidi_kernel_*() functions for opening/sending data from the kernel code. See core/seq/seq_midi.c for example.
But, I personally don't think it worth to add this to the driver. This could be done far easier on user-space (a simple cat), and it's the matter of setup script. Though...
Another question is about ES938 chip (bass, treble and 3D control) on the card. This chip is controlled by sysex midi commands. It can be detected (by reading settings with sysex commands). Is it possible to add this to the alsamixer or external tool for setting these controls is recommended?
Oh what a design... In this case, the driver implementation sounds better indeed. So, if both features are to be implemented, snd_rawmidi_kernel_*() would be worth.
Takashi
participants (2)
-
Krzysztof Helt
-
Takashi Iwai