blob: c79cb27473be771d9ee355cacf52229f5da6c40d [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,
Nicolin Chen32bd8cd2013-07-25 17:41:41 +080025 int dma, enum sdma_peripheral_type peripheral_type)
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010026{
Lars-Peter Clausena8909c92013-04-03 11:06:04 +020027 dma_data->dma_request = dma;
28 dma_data->priority = DMA_PRIO_HIGH;
Nicolin Chen32bd8cd2013-07-25 17:41:41 +080029 dma_data->peripheral_type = peripheral_type;
Lars-Peter Clausen312bb4f2013-03-22 14:12:12 +010030}
31
Markus Pargmann9051cba2013-06-20 15:20:21 +020032struct imx_pcm_fiq_params {
33 int irq;
34 void __iomem *base;
35
36 /* Pointer to original ssi driver to setup tx rx sizes */
37 struct snd_dmaengine_dai_dma_data *dma_params_rx;
38 struct snd_dmaengine_dai_dma_data *dma_params_tx;
39};
40
Fabio Estevam3f1a91a2013-07-29 18:37:32 -030041#if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
Shawn Guo19276612013-01-28 14:25:43 +080042int imx_pcm_dma_init(struct platform_device *pdev);
43#else
44static inline int imx_pcm_dma_init(struct platform_device *pdev)
45{
46 return -ENODEV;
47}
48#endif
49
Fabio Estevam3f1a91a2013-07-29 18:37:32 -030050#if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_FIQ)
Markus Pargmann9051cba2013-06-20 15:20:21 +020051int imx_pcm_fiq_init(struct platform_device *pdev,
52 struct imx_pcm_fiq_params *params);
Shawn Guo88e89f52013-04-25 11:18:48 +080053void imx_pcm_fiq_exit(struct platform_device *pdev);
Shawn Guo19276612013-01-28 14:25:43 +080054#else
Markus Pargmann9051cba2013-06-20 15:20:21 +020055static inline int imx_pcm_fiq_init(struct platform_device *pdev,
56 struct imx_pcm_fiq_params *params)
Shawn Guo19276612013-01-28 14:25:43 +080057{
58 return -ENODEV;
59}
Shawn Guo88e89f52013-04-25 11:18:48 +080060
61static inline void imx_pcm_fiq_exit(struct platform_device *pdev)
62{
63}
Shawn Guo19276612013-01-28 14:25:43 +080064#endif
65
Shawn Guo4762fba2012-03-05 22:30:55 +080066#endif /* _IMX_PCM_H */