Lines Matching refs:es

849 		struct esschan *es;
850 list_for_each_entry(es, &chip->substream_list, list) {
851 if (max_freq < es->bob_freq)
852 max_freq = es->bob_freq;
863 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
868 if (es->fmt & ESS_FMT_STEREO)
870 if (es->fmt & ESS_FMT_16BIT)
872 freq /= es->frag_size;
897 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
901 offset = apu_get_register(chip, es->apu[0], 5);
903 offset -= es->base[0];
925 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
928 __apu_set_register(chip, es->apu[0], 5, es->base[0]);
929 snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
930 if (es->mode == ESM_MODE_CAPTURE) {
931 __apu_set_register(chip, es->apu[2], 5, es->base[2]);
932 snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
934 if (es->fmt & ESS_FMT_STEREO) {
935 __apu_set_register(chip, es->apu[1], 5, es->base[1]);
936 snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
937 if (es->mode == ESM_MODE_CAPTURE) {
938 __apu_set_register(chip, es->apu[3], 5, es->base[3]);
939 snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
945 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
948 snd_es1968_trigger_apu(chip, es->apu[0], 0);
949 snd_es1968_trigger_apu(chip, es->apu[1], 0);
950 if (es->mode == ESM_MODE_CAPTURE) {
951 snd_es1968_trigger_apu(chip, es->apu[2], 0);
952 snd_es1968_trigger_apu(chip, es->apu[3], 0);
958 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
964 if (!(es->fmt & ESS_FMT_16BIT))
966 if (es->fmt & ESS_FMT_STEREO)
971 wave_set_register(chip, es->apu[channel] << 3, tmpval);
973 es->wc_map[channel] = tmpval;
977 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
987 size = es->dma_size >> es->wav_shift;
989 if (es->fmt & ESS_FMT_STEREO)
993 apu = es->apu[channel];
995 snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
998 pa = es->memory->buf.addr;
1004 if (es->fmt & ESS_FMT_STEREO) {
1008 if (es->fmt & ESS_FMT_16BIT)
1014 es->base[channel] = pa & 0xFFFF;
1036 if (es->fmt & ESS_FMT_16BIT)
1037 es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1039 es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1041 if (es->fmt & ESS_FMT_STEREO) {
1049 es->apu_mode[channel] += 1; /* stereo */
1069 if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1075 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1076 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1080 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1084 int i, apu = es->apu[channel];
1086 es->apu_mode[channel] = mode;
1089 snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1097 es->base[channel] = pa & 0xFFFF;
1125 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1132 size = es->dma_size >> es->wav_shift;
1146 init_capture_apu(chip, es, 2,
1147 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1150 init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1151 ESM_APU_SRCONVERTOR, es->apu[2]);
1152 if (es->fmt & ESS_FMT_STEREO) {
1154 init_capture_apu(chip, es, 3,
1155 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1159 init_capture_apu(chip, es, 1,
1160 es->memory->buf.addr + size*2, size,
1161 ESM_APU_SRCONVERTOR, es->apu[3]);
1174 snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1175 snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1179 snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1180 snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1198 struct esschan *es = runtime->private_data;
1200 es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1201 es->frag_size = snd_pcm_lib_period_bytes(substream);
1203 es->wav_shift = 1; /* maestro handles always 16bit */
1204 es->fmt = 0;
1206 es->fmt |= ESS_FMT_16BIT;
1208 es->fmt |= ESS_FMT_STEREO;
1209 if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1210 es->wav_shift++;
1212 es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1214 switch (es->mode) {
1216 snd_es1968_playback_setup(chip, es, runtime);
1219 snd_es1968_capture_setup(chip, es, runtime);
1229 struct esschan *es = substream->runtime->private_data;
1235 if (es->running)
1237 snd_es1968_bob_inc(chip, es->bob_freq);
1238 es->count = 0;
1239 es->hwptr = 0;
1240 snd_es1968_pcm_start(chip, es);
1241 es->running = 1;
1245 if (! es->running)
1247 snd_es1968_pcm_stop(chip, es);
1248 es->running = 0;
1259 struct esschan *es = substream->runtime->private_data;
1262 ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1264 return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1525 struct esschan *es;
1533 es = kzalloc(sizeof(*es), GFP_KERNEL);
1534 if (!es) {
1539 es->apu[0] = apu1;
1540 es->apu[1] = apu1 + 1;
1541 es->apu_mode[0] = 0;
1542 es->apu_mode[1] = 0;
1543 es->running = 0;
1544 es->substream = substream;
1545 es->mode = ESM_MODE_PLAY;
1547 runtime->private_data = es;
1553 list_add(&es->list, &chip->substream_list);
1563 struct esschan *es;
1575 es = kzalloc(sizeof(*es), GFP_KERNEL);
1576 if (!es) {
1582 es->apu[0] = apu1;
1583 es->apu[1] = apu1 + 1;
1584 es->apu[2] = apu2;
1585 es->apu[3] = apu2 + 1;
1586 es->apu_mode[0] = 0;
1587 es->apu_mode[1] = 0;
1588 es->apu_mode[2] = 0;
1589 es->apu_mode[3] = 0;
1590 es->running = 0;
1591 es->substream = substream;
1592 es->mode = ESM_MODE_CAPTURE;
1595 es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE);
1596 if (!es->mixbuf) {
1599 kfree(es);
1602 memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1604 runtime->private_data = es;
1611 list_add(&es->list, &chip->substream_list);
1620 struct esschan *es;
1624 es = substream->runtime->private_data;
1626 list_del(&es->list);
1628 snd_es1968_free_apu_pair(chip, es->apu[0]);
1629 kfree(es);
1637 struct esschan *es;
1641 es = substream->runtime->private_data;
1643 list_del(&es->list);
1645 snd_es1968_free_memory(chip, es->mixbuf);
1646 snd_es1968_free_apu_pair(chip, es->apu[0]);
1647 snd_es1968_free_apu_pair(chip, es->apu[2]);
1648 kfree(es);
1822 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1839 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1843 struct snd_pcm_substream *subs = es->substream;
1845 if (subs == NULL || !es->running)
1848 hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1849 hwptr %= es->dma_size;
1851 diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1853 es->hwptr = hwptr;
1854 es->count += diff;
1856 if (es->count > es->frag_size) {
1860 es->count %= es->frag_size;
1970 struct esschan *es;
1972 list_for_each_entry(es, &chip->substream_list, list) {
1973 if (es->running) {
1974 snd_es1968_update_pcm(chip, es);
1975 if (es->fmt & ESS_FMT_STEREO)
1976 snd_es1968_suppress_jitter(chip, es);
2374 struct esschan *es;
2392 list_for_each_entry(es, &chip->substream_list, list) {
2393 switch (es->mode) {
2395 snd_es1968_playback_setup(chip, es, es->substream->runtime);
2398 snd_es1968_capture_setup(chip, es, es->substream->runtime);