• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/sound/pci/

Lines Matching defs:viadev

136 #define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x)
321 struct viadev {
380 struct viadev devs[VIA_MAX_DEVS];
422 static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
492 static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
602 static void snd_via82xx_channel_reset(struct via82xx *chip, struct viadev *viadev)
605 VIADEV_REG(viadev, OFFSET_CONTROL));
606 inb(VIADEV_REG(viadev, OFFSET_CONTROL));
609 outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL));
611 outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS));
612 outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */
613 // outl(0, VIADEV_REG(viadev, OFFSET_CURR_PTR));
614 viadev->lastpos = 0;
615 viadev->hwptr_done = 0;
640 struct viadev *viadev = &chip->devs[i];
641 unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
644 if (viadev->substream && viadev->running) {
651 viadev->hwptr_done = 0;
653 viadev->hwptr_done += viadev->fragsize;
654 viadev->in_interrupt = c_status;
656 snd_pcm_period_elapsed(viadev->substream);
658 viadev->in_interrupt = 0;
660 outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
681 struct viadev *viadev = &chip->devs[i];
685 shadow_status = (status >> viadev->shadow_shift) &
692 substream = viadev->substream;
693 if (substream && viadev->running) {
700 viadev->hwptr_done = 0;
702 viadev->hwptr_done += viadev->fragsize;
703 viadev->in_interrupt = c_status;
705 viadev->in_interrupt |= VIA_REG_STAT_ACTIVE;
711 viadev->in_interrupt = 0;
713 outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
730 struct viadev *viadev = substream->runtime->private_data;
741 viadev->running = 1;
746 viadev->running = 0;
750 viadev->running = 0;
753 viadev->running = 1;
758 outb(val, VIADEV_REG(viadev, OFFSET_CONTROL));
760 snd_via82xx_channel_reset(chip, viadev);
773 #define check_invalid_pos(viadev,pos) \
774 ((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
775 viadev->lastpos < viadev->bufsize2))
777 static inline unsigned int calc_linear_pos(struct viadev *viadev, unsigned int idx,
782 size = viadev->idx_table[idx].size;
783 base = viadev->idx_table[idx].offset;
785 if (res >= viadev->bufsize)
786 res -= viadev->bufsize;
792 res = viadev->lastpos;
799 int delta = res - viadev->lastpos;
801 delta += viadev->bufsize;
802 if ((unsigned int)delta > viadev->fragsize)
805 if (check_invalid_pos(viadev, res)) {
809 "count = 0x%x\n", idx, viadev->tbl_entries,
810 viadev->lastpos, viadev->bufsize2,
811 viadev->idx_table[idx].offset,
812 viadev->idx_table[idx].size, count);
816 if (check_invalid_pos(viadev, res)) {
819 res = viadev->lastpos;
832 struct viadev *viadev = substream->runtime->private_data;
835 if (snd_BUG_ON(!viadev->tbl_entries))
837 if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE))
841 count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff;
845 ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR));
846 if (ptr <= (unsigned int)viadev->table.addr)
849 idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) % viadev->tbl_entries;
850 res = calc_linear_pos(viadev, idx, count);
851 viadev->lastpos = res; /* remember the last position */
863 struct viadev *viadev = substream->runtime->private_data;
867 if (snd_BUG_ON(!viadev->tbl_entries))
871 count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT));
872 status = viadev->in_interrupt;
874 status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
887 if (idx >= viadev->tbl_entries) {
890 viadev->tbl_entries);
892 res = viadev->lastpos;
895 res = calc_linear_pos(viadev, idx, count);
898 res = viadev->hwptr_done;
899 if (!viadev->in_interrupt) {
904 res += viadev->fragsize;
909 viadev->lastpos = res;
924 struct viadev *viadev = substream->runtime->private_data;
930 err = build_via_table(viadev, substream, chip->pci,
946 struct viadev *viadev = substream->runtime->private_data;
948 clean_via_table(viadev, substream, chip->pci);
957 static void snd_via82xx_set_table_ptr(struct via82xx *chip, struct viadev *viadev)
960 outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR));
968 static void via686_setup_format(struct via82xx *chip, struct viadev *viadev,
971 snd_via82xx_channel_reset(chip, viadev);
973 snd_via82xx_set_table_ptr(chip, viadev);
977 ((viadev->reg_offset & 0x10) == 0 ? VIA_REG_TYPE_INT_LSAMPLE : 0) |
979 VIA_REG_TYPE_INT_FLAG, VIADEV_REG(viadev, OFFSET_TYPE));
985 struct viadev *viadev = substream->runtime->private_data;
990 via686_setup_format(chip, viadev, runtime);
997 struct viadev *viadev = substream->runtime->private_data;
1001 via686_setup_format(chip, viadev, runtime);
1031 struct viadev *viadev = substream->runtime->private_data;
1042 if (chip->spdif_on && viadev->reg_offset == 0x30)
1051 snd_via82xx_channel_reset(chip, viadev);
1052 snd_via82xx_set_table_ptr(chip, viadev);
1053 outb(chip->playback_volume[viadev->reg_offset / 0x10][0],
1054 VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_L));
1055 outb(chip->playback_volume[viadev->reg_offset / 0x10][1],
1056 VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_R));
1061 VIADEV_REG(viadev, OFFSET_STOP_IDX));
1073 struct viadev *viadev = substream->runtime->private_data;
1084 snd_via82xx_channel_reset(chip, viadev);
1085 snd_via82xx_set_table_ptr(chip, viadev);
1090 outb(fmt, VIADEV_REG(viadev, OFS_MULTPLAY_FORMAT));
1105 outl(0xff000000 | slots, VIADEV_REG(viadev, OFFSET_STOP_IDX));
1117 struct viadev *viadev = substream->runtime->private_data;
1123 snd_via82xx_channel_reset(chip, viadev);
1124 snd_via82xx_set_table_ptr(chip, viadev);
1125 outb(VIA_REG_CAPTURE_FIFO_ENABLE, VIADEV_REG(viadev, OFS_CAPTURE_FIFO));
1129 VIADEV_REG(viadev, OFFSET_STOP_IDX));
1164 static int snd_via82xx_pcm_open(struct via82xx *chip, struct viadev *viadev,
1174 ratep = &chip->rates[viadev->direction];
1177 if (chip->spdif_on && viadev->reg_offset == 0x30) {
1181 } else if (chip->dxs_fixed && viadev->reg_offset < 0x40) {
1185 } else if (chip->dxs_src && viadev->reg_offset < 0x40) {
1192 int idx = viadev->direction ? AC97_RATES_ADC : AC97_RATES_FRONT_DAC;
1207 runtime->private_data = viadev;
1208 viadev->substream = substream;
1220 struct viadev *viadev = &chip->devs[chip->playback_devno + substream->number];
1223 if ((err = snd_via82xx_pcm_open(chip, viadev, substream)) < 0)
1234 struct viadev *viadev;
1238 viadev = &chip->devs[chip->playback_devno + substream->number];
1239 if ((err = snd_via82xx_pcm_open(chip, viadev, substream)) < 0)
1241 stream = viadev->reg_offset / 0x10;
1262 struct viadev *viadev = &chip->devs[chip->multi_devno];
1276 if ((err = snd_via82xx_pcm_open(chip, viadev, substream)) < 0)
1292 struct viadev *viadev = &chip->devs[chip->capture_devno + substream->pcm->device];
1294 return snd_via82xx_pcm_open(chip, viadev, substream);
1303 struct viadev *viadev = substream->runtime->private_data;
1307 ratep = &chip->rates[viadev->direction];
1314 if (! viadev->direction) {
1325 viadev->substream = NULL;
1332 struct viadev *viadev = substream->runtime->private_data;
1335 stream = viadev->reg_offset / 0x10;