Lines Matching refs:chip

43 static u64 pcsp_timer_update(struct snd_pcsp *chip)  in pcsp_timer_update()  argument
51 if (chip->thalf) { in pcsp_timer_update()
52 outb(chip->val61, 0x61); in pcsp_timer_update()
53 chip->thalf = 0; in pcsp_timer_update()
54 return chip->ns_rem; in pcsp_timer_update()
57 substream = chip->playback_substream; in pcsp_timer_update()
63 val = runtime->dma_area[chip->playback_ptr + chip->fmt_size - 1]; in pcsp_timer_update()
64 if (chip->is_signed) in pcsp_timer_update()
68 if (timer_cnt && chip->enable) { in pcsp_timer_update()
71 outb_p(chip->val61, 0x61); in pcsp_timer_update()
73 outb(chip->val61 ^ 1, 0x61); in pcsp_timer_update()
75 outb(chip->val61 ^ 2, 0x61); in pcsp_timer_update()
76 chip->thalf = 1; in pcsp_timer_update()
81 chip->ns_rem = PCSP_PERIOD_NS(); in pcsp_timer_update()
82 ns = (chip->thalf ? PCSP_CALC_NS(timer_cnt) : chip->ns_rem); in pcsp_timer_update()
83 chip->ns_rem -= ns; in pcsp_timer_update()
87 static void pcsp_pointer_update(struct snd_pcsp *chip) in pcsp_pointer_update() argument
95 substream = chip->playback_substream; in pcsp_pointer_update()
102 spin_lock_irqsave(&chip->substream_lock, flags); in pcsp_pointer_update()
103 chip->playback_ptr += PCSP_INDEX_INC() * chip->fmt_size; in pcsp_pointer_update()
104 periods_elapsed = chip->playback_ptr - chip->period_ptr; in pcsp_pointer_update()
109 chip->playback_ptr, period_bytes, buffer_bytes); in pcsp_pointer_update()
116 chip->playback_ptr %= buffer_bytes; in pcsp_pointer_update()
119 chip->period_ptr += periods_elapsed * period_bytes; in pcsp_pointer_update()
120 chip->period_ptr %= buffer_bytes; in pcsp_pointer_update()
122 spin_unlock_irqrestore(&chip->substream_lock, flags); in pcsp_pointer_update()
130 struct snd_pcsp *chip = container_of(handle, struct snd_pcsp, timer); in pcsp_do_timer() local
134 if (!atomic_read(&chip->timer_active) || !chip->playback_substream) in pcsp_do_timer()
137 pointer_update = !chip->thalf; in pcsp_do_timer()
138 ns = pcsp_timer_update(chip); in pcsp_do_timer()
145 pcsp_pointer_update(chip); in pcsp_do_timer()
152 static int pcsp_start_playing(struct snd_pcsp *chip) in pcsp_start_playing() argument
157 if (atomic_read(&chip->timer_active)) { in pcsp_start_playing()
163 chip->val61 = inb(0x61) | 0x03; in pcsp_start_playing()
166 atomic_set(&chip->timer_active, 1); in pcsp_start_playing()
167 chip->thalf = 0; in pcsp_start_playing()
173 static void pcsp_stop_playing(struct snd_pcsp *chip) in pcsp_stop_playing() argument
178 if (!atomic_read(&chip->timer_active)) in pcsp_stop_playing()
181 atomic_set(&chip->timer_active, 0); in pcsp_stop_playing()
185 outb(chip->val61 & 0xFC, 0x61); in pcsp_stop_playing()
192 void pcsp_sync_stop(struct snd_pcsp *chip) in pcsp_sync_stop() argument
195 pcsp_stop_playing(chip); in pcsp_sync_stop()
197 hrtimer_cancel(&chip->timer); in pcsp_sync_stop()
203 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_close() local
207 pcsp_sync_stop(chip); in snd_pcsp_playback_close()
208 chip->playback_substream = NULL; in snd_pcsp_playback_close()
215 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_hw_params() local
217 pcsp_sync_stop(chip); in snd_pcsp_playback_hw_params()
227 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_hw_free() local
231 pcsp_sync_stop(chip); in snd_pcsp_playback_hw_free()
237 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_prepare() local
238 pcsp_sync_stop(chip); in snd_pcsp_playback_prepare()
239 chip->playback_ptr = 0; in snd_pcsp_playback_prepare()
240 chip->period_ptr = 0; in snd_pcsp_playback_prepare()
241 chip->fmt_size = in snd_pcsp_playback_prepare()
243 chip->is_signed = snd_pcm_format_signed(substream->runtime->format); in snd_pcsp_playback_prepare()
252 chip->fmt_size); in snd_pcsp_playback_prepare()
259 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_trigger() local
266 return pcsp_start_playing(chip); in snd_pcsp_trigger()
269 pcsp_stop_playing(chip); in snd_pcsp_trigger()
280 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_pointer() local
282 spin_lock(&chip->substream_lock); in snd_pcsp_playback_pointer()
283 pos = chip->playback_ptr; in snd_pcsp_playback_pointer()
284 spin_unlock(&chip->substream_lock); in snd_pcsp_playback_pointer()
312 struct snd_pcsp *chip = snd_pcm_substream_chip(substream); in snd_pcsp_playback_open() local
317 if (atomic_read(&chip->timer_active)) { in snd_pcsp_playback_open()
322 chip->playback_substream = substream; in snd_pcsp_playback_open()
337 int snd_pcsp_new_pcm(struct snd_pcsp *chip) in snd_pcsp_new_pcm() argument
341 err = snd_pcm_new(chip->card, "pcspeaker", 0, 1, 0, &chip->pcm); in snd_pcsp_new_pcm()
345 snd_pcm_set_ops(chip->pcm, SNDRV_PCM_STREAM_PLAYBACK, in snd_pcsp_new_pcm()
348 chip->pcm->private_data = chip; in snd_pcsp_new_pcm()
349 chip->pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX; in snd_pcsp_new_pcm()
350 strcpy(chip->pcm->name, "pcsp"); in snd_pcsp_new_pcm()
352 snd_pcm_lib_preallocate_pages_for_all(chip->pcm, in snd_pcsp_new_pcm()