Lines Matching refs:es

859 		struct esschan *es;
860 list_for_each_entry(es, &chip->substream_list, list) {
861 if (max_freq < es->bob_freq)
862 max_freq = es->bob_freq;
873 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
878 if (es->fmt & ESS_FMT_STEREO)
880 if (es->fmt & ESS_FMT_16BIT)
882 freq /= es->frag_size;
907 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
911 offset = apu_get_register(chip, es->apu[0], 5);
913 offset -= es->base[0];
935 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
938 __apu_set_register(chip, es->apu[0], 5, es->base[0]);
939 snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
940 if (es->mode == ESM_MODE_CAPTURE) {
941 __apu_set_register(chip, es->apu[2], 5, es->base[2]);
942 snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
944 if (es->fmt & ESS_FMT_STEREO) {
945 __apu_set_register(chip, es->apu[1], 5, es->base[1]);
946 snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
947 if (es->mode == ESM_MODE_CAPTURE) {
948 __apu_set_register(chip, es->apu[3], 5, es->base[3]);
949 snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
955 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
958 snd_es1968_trigger_apu(chip, es->apu[0], 0);
959 snd_es1968_trigger_apu(chip, es->apu[1], 0);
960 if (es->mode == ESM_MODE_CAPTURE) {
961 snd_es1968_trigger_apu(chip, es->apu[2], 0);
962 snd_es1968_trigger_apu(chip, es->apu[3], 0);
968 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
974 if (!(es->fmt & ESS_FMT_16BIT))
976 if (es->fmt & ESS_FMT_STEREO)
981 wave_set_register(chip, es->apu[channel] << 3, tmpval);
984 es->wc_map[channel] = tmpval;
989 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
999 size = es->dma_size >> es->wav_shift;
1001 if (es->fmt & ESS_FMT_STEREO)
1005 apu = es->apu[channel];
1007 snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
1010 pa = es->memory->buf.addr;
1016 if (es->fmt & ESS_FMT_STEREO) {
1020 if (es->fmt & ESS_FMT_16BIT)
1026 es->base[channel] = pa & 0xFFFF;
1048 if (es->fmt & ESS_FMT_16BIT)
1049 es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1051 es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1053 if (es->fmt & ESS_FMT_STEREO) {
1061 es->apu_mode[channel] += 1; /* stereo */
1081 if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1087 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1088 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1092 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1096 int i, apu = es->apu[channel];
1098 es->apu_mode[channel] = mode;
1101 snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1109 es->base[channel] = pa & 0xFFFF;
1137 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1144 size = es->dma_size >> es->wav_shift;
1158 init_capture_apu(chip, es, 2,
1159 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1162 init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1163 ESM_APU_SRCONVERTOR, es->apu[2]);
1164 if (es->fmt & ESS_FMT_STEREO) {
1166 init_capture_apu(chip, es, 3,
1167 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1171 init_capture_apu(chip, es, 1,
1172 es->memory->buf.addr + size*2, size,
1173 ESM_APU_SRCONVERTOR, es->apu[3]);
1186 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1187 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1191 snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1192 snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1210 struct esschan *es = runtime->private_data;
1212 es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1213 es->frag_size = snd_pcm_lib_period_bytes(substream);
1215 es->wav_shift = 1; /* maestro handles always 16bit */
1216 es->fmt = 0;
1218 es->fmt |= ESS_FMT_16BIT;
1220 es->fmt |= ESS_FMT_STEREO;
1221 if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1222 es->wav_shift++;
1224 es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1226 switch (es->mode) {
1228 snd_es1968_playback_setup(chip, es, runtime);
1231 snd_es1968_capture_setup(chip, es, runtime);
1241 struct esschan *es = substream->runtime->private_data;
1247 if (es->running)
1249 snd_es1968_bob_inc(chip, es->bob_freq);
1250 es->count = 0;
1251 es->hwptr = 0;
1252 snd_es1968_pcm_start(chip, es);
1253 es->running = 1;
1257 if (! es->running)
1259 snd_es1968_pcm_stop(chip, es);
1260 es->running = 0;
1271 struct esschan *es = substream->runtime->private_data;
1274 ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1276 return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1537 struct esschan *es;
1545 es = kzalloc(sizeof(*es), GFP_KERNEL);
1546 if (!es) {
1551 es->apu[0] = apu1;
1552 es->apu[1] = apu1 + 1;
1553 es->apu_mode[0] = 0;
1554 es->apu_mode[1] = 0;
1555 es->running = 0;
1556 es->substream = substream;
1557 es->mode = ESM_MODE_PLAY;
1559 runtime->private_data = es;
1565 list_add(&es->list, &chip->substream_list);
1575 struct esschan *es;
1587 es = kzalloc(sizeof(*es), GFP_KERNEL);
1588 if (!es) {
1594 es->apu[0] = apu1;
1595 es->apu[1] = apu1 + 1;
1596 es->apu[2] = apu2;
1597 es->apu[3] = apu2 + 1;
1598 es->apu_mode[0] = 0;
1599 es->apu_mode[1] = 0;
1600 es->apu_mode[2] = 0;
1601 es->apu_mode[3] = 0;
1602 es->running = 0;
1603 es->substream = substream;
1604 es->mode = ESM_MODE_CAPTURE;
1607 if ((es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE)) == NULL) {
1610 kfree(es);
1613 memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1615 runtime->private_data = es;
1622 list_add(&es->list, &chip->substream_list);
1631 struct esschan *es;
1635 es = substream->runtime->private_data;
1637 list_del(&es->list);
1639 snd_es1968_free_apu_pair(chip, es->apu[0]);
1640 kfree(es);
1648 struct esschan *es;
1652 es = substream->runtime->private_data;
1654 list_del(&es->list);
1656 snd_es1968_free_memory(chip, es->mixbuf);
1657 snd_es1968_free_apu_pair(chip, es->apu[0]);
1658 snd_es1968_free_apu_pair(chip, es->apu[2]);
1659 kfree(es);
1829 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1846 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1850 struct snd_pcm_substream *subs = es->substream;
1852 if (subs == NULL || !es->running)
1855 hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1856 hwptr %= es->dma_size;
1858 diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1860 es->hwptr = hwptr;
1861 es->count += diff;
1863 if (es->count > es->frag_size) {
1867 es->count %= es->frag_size;
1976 struct esschan *es;
1978 list_for_each_entry(es, &chip->substream_list, list) {
1979 if (es->running) {
1980 snd_es1968_update_pcm(chip, es);
1981 if (es->fmt & ESS_FMT_STEREO)
1982 snd_es1968_suppress_jitter(chip, es);
2386 struct esschan *es;
2404 list_for_each_entry(es, &chip->substream_list, list) {
2405 switch (es->mode) {
2407 snd_es1968_playback_setup(chip, es, es->substream->runtime);
2410 snd_es1968_capture_setup(chip, es, es->substream->runtime);