Lines Matching refs:dac

113 	struct atmel_abdac *dac = arg;  in atmel_abdac_dma_period_done()  local
114 snd_pcm_period_elapsed(dac->substream); in atmel_abdac_dma_period_done()
117 static int atmel_abdac_prepare_dma(struct atmel_abdac *dac, in atmel_abdac_prepare_dma() argument
121 struct dma_chan *chan = dac->dma.chan; in atmel_abdac_prepare_dma()
131 dev_dbg(&dac->pdev->dev, "too complex transfer\n"); in atmel_abdac_prepare_dma()
141 dev_dbg(&dac->pdev->dev, "could not prepare cyclic DMA\n"); in atmel_abdac_prepare_dma()
146 cdesc->period_callback_param = dac; in atmel_abdac_prepare_dma()
148 dac->dma.cdesc = cdesc; in atmel_abdac_prepare_dma()
150 set_bit(DMA_READY, &dac->flags); in atmel_abdac_prepare_dma()
177 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_open() local
179 dac->substream = substream; in atmel_abdac_open()
180 atmel_abdac_hw.rate_max = dac->rates[dac->rates_num - 1]; in atmel_abdac_open()
181 atmel_abdac_hw.rate_min = dac->rates[0]; in atmel_abdac_open()
185 SNDRV_PCM_HW_PARAM_RATE, &dac->constraints_rates); in atmel_abdac_open()
190 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_close() local
191 dac->substream = NULL; in atmel_abdac_close()
198 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_hw_params() local
207 if (test_and_clear_bit(DMA_READY, &dac->flags)) in atmel_abdac_hw_params()
208 dw_dma_cyclic_free(dac->dma.chan); in atmel_abdac_hw_params()
215 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_hw_free() local
216 if (test_and_clear_bit(DMA_READY, &dac->flags)) in atmel_abdac_hw_free()
217 dw_dma_cyclic_free(dac->dma.chan); in atmel_abdac_hw_free()
223 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_prepare() local
226 retval = clk_set_rate(dac->sample_clk, 256 * substream->runtime->rate); in atmel_abdac_prepare()
230 if (!test_bit(DMA_READY, &dac->flags)) in atmel_abdac_prepare()
231 retval = atmel_abdac_prepare_dma(dac, substream, DMA_TO_DEVICE); in atmel_abdac_prepare()
238 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_trigger() local
245 clk_prepare_enable(dac->sample_clk); in atmel_abdac_trigger()
246 retval = dw_dma_cyclic_start(dac->dma.chan); in atmel_abdac_trigger()
249 dac_writel(dac, CTRL, DAC_BIT(EN)); in atmel_abdac_trigger()
254 dw_dma_cyclic_stop(dac->dma.chan); in atmel_abdac_trigger()
255 dac_writel(dac, DATA, 0); in atmel_abdac_trigger()
256 dac_writel(dac, CTRL, 0); in atmel_abdac_trigger()
257 clk_disable_unprepare(dac->sample_clk); in atmel_abdac_trigger()
270 struct atmel_abdac *dac = snd_pcm_substream_chip(substream); in atmel_abdac_pointer() local
275 bytes = dw_dma_get_src_addr(dac->dma.chan); in atmel_abdac_pointer()
287 struct atmel_abdac *dac = dev_id; in abdac_interrupt() local
290 status = dac_readl(dac, INT_STATUS); in abdac_interrupt()
292 dev_err(&dac->pdev->dev, "underrun detected\n"); in abdac_interrupt()
293 dac_writel(dac, INT_CLR, DAC_BIT(UNDERRUN)); in abdac_interrupt()
295 dev_err(&dac->pdev->dev, "spurious interrupt (status=0x%x)\n", in abdac_interrupt()
297 dac_writel(dac, INT_CLR, status); in abdac_interrupt()
314 static int atmel_abdac_pcm_new(struct atmel_abdac *dac) in atmel_abdac_pcm_new() argument
320 retval = snd_pcm_new(dac->card, dac->card->shortname, in atmel_abdac_pcm_new()
321 dac->pdev->id, 1, 0, &pcm); in atmel_abdac_pcm_new()
325 strcpy(pcm->name, dac->card->shortname); in atmel_abdac_pcm_new()
326 pcm->private_data = dac; in atmel_abdac_pcm_new()
328 dac->pcm = pcm; in atmel_abdac_pcm_new()
333 &dac->pdev->dev, hw.periods_min * hw.period_bytes_min, in atmel_abdac_pcm_new()
350 static int set_sample_rates(struct atmel_abdac *dac) in set_sample_rates() argument
358 new_rate = clk_round_rate(dac->sample_clk, 256 * new_rate); in set_sample_rates()
363 new_rate <= clk_get_rate(dac->pclk)) { in set_sample_rates()
364 dac->rates[index] = new_rate / 256; in set_sample_rates()
376 unsigned int tmp = dac->rates[index - 1 - i]; in set_sample_rates()
377 dac->rates[index - 1 - i] = dac->rates[i]; in set_sample_rates()
378 dac->rates[i] = tmp; in set_sample_rates()
381 dac->constraints_rates.count = index; in set_sample_rates()
382 dac->constraints_rates.list = dac->rates; in set_sample_rates()
383 dac->constraints_rates.mask = 0; in set_sample_rates()
384 dac->rates_num = index; in set_sample_rates()
395 struct atmel_abdac *dac; in atmel_abdac_probe() local
442 dac = get_dac(card); in atmel_abdac_probe()
444 dac->irq = irq; in atmel_abdac_probe()
445 dac->card = card; in atmel_abdac_probe()
446 dac->pclk = pclk; in atmel_abdac_probe()
447 dac->sample_clk = sample_clk; in atmel_abdac_probe()
448 dac->pdev = pdev; in atmel_abdac_probe()
450 retval = set_sample_rates(dac); in atmel_abdac_probe()
456 dac->regs = ioremap(regs->start, resource_size(regs)); in atmel_abdac_probe()
457 if (!dac->regs) { in atmel_abdac_probe()
464 dac_writel(dac, DATA, 0); in atmel_abdac_probe()
465 dac_writel(dac, CTRL, 0); in atmel_abdac_probe()
467 retval = request_irq(irq, abdac_interrupt, 0, "abdac", dac); in atmel_abdac_probe()
479 dac->dma.chan = dma_request_channel(mask, filter, &pdata->dws); in atmel_abdac_probe()
480 if (dac->dma.chan) { in atmel_abdac_probe()
490 dmaengine_slave_config(dac->dma.chan, &dma_conf); in atmel_abdac_probe()
493 if (!pdata->dws.dma_dev || !dac->dma.chan) { in atmel_abdac_probe()
503 retval = atmel_abdac_pcm_new(dac); in atmel_abdac_probe()
518 dac->regs, dev_name(&dac->dma.chan->dev->device)); in atmel_abdac_probe()
523 dma_release_channel(dac->dma.chan); in atmel_abdac_probe()
524 dac->dma.chan = NULL; in atmel_abdac_probe()
526 iounmap(dac->regs); in atmel_abdac_probe()
541 struct atmel_abdac *dac = card->private_data; in atmel_abdac_suspend() local
543 dw_dma_cyclic_stop(dac->dma.chan); in atmel_abdac_suspend()
544 clk_disable_unprepare(dac->sample_clk); in atmel_abdac_suspend()
545 clk_disable_unprepare(dac->pclk); in atmel_abdac_suspend()
553 struct atmel_abdac *dac = card->private_data; in atmel_abdac_resume() local
555 clk_prepare_enable(dac->pclk); in atmel_abdac_resume()
556 clk_prepare_enable(dac->sample_clk); in atmel_abdac_resume()
557 if (test_bit(DMA_READY, &dac->flags)) in atmel_abdac_resume()
558 dw_dma_cyclic_start(dac->dma.chan); in atmel_abdac_resume()
572 struct atmel_abdac *dac = get_dac(card); in atmel_abdac_remove() local
574 clk_put(dac->sample_clk); in atmel_abdac_remove()
575 clk_disable_unprepare(dac->pclk); in atmel_abdac_remove()
576 clk_put(dac->pclk); in atmel_abdac_remove()
578 dma_release_channel(dac->dma.chan); in atmel_abdac_remove()
579 dac->dma.chan = NULL; in atmel_abdac_remove()
580 iounmap(dac->regs); in atmel_abdac_remove()
581 free_irq(dac->irq, dac); in atmel_abdac_remove()