• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/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];
956 printk(KERN_INFO "vortex: FATAL: sgbuf is NULL!\n");
959 //printk(KERN_INFO "vortex: page count = %d, tblcount = %d\n", count, sgbuf->tblsize);
972 hwwrite(vortex->mmio,
979 hwwrite(vortex->mmio,
985 hwwrite(vortex->mmio,
991 hwwrite(vortex->mmio,
996 //printk("vortex: cfg0 = 0x%x\nvortex: cfg1=0x%x\n", dma->cfg0, dma->cfg1);
997 hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG0 + (adbdma << 3), dma->cfg0);
998 hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG1 + (adbdma << 3), dma->cfg1);
1000 vortex_adbdma_setfirstbuffer(vortex, adbdma);
1001 vortex_adbdma_setstartbuffer(vortex, adbdma, 0);
1005 vortex_adbdma_setmode(vortex_t * vortex, int adbdma, int ie, int dir,
1008 stream_t *dma = &vortex->dma_adb[adbdma];
1022 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1024 hwread(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2));
1027 static int vortex_adbdma_bufshift(vortex_t * vortex, int adbdma)
1029 stream_t *dma = &vortex->dma_adb[adbdma];
1033 (hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)) &
1056 //hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE+(((adbdma << 2)+pp) << 2), dma->table[p].addr);
1057 hwwrite(vortex->mmio,
1062 hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE +
1071 printk(KERN_INFO "vortex: %d virt=%d, real=%d, delta=%d\n",
1078 static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) {
1079 stream_t *dma = &vortex->dma_adb[adbdma];
1098 hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE+(((adbdma << 2)+pp) << 2), snd_sgbuf_get_addr(dma->sgbuf, dma->period_bytes * p));
1100 hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (((adbdma << 2)+pp) << 2));
1104 static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma)
1106 stream_t *dma = &vortex->dma_adb[adbdma];
1109 temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
1114 static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma)
1117 stream_t *dma = &vortex->dma_adb[adbdma];
1121 vortex_fifo_setadbvalid(vortex, adbdma,
1126 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1128 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1133 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1141 static void vortex_adbdma_resumefifo(vortex_t * vortex, int adbdma)
1143 stream_t *dma = &vortex->dma_adb[adbdma];
1148 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1150 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1155 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1163 static void vortex_adbdma_pausefifo(vortex_t * vortex, int adbdma)
1165 stream_t *dma = &vortex->dma_adb[adbdma];
1170 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1174 hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2),
1176 vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown,
1186 static void vortex_wtdma_setfirstbuffer(vortex_t * vortex, int wtdma)
1189 stream_t *dma = &vortex->dma_wt[wtdma];
1191 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
1194 static void vortex_wtdma_setstartbuffer(vortex_t * vortex, int wtdma, int sb)
1196 stream_t *dma = &vortex->dma_wt[wtdma];
1197 //hwwrite(vortex->mmio, VORTEX_WTDMA_START + (wtdma << 2), sb << ((0x1f-(wtdma&0xf)*2)));
1198 hwwrite(vortex->mmio, VORTEX_WTDMA_START + (wtdma << 2),
1204 vortex_wtdma_setbuffers(vortex_t * vortex, int wtdma,
1207 stream_t *dma = &vortex->dma_wt[wtdma];
1220 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0xc,
1226 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x8,
1231 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4) + 0x4,
1236 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4),
1240 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG0 + (wtdma << 3), dma->cfg0);
1241 hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG1 + (wtdma << 3), dma->cfg1);
1243 vortex_wtdma_setfirstbuffer(vortex, wtdma);
1244 vortex_wtdma_setstartbuffer(vortex, wtdma, 0);
1248 vortex_wtdma_setmode(vortex_t * vortex, int wtdma, int ie, int fmt, int d,
1251 stream_t *dma = &vortex->dma_wt[wtdma];
1267 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
1270 static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
1272 stream_t *dma = &vortex->dma_wt[wtdma];
1276 (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
1300 hwwrite(vortex->mmio,
1305 hwread(vortex->mmio, VORTEX_WTDMA_BUFBASE +
1315 printk(KERN_WARNING "vortex: wt virt = %d, delta = %d\n",
1321 static int inline vortex_wtdma_getlinearpos(vortex_t * vortex, int wtdma)
1323 stream_t *dma = &vortex->dma_wt[wtdma];
1326 temp = hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2));
1332 static void vortex_wtdma_startfifo(vortex_t * vortex, int wtdma)
1334 stream_t *dma = &vortex->dma_wt[wtdma];
1339 vortex_fifo_setwtvalid(vortex, wtdma,
1344 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1346 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1351 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1359 static void vortex_wtdma_resumefifo(vortex_t * vortex, int wtdma)
1361 stream_t *dma = &vortex->dma_wt[wtdma];
1366 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1368 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1373 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1381 static void vortex_wtdma_pausefifo(vortex_t * vortex, int wtdma)
1383 stream_t *dma = &vortex->dma_wt[wtdma];
1388 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1392 hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2),
1394 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1401 static void vortex_wtdma_stopfifo(vortex_t * vortex, int wtdma)
1403 stream_t *dma = &vortex->dma_wt[wtdma];
1407 vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown,
1419 static void vortex_adb_init(vortex_t * vortex)
1424 hwwrite(vortex->mmio, VORTEX_ADB_SR, 0);
1426 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (i << 2),
1427 hwread(vortex->mmio,
1430 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (i << 2),
1431 hwread(vortex->mmio,
1436 static void vortex_adb_en_sr(vortex_t * vortex, int channel)
1438 hwwrite(vortex->mmio, VORTEX_ADB_SR,
1439 hwread(vortex->mmio, VORTEX_ADB_SR) | (0x1 << channel));
1442 static void vortex_adb_dis_sr(vortex_t * vortex, int channel)
1444 hwwrite(vortex->mmio, VORTEX_ADB_SR,
1445 hwread(vortex->mmio, VORTEX_ADB_SR) & ~(0x1 << channel));
1449 vortex_adb_addroutes(vortex_t * vortex, unsigned char channel,
1458 hwwrite(vortex->mmio,
1462 hwwrite(vortex->mmio,
1469 hwread(vortex->mmio,
1473 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2),
1475 vortex_adb_en_sr(vortex, channel);
1482 hwread(vortex->mmio,
1492 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), route[0]);
1496 vortex_adb_delroutes(vortex_t * vortex, unsigned char channel,
1503 hwread(vortex->mmio,
1507 hwread(vortex->mmio,
1510 vortex_adb_dis_sr(vortex, channel);
1511 hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2),
1518 hwread(vortex->mmio,
1528 temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
1530 temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
1532 hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), temp);
1536 vortex_route(vortex_t * vortex, int en, unsigned char channel,
1543 vortex_adb_addroutes(vortex, channel, &route, 1);
1546 vortex_src_addWTD(vortex, (source - OFFSET_SRCOUT),
1550 vortex_mixer_addWTD(vortex,
1553 vortex_adb_delroutes(vortex, channel, route, route);
1556 vortex_src_delWTD(vortex, (source - OFFSET_SRCOUT),
1560 vortex_mixer_delWTD(vortex,
1567 vortex_routeLRT(vortex_t * vortex, int en, unsigned char ch,
1580 vortex_adb_addroutes(vortex, ch, route, 2);
1583 vortex_src_addWTD(vortex,
1585 vortex_src_addWTD(vortex,
1589 vortex_mixer_addWTD(vortex,
1591 vortex_mixer_addWTD(vortex,
1595 vortex_adb_delroutes(vortex, ch, route[0], route[1]);
1598 vortex_src_delWTD(vortex,
1600 vortex_src_delWTD(vortex,
1604 vortex_mixer_delWTD(vortex,
1606 vortex_mixer_delWTD(vortex,
1616 vortex_connection_adbdma_src(vortex_t * vortex, int en, unsigned char ch,
1619 vortex_route(vortex, en, ch, ADB_DMA(adbdma), ADB_SRCIN(src));
1624 vortex_connection_src_mixin(vortex_t * vortex, int en,
1628 vortex_route(vortex, en, channel, ADB_SRCOUT(src), ADB_MIXIN(mixin));
1633 vortex_connection_mixin_mix(vortex_t * vortex, int en, unsigned char mixin,
1637 vortex_mix_enableinput(vortex, mix, mixin);
1638 vortex_mix_setinputvolumebyte(vortex, mix, mixin, MIX_DEFIGAIN); // added to original code.
1640 vortex_mix_disableinput(vortex, mix, mixin, a);
1645 vortex_connection_adb_mixin(vortex_t * vortex, int en,
1649 vortex_route(vortex, en, channel, source, ADB_MIXIN(mixin));
1653 vortex_connection_src_adbdma(vortex_t * vortex, int en, unsigned char ch,
1656 vortex_route(vortex, en, ch, ADB_SRCOUT(src), ADB_DMA(adbdma));
1660 vortex_connection_src_src_adbdma(vortex_t * vortex, int en,
1665 vortex_routeLRT(vortex, en, ch, ADB_SRCOUT(src0), ADB_SRCOUT(src1),
1671 vortex_connection_mix_adb(vortex_t * vortex, int en, unsigned char ch,
1674 vortex_route(vortex, en, ch, ADB_MIXOUT(mix), dest);
1675 vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN); // added to original code.
1680 vortex_connection_mix_src(vortex_t * vortex, int en, unsigned char ch,
1683 vortex_route(vortex, en, ch, ADB_MIXOUT(mix), ADB_SRCIN(src));
1684 vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN); // added to original code.
1691 vortex_connect_codecplay(vortex_t * vortex, int en, unsigned char mixers[])
1694 vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_CODECOUT(0));
1695 vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_CODECOUT(1));
1698 vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_EQIN(0));
1699 vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_EQIN(1));
1701 vortex_mix_setvolumebyte(vortex, mixers[0], 0);
1702 vortex_mix_setvolumebyte(vortex, mixers[1], 0);
1703 vortex_route(vortex, en, 0x11, ADB_EQOUT(0), ADB_CODECOUT(0));
1704 vortex_route(vortex, en, 0x11, ADB_EQOUT(1), ADB_CODECOUT(1));
1707 if (VORTEX_IS_QUAD(vortex)) {
1709 vortex_connection_mix_adb(vortex, en, 0x11, mixers[2],
1711 vortex_connection_mix_adb(vortex, en, 0x11, mixers[3],
1719 vortex_connect_codecrec(vortex_t * vortex, int en, unsigned char mixin0,
1728 vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(0), mixin0);
1729 vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(1), mixin1);
1745 vortex_adb_checkinout(vortex_t * vortex, int resmap[], int out, int restype)
1752 resinuse |= vortex->dma_adb[i].resources[restype];
1754 resinuse |= vortex->fixed_res[restype];
1761 vortex->dma_adb[i].resources[restype] |= (1 << i);
1762 //printk("vortex: ResManager: type %d out %d\n", restype, i);
1773 //printk("vortex: ResManager: type %d in %d\n",restype, i);
1778 printk(KERN_ERR "vortex: FATAL: ResManager: resource type %d exhausted.\n", restype);
1784 vortex_adb_allocroute(vortex_t * vortex, int dma, int nr_ch, int dir, int type);
1786 static void vortex_connect_default(vortex_t * vortex, int en)
1789 vortex->mixplayb[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1791 vortex->mixplayb[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1793 if (VORTEX_IS_QUAD(vortex)) {
1794 vortex->mixplayb[2] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1796 vortex->mixplayb[3] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1799 vortex_connect_codecplay(vortex, en, vortex->mixplayb);
1801 vortex->mixcapt[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1803 vortex->mixcapt[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1805 vortex_connect_codecrec(vortex, en, MIX_CAPT(0), MIX_CAPT(1));
1809 vortex->mixspdif[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1811 vortex->mixspdif[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en,
1813 vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[0],
1815 vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[1],
1820 vortex_wt_connect(vortex, en);
1824 vortex_Vort3D_connect(vortex, en);
1844 vortex_adb_allocroute(vortex_t * vortex, int dma, int nr_ch, int dir, int type)
1855 vortex_adb_checkinout(vortex,
1856 vortex->dma_adb[dma].resources, en,
1861 vortex_adb_checkinout(vortex, NULL, en,
1866 stream = &vortex->dma_adb[dma];
1880 if ((src[i] = vortex_adb_checkinout(vortex,
1889 if ((mix[i] = vortex_adb_checkinout(vortex,
1904 vortex_adb_checkinout(vortex,
1910 printk(KERN_ERR "vortex: out of A3D sources. Sorry\n");
1914 vortex_Vort3D_InitializeSource(&(vortex->a3d[a3d]), en);
1918 vortex_route(vortex, 0, 0x14,
1919 ADB_MIXOUT(vortex->mixspdif[0]),
1921 vortex_route(vortex, 0, 0x14,
1922 ADB_MIXOUT(vortex->mixspdif[1]),
1929 vortex_connection_adbdma_src(vortex, en,
1933 vortex_connection_src_mixin(vortex, en,
1936 vortex_connection_mixin_mix(vortex, en,
1940 vortex_connection_mixin_mix(vortex, en,
1943 vortex_mix_setinputvolumebyte(vortex,
1951 vortex_connection_adbdma_src(vortex, en,
1955 vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_A3DIN(a3d));
1957 //vortex_route(vortex, en, 0x11, dma, ADB_XTALKIN(i?9:4));
1958 //vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_XTALKIN(i?4:9));
1961 vortex_route(vortex, en, 0x14,
1967 ch_top = (VORTEX_IS_QUAD(vortex) ? 4 : 2);
1969 vortex_connection_mixin_mix(vortex, en,
1973 vortex_connection_mixin_mix(vortex, en,
1977 vortex_mix_setinputvolumebyte(vortex,
1987 vortex_route(vortex, en, 0x14,
1993 vortex_route(vortex, 1, 0x14,
1994 ADB_MIXOUT(vortex->mixspdif[0]),
1996 vortex_route(vortex, 1, 0x14,
1997 ADB_MIXOUT(vortex->mixspdif[1]),
2008 vortex_adb_checkinout(vortex,
2018 vortex_adb_checkinout(vortex,
2029 vortex_connection_mixin_mix(vortex, en, MIX_CAPT(0), mix[0], 0);
2030 vortex_connection_mix_src(vortex, en, 0x11, mix[0], src[0]);
2032 vortex_connection_mixin_mix(vortex, en,
2034 vortex_connection_src_adbdma(vortex, en,
2038 vortex_connection_mixin_mix(vortex, en,
2040 vortex_connection_mix_src(vortex, en, 0x11, mix[1],
2042 vortex_connection_src_src_adbdma(vortex, en,
2047 vortex->dma_adb[dma].nr_ch = nr_ch;
2056 vortex_adb_setsrc(vortex_t * vortex, int adbdma, unsigned int rate, int dir)
2058 stream_t *stream = &(vortex->dma_adb[adbdma]);
2070 vortex_src_setupchannel(vortex, i, cvrt, 0, 0, i, dir, 1, cvrt, dir);
2076 static void vortex_settimer(vortex_t * vortex, int period)
2079 hwwrite(vortex->mmio, VORTEX_IRQ_STAT, period);
2099 vortex_t *vortex = dev_id;
2104 if (!(hwread(vortex->mmio, VORTEX_STAT) & 0x1))
2108 if (!(hwread(vortex->mmio, VORTEX_CTRL) & CTRL_IRQ_ENABLE))
2111 source = hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
2113 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, source);
2114 hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
2117 printk(KERN_ERR "vortex: missing irq source\n");
2125 printk(KERN_ERR "vortex: IRQ fatal error\n");
2128 printk(KERN_ERR "vortex: IRQ parity error\n");
2131 printk(KERN_ERR "vortex: IRQ reg error\n");
2134 printk(KERN_ERR "vortex: IRQ fifo error\n");
2137 printk(KERN_ERR "vortex: IRQ dma error\n");
2143 spin_lock(&vortex->lock);
2145 if (vortex->dma_adb[i].fifo_status == FIFO_START) {
2146 if (vortex_adbdma_bufshift(vortex, i)) ;
2147 spin_unlock(&vortex->lock);
2148 snd_pcm_period_elapsed(vortex->dma_adb[i].
2150 spin_lock(&vortex->lock);
2155 if (vortex->dma_wt[i].fifo_status == FIFO_START) {
2156 if (vortex_wtdma_bufshift(vortex, i)) ;
2157 spin_unlock(&vortex->lock);
2158 snd_pcm_period_elapsed(vortex->dma_wt[i].
2160 spin_lock(&vortex->lock);
2164 spin_unlock(&vortex->lock);
2169 hwread(vortex->mmio, VORTEX_IRQ_STAT);
2173 snd_mpu401_uart_interrupt(vortex->irq,
2174 vortex->rmidi->private_data);
2179 printk(KERN_ERR "vortex: unknown irq source %x\n", source);
2187 static void vortex_codec_init(vortex_t * vortex)
2193 hwwrite(vortex->mmio, (VORTEX_CODEC_CHN + (i << 2)), -i);
2197 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x8068);
2199 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00e8);
2202 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00a8);
2204 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80a8);
2206 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80e8);
2208 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x80a8);
2210 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00a8);
2212 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0x00e8);
2215 hwwrite(vortex->mmio, (VORTEX_CODEC_CHN + (i << 2)), -i);
2218 hwwrite(vortex->mmio, VORTEX_CODEC_CTRL, 0xe8);
2221 hwwrite(vortex->mmio, VORTEX_CODEC_EN,
2222 hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_CODEC);
2236 printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
2262 printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
2276 printk(KERN_ERR "vortex: ac97 address never arrived\n");
2288 static void vortex_spdif_init(vortex_t * vortex, int spdif_sr, int spdif_mode)
2293 hwwrite(vortex->mmio, VORTEX_SPDIF_FLAGS,
2294 hwread(vortex->mmio, VORTEX_SPDIF_FLAGS) & 0xfff3fffd);
2297 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1 + (i << 2), 0);
2298 //hwwrite(vortex->mmio, 0x29190, hwread(vortex->mmio, 0x29190) | 0xc0000);
2299 hwwrite(vortex->mmio, VORTEX_CODEC_EN,
2300 hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_SPDIF);
2316 vortex_src_setupchannel(vortex, this_04, edi, 0, 1,
2318 vortex_src_setupchannel(vortex, this_08, edi, 0, 1,
2363 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, this_38 & 0xffff);
2364 hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, this_38 >> 0x10);
2365 hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);
2370 static int __devinit vortex_core_init(vortex_t * vortex)
2375 hwwrite(vortex->mmio, VORTEX_CTRL, 0xffffffff);
2377 hwwrite(vortex->mmio, VORTEX_CTRL,
2378 hwread(vortex->mmio, VORTEX_CTRL) & 0xffdfffff);
2381 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffffffff);
2382 hwread(vortex->mmio, VORTEX_IRQ_STAT);
2384 vortex_codec_init(vortex);
2387 hwwrite(vortex->mmio, VORTEX_CTRL,
2388 hwread(vortex->mmio, VORTEX_CTRL) | 0x1000000);
2392 vortex_adbdma_init(vortex);
2393 hwwrite(vortex->mmio, VORTEX_ENGINE_CTRL, 0x0); //, 0xc83c7e58, 0xc5f93e58
2394 vortex_adb_init(vortex);
2396 vortex_fifo_init(vortex);
2397 vortex_mixer_init(vortex);
2398 vortex_srcblock_init(vortex);
2400 vortex_eq_init(vortex);
2401 vortex_spdif_init(vortex, 48000, 1);
2402 vortex_Vort3D_enable(vortex);
2405 vortex_wt_init(vortex);
2408 //vortex_connect_default(vortex, 1);
2410 vortex_settimer(vortex, 0x90);
2413 // hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
2414 // vortex_enable_int(vortex);
2415 //vortex_enable_timer_int(vortex);
2416 //vortex_disable_timer_int(vortex);
2419 spin_lock_init(&vortex->lock);
2424 static int vortex_core_shutdown(vortex_t * vortex)
2429 vortex_eq_free(vortex);
2430 vortex_Vort3D_disable(vortex);
2432 //vortex_disable_timer_int(vortex);
2433 vortex_disable_int(vortex);
2434 vortex_connect_default(vortex, 0);
2436 vortex_fifo_init(vortex);
2438 vortex_adb_init(vortex);
2441 //hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, hwread(vortex->mmio, VORTEX_IRQ_CTRL) & ~IRQ_MIDI);
2442 //hwwrite(vortex->mmio, VORTEX_CTRL, hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_EN);
2444 hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
2445 hwwrite(vortex->mmio, VORTEX_CTRL, 0);
2447 hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffff);
2483 printk(KERN_ERR "vortex: format unsupported %d\n", alsafmt);