Lines Matching defs:es
819 struct esschan *es;
820 list_for_each_entry(es, &chip->substream_list, list) {
821 if (max_freq < es->bob_freq)
822 max_freq = es->bob_freq;
833 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
838 if (es->fmt & ESS_FMT_STEREO)
840 if (es->fmt & ESS_FMT_16BIT)
842 freq /= es->frag_size;
867 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
871 offset = apu_get_register(chip, es->apu[0], 5);
873 offset -= es->base[0];
895 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
898 __apu_set_register(chip, es->apu[0], 5, es->base[0]);
899 snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
900 if (es->mode == ESM_MODE_CAPTURE) {
901 __apu_set_register(chip, es->apu[2], 5, es->base[2]);
902 snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
904 if (es->fmt & ESS_FMT_STEREO) {
905 __apu_set_register(chip, es->apu[1], 5, es->base[1]);
906 snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
907 if (es->mode == ESM_MODE_CAPTURE) {
908 __apu_set_register(chip, es->apu[3], 5, es->base[3]);
909 snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
914 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
917 snd_es1968_trigger_apu(chip, es->apu[0], 0);
918 snd_es1968_trigger_apu(chip, es->apu[1], 0);
919 if (es->mode == ESM_MODE_CAPTURE) {
920 snd_es1968_trigger_apu(chip, es->apu[2], 0);
921 snd_es1968_trigger_apu(chip, es->apu[3], 0);
926 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
932 if (!(es->fmt & ESS_FMT_16BIT))
934 if (es->fmt & ESS_FMT_STEREO)
939 wave_set_register(chip, es->apu[channel] << 3, tmpval);
941 es->wc_map[channel] = tmpval;
945 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
954 size = es->dma_size >> es->wav_shift;
956 if (es->fmt & ESS_FMT_STEREO)
960 apu = es->apu[channel];
962 snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
965 pa = es->memory->buf.addr;
971 if (es->fmt & ESS_FMT_STEREO) {
975 if (es->fmt & ESS_FMT_16BIT)
981 es->base[channel] = pa & 0xFFFF;
1003 if (es->fmt & ESS_FMT_16BIT)
1004 es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1006 es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1008 if (es->fmt & ESS_FMT_STEREO) {
1016 es->apu_mode[channel] += 1; /* stereo */
1036 if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1042 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1043 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1047 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1051 int i, apu = es->apu[channel];
1053 es->apu_mode[channel] = mode;
1056 snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1064 es->base[channel] = pa & 0xFFFF;
1092 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1098 size = es->dma_size >> es->wav_shift;
1112 init_capture_apu(chip, es, 2,
1113 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1116 init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1117 ESM_APU_SRCONVERTOR, es->apu[2]);
1118 if (es->fmt & ESS_FMT_STEREO) {
1120 init_capture_apu(chip, es, 3,
1121 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1125 init_capture_apu(chip, es, 1,
1126 es->memory->buf.addr + size*2, size,
1127 ESM_APU_SRCONVERTOR, es->apu[3]);
1140 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1141 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1145 snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1146 snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1163 struct esschan *es = runtime->private_data;
1165 es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1166 es->frag_size = snd_pcm_lib_period_bytes(substream);
1168 es->wav_shift = 1; /* maestro handles always 16bit */
1169 es->fmt = 0;
1171 es->fmt |= ESS_FMT_16BIT;
1173 es->fmt |= ESS_FMT_STEREO;
1174 if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1175 es->wav_shift++;
1177 es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1179 switch (es->mode) {
1181 snd_es1968_playback_setup(chip, es, runtime);
1184 snd_es1968_capture_setup(chip, es, runtime);
1194 struct esschan *es = substream->runtime->private_data;
1200 if (es->running)
1202 snd_es1968_bob_inc(chip, es->bob_freq);
1203 es->count = 0;
1204 es->hwptr = 0;
1205 snd_es1968_pcm_start(chip, es);
1206 es->running = 1;
1210 if (! es->running)
1212 snd_es1968_pcm_stop(chip, es);
1213 es->running = 0;
1223 struct esschan *es = substream->runtime->private_data;
1226 ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1228 return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1483 struct esschan *es;
1491 es = kzalloc(sizeof(*es), GFP_KERNEL);
1492 if (!es) {
1497 es->apu[0] = apu1;
1498 es->apu[1] = apu1 + 1;
1499 es->apu_mode[0] = 0;
1500 es->apu_mode[1] = 0;
1501 es->running = 0;
1502 es->substream = substream;
1503 es->mode = ESM_MODE_PLAY;
1505 runtime->private_data = es;
1511 list_add(&es->list, &chip->substream_list);
1520 struct esschan *es;
1532 es = kzalloc(sizeof(*es), GFP_KERNEL);
1533 if (!es) {
1539 es->apu[0] = apu1;
1540 es->apu[1] = apu1 + 1;
1541 es->apu[2] = apu2;
1542 es->apu[3] = apu2 + 1;
1543 es->apu_mode[0] = 0;
1544 es->apu_mode[1] = 0;
1545 es->apu_mode[2] = 0;
1546 es->apu_mode[3] = 0;
1547 es->running = 0;
1548 es->substream = substream;
1549 es->mode = ESM_MODE_CAPTURE;
1552 es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE);
1553 if (!es->mixbuf) {
1556 kfree(es);
1559 memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1561 runtime->private_data = es;
1570 list_add(&es->list, &chip->substream_list);
1578 struct esschan *es;
1582 es = substream->runtime->private_data;
1584 list_del(&es->list);
1586 snd_es1968_free_apu_pair(chip, es->apu[0]);
1587 kfree(es);
1595 struct esschan *es;
1599 es = substream->runtime->private_data;
1601 list_del(&es->list);
1603 snd_es1968_free_memory(chip, es->mixbuf);
1604 snd_es1968_free_apu_pair(chip, es->apu[0]);
1605 snd_es1968_free_apu_pair(chip, es->apu[2]);
1606 kfree(es);
1780 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1797 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1801 struct snd_pcm_substream *subs = es->substream;
1803 if (subs == NULL || !es->running)
1806 hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1807 hwptr %= es->dma_size;
1809 diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1811 es->hwptr = hwptr;
1812 es->count += diff;
1814 if (es->count > es->frag_size) {
1818 es->count %= es->frag_size;
1928 struct esschan *es;
1930 list_for_each_entry(es, &chip->substream_list, list) {
1931 if (es->running) {
1932 snd_es1968_update_pcm(chip, es);
1933 if (es->fmt & ESS_FMT_STEREO)
1934 snd_es1968_suppress_jitter(chip, es);
2332 struct esschan *es;
2350 list_for_each_entry(es, &chip->substream_list, list) {
2351 switch (es->mode) {
2353 snd_es1968_playback_setup(chip, es, es->substream->runtime);
2356 snd_es1968_capture_setup(chip, es, es->substream->runtime);