blob: b7fa0d75c687ecc4e3dc0033d5286856bd8ddaac [file] [log] [blame]
Shawn Guo4762fba2012-03-05 22:30:55 +08001/*
2 * Copyright 2009 Sascha Hauer <s.hauer@pengutronix.de>
3 *
4 * This code is based on code copyrighted by Freescale,
5 * Liam Girdwood, Javier Martin and probably others.
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
12
13#ifndef _IMX_PCM_H
14#define _IMX_PCM_H
15
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010016#include <linux/platform_data/dma-imx.h>
17
Shawn Guo4762fba2012-03-05 22:30:55 +080018/*
19 * Do not change this as the FIQ handler depends on this size
20 */
21#define IMX_SSI_DMABUF_SIZE (64 * 1024)
22
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010023static inline void
Lars-Peter Clausena8909c92013-04-03 11:06:04 +020024imx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010025 int dma, bool shared)
26{
Lars-Peter Clausena8909c92013-04-03 11:06:04 +020027 dma_data->dma_request = dma;
28 dma_data->priority = DMA_PRIO_HIGH;
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010029 if (shared)
Lars-Peter Clausena8909c92013-04-03 11:06:04 +020030 dma_data->peripheral_type = IMX_DMATYPE_SSI_SP;
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010031 else
Lars-Peter Clausena8909c92013-04-03 11:06:04 +020032 dma_data->peripheral_type = IMX_DMATYPE_SSI;
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010033}
34
Shawn Guo4762fba2012-03-05 22:30:55 +080035int snd_imx_pcm_mmap(struct snd_pcm_substream *substream,
36 struct vm_area_struct *vma);
37int imx_pcm_new(struct snd_soc_pcm_runtime *rtd);
38void imx_pcm_free(struct snd_pcm *pcm);
39
Shawn Guo19276612013-01-28 14:25:43 +080040#ifdef CONFIG_SND_SOC_IMX_PCM_DMA
41int imx_pcm_dma_init(struct platform_device *pdev);
Lars-Peter Clausenadaa3222013-04-15 19:19:59 +020042void imx_pcm_dma_exit(struct platform_device *pdev);
Shawn Guo19276612013-01-28 14:25:43 +080043#else
44static inline int imx_pcm_dma_init(struct platform_device *pdev)
45{
46 return -ENODEV;
47}
Lars-Peter Clausenadaa3222013-04-15 19:19:59 +020048
49static inline void imx_pcm_dma_exit(struct platform_device *pdev)
50{
51}
Shawn Guo19276612013-01-28 14:25:43 +080052#endif
53
54#ifdef CONFIG_SND_SOC_IMX_PCM_FIQ
55int imx_pcm_fiq_init(struct platform_device *pdev);
56#else
57static inline int imx_pcm_fiq_init(struct platform_device *pdev)
58{
59 return -ENODEV;
60}
61#endif
62
Shawn Guo4762fba2012-03-05 22:30:55 +080063#endif /* _IMX_PCM_H */