diff options
author | Adrian Knoth <adi@drcomp.erfurt.thur.de> | 2011-02-23 05:43:13 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-02-23 09:44:42 -0500 |
commit | 7c4a95b5ec484244fc615be7b9f56c267c51ade6 (patch) | |
tree | 1660c1d4696c1f71813ecbda57d3808f89e72abb /sound/pci | |
parent | f6ea805f524207f125f1d245152a16e3a8094243 (diff) |
ALSA: hdspm - fix sync check on AES32
Fredrik Lingvall <fredrik.lingvall@gmail.com> has discovered wrong
frequency and sync detection on AES32. According to him, the provided
patch fixes these issues.
Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/rme9652/hdspm.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index ea49ffe4d9ab..0b0293fb8f09 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c | |||
@@ -1082,7 +1082,7 @@ static int hdspm_external_sample_rate(struct hdspm *hdspm) | |||
1082 | case AES32: | 1082 | case AES32: |
1083 | status2 = hdspm_read(hdspm, HDSPM_statusRegister2); | 1083 | status2 = hdspm_read(hdspm, HDSPM_statusRegister2); |
1084 | status = hdspm_read(hdspm, HDSPM_statusRegister); | 1084 | status = hdspm_read(hdspm, HDSPM_statusRegister); |
1085 | timecode = hdspm_read(hdspm, HDSPM_timecodeRegister); | 1085 | timecode = hdspm_read(hdspm, HDSPM_timecodeRegister); |
1086 | 1086 | ||
1087 | syncref = hdspm_autosync_ref(hdspm); | 1087 | syncref = hdspm_autosync_ref(hdspm); |
1088 | 1088 | ||
@@ -2115,6 +2115,29 @@ static int snd_hdspm_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, | |||
2115 | hdspm_get_s1_sample_rate(hdspm, | 2115 | hdspm_get_s1_sample_rate(hdspm, |
2116 | ucontrol->id.index-1); | 2116 | ucontrol->id.index-1); |
2117 | } | 2117 | } |
2118 | |||
2119 | case AES32: | ||
2120 | |||
2121 | switch (kcontrol->private_value) { | ||
2122 | case 0: /* WC */ | ||
2123 | ucontrol->value.enumerated.item[0] = | ||
2124 | hdspm_get_wc_sample_rate(hdspm); | ||
2125 | break; | ||
2126 | case 9: /* TCO */ | ||
2127 | ucontrol->value.enumerated.item[0] = | ||
2128 | hdspm_get_tco_sample_rate(hdspm); | ||
2129 | break; | ||
2130 | case 10: /* SYNC_IN */ | ||
2131 | ucontrol->value.enumerated.item[0] = | ||
2132 | hdspm_get_sync_in_sample_rate(hdspm); | ||
2133 | break; | ||
2134 | default: /* AES1 to AES8 */ | ||
2135 | ucontrol->value.enumerated.item[0] = | ||
2136 | hdspm_get_s1_sample_rate(hdspm, | ||
2137 | kcontrol->private_value-1); | ||
2138 | break; | ||
2139 | |||
2140 | } | ||
2118 | default: | 2141 | default: |
2119 | break; | 2142 | break; |
2120 | } | 2143 | } |
@@ -3803,9 +3826,9 @@ static int snd_hdspm_get_sync_check(struct snd_kcontrol *kcontrol, | |||
3803 | val = hdspm_tco_sync_check(hdspm); break; | 3826 | val = hdspm_tco_sync_check(hdspm); break; |
3804 | case 10 /* SYNC IN */: | 3827 | case 10 /* SYNC IN */: |
3805 | val = hdspm_sync_in_sync_check(hdspm); break; | 3828 | val = hdspm_sync_in_sync_check(hdspm); break; |
3806 | default: | 3829 | default: /* AES1 to AES8 */ |
3807 | val = hdspm_aes_sync_check(hdspm, | 3830 | val = hdspm_aes_sync_check(hdspm, |
3808 | ucontrol->id.index-1); | 3831 | kcontrol->private_value-1); |
3809 | } | 3832 | } |
3810 | 3833 | ||
3811 | } | 3834 | } |