diff options
author | Ctirad Fertr <c.fertr@gmail.com> | 2007-12-13 10:27:13 -0500 |
---|---|---|
committer | Mercurial server <hg@alsa0.alsa-project.org> | 2008-01-31 11:30:24 -0500 |
commit | 1c02e36681ae20a796204e8d629d13fa9d5e20b5 (patch) | |
tree | 7ae5336de469988b889fd57be64bd2f531213c98 /sound/pci/emu10k1/emu10k1_main.c | |
parent | 190d2c46e52592ba092e8bf8acd4427c920f2d69 (diff) |
[ALSA] emu10k1 - 1616(M) cardbus improvements
This patch improves E-Mu 1616(M) cardbus support. It adds definitions of the
new Microdock and 1010 cardbus registers (thanks again for descriptions
James) and improves mixer for this card. Now you can use S/PDIF and ADAT on
Mirodock and also use headpohone output on host cardbus card as another
independent output.
Signed-off-by: Ctirad Fertr <c.fertr@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/pci/emu10k1/emu10k1_main.c')
-rw-r--r-- | sound/pci/emu10k1/emu10k1_main.c | 181 |
1 files changed, 108 insertions, 73 deletions
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index da660676680e..54b978e74f58 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -1103,79 +1103,114 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu) | |||
1103 | EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); /* ALICE2 bus 0xb3 */ | 1103 | EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); /* ALICE2 bus 0xb3 */ |
1104 | #endif | 1104 | #endif |
1105 | /* Default outputs */ | 1105 | /* Default outputs */ |
1106 | snd_emu1010_fpga_link_dst_src_write(emu, | 1106 | if (emu->card_capabilities->emu_model == 3) { |
1107 | EMU_DST_DOCK_DAC1_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1107 | /* 1616(M) cardbus default outputs */ |
1108 | emu->emu1010.output_source[0] = 21; | 1108 | /* ALICE2 bus 0xa0 */ |
1109 | snd_emu1010_fpga_link_dst_src_write(emu, | 1109 | snd_emu1010_fpga_link_dst_src_write(emu, |
1110 | EMU_DST_DOCK_DAC1_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | 1110 | EMU_DST_DOCK_DAC1_LEFT1, EMU_SRC_ALICE_EMU32A + 0); |
1111 | emu->emu1010.output_source[1] = 22; | 1111 | emu->emu1010.output_source[0] = 17; |
1112 | snd_emu1010_fpga_link_dst_src_write(emu, | 1112 | snd_emu1010_fpga_link_dst_src_write(emu, |
1113 | EMU_DST_DOCK_DAC2_LEFT1, EMU_SRC_ALICE_EMU32A + 2); | 1113 | EMU_DST_DOCK_DAC1_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); |
1114 | emu->emu1010.output_source[2] = 23; | 1114 | emu->emu1010.output_source[1] = 18; |
1115 | snd_emu1010_fpga_link_dst_src_write(emu, | 1115 | snd_emu1010_fpga_link_dst_src_write(emu, |
1116 | EMU_DST_DOCK_DAC2_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); | 1116 | EMU_DST_DOCK_DAC2_LEFT1, EMU_SRC_ALICE_EMU32A + 2); |
1117 | emu->emu1010.output_source[3] = 24; | 1117 | emu->emu1010.output_source[2] = 19; |
1118 | snd_emu1010_fpga_link_dst_src_write(emu, | 1118 | snd_emu1010_fpga_link_dst_src_write(emu, |
1119 | EMU_DST_DOCK_DAC3_LEFT1, EMU_SRC_ALICE_EMU32A + 4); | 1119 | EMU_DST_DOCK_DAC2_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); |
1120 | emu->emu1010.output_source[4] = 25; | 1120 | emu->emu1010.output_source[3] = 20; |
1121 | snd_emu1010_fpga_link_dst_src_write(emu, | 1121 | snd_emu1010_fpga_link_dst_src_write(emu, |
1122 | EMU_DST_DOCK_DAC3_RIGHT1, EMU_SRC_ALICE_EMU32A + 5); | 1122 | EMU_DST_DOCK_DAC3_LEFT1, EMU_SRC_ALICE_EMU32A + 4); |
1123 | emu->emu1010.output_source[5] = 26; | 1123 | emu->emu1010.output_source[4] = 21; |
1124 | snd_emu1010_fpga_link_dst_src_write(emu, | 1124 | snd_emu1010_fpga_link_dst_src_write(emu, |
1125 | EMU_DST_DOCK_DAC4_LEFT1, EMU_SRC_ALICE_EMU32A + 6); | 1125 | EMU_DST_DOCK_DAC3_RIGHT1, EMU_SRC_ALICE_EMU32A + 5); |
1126 | emu->emu1010.output_source[6] = 27; | 1126 | emu->emu1010.output_source[5] = 22; |
1127 | snd_emu1010_fpga_link_dst_src_write(emu, | 1127 | /* ALICE2 bus 0xa0 */ |
1128 | EMU_DST_DOCK_DAC4_RIGHT1, EMU_SRC_ALICE_EMU32A + 7); | 1128 | snd_emu1010_fpga_link_dst_src_write(emu, |
1129 | emu->emu1010.output_source[7] = 28; | 1129 | EMU_DST_MANA_DAC_LEFT, EMU_SRC_ALICE_EMU32A + 0); |
1130 | snd_emu1010_fpga_link_dst_src_write(emu, | 1130 | emu->emu1010.output_source[16] = 17; |
1131 | EMU_DST_DOCK_PHONES_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1131 | snd_emu1010_fpga_link_dst_src_write(emu, |
1132 | emu->emu1010.output_source[8] = 21; | 1132 | EMU_DST_MANA_DAC_RIGHT, EMU_SRC_ALICE_EMU32A + 1); |
1133 | snd_emu1010_fpga_link_dst_src_write(emu, | 1133 | emu->emu1010.output_source[17] = 18; |
1134 | EMU_DST_DOCK_PHONES_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | 1134 | } else { |
1135 | emu->emu1010.output_source[9] = 22; | 1135 | /* ALICE2 bus 0xa0 */ |
1136 | snd_emu1010_fpga_link_dst_src_write(emu, | 1136 | snd_emu1010_fpga_link_dst_src_write(emu, |
1137 | EMU_DST_DOCK_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1137 | EMU_DST_DOCK_DAC1_LEFT1, EMU_SRC_ALICE_EMU32A + 0); |
1138 | emu->emu1010.output_source[10] = 21; | 1138 | emu->emu1010.output_source[0] = 21; |
1139 | snd_emu1010_fpga_link_dst_src_write(emu, | 1139 | snd_emu1010_fpga_link_dst_src_write(emu, |
1140 | EMU_DST_DOCK_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | 1140 | EMU_DST_DOCK_DAC1_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); |
1141 | emu->emu1010.output_source[11] = 22; | 1141 | emu->emu1010.output_source[1] = 22; |
1142 | snd_emu1010_fpga_link_dst_src_write(emu, | 1142 | snd_emu1010_fpga_link_dst_src_write(emu, |
1143 | EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1143 | EMU_DST_DOCK_DAC2_LEFT1, EMU_SRC_ALICE_EMU32A + 2); |
1144 | emu->emu1010.output_source[12] = 21; | 1144 | emu->emu1010.output_source[2] = 23; |
1145 | snd_emu1010_fpga_link_dst_src_write(emu, | 1145 | snd_emu1010_fpga_link_dst_src_write(emu, |
1146 | EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | 1146 | EMU_DST_DOCK_DAC2_RIGHT1, EMU_SRC_ALICE_EMU32A + 3); |
1147 | emu->emu1010.output_source[13] = 22; | 1147 | emu->emu1010.output_source[3] = 24; |
1148 | snd_emu1010_fpga_link_dst_src_write(emu, | 1148 | snd_emu1010_fpga_link_dst_src_write(emu, |
1149 | EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1149 | EMU_DST_DOCK_DAC3_LEFT1, EMU_SRC_ALICE_EMU32A + 4); |
1150 | emu->emu1010.output_source[14] = 21; | 1150 | emu->emu1010.output_source[4] = 25; |
1151 | snd_emu1010_fpga_link_dst_src_write(emu, | 1151 | snd_emu1010_fpga_link_dst_src_write(emu, |
1152 | EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | 1152 | EMU_DST_DOCK_DAC3_RIGHT1, EMU_SRC_ALICE_EMU32A + 5); |
1153 | emu->emu1010.output_source[15] = 22; | 1153 | emu->emu1010.output_source[5] = 26; |
1154 | snd_emu1010_fpga_link_dst_src_write(emu, | 1154 | snd_emu1010_fpga_link_dst_src_write(emu, |
1155 | EMU_DST_HANA_ADAT, EMU_SRC_ALICE_EMU32A + 0); /* ALICE2 bus 0xa0 */ | 1155 | EMU_DST_DOCK_DAC4_LEFT1, EMU_SRC_ALICE_EMU32A + 6); |
1156 | emu->emu1010.output_source[16] = 21; | 1156 | emu->emu1010.output_source[6] = 27; |
1157 | snd_emu1010_fpga_link_dst_src_write(emu, | 1157 | snd_emu1010_fpga_link_dst_src_write(emu, |
1158 | EMU_DST_HANA_ADAT + 1, EMU_SRC_ALICE_EMU32A + 1); | 1158 | EMU_DST_DOCK_DAC4_RIGHT1, EMU_SRC_ALICE_EMU32A + 7); |
1159 | emu->emu1010.output_source[17] = 22; | 1159 | emu->emu1010.output_source[7] = 28; |
1160 | snd_emu1010_fpga_link_dst_src_write(emu, | 1160 | /* ALICE2 bus 0xa0 */ |
1161 | EMU_DST_HANA_ADAT + 2, EMU_SRC_ALICE_EMU32A + 2); | 1161 | snd_emu1010_fpga_link_dst_src_write(emu, |
1162 | emu->emu1010.output_source[18] = 23; | 1162 | EMU_DST_DOCK_PHONES_LEFT1, EMU_SRC_ALICE_EMU32A + 0); |
1163 | snd_emu1010_fpga_link_dst_src_write(emu, | 1163 | emu->emu1010.output_source[8] = 21; |
1164 | EMU_DST_HANA_ADAT + 3, EMU_SRC_ALICE_EMU32A + 3); | 1164 | snd_emu1010_fpga_link_dst_src_write(emu, |
1165 | emu->emu1010.output_source[19] = 24; | 1165 | EMU_DST_DOCK_PHONES_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); |
1166 | snd_emu1010_fpga_link_dst_src_write(emu, | 1166 | emu->emu1010.output_source[9] = 22; |
1167 | EMU_DST_HANA_ADAT + 4, EMU_SRC_ALICE_EMU32A + 4); | 1167 | /* ALICE2 bus 0xa0 */ |
1168 | emu->emu1010.output_source[20] = 25; | 1168 | snd_emu1010_fpga_link_dst_src_write(emu, |
1169 | snd_emu1010_fpga_link_dst_src_write(emu, | 1169 | EMU_DST_DOCK_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); |
1170 | EMU_DST_HANA_ADAT + 5, EMU_SRC_ALICE_EMU32A + 5); | 1170 | emu->emu1010.output_source[10] = 21; |
1171 | emu->emu1010.output_source[21] = 26; | 1171 | snd_emu1010_fpga_link_dst_src_write(emu, |
1172 | snd_emu1010_fpga_link_dst_src_write(emu, | 1172 | EMU_DST_DOCK_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); |
1173 | EMU_DST_HANA_ADAT + 6, EMU_SRC_ALICE_EMU32A + 6); | 1173 | emu->emu1010.output_source[11] = 22; |
1174 | emu->emu1010.output_source[22] = 27; | 1174 | /* ALICE2 bus 0xa0 */ |
1175 | snd_emu1010_fpga_link_dst_src_write(emu, | 1175 | snd_emu1010_fpga_link_dst_src_write(emu, |
1176 | EMU_DST_HANA_ADAT + 7, EMU_SRC_ALICE_EMU32A + 7); | 1176 | EMU_DST_HANA_SPDIF_LEFT1, EMU_SRC_ALICE_EMU32A + 0); |
1177 | emu->emu1010.output_source[23] = 28; | 1177 | emu->emu1010.output_source[12] = 21; |
1178 | 1178 | snd_emu1010_fpga_link_dst_src_write(emu, | |
1179 | EMU_DST_HANA_SPDIF_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | ||
1180 | emu->emu1010.output_source[13] = 22; | ||
1181 | /* ALICE2 bus 0xa0 */ | ||
1182 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1183 | EMU_DST_HAMOA_DAC_LEFT1, EMU_SRC_ALICE_EMU32A + 0); | ||
1184 | emu->emu1010.output_source[14] = 21; | ||
1185 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1186 | EMU_DST_HAMOA_DAC_RIGHT1, EMU_SRC_ALICE_EMU32A + 1); | ||
1187 | emu->emu1010.output_source[15] = 22; | ||
1188 | /* ALICE2 bus 0xa0 */ | ||
1189 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1190 | EMU_DST_HANA_ADAT, EMU_SRC_ALICE_EMU32A + 0); | ||
1191 | emu->emu1010.output_source[16] = 21; | ||
1192 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1193 | EMU_DST_HANA_ADAT + 1, EMU_SRC_ALICE_EMU32A + 1); | ||
1194 | emu->emu1010.output_source[17] = 22; | ||
1195 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1196 | EMU_DST_HANA_ADAT + 2, EMU_SRC_ALICE_EMU32A + 2); | ||
1197 | emu->emu1010.output_source[18] = 23; | ||
1198 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1199 | EMU_DST_HANA_ADAT + 3, EMU_SRC_ALICE_EMU32A + 3); | ||
1200 | emu->emu1010.output_source[19] = 24; | ||
1201 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1202 | EMU_DST_HANA_ADAT + 4, EMU_SRC_ALICE_EMU32A + 4); | ||
1203 | emu->emu1010.output_source[20] = 25; | ||
1204 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1205 | EMU_DST_HANA_ADAT + 5, EMU_SRC_ALICE_EMU32A + 5); | ||
1206 | emu->emu1010.output_source[21] = 26; | ||
1207 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1208 | EMU_DST_HANA_ADAT + 6, EMU_SRC_ALICE_EMU32A + 6); | ||
1209 | emu->emu1010.output_source[22] = 27; | ||
1210 | snd_emu1010_fpga_link_dst_src_write(emu, | ||
1211 | EMU_DST_HANA_ADAT + 7, EMU_SRC_ALICE_EMU32A + 7); | ||
1212 | emu->emu1010.output_source[23] = 28; | ||
1213 | } | ||
1179 | /* TEMP: Select SPDIF in/out */ | 1214 | /* TEMP: Select SPDIF in/out */ |
1180 | //snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x0); /* Output spdif */ | 1215 | //snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x0); /* Output spdif */ |
1181 | 1216 | ||