aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorAdrian Knoth <adi@drcomp.erfurt.thur.de>2011-02-23 05:43:13 -0500
committerTakashi Iwai <tiwai@suse.de>2011-02-23 09:44:42 -0500
commit7c4a95b5ec484244fc615be7b9f56c267c51ade6 (patch)
tree1660c1d4696c1f71813ecbda57d3808f89e72abb /sound/pci
parentf6ea805f524207f125f1d245152a16e3a8094243 (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.c29
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 }