• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/pci/au88x0/

Lines Matching defs:vortex

88 static void vortex_mixer_en_sr(vortex_t * vortex, int channel)
90 hwwrite(vortex->mmio, VORTEX_MIXER_SR,
91 hwread(vortex->mmio, VORTEX_MIXER_SR) | (0x1 << channel));
93 static void vortex_mixer_dis_sr(vortex_t * vortex, int channel)
95 hwwrite(vortex->mmio, VORTEX_MIXER_SR,
96 hwread(vortex->mmio, VORTEX_MIXER_SR) & ~(0x1 << channel));
100 vortex_mix_setvolumebyte(vortex_t * vortex, unsigned char mix,
104 hwwrite(vortex->mmio, VORTEX_MIX_VOL_A + (mix << 2), vol);
106 temp = hwread(vortex->mmio, VORTEX_MIX_VOL_B + (mix << 2));
110 hwwrite(vortex->mmio, VORTEX_MIX_VOL_B + (mix << 2), vol);
114 vortex_mix_setinputvolumebyte(vortex_t * vortex, unsigned char mix,
119 hwwrite(vortex->mmio,
123 hwread(vortex->mmio,
128 hwwrite(vortex->mmio,
133 vortex_mix_setenablebit(vortex_t * vortex, unsigned char mix, int mixin, int en)
142 temp = hwread(vortex->mmio, VORTEX_MIX_ENIN + addr);
148 hwwrite(vortex->mmio,
151 hwwrite(vortex->mmio, VORTEX_MIX_SMP + (mixin << 2), 0x0);
152 hwwrite(vortex->mmio, VORTEX_MIX_SMP + 4 + (mixin << 2), 0x0);
154 hwwrite(vortex->mmio, VORTEX_MIX_ENIN + addr, temp);
158 vortex_mix_killinput(vortex_t * vortex, unsigned char mix, int mixin)
161 vortex_mix_setinputvolumebyte(vortex, mix, mixin, 0x80);
163 vortex_mix_setenablebit(vortex, mix, mixin, 0);
167 vortex_mix_enableinput(vortex_t * vortex, unsigned char mix, int mixin)
169 vortex_mix_killinput(vortex, mix, mixin);
171 vortex_mix_setinputvolumebyte(vortex, mix, mixin, 0x80); /*0x80 : mute */
174 vortex_mix_setenablebit(vortex, mix, mixin, 1);
178 vortex_mix_disableinput(vortex_t * vortex, unsigned char mix, int channel,
184 //vortex_mix_startrampvolume(vortex);
185 vortex_mix_killinput(vortex, mix, channel);
187 vortex_mix_killinput(vortex, mix, channel);
191 vortex_mixer_addWTD(vortex_t * vortex, unsigned char mix, unsigned char ch)
195 temp = hwread(vortex->mmio, VORTEX_MIXER_SR);
197 hwwrite(vortex->mmio, VORTEX_MIXER_CHNBASE + (ch << 2), mix);
198 vortex_mixer_en_sr(vortex, ch);
202 temp = hwread(vortex->mmio, prev);
205 temp = hwread(vortex->mmio, prev);
206 //printk(KERN_INFO "vortex: mixAddWTD: while addr=%x, val=%x\n", prev, temp);
213 hwwrite(vortex->mmio, VORTEX_MIXER_RTBASE + ((temp & 0xf) << 2), mix);
214 hwwrite(vortex->mmio, prev, (temp & 0xf) | 0x10);
219 vortex_mixer_delWTD(vortex_t * vortex, unsigned char mix, unsigned char ch)
224 eax = hwread(vortex->mmio, VORTEX_MIXER_SR);
230 esp18 = hwread(vortex->mmio, ebp);
235 edx = hwread(vortex->mmio, ebx);
237 hwwrite(vortex->mmio, ebp, edx);
238 hwwrite(vortex->mmio, ebx, 0);
242 hwread(vortex->mmio,
244 //printk(KERN_INFO "vortex: mixdelWTD: 1 addr=%x, val=%x, src=%x\n", ebx, edx, src);
248 "vortex: mixdelWTD: error lifeboat overflow\n");
255 hwread(vortex->mmio,
257 //printk(KERN_INFO "vortex: mixdelWTD: while addr=%x, val=%x\n", ebp, edx);
264 edx = hwread(vortex->mmio, ebx);
266 hwwrite(vortex->mmio,
268 hwwrite(vortex->mmio, ebx, 0);
269 //printk(KERN_INFO "vortex mixdelWTD between addr= 0x%x, val= 0x%x\n", ebp, edx);
273 hwwrite(vortex->mmio,
278 hwwrite(vortex->mmio,
281 //printk(KERN_INFO "vortex mixdelWTD last addr= 0x%x, val= 0x%x\n", esp14, ebx);
283 hwwrite(vortex->mmio,
291 vortex_mixer_dis_sr(vortex, ch);
292 hwwrite(vortex->mmio, ebp, 0);
297 static void vortex_mixer_init(vortex_t * vortex)
307 hwwrite(vortex->mmio, addr, 0);
312 hwwrite(vortex->mmio, addr, 0);
317 hwwrite(vortex->mmio, addr, 0);
322 hwwrite(vortex->mmio, addr, 0x80);
327 hwwrite(vortex->mmio, addr, 0x80);
332 hwwrite(vortex->mmio, addr, 0x80);
337 hwwrite(vortex->mmio, addr, 0x80);
342 hwwrite(vortex->mmio, addr, 0x0);
345 hwwrite(vortex->mmio, VORTEX_MIXER_SR, 0);
350 hwwrite(vortex->mmio, VORTEX_MIXER_CLIP + (x << 2), 0x3ffff);
362 static void vortex_src_en_sr(vortex_t * vortex, int channel)
364 hwwrite(vortex->mmio, VORTEX_SRCBLOCK_SR,
365 hwread(vortex->mmio, VORTEX_SRCBLOCK_SR) | (0x1 << channel));
368 static void vortex_src_dis_sr(vortex_t * vortex, int channel)
370 hwwrite(vortex->mmio, VORTEX_SRCBLOCK_SR,
371 hwread(vortex->mmio, VORTEX_SRCBLOCK_SR) & ~(0x1 << channel));
374 static void vortex_src_flushbuffers(vortex_t * vortex, unsigned char src)
379 hwwrite(vortex->mmio,
381 hwwrite(vortex->mmio, VORTEX_SRC_DATA + (src << 3), 0);
382 hwwrite(vortex->mmio, VORTEX_SRC_DATA + (src << 3) + 4, 0);
385 static void vortex_src_cleardrift(vortex_t * vortex, unsigned char src)
387 hwwrite(vortex->mmio, VORTEX_SRC_DRIFT0 + (src << 2), 0);
388 hwwrite(vortex->mmio, VORTEX_SRC_DRIFT1 + (src << 2), 0);
389 hwwrite(vortex->mmio, VORTEX_SRC_DRIFT2 + (src << 2), 1);
393 vortex_src_set_throttlesource(vortex_t * vortex, unsigned char src, int en)
397 temp = hwread(vortex->mmio, VORTEX_SRC_SOURCE);
402 hwwrite(vortex->mmio, VORTEX_SRC_SOURCE, temp);
406 vortex_src_persist_convratio(vortex_t * vortex, unsigned char src, int ratio)
411 hwwrite(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2), ratio);
412 temp = hwread(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2));
501 //printk(KERN_INFO "vortex: SRC %d, d=0x%x, esi=0x%x, esp10=0x%x, ebp=0x%x\n", src, d, esi, esp10, ebp);
504 static void vortex_srcblock_init(vortex_t * vortex)
508 hwwrite(vortex->mmio, VORTEX_SRC_SOURCESIZE, 0x1ff);
518 hwwrite(vortex->mmio, addr, 0);
525 hwwrite(vortex->mmio, addr, 0);
531 vortex_src_addWTD(vortex_t * vortex, unsigned char src, unsigned char ch)
536 temp = hwread(vortex->mmio, VORTEX_SRCBLOCK_SR);
538 hwwrite(vortex->mmio, VORTEX_SRC_CHNBASE + (ch << 2), src);
539 vortex_src_en_sr(vortex, ch);
543 temp = hwread(vortex->mmio, prev);
548 temp = hwread(vortex->mmio, prev);
549 //printk(KERN_INFO "vortex: srcAddWTD: while addr=%x, val=%x\n", prev, temp);
556 hwwrite(vortex->mmio, VORTEX_SRC_RTBASE + ((temp & 0xf) << 2), src);
557 //hwwrite(vortex->mmio, prev, (temp & (NR_SRC-1)) | NR_SRC);
558 hwwrite(vortex->mmio, prev, (temp & 0xf) | 0x10);
563 vortex_src_delWTD(vortex_t * vortex, unsigned char src, unsigned char ch)
568 eax = hwread(vortex->mmio, VORTEX_SRCBLOCK_SR);
574 esp18 = hwread(vortex->mmio, ebp);
579 edx = hwread(vortex->mmio, ebx);
581 hwwrite(vortex->mmio, ebp, edx);
582 hwwrite(vortex->mmio, ebx, 0);
586 hwread(vortex->mmio,
588 //printk(KERN_INFO "vortex: srcdelWTD: 1 addr=%x, val=%x, src=%x\n", ebx, edx, src);
592 ("vortex: srcdelWTD: error, lifeboat overflow\n");
599 hwread(vortex->mmio,
601 //printk(KERN_INFO "vortex: srcdelWTD: while addr=%x, val=%x\n", ebp, edx);
608 edx = hwread(vortex->mmio, ebx);
610 hwwrite(vortex->mmio,
612 hwwrite(vortex->mmio, ebx, 0);
613 //printk(KERN_INFO "vortex srcdelWTD between addr= 0x%x, val= 0x%x\n", ebp, edx);
617 hwwrite(vortex->mmio,
622 hwwrite(vortex->mmio,
625 //printk(KERN_INFO"vortex srcdelWTD last addr= 0x%x, val= 0x%x\n", esp14, ebx);
627 hwwrite(vortex->mmio,
634 vortex_src_dis_sr(vortex, ch);
635 hwwrite(vortex->mmio, ebp, 0);
643 vortex_fifo_clearadbdata(vortex_t * vortex, int fifo, int x)
646 hwwrite(vortex->mmio,
651 static void vortex_fifo_setadbvalid(vortex_t * vortex, int fifo, int en)
653 hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2),
654 (hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2)) &
659 vortex_fifo_setadbctrl(vortex_t * vortex, int fifo, int b, int priority,
671 temp = hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2));
685 vortex_fifo_clearadbdata(vortex, fifo, FIFO_SIZE); // this_4
723 vortex_fifo_clearadbdata(vortex, fifo, FIFO_SIZE);
725 hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2), temp);
726 hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2));
730 static void vortex_fifo_clearwtdata(vortex_t * vortex, int fifo, int x)
735 hwwrite(vortex->mmio,
740 static void vortex_fifo_wtinitialize(vortex_t * vortex, int fifo, int j)
742 vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE);
744 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2),
747 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2),
752 static void vortex_fifo_setwtvalid(vortex_t * vortex, int fifo, int en)
754 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2),
755 (hwread(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2)) &
760 vortex_fifo_setwtctrl(vortex_t * vortex, int fifo, int ctrl, int priority,
767 temp = hwread(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2));
777 vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE); // this_4
815 vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE);
817 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
818 hwread(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2));
822 temp = hwread(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2));
841 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
844 vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE);
853 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
854 temp = hwread(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2));
859 vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE);
866 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
881 hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
886 static void vortex_fifo_init(vortex_t * vortex)
894 hwwrite(vortex->mmio, addr, (FIFO_U0 | FIFO_U1));
895 if (hwread(vortex->mmio, addr) != (FIFO_U0 | FIFO_U1))
897 vortex_fifo_clearadbdata(vortex, x, FIFO_SIZE);
905 hwwrite(vortex->mmio, addr, FIFO_U0);
906 if (hwread(vortex->mmio, addr) != FIFO_U0)
909 addr, hwread(vortex->mmio, addr));
910 vortex_fifo_clearwtdata(vortex, x, FIFO_SIZE);
916 hwwrite(vortex->mmio, 0xf8c0, 0xd03); //0x0843 0xd6b
919 hwwrite(vortex->mmio, 0x17000, 0x61); /* wt a */
920 hwwrite(vortex->mmio, 0x17004, 0x61); /* wt b */
922 hwwrite(vortex->mmio, 0x17008, 0x61); /* adb */
928 static void vortex_adbdma_init(vortex_t * vortex)
932 static void vortex_adbdma_setfirstbuffer(vortex_t * vortex, int adbdma)
934 stream_t *dma = &vortex->dma_adb[adbdma];
936 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
940 static void vortex_adbdma_setstartbuffer(vortex_t * vortex, int adbdma, int sb)
942 stream_t *dma = &vortex->dma_adb[adbdma];
943 //hwwrite(vortex->mmio, VORTEX_ADBDMA_START + (adbdma << 2), sb << (((NR_ADB-1)-((adbdma&0xf)*2))));
944 hwwrite(vortex->mmio, VORTEX_ADBDMA_START + (adbdma << 2),
950 vortex_adbdma_setbuffers(vortex_t * vortex, int adbdma,
953 stream_t *dma = &vortex->dma_adb[adbdma];
965 hwwrite(vortex->mmio,
972 hwwrite(vortex->mmio,
978 hwwrite(vortex->mmio,
984 hwwrite(vortex->mmio,
990 printk(KERN_DEBUG "vortex: cfg0 = 0x%x\nvortex: cfg1=0x%x\n",
993 hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG0 + (adbdma << 3), dma->cfg0);
994 hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG1 + (adbdma << 3), dma->cfg1);
996 vortex_adbdma_setfirstbuffer(vortex, adbdma);
997 vortex_adbdma_setstartbuffer(vortex, adbdma, 0);
1001 vortex_adbdma_setmode(vortex_t * vortex, int adbdma, int ie, int dir,
1004 stream_t *dma = &vortex->dma_adb[adbdma];
1018 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1020 hwread(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2));
1023 static int vortex_adbdma_bufshift(vortex_t * vortex, int adbdma)
1025 stream_t *dma = &vortex->dma_adb[adbdma];
1029 (hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)) &
1052 //hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE+(((adbdma << 2)+pp) << 2), dma->table[p].addr);
1053 hwwrite(vortex->mmio,
1058 hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE +
1067 printk(KERN_INFO "vortex: %d virt=%d, real=%d, delta=%d\n",
1074 static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) {
1075 stream_t *dma = &vortex->dma_adb[adbdma];
1094 hwwrite(vortex->mmio,
1099 hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (((adbdma << 2)+pp) << 2));
1103 static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma)
1105 stream_t *dma = &vortex->dma_adb[adbdma];
1108 temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
1113 static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma)
1116 stream_t *dma = &vortex->dma_adb[adbdma];
1120 vortex_fifo_setadbvalid(vortex, adbdma,
1125 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1127 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1132 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1140 static void vortex_adbdma_resumefifo(vortex_t * vortex, int adbdma)
1142 stream_t *dma = &vortex->dma_adb[adbdma];
1147 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1149 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1154 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1162 static void vortex_adbdma_pausefifo(vortex_t * vortex, int adbdma)
1164 stream_t *dma = &vortex->dma_adb[adbdma];
1169 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1173 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1175 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1185 static void vortex_wtdma_setfirstbuffer(vortex_t * vortex, int wtdma)
1188 stream_t *dma = &vortex->dma_wt[wtdma];
1190 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
1193 static void vortex_wtdma_setstartbuffer(vortex_t * vortex, int wtdma, int sb)
1195 stream_t *dma = &vortex->dma_wt[wtdma];
1196 //hwwrite(vortex->mmio, VORTEX_WTDMA_START + (wtdma << 2), sb << ((0x1f-(wtdma&0xf)*2)));
1197 hwwrite(vortex->mmio, VORTEX_WTDMA_START + (wtdma << 2),
1203 vortex_wtdma_setbuffers(vortex_t * vortex, int wtdma,
1206 stream_t *dma = &vortex->dma_wt[wtdma];
1218 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0xc,
1224 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x8,
1229 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x4,
1234 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4),
1238 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG0 + (wtdma << 3), dma->cfg0);
1239 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG1 + (wtdma << 3), dma->cfg1);
1241 vortex_wtdma_setfirstbuffer(vortex, wtdma);
1242 vortex_wtdma_setstartbuffer(vortex, wtdma, 0);
1246 vortex_wtdma_setmode(vortex_t * vortex, int wtdma, int ie, int fmt, int d,
1249 stream_t *dma = &vortex->dma_wt[wtdma];
1265 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
1268 static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
1270 stream_t *dma = &vortex->dma_wt[wtdma];
1274 (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
1298 hwwrite(vortex->mmio,
1304 hwread(vortex->mmio, VORTEX_WTDMA_BUFBASE +
1314 printk(KERN_WARNING "vortex: wt virt = %d, delta = %d\n",
1320 static int inline vortex_wtdma_getlinearpos(vortex_t * vortex, int wtdma)
1322 stream_t *dma = &vortex->dma_wt[wtdma];
1325 temp = hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2));
1330 static void vortex_wtdma_startfifo(vortex_t * vortex, int wtdma)
1332 stream_t *dma = &vortex->dma_wt[wtdma];
1337 vortex_fifo_setwtvalid(vortex, wtdma,
1342 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1344 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1349 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1357 static void vortex_wtdma_resumefifo(vortex_t * vortex, int wtdma)
1359 stream_t *dma = &vortex->dma_wt[wtdma];
1364 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1366 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1371 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1379 static void vortex_wtdma_pausefifo(vortex_t * vortex, int wtdma)
1381 stream_t *dma = &vortex->dma_wt[wtdma];
1386 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1390 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1392 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1399 static void vortex_wtdma_stopfifo(vortex_t * vortex, int wtdma)
1401 stream_t *dma = &vortex->dma_wt[wtdma];
1405 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1417 static void vortex_adb_init(vortex_t * vortex)
1422 hwwrite(vortex->mmio, VORTEX_ADB_SR, 0);
1424 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (i << 2),
1425 hwread(vortex->mmio,
1428 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (i << 2),
1429 hwread(vortex->mmio,
1434 static void vortex_adb_en_sr(vortex_t * vortex, int channel)
1436 hwwrite(vortex->mmio, VORTEX_ADB_SR,
1437 hwread(vortex->mmio, VORTEX_ADB_SR) | (0x1 << channel));
1440 static void vortex_adb_dis_sr(vortex_t * vortex, int channel)
1442 hwwrite(vortex->mmio, VORTEX_ADB_SR,
1443 hwread(vortex->mmio, VORTEX_ADB_SR) & ~(0x1 << channel));
1447 vortex_adb_addroutes(vortex_t * vortex, unsigned char channel,
1456 hwwrite(vortex->mmio,
1460 hwwrite(vortex->mmio,
1467 hwread(vortex->mmio,
1471 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2),
1473 vortex_adb_en_sr(vortex, channel);
1480 hwread(vortex->mmio,
1490 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), route[0]);
1494 vortex_adb_delroutes(vortex_t * vortex, unsigned char channel,
1501 hwread(vortex->mmio,
1505 hwread(vortex->mmio,
1508 vortex_adb_dis_sr(vortex, channel);
1509 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2),
1516 hwread(vortex->mmio,
1526 temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
1528 temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
1530 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), temp);
1534 vortex_route(vortex_t * vortex, int en, unsigned char channel,
1541 vortex_adb_addroutes(vortex, channel, &route, 1);
1544 vortex_src_addWTD(vortex, (source - OFFSET_SRCOUT),
1548 vortex_mixer_addWTD(vortex,
1551 vortex_adb_delroutes(vortex, channel, route, route);
1554 vortex_src_delWTD(vortex, (source - OFFSET_SRCOUT),
1558 vortex_mixer_delWTD(vortex,
1565 vortex_routeLRT(vortex_t * vortex, int en, unsigned char ch,
1578 vortex_adb_addroutes(vortex, ch, route, 2);
1581 vortex_src_addWTD(vortex,
1583 vortex_src_addWTD(vortex,
1587 vortex_mixer_addWTD(vortex,
1589 vortex_mixer_addWTD(vortex,
1593 vortex_adb_delroutes(vortex, ch, route[0], route[1]);
1596 vortex_src_delWTD(vortex,
1598 vortex_src_delWTD(vortex,
1602 vortex_mixer_delWTD(vortex,
1604 vortex_mixer_delWTD(vortex,
1614 vortex_connection_adbdma_src(vortex_t * vortex, int en, unsigned char ch,
1617 vortex_route(vortex, en, ch, ADB_DMA(adbdma), ADB_SRCIN(src));
1622 vortex_connection_src_mixin(vortex_t * vortex, int en,
1626 vortex_route(vortex, en, channel, ADB_SRCOUT(src), ADB_MIXIN(mixin));
1631 vortex_connection_mixin_mix(vortex_t * vortex, int en, unsigned char mixin,
1635 vortex_mix_enableinput(vortex, mix, mixin);
1636 vortex_mix_setinputvolumebyte(vortex, mix, mixin, MIX_DEFIGAIN); // added to original code.
1638 vortex_mix_disableinput(vortex, mix, mixin, a);
1643 vortex_connection_adb_mixin(vortex_t * vortex, int en,
1647 vortex_route(vortex, en, channel, source, ADB_MIXIN(mixin));
1651 vortex_connection_src_adbdma(vortex_t * vortex, int en, unsigned char ch,
1654 vortex_route(vortex, en, ch, ADB_SRCOUT(src), ADB_DMA(adbdma));
1658 vortex_connection_src_src_adbdma(vortex_t * vortex, int en,
1663 vortex_routeLRT(vortex, en, ch, ADB_SRCOUT(src0), ADB_SRCOUT(src1),
1669 vortex_connection_mix_adb(vortex_t * vortex, int en, unsigned char ch,
1672 vortex_route(vortex, en, ch, ADB_MIXOUT(mix), dest);
1673 vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN); // added to original code.
1678 vortex_connection_mix_src(vortex_t * vortex, int en, unsigned char ch,
1681 vortex_route(vortex, en, ch, ADB_MIXOUT(mix), ADB_SRCIN(src));
1682 vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN); // added to original code.
1689 vortex_connect_codecplay(vortex_t * vortex, int en, unsigned char mixers[])
1692 vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_CODECOUT(0));
1693 vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_CODECOUT(1));
1696 vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_EQIN(0));
1697 vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_EQIN(1));
1699 vortex_mix_setvolumebyte(vortex, mixers[0], 0);
1700 vortex_mix_setvolumebyte(vortex, mixers[1], 0);
1701 vortex_route(vortex, en, 0x11, ADB_EQOUT(0), ADB_CODECOUT(0));
1702 vortex_route(vortex, en, 0x11, ADB_EQOUT(1), ADB_CODECOUT(1));
1705 if (VORTEX_IS_QUAD(vortex)) {
1707 vortex_connection_mix_adb(vortex, en, 0x11, mixers[2],
1709 vortex_connection_mix_adb(vortex, en, 0x11, mixers[3],
1717 vortex_connect_codecrec(vortex_t * vortex, int en, unsigned char mixin0,
1726 vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(0), mixin0);
1727 vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(1), mixin1);
1743 vortex_adb_checkinout(vortex_t * vortex, int resmap[], int out, int restype)
1750 resinuse |= vortex->dma_adb[i].resources[restype];
1752 resinuse |= vortex->fixed_res[restype];
1759 vortex->dma_adb[i].resources[restype] |= (1 << i);
1762 "vortex: ResManager: type %d out %d\n",
1777 "vortex: ResManager: type %d in %d\n",
1784 printk(KERN_ERR "vortex: FATAL: ResManager: resource type %d exhausted.\n", restype);
1790 vortex_adb_allocroute(vortex_t * vortex, int dma, int nr_ch, int dir, int type);
1792 static void vortex_connect_default(vortex_t * vortex, int en)
1795 vortex->mixplayb[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1797 vortex->mixplayb[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1799 if (VORTEX_IS_QUAD(vortex)) {
1800 vortex->mixplayb[2] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1802 vortex->mixplayb[3] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1805 vortex_connect_codecplay(vortex, en, vortex->mixplayb);
1807 vortex->mixcapt[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1809 vortex->mixcapt[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1811 vortex_connect_codecrec(vortex, en, MIX_CAPT(0), MIX_CAPT(1));
1815 vortex->mixspdif[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1817 vortex->mixspdif[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1819 vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[0],
1821 vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[1],
1826 vortex_wt_connect(vortex, en);
1830 vortex_Vort3D_connect(vortex, en);
1850 vortex_adb_allocroute(vortex_t * vortex, int dma, int nr_ch, int dir, int type)
1861 vortex_adb_checkinout(vortex,
1862 vortex->dma_adb[dma].resources, en,
1867 vortex_adb_checkinout(vortex, NULL, en,
1872 stream = &vortex->dma_adb[dma];
1886 if ((src[i] = vortex_adb_checkinout(vortex,
1895 if ((mix[i] = vortex_adb_checkinout(vortex,
1910 vortex_adb_checkinout(vortex,
1916 printk(KERN_ERR "vortex: out of A3D sources. Sorry\n");
1920 vortex_Vort3D_InitializeSource(&(vortex->a3d[a3d]), en);
1924 vortex_route(vortex, 0, 0x14,
1925 ADB_MIXOUT(vortex->mixspdif[0]),
1927 vortex_route(vortex, 0, 0x14,
1928 ADB_MIXOUT(vortex->mixspdif[1]),
1935 vortex_connection_adbdma_src(vortex, en,
1939 vortex_connection_src_mixin(vortex, en,
1942 vortex_connection_mixin_mix(vortex, en,
1946 vortex_connection_mixin_mix(vortex, en,
1949 vortex_mix_setinputvolumebyte(vortex,
1957 vortex_connection_adbdma_src(vortex, en,
1961 vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_A3DIN(a3d));
1963 //vortex_route(vortex, en, 0x11, dma, ADB_XTALKIN(i?9:4));
1964 //vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_XTALKIN(i?4:9));
1967 vortex_route(vortex, en, 0x14,
1973 ch_top = (VORTEX_IS_QUAD(vortex) ? 4 : 2);
1975 vortex_connection_mixin_mix(vortex, en,
1979 vortex_connection_mixin_mix(vortex, en,
1983 vortex_mix_setinputvolumebyte(vortex,
1993 vortex_route(vortex, en, 0x14,
1999 vortex_route(vortex, 1, 0x14,
2000 ADB_MIXOUT(vortex->mixspdif[0]),
2002 vortex_route(vortex, 1, 0x14,
2003 ADB_MIXOUT(vortex->mixspdif[1]),
2014 vortex_adb_checkinout(vortex,
2024 vortex_adb_checkinout(vortex,
2035 vortex_connection_mixin_mix(vortex, en, MIX_CAPT(0), mix[0], 0);
2036 vortex_connection_mix_src(vortex, en, 0x11, mix[0], src[0]);
2038 vortex_connection_mixin_mix(vortex, en,
2040 vortex_connection_src_adbdma(vortex, en,
2044 vortex_connection_mixin_mix(vortex, en,
2046 vortex_connection_mix_src(vortex, en, 0x11, mix[1],
2048 vortex_connection_src_src_adbdma(vortex, en,
2053 vortex->dma_adb[dma].nr_ch = nr_ch;
2062 vortex_adb_setsrc(vortex_t * vortex, int adbdma, unsigned int rate, int dir)
2064 stream_t *stream = &(vortex->dma_adb[adbdma]);
2076 vortex_src_setupchannel(vortex, i, cvrt, 0, 0, i, dir, 1, cvrt, dir);
2082 static void vortex_settimer(vortex_t * vortex, int period)
2085 hwwrite(vortex->mmio, VORTEX_IRQ_STAT, period);
2105 vortex_t *vortex = dev_id;
2110 if (!(hwread(vortex->mmio, VORTEX_STAT) & 0x1))
2114 if (!(hwread(vortex->mmio, VORTEX_CTRL) & CTRL_IRQ_ENABLE))
2117 source = hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
2119 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, source);
2120 hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
2123 printk(KERN_ERR "vortex: missing irq source\n");
2131 printk(KERN_ERR "vortex: IRQ fatal error\n");
2134 printk(KERN_ERR "vortex: IRQ parity error\n");
2137 printk(KERN_ERR "vortex: IRQ reg error\n");
2140 printk(KERN_ERR "vortex: IRQ fifo error\n");
2143 printk(KERN_ERR "vortex: IRQ dma error\n");
2149 spin_lock(&vortex->lock);
2151 if (vortex->dma_adb[i].fifo_status == FIFO_START) {
2152 if (!vortex_adbdma_bufshift(vortex, i))
2154 spin_unlock(&vortex->lock);
2155 snd_pcm_period_elapsed(vortex->dma_adb[i].
2157 spin_lock(&vortex->lock);
2162 if (vortex->dma_wt[i].fifo_status == FIFO_START) {
2163 if (vortex_wtdma_bufshift(vortex, i)) ;
2164 spin_unlock(&vortex->lock);
2165 snd_pcm_period_elapsed(vortex->dma_wt[i].
2167 spin_lock(&vortex->lock);
2171 spin_unlock(&vortex->lock);
2176 hwread(vortex->mmio, VORTEX_IRQ_STAT);
2180 snd_mpu401_uart_interrupt(vortex->irq,
2181 vortex->rmidi->private_data);
2186 printk(KERN_ERR "vortex: unknown irq source %x\n", source);
2194 static void vortex_codec_init(vortex_t * vortex)
2200 hwwrite(vortex->mmio, (VORTEX_CODEC_CHN + (i << 2)), -i);
2204 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x8068);
2206 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00e8);
2209 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00a8);
2211 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80a8);
2213 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80e8);
2215 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80a8);
2217 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00a8);
2219 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00e8);
2222 hwwrite(vortex->mmio, (VORTEX_CODEC_CHN + (i << 2)), -i);
2225 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0xe8);
2228 hwwrite(vortex->mmio, VORTEX_CODEC_EN,
2229 hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_CODEC);
2243 printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
2269 printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
2283 printk(KERN_ERR "vortex: ac97 address never arrived\n");
2295 static void vortex_spdif_init(vortex_t * vortex, int spdif_sr, int spdif_mode)
2300 hwwrite(vortex->mmio, VORTEX_SPDIF_FLAGS,
2301 hwread(vortex->mmio, VORTEX_SPDIF_FLAGS) & 0xfff3fffd);
2304 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1 + (i << 2), 0);
2305 //hwwrite(vortex->mmio, 0x29190, hwread(vortex->mmio, 0x29190) | 0xc0000);
2306 hwwrite(vortex->mmio, VORTEX_CODEC_EN,
2307 hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_SPDIF);
2323 vortex_src_setupchannel(vortex, this_04, edi, 0, 1,
2325 vortex_src_setupchannel(vortex, this_08, edi, 0, 1,
2370 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, this_38 & 0xffff);
2371 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, this_38 >> 0x10);
2372 hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);
2377 static int __devinit vortex_core_init(vortex_t * vortex)
2382 hwwrite(vortex->mmio, VORTEX_CTRL, 0xffffffff);
2384 hwwrite(vortex->mmio, VORTEX_CTRL,
2385 hwread(vortex->mmio, VORTEX_CTRL) & 0xffdfffff);
2388 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffffffff);
2389 hwread(vortex->mmio, VORTEX_IRQ_STAT);
2391 vortex_codec_init(vortex);
2394 hwwrite(vortex->mmio, VORTEX_CTRL,
2395 hwread(vortex->mmio, VORTEX_CTRL) | 0x1000000);
2399 vortex_adbdma_init(vortex);
2400 hwwrite(vortex->mmio, VORTEX_ENGINE_CTRL, 0x0); //, 0xc83c7e58, 0xc5f93e58
2401 vortex_adb_init(vortex);
2403 vortex_fifo_init(vortex);
2404 vortex_mixer_init(vortex);
2405 vortex_srcblock_init(vortex);
2407 vortex_eq_init(vortex);
2408 vortex_spdif_init(vortex, 48000, 1);
2409 vortex_Vort3D_enable(vortex);
2412 vortex_wt_init(vortex);
2415 //vortex_connect_default(vortex, 1);
2417 vortex_settimer(vortex, 0x90);
2420 // hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
2421 // vortex_enable_int(vortex);
2422 //vortex_enable_timer_int(vortex);
2423 //vortex_disable_timer_int(vortex);
2426 spin_lock_init(&vortex->lock);
2431 static int vortex_core_shutdown(vortex_t * vortex)
2436 vortex_eq_free(vortex);
2437 vortex_Vort3D_disable(vortex);
2439 //vortex_disable_timer_int(vortex);
2440 vortex_disable_int(vortex);
2441 vortex_connect_default(vortex, 0);
2443 vortex_fifo_init(vortex);
2445 vortex_adb_init(vortex);
2448 //hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, hwread(vortex->mmio, VORTEX_IRQ_CTRL) & ~IRQ_MIDI);
2449 //hwwrite(vortex->mmio, VORTEX_CTRL, hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_EN);
2451 hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
2452 hwwrite(vortex->mmio, VORTEX_CTRL, 0);
2454 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffff);
2490 printk(KERN_ERR "vortex: format unsupported %d\n", alsafmt);