Commit 56bde0f3 authored by Andre Schramm's avatar Andre Schramm Committed by Takashi Iwai

ALSA: hdspm - Fix wordclock status on AES32

Use correct bitmask for AES32 cards to determine wordclock lock state,
add missing bitmask for sync check and make output of the corresponding
control and /proc coherent.
Signed-off-by: default avatarAndre Schramm <andre.schramm@iosono-sound.com>
Signed-off-by: default avatarAdrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7ed4165e
...@@ -441,6 +441,7 @@ MODULE_SUPPORTED_DEVICE("{{RME HDSPM-MADI}}"); ...@@ -441,6 +441,7 @@ MODULE_SUPPORTED_DEVICE("{{RME HDSPM-MADI}}");
*/ */
/* status */ /* status */
#define HDSPM_AES32_wcLock 0x0200000 #define HDSPM_AES32_wcLock 0x0200000
#define HDSPM_AES32_wcSync 0x0100000
#define HDSPM_AES32_wcFreq_bit 22 #define HDSPM_AES32_wcFreq_bit 22
/* (status >> HDSPM_AES32_wcFreq_bit) & 0xF gives WC frequency (cf function /* (status >> HDSPM_AES32_wcFreq_bit) & 0xF gives WC frequency (cf function
HDSPM_bit2freq */ HDSPM_bit2freq */
...@@ -3467,10 +3468,12 @@ static int hdspm_wc_sync_check(struct hdspm *hdspm) ...@@ -3467,10 +3468,12 @@ static int hdspm_wc_sync_check(struct hdspm *hdspm)
switch (hdspm->io_type) { switch (hdspm->io_type) {
case AES32: case AES32:
status = hdspm_read(hdspm, HDSPM_statusRegister); status = hdspm_read(hdspm, HDSPM_statusRegister);
if (status & HDSPM_wcSync) if (status & HDSPM_AES32_wcLock) {
if (status & HDSPM_AES32_wcSync)
return 2; return 2;
else if (status & HDSPM_wcLock) else
return 1; return 1;
}
return 0; return 0;
break; break;
...@@ -4658,6 +4661,7 @@ snd_hdspm_proc_read_aes32(struct snd_info_entry * entry, ...@@ -4658,6 +4661,7 @@ snd_hdspm_proc_read_aes32(struct snd_info_entry * entry,
unsigned int status; unsigned int status;
unsigned int status2; unsigned int status2;
unsigned int timecode; unsigned int timecode;
unsigned int wcLock, wcSync;
int pref_syncref; int pref_syncref;
char *autosync_ref; char *autosync_ref;
int x; int x;
...@@ -4751,8 +4755,11 @@ snd_hdspm_proc_read_aes32(struct snd_info_entry * entry, ...@@ -4751,8 +4755,11 @@ snd_hdspm_proc_read_aes32(struct snd_info_entry * entry,
snd_iprintf(buffer, "--- Status:\n"); snd_iprintf(buffer, "--- Status:\n");
wcLock = status & HDSPM_AES32_wcLock;
wcSync = wcLock && (status & HDSPM_AES32_wcSync);
snd_iprintf(buffer, "Word: %s Frequency: %d\n", snd_iprintf(buffer, "Word: %s Frequency: %d\n",
(status & HDSPM_AES32_wcLock) ? "Sync " : "No Lock", (wcLock) ? (wcSync ? "Sync " : "Lock ") : "No Lock",
HDSPM_bit2freq((status >> HDSPM_AES32_wcFreq_bit) & 0xF)); HDSPM_bit2freq((status >> HDSPM_AES32_wcFreq_bit) & 0xF));
for (x = 0; x < 8; x++) { for (x = 0; x < 8; x++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment