* RME 9632
@ 2006-10-03 10:37 Remy Bruno
2006-10-06 13:53 ` RME 9632 - Problem half solved Remy Bruno
0 siblings, 1 reply; 4+ messages in thread
From: Remy Bruno @ 2006-10-03 10:37 UTC (permalink / raw)
To: alsa-devel
Hello,
I'm having a strange problem with an RME HDSP 9632 card I recently bought. I've
contacted RME, but would like to know if somebody here is having the same
problem, or if there is a known issue about this (and if possible, a
workaround).
Start of the story: a couple of monthes ago (let's say about one year, but I'm
not sure of the time-scale), I got a RME HDSP 9632. Alsa driver was working
perfectly, I got the 12 I/O (16 with the additionnal add-on cards), the mixer
matrix worked as expected (mixer params = src,dest,32768 with src=dest+16 for
sending playback channels to audio outputs). After an hardware problem with the
card (I plugged the analog add-on card while it was running, which burned the
card!), I had to get a new one. I didn't manage to get this new card work, so I
suspected a specific problem with this new card. More recently (one week ago),
I needed to use an RME9632, so I got a new one, and I'm having about the same
problem than with the 2nd one:
- card does not work in master. Everything is as if it ran at 24kHz (sound
plays slowly), even if the card pretends to run at the desired sample rate
(say 44.1 or 48kHz). So master mode is unusable.
Master worked with the 1st card.
- in slave, it seems to be more or less OK, but the matrix behavior is
extremely weird. For sending playback channels 9,10,11,12 on outputs
9,10,11,12 (SPDIF & analog), I need to put the value 32768 in the following
coefficients: (62, 4), (1, 6), (24, 6), (15, 7)
With the first (now dead) card, I used the normal following matrix
coefficients: (24,8) (25,9), (26, 10), (27, 11)
Any idea?
Thanks
Remy
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RME 9632 - Problem half solved
2006-10-03 10:37 RME 9632 Remy Bruno
@ 2006-10-06 13:53 ` Remy Bruno
2006-10-06 17:12 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: Remy Bruno @ 2006-10-06 13:53 UTC (permalink / raw)
To: Remy Bruno; +Cc: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 3349 bytes --]
Hello,
I solved the matrix problem. In fact, it was quite obvious by looking at the
hdsp driver code. The 9632 card was considered as a 9652 regarding the matrix,
and so the offsets in the matrix were wrong. See the attached patch. I think
the "switch()" statement should be replaced by an "if (hdsp->firmware_rev >=
0x96)", which would allow the next firmwares of the hdsp9632 to be considered
as hdsp9632 and not as 9652.
For the frequency problem, I got an answer from RME which explains that another
register needs to be set (together with the freq0, 1, 2 bits of the control
register). This register is the "DDS" register. Here is how it should be
computed:
UINT64 CalcDDSValue(UINT64 rate)
{
if (rate >= 112000)
rate /= 4;
else if (rate >= 56000)
rate /= 2;
return 104857600000000 / rate;
}
MemBase[FREQ_REG] = (ULONG)CalcDDSValue(new_rate)
Any ideas of what the offset of this register is? If not, I will ask him. BTW,
this register exists only for the 9632 and not for the 9652.
Regards,
Remy
On Tuesday 03 October at 12:37, Remy Bruno wrote:
> Hello,
>
> I'm having a strange problem with an RME HDSP 9632 card I recently bought. I've
> contacted RME, but would like to know if somebody here is having the same
> problem, or if there is a known issue about this (and if possible, a
> workaround).
>
> Start of the story: a couple of monthes ago (let's say about one year, but I'm
> not sure of the time-scale), I got a RME HDSP 9632. Alsa driver was working
> perfectly, I got the 12 I/O (16 with the additionnal add-on cards), the mixer
> matrix worked as expected (mixer params = src,dest,32768 with src=dest+16 for
> sending playback channels to audio outputs). After an hardware problem with the
> card (I plugged the analog add-on card while it was running, which burned the
> card!), I had to get a new one. I didn't manage to get this new card work, so I
> suspected a specific problem with this new card. More recently (one week ago),
> I needed to use an RME9632, so I got a new one, and I'm having about the same
> problem than with the 2nd one:
> - card does not work in master. Everything is as if it ran at 24kHz (sound
> plays slowly), even if the card pretends to run at the desired sample rate
> (say 44.1 or 48kHz). So master mode is unusable.
> Master worked with the 1st card.
> - in slave, it seems to be more or less OK, but the matrix behavior is
> extremely weird. For sending playback channels 9,10,11,12 on outputs
> 9,10,11,12 (SPDIF & analog), I need to put the value 32768 in the following
> coefficients: (62, 4), (1, 6), (24, 6), (15, 7)
> With the first (now dead) card, I used the normal following matrix
> coefficients: (24,8) (25,9), (26, 10), (27, 11)
>
> Any idea?
>
> Thanks
>
> Remy
>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys -- and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/alsa-devel
[-- Attachment #2: hdsp.c.diff --]
[-- Type: text/plain, Size: 427 bytes --]
--- hdsp.c.org 2006-09-29 13:40:37.000000000 +0200
+++ hdsp.c 2006-10-06 15:26:44.000000000 +0200
@@ -598,6 +598,7 @@
return (64 * out) + (32 + (in));
case 0x96:
case 0x97:
+ case 0x98:
return (32 * out) + (16 + (in));
default:
return (52 * out) + (26 + (in));
@@ -611,6 +612,7 @@
return (64 * out) + in;
case 0x96:
case 0x97:
+ case 0x98:
return (32 * out) + in;
default:
return (52 * out) + in;
[-- Attachment #3: Type: text/plain, Size: 348 bytes --]
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
[-- Attachment #4: Type: text/plain, Size: 161 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RME 9632 - Problem half solved
2006-10-06 13:53 ` RME 9632 - Problem half solved Remy Bruno
@ 2006-10-06 17:12 ` Takashi Iwai
2006-10-09 10:18 ` Remy Bruno
0 siblings, 1 reply; 4+ messages in thread
From: Takashi Iwai @ 2006-10-06 17:12 UTC (permalink / raw)
To: Remy Bruno; +Cc: alsa-devel
At Fri, 6 Oct 2006 15:53:55 +0200,
Remy Bruno wrote:
>
> Hello,
>
> I solved the matrix problem. In fact, it was quite obvious by looking at the
> hdsp driver code. The 9632 card was considered as a 9652 regarding the matrix,
> and so the offsets in the matrix were wrong. See the attached patch. I think
> the "switch()" statement should be replaced by an "if (hdsp->firmware_rev >=
> 0x96)", which would allow the next firmwares of the hdsp9632 to be considered
> as hdsp9632 and not as 9652.
Could you give a proper changelog text and a signed-off-by line to
merge your patch into ALSA tree?
>
> For the frequency problem, I got an answer from RME which explains that another
> register needs to be set (together with the freq0, 1, 2 bits of the control
> register). This register is the "DDS" register. Here is how it should be
> computed:
> UINT64 CalcDDSValue(UINT64 rate)
> {
> if (rate >= 112000)
> rate /= 4;
> else if (rate >= 56000)
> rate /= 2;
>
> return 104857600000000 / rate;
> }
> MemBase[FREQ_REG] = (ULONG)CalcDDSValue(new_rate)
>
> Any ideas of what the offset of this register is? If not, I will ask him. BTW,
> this register exists only for the 9632 and not for the 9652.
Hm, the numerator is pretty big, it's 0x100000 * 10^7.
A clock with fixed point?
Anyway, remember that you cannot use 64bit division in the linux
kernel code as it is. You can use a macro div64_32 defined in pcm.h,
though.
Takashi
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RME 9632 - Problem half solved
2006-10-06 17:12 ` Takashi Iwai
@ 2006-10-09 10:18 ` Remy Bruno
0 siblings, 0 replies; 4+ messages in thread
From: Remy Bruno @ 2006-10-09 10:18 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
On Friday 06 October at 19:12, Takashi Iwai wrote:
> Could you give a proper changelog text and a signed-off-by line to
> merge your patch into ALSA tree?
Changelog:
hdsp: support for mixer matrix of RME9632 rev 152
Signed-off-by: Remy Bruno <remy.bruno@trinnov.com>
>
> >
> > For the frequency problem, I got an answer from RME which explains that another
> > register needs to be set (together with the freq0, 1, 2 bits of the control
> > register). This register is the "DDS" register. Here is how it should be
> > computed:
> > UINT64 CalcDDSValue(UINT64 rate)
> > {
> > if (rate >= 112000)
> > rate /= 4;
> > else if (rate >= 56000)
> > rate /= 2;
> >
> > return 104857600000000 / rate;
> > }
> > MemBase[FREQ_REG] = (ULONG)CalcDDSValue(new_rate)
> >
> > Any ideas of what the offset of this register is? If not, I will ask him. BTW,
> > this register exists only for the 9632 and not for the 9652.
>
> Hm, the numerator is pretty big, it's 0x100000 * 10^7.
> A clock with fixed point?
Yes, that's weird. That's what they told me. I'll investigate this.
>
> Anyway, remember that you cannot use 64bit division in the linux
> kernel code as it is. You can use a macro div64_32 defined in pcm.h,
> though.
OK
Remy
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-10-09 10:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-03 10:37 RME 9632 Remy Bruno
2006-10-06 13:53 ` RME 9632 - Problem half solved Remy Bruno
2006-10-06 17:12 ` Takashi Iwai
2006-10-09 10:18 ` Remy Bruno
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.