18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright 2009 Sascha Hauer <s.hauer@pengutronix.de>
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * This code is based on code copyrighted by Freescale,
68c2ecf20Sopenharmony_ci * Liam Girdwood, Javier Martin and probably others.
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef _IMX_PCM_H
108c2ecf20Sopenharmony_ci#define _IMX_PCM_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/platform_data/dma-imx.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci/*
158c2ecf20Sopenharmony_ci * Do not change this as the FIQ handler depends on this size
168c2ecf20Sopenharmony_ci */
178c2ecf20Sopenharmony_ci#define IMX_SSI_DMABUF_SIZE	(64 * 1024)
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#define IMX_DEFAULT_DMABUF_SIZE	(64 * 1024)
208c2ecf20Sopenharmony_ci#define IMX_SAI_DMABUF_SIZE	(64 * 1024)
218c2ecf20Sopenharmony_ci#define IMX_SPDIF_DMABUF_SIZE	(64 * 1024)
228c2ecf20Sopenharmony_ci#define IMX_ESAI_DMABUF_SIZE	(256 * 1024)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cistatic inline void
258c2ecf20Sopenharmony_ciimx_pcm_dma_params_init_data(struct imx_dma_data *dma_data,
268c2ecf20Sopenharmony_ci	int dma, enum sdma_peripheral_type peripheral_type)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci	dma_data->dma_request = dma;
298c2ecf20Sopenharmony_ci	dma_data->priority = DMA_PRIO_HIGH;
308c2ecf20Sopenharmony_ci	dma_data->peripheral_type = peripheral_type;
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistruct imx_pcm_fiq_params {
348c2ecf20Sopenharmony_ci	int irq;
358c2ecf20Sopenharmony_ci	void __iomem *base;
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci	/* Pointer to original ssi driver to setup tx rx sizes */
388c2ecf20Sopenharmony_ci	struct snd_dmaengine_dai_dma_data *dma_params_rx;
398c2ecf20Sopenharmony_ci	struct snd_dmaengine_dai_dma_data *dma_params_tx;
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_DMA)
438c2ecf20Sopenharmony_ciint imx_pcm_dma_init(struct platform_device *pdev, size_t size);
448c2ecf20Sopenharmony_ci#else
458c2ecf20Sopenharmony_cistatic inline int imx_pcm_dma_init(struct platform_device *pdev, size_t size)
468c2ecf20Sopenharmony_ci{
478c2ecf20Sopenharmony_ci	return -ENODEV;
488c2ecf20Sopenharmony_ci}
498c2ecf20Sopenharmony_ci#endif
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_SND_SOC_IMX_PCM_FIQ)
528c2ecf20Sopenharmony_ciint imx_pcm_fiq_init(struct platform_device *pdev,
538c2ecf20Sopenharmony_ci		struct imx_pcm_fiq_params *params);
548c2ecf20Sopenharmony_civoid imx_pcm_fiq_exit(struct platform_device *pdev);
558c2ecf20Sopenharmony_ci#else
568c2ecf20Sopenharmony_cistatic inline int imx_pcm_fiq_init(struct platform_device *pdev,
578c2ecf20Sopenharmony_ci		struct imx_pcm_fiq_params *params)
588c2ecf20Sopenharmony_ci{
598c2ecf20Sopenharmony_ci	return -ENODEV;
608c2ecf20Sopenharmony_ci}
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_cistatic inline void imx_pcm_fiq_exit(struct platform_device *pdev)
638c2ecf20Sopenharmony_ci{
648c2ecf20Sopenharmony_ci}
658c2ecf20Sopenharmony_ci#endif
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci#endif /* _IMX_PCM_H */
68