Lines Matching refs:es
855 struct esschan *es;
856 list_for_each_entry(es, &chip->substream_list, list) {
857 if (max_freq < es->bob_freq)
858 max_freq = es->bob_freq;
869 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
874 if (es->fmt & ESS_FMT_STEREO)
876 if (es->fmt & ESS_FMT_16BIT)
878 freq /= es->frag_size;
903 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
907 offset = apu_get_register(chip, es->apu[0], 5);
909 offset -= es->base[0];
931 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
934 __apu_set_register(chip, es->apu[0], 5, es->base[0]);
935 snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
936 if (es->mode == ESM_MODE_CAPTURE) {
937 __apu_set_register(chip, es->apu[2], 5, es->base[2]);
938 snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
940 if (es->fmt & ESS_FMT_STEREO) {
941 __apu_set_register(chip, es->apu[1], 5, es->base[1]);
942 snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
943 if (es->mode == ESM_MODE_CAPTURE) {
944 __apu_set_register(chip, es->apu[3], 5, es->base[3]);
945 snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
951 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
954 snd_es1968_trigger_apu(chip, es->apu[0], 0);
955 snd_es1968_trigger_apu(chip, es->apu[1], 0);
956 if (es->mode == ESM_MODE_CAPTURE) {
957 snd_es1968_trigger_apu(chip, es->apu[2], 0);
958 snd_es1968_trigger_apu(chip, es->apu[3], 0);
964 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
970 if (!(es->fmt & ESS_FMT_16BIT))
972 if (es->fmt & ESS_FMT_STEREO)
977 wave_set_register(chip, es->apu[channel] << 3, tmpval);
980 es->wc_map[channel] = tmpval;
985 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
995 size = es->dma_size >> es->wav_shift;
997 if (es->fmt & ESS_FMT_STEREO)
1001 apu = es->apu[channel];
1003 snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
1006 pa = es->memory->buf.addr;
1012 if (es->fmt & ESS_FMT_STEREO) {
1016 if (es->fmt & ESS_FMT_16BIT)
1022 es->base[channel] = pa & 0xFFFF;
1044 if (es->fmt & ESS_FMT_16BIT)
1045 es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1047 es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1049 if (es->fmt & ESS_FMT_STEREO) {
1057 es->apu_mode[channel] += 1; /* stereo */
1077 if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1083 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1084 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1088 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1092 int i, apu = es->apu[channel];
1094 es->apu_mode[channel] = mode;
1097 snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1105 es->base[channel] = pa & 0xFFFF;
1133 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1140 size = es->dma_size >> es->wav_shift;
1154 init_capture_apu(chip, es, 2,
1155 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1158 init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1159 ESM_APU_SRCONVERTOR, es->apu[2]);
1160 if (es->fmt & ESS_FMT_STEREO) {
1162 init_capture_apu(chip, es, 3,
1163 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1167 init_capture_apu(chip, es, 1,
1168 es->memory->buf.addr + size*2, size,
1169 ESM_APU_SRCONVERTOR, es->apu[3]);
1182 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1183 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1187 snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1188 snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1206 struct esschan *es = runtime->private_data;
1208 es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1209 es->frag_size = snd_pcm_lib_period_bytes(substream);
1211 es->wav_shift = 1; /* maestro handles always 16bit */
1212 es->fmt = 0;
1214 es->fmt |= ESS_FMT_16BIT;
1216 es->fmt |= ESS_FMT_STEREO;
1217 if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1218 es->wav_shift++;
1220 es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1222 switch (es->mode) {
1224 snd_es1968_playback_setup(chip, es, runtime);
1227 snd_es1968_capture_setup(chip, es, runtime);
1237 struct esschan *es = substream->runtime->private_data;
1243 if (es->running)
1245 snd_es1968_bob_inc(chip, es->bob_freq);
1246 es->count = 0;
1247 es->hwptr = 0;
1248 snd_es1968_pcm_start(chip, es);
1249 es->running = 1;
1253 if (! es->running)
1255 snd_es1968_pcm_stop(chip, es);
1256 es->running = 0;
1267 struct esschan *es = substream->runtime->private_data;
1270 ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1272 return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1533 struct esschan *es;
1541 es = kzalloc(sizeof(*es), GFP_KERNEL);
1542 if (!es) {
1547 es->apu[0] = apu1;
1548 es->apu[1] = apu1 + 1;
1549 es->apu_mode[0] = 0;
1550 es->apu_mode[1] = 0;
1551 es->running = 0;
1552 es->substream = substream;
1553 es->mode = ESM_MODE_PLAY;
1555 runtime->private_data = es;
1561 list_add(&es->list, &chip->substream_list);
1571 struct esschan *es;
1583 es = kzalloc(sizeof(*es), GFP_KERNEL);
1584 if (!es) {
1590 es->apu[0] = apu1;
1591 es->apu[1] = apu1 + 1;
1592 es->apu[2] = apu2;
1593 es->apu[3] = apu2 + 1;
1594 es->apu_mode[0] = 0;
1595 es->apu_mode[1] = 0;
1596 es->apu_mode[2] = 0;
1597 es->apu_mode[3] = 0;
1598 es->running = 0;
1599 es->substream = substream;
1600 es->mode = ESM_MODE_CAPTURE;
1603 es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE);
1604 if (!es->mixbuf) {
1607 kfree(es);
1610 memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1612 runtime->private_data = es;
1619 list_add(&es->list, &chip->substream_list);
1628 struct esschan *es;
1632 es = substream->runtime->private_data;
1634 list_del(&es->list);
1636 snd_es1968_free_apu_pair(chip, es->apu[0]);
1637 kfree(es);
1645 struct esschan *es;
1649 es = substream->runtime->private_data;
1651 list_del(&es->list);
1653 snd_es1968_free_memory(chip, es->mixbuf);
1654 snd_es1968_free_apu_pair(chip, es->apu[0]);
1655 snd_es1968_free_apu_pair(chip, es->apu[2]);
1656 kfree(es);
1830 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1847 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1851 struct snd_pcm_substream *subs = es->substream;
1853 if (subs == NULL || !es->running)
1856 hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1857 hwptr %= es->dma_size;
1859 diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1861 es->hwptr = hwptr;
1862 es->count += diff;
1864 if (es->count > es->frag_size) {
1868 es->count %= es->frag_size;
1978 struct esschan *es;
1980 list_for_each_entry(es, &chip->substream_list, list) {
1981 if (es->running) {
1982 snd_es1968_update_pcm(chip, es);
1983 if (es->fmt & ESS_FMT_STEREO)
1984 snd_es1968_suppress_jitter(chip, es);
2383 struct esschan *es;
2401 list_for_each_entry(es, &chip->substream_list, list) {
2402 switch (es->mode) {
2404 snd_es1968_playback_setup(chip, es, es->substream->runtime);
2407 snd_es1968_capture_setup(chip, es, es->substream->runtime);