* hdsp9632 mixer fix + gcc 2.9x compile fix
@ 2003-11-06 12:37 Thomas Charbonnel
2003-11-07 11:18 ` hdsp update Benouille
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Thomas Charbonnel @ 2003-11-06 12:37 UTC (permalink / raw)
To: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 180 bytes --]
Hi,
The attached patch fixes matrix mixer and metering problems spotted by
Pentti Ala-Vannesluoma for H9632 cards and gcc 2.9x compile errors
reported by Martin Langer.
Thomas
[-- Attachment #2: hdsp9632.patch --]
[-- Type: text/plain, Size: 5394 bytes --]
--- hdsp.c.cvs 2003-11-01 09:06:45.000000000 +0100
+++ hdsp.c 2003-11-06 13:06:28.000000000 +0100
@@ -454,6 +454,7 @@
unsigned short state; /* stores state bits */
u32 firmware_cache[24413]; /* this helps recover from accidental iobox power failure */
size_t period_bytes; /* guess what this is */
+ unsigned char max_channels;
unsigned char qs_in_channels; /* quad speed mode for H9632 */
unsigned char ds_in_channels;
unsigned char ss_in_channels; /* different for multiface/digiface */
@@ -1169,11 +1170,11 @@
/* set thru for all channels */
if (enable) {
- for (i = 0; i < HDSP_MAX_CHANNELS; i++) {
+ for (i = 0; i < hdsp->max_channels; i++) {
hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,i,i), UNITY_GAIN);
}
} else {
- for (i = 0; i < HDSP_MAX_CHANNELS; i++) {
+ for (i = 0; i < hdsp->max_channels; i++) {
hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,i,i), MINUS_INFINITY_GAIN);
}
}
@@ -1181,7 +1182,7 @@
} else {
int mapped_channel;
- snd_assert(channel < HDSP_MAX_CHANNELS, return);
+ snd_assert(channel < hdsp->max_channels, return);
mapped_channel = hdsp->channel_map[channel];
@@ -2902,9 +2903,9 @@
source = ucontrol->value.integer.value[0];
destination = ucontrol->value.integer.value[1];
-
- if (source > 25) {
- addr = hdsp_playback_to_output_key(hdsp,source-26,destination);
+
+ if (source >= hdsp->max_channels) {
+ addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
} else {
addr = hdsp_input_to_output_key(hdsp,source, destination);
}
@@ -2931,8 +2932,8 @@
source = ucontrol->value.integer.value[0];
destination = ucontrol->value.integer.value[1];
- if (source > 25) {
- addr = hdsp_playback_to_output_key(hdsp,source-26, destination);
+ if (source >= hdsp->max_channels) {
+ addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination);
} else {
addr = hdsp_input_to_output_key(hdsp,source, destination);
}
@@ -3177,7 +3178,7 @@
int snd_hdsp_create_controls(snd_card_t *card, hdsp_t *hdsp)
{
- unsigned int idx, limit;
+ unsigned int idx;
int err;
snd_kcontrol_t *kctl;
@@ -3676,12 +3677,13 @@
odd numbered channels to right, even to left.
*/
if (hdsp->io_type == H9632) {
- lineouts_base = 14;
+ /* this is the phones/analog output */
+ lineouts_base = 10;
} else {
lineouts_base = 26;
}
- for (i = 0; i < HDSP_MAX_CHANNELS; i++) {
+ for (i = 0; i < hdsp->max_channels; i++) {
if (i & 1) {
if (hdsp_write_gain (hdsp, hdsp_input_to_output_key (hdsp, i, lineouts_base), UNITY_GAIN) ||
hdsp_write_gain (hdsp, hdsp_playback_to_output_key (hdsp, i, lineouts_base), UNITY_GAIN)) {
@@ -3793,7 +3795,7 @@
{
int mapped_channel;
- snd_assert(channel >= 0 || channel < HDSP_MAX_CHANNELS, return NULL);
+ snd_assert(channel >= 0 || channel < hdsp->max_channels, return NULL);
if ((mapped_channel = hdsp->channel_map[channel]) < 0) {
return NULL;
@@ -3963,7 +3965,7 @@
hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
int mapped_channel;
- snd_assert(info->channel < HDSP_MAX_CHANNELS, return -EINVAL);
+ snd_assert(info->channel < hdsp->max_channels, return -EINVAL);
if ((mapped_channel = hdsp->channel_map[info->channel]) < 0) {
return -EINVAL;
@@ -4487,8 +4489,8 @@
static int snd_hdsp_hwdep_dummy_op(snd_hwdep_t *hw, struct file *file)
{
- /* we have nothing to initialize but the call is required */
- return 0;
+ /* we have nothing to initialize but the call is required */
+ return 0;
}
@@ -4545,10 +4547,11 @@
}
if (hdsp->io_type == H9632) {
int j;
+ hdsp_9632_meters_t *m;
int doublespeed = 0;
if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
doublespeed = 1;
- hdsp_9632_meters_t *m = (hdsp_9632_meters_t *)hdsp->iobase+HDSP_9632_metersBase;
+ m = (hdsp_9632_meters_t *)(hdsp->iobase+HDSP_9632_metersBase);
peak_rms = (hdsp_peak_rms_t *)arg;
for (i = 0, j = 0; i < 16; ++i, ++j) {
if (copy_to_user((void *)peak_rms->input_peaks+i*4, &(m->input_peak[j]), 4) != 0)
@@ -4814,7 +4817,7 @@
return -EIO;
}
- for (i = 0; i < HDSP_MAX_CHANNELS; ++i) {
+ for (i = 0; i < hdsp->max_channels; ++i) {
hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
}
@@ -4841,8 +4844,9 @@
case H9632:
status = hdsp_read(hdsp, HDSP_statusRegister);
- aebi_channels = (status & HDSP_AEBI) ? 4 : 0;
- aebo_channels = (status & HDSP_AEBO) ? 4 : 0;
+ /* HDSP_AEBx bits are low when AEB are connected */
+ aebi_channels = (status & HDSP_AEBI) ? 0 : 4;
+ aebo_channels = (status & HDSP_AEBO) ? 0 : 4;
hdsp->card_name = "RME Hammerfall HDSP 9632";
hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels;
hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels;
@@ -4929,7 +4933,6 @@
{
struct pci_dev *pci = hdsp->pci;
int err;
- int i;
int is_9652 = 0;
int is_9632 = 0;
@@ -4948,6 +4951,7 @@
hdsp->control_register = 0;
hdsp->control2_register = 0;
hdsp->io_type = Undefined;
+ hdsp->max_channels = 26;
hdsp->card = card;
@@ -4974,6 +4978,7 @@
break;
case 0x96:
hdsp->card_name = "RME HDSP 9632";
+ hdsp->max_channels = 16;
is_9632 = 1;
break;
default:
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: hdsp update
2003-11-06 12:37 hdsp9632 mixer fix + gcc 2.9x compile fix Thomas Charbonnel
@ 2003-11-07 11:18 ` Benouille
2003-11-07 12:55 ` Thomas Charbonnel
[not found] ` <3FAB5CE6.70306@ifrance.com>
2003-11-07 18:30 ` Takashi Iwai
2 siblings, 1 reply; 6+ messages in thread
From: Benouille @ 2003-11-07 11:18 UTC (permalink / raw)
To: alsa-devel
Hi list, hi thomas,
A big thank you for all your great job on the rme hdsp.
I've installed the alsa cvs dated from the november 5th on 2 pc:
one with a hdsp multiface, one with a hdsp 9652.
Since this update, I can't access anymore the level of the channels with
amixer, and alsamixer reponds 'no mixer element found' on both system.
Is it a normal behaviour?
Then, when I boot, the hdsp multiface is still locked and I need to call
'hdsploader' about 3 or 5 times (I have the 'post-install snd-hdsp
/usr/local/bin/hdsploader' in modules.conf)
then, I have to reboot, and run hdspmixer to unmute the channels.
I woul like to know if there is a way to start the system with the card
properly running and all channels unmuted.
Maybe you could show us your modules.conf?
Thanks again,
Benoit
Le 06/11/2003 13:37, Thomas Charbonnel a écrit :
> Hi,
>
> The attached patch fixes matrix mixer and metering problems spotted by
> Pentti Ala-Vannesluoma for H9632 cards and gcc 2.9x compile errors
> reported by Martin Langer.
>
> Thomas
>
>
> ------------------------------------------------------------------------
>
> --- hdsp.c.cvs 2003-11-01 09:06:45.000000000 +0100
> +++ hdsp.c 2003-11-06 13:06:28.000000000 +0100
> @@ -454,6 +454,7 @@
> ...
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: hdsp update
2003-11-07 11:18 ` hdsp update Benouille
@ 2003-11-07 12:55 ` Thomas Charbonnel
0 siblings, 0 replies; 6+ messages in thread
From: Thomas Charbonnel @ 2003-11-07 12:55 UTC (permalink / raw)
To: Benouille; +Cc: alsa-devel
Benouille wrote :
> Hi list, hi thomas,
>
> A big thank you for all your great job on the rme hdsp.
> I've installed the alsa cvs dated from the november 5th on 2 pc:
> one with a hdsp multiface, one with a hdsp 9652.
>
> Since this update, I can't access anymore the level of the channels with
> amixer, and alsamixer reponds 'no mixer element found' on both system.
> Is it a normal behaviour?
It is. I removed those simple mixer controls because I could find no
proper way to deal with them while changing speed mode.
Anyway, anything you could do with those you can do either with
hdspmixer or amixer in console mode, using the 'Mixer' ctl.
The amixer syntax is as follows :
amixer -c X cset numid=5 in,out,level
Where:
X is your alsa card number
0 <= in < 26 : physical inputs
26 <= in < 52 : playbacks (software outputs)
0 <= out < 26 : physical outputs
26 <= out <= 27 : line outs (phones), if any
0 <= level < 65536 : gain (65535 = +6dB, 32768 = 0dB)
(H9632 users should read :
0 <= in < 16 : physical inputs
16 <= in < 32 : playbacks (softwre outputs)
0 <= out < 16 : physical outputs
)
Here's an example :
amixer cset numid=5 26,0,32768
amixer cset numid=5 27,1,32768
This routes software outputs 1/2 (playback_1 and playback_2 in jack) to
physical outputs 1/2 with a 0dB gain.
It is the same as formerly setting the level to 50% in the first 2
alsamixer strips.
Below is a small script that does the same as the first hdspmixer preset
(for non-h9632 cards, and assumes the hdsp card is the default one) :
#! /bin/bash
for out_left in $(seq 0 2 25);
do
let out_right=$out_left+1
let in_left=$out_left+26
let in_right=$out_right+26
amixer cset numid=5 $in_left,$out_left,32768
amixer cset numid=5 $in_left,26,32768
amixer cset numid=5 $in_right,$out_right,32768
amixer cset numid=5 $in_right,27,32768;
done;
>
> Then, when I boot, the hdsp multiface is still locked and I need to call
> 'hdsploader' about 3 or 5 times (I have the 'post-install snd-hdsp
> /usr/local/bin/hdsploader' in modules.conf)
I know this problem, but didn't find a solution yet. For some reason the
specified wait time isn't always respected, so even if the firmware has
been correctly uploaded ('host' light turns off on the io box), the
function returns too early with an error, and the initialization process
in stopped (the alsa pcm and midi devices are not created). Running
hdsploader a second time usually fixes this.
> then, I have to reboot, and run hdspmixer to unmute the channels.
> I woul like to know if there is a way to start the system with the card
> properly running and all channels unmuted.
> Maybe you could show us your modules.conf?
>
I have nothing special in my modules.conf, I usually run hdsploader by
hand. You may use the above script to set the levels up.
Thomas
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <3FAB5CE6.70306@ifrance.com>]
* Re: hdsp9632 mixer fix + gcc 2.9x compile fix
2003-11-06 12:37 hdsp9632 mixer fix + gcc 2.9x compile fix Thomas Charbonnel
2003-11-07 11:18 ` hdsp update Benouille
[not found] ` <3FAB5CE6.70306@ifrance.com>
@ 2003-11-07 18:30 ` Takashi Iwai
2 siblings, 0 replies; 6+ messages in thread
From: Takashi Iwai @ 2003-11-07 18:30 UTC (permalink / raw)
To: Thomas Charbonnel; +Cc: alsa-devel
At Thu, 06 Nov 2003 13:37:35 +0100,
Thomas Charbonnel wrote:
>
> [1 <text/plain; us-ascii (7bit)>]
> Hi,
>
> The attached patch fixes matrix mixer and metering problems spotted by
> Pentti Ala-Vannesluoma for H9632 cards and gcc 2.9x compile errors
> reported by Martin Langer.
thanks again.
it's now on cvs.
Takashi
-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-11-07 18:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-11-06 12:37 hdsp9632 mixer fix + gcc 2.9x compile fix Thomas Charbonnel
2003-11-07 11:18 ` hdsp update Benouille
2003-11-07 12:55 ` Thomas Charbonnel
[not found] ` <3FAB5CE6.70306@ifrance.com>
[not found] ` <3FAB857A.80707@undata.org>
2003-11-07 13:20 ` hdsp9632 mixer fix + gcc 2.9x compile fix Benouille
2003-11-07 14:33 ` Thomas Charbonnel
2003-11-07 18:30 ` Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.