aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/emu10k1/emu10k1_main.c
diff options
context:
space:
mode:
authorCtirad Fertr <c.fertr@gmail.com>2007-12-13 10:27:13 -0500
committerMercurial server <hg@alsa0.alsa-project.org>2008-01-31 11:30:24 -0500
commit1c02e36681ae20a796204e8d629d13fa9d5e20b5 (patch)
tree7ae5336de469988b889fd57be64bd2f531213c98 /sound/pci/emu10k1/emu10k1_main.c
parent190d2c46e52592ba092e8bf8acd4427c920f2d69 (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.c181
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