Lines Matching refs:es

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