#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/rpmsg.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/dmaengine_pcm.h>
#include <sound/soc.h>
#include "imx-pcm.h"
#include "fsl_rpmsg.h"
#include "imx-pcm-rpmsg.h"
static const struct snd_pcm_hardware imx_rpmsg_pcm_hardware = …;
static int imx_rpmsg_pcm_send_message(struct rpmsg_msg *msg,
struct rpmsg_info *info)
{ … }
static int imx_rpmsg_insert_workqueue(struct snd_pcm_substream *substream,
struct rpmsg_msg *msg,
struct rpmsg_info *info)
{ … }
static int imx_rpmsg_pcm_hw_params(struct snd_soc_component *component,
struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{ … }
static snd_pcm_uframes_t imx_rpmsg_pcm_pointer(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static void imx_rpmsg_timer_callback(struct timer_list *t)
{ … }
static int imx_rpmsg_pcm_open(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_pcm_close(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_pcm_prepare(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static void imx_rpmsg_pcm_dma_complete(void *arg)
{ … }
static int imx_rpmsg_prepare_and_submit(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_async_issue_pending(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_restart(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_pause(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_terminate_all(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_pcm_trigger(struct snd_soc_component *component,
struct snd_pcm_substream *substream, int cmd)
{ … }
static int imx_rpmsg_pcm_ack(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int imx_rpmsg_pcm_new(struct snd_soc_component *component,
struct snd_soc_pcm_runtime *rtd)
{ … }
static const struct snd_soc_component_driver imx_rpmsg_soc_component = …;
static void imx_rpmsg_pcm_work(struct work_struct *work)
{ … }
static int imx_rpmsg_pcm_probe(struct platform_device *pdev)
{ … }
static void imx_rpmsg_pcm_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_PM
static int imx_rpmsg_pcm_runtime_resume(struct device *dev)
{ … }
static int imx_rpmsg_pcm_runtime_suspend(struct device *dev)
{ … }
#endif
#ifdef CONFIG_PM_SLEEP
static int imx_rpmsg_pcm_suspend(struct device *dev)
{ … }
static int imx_rpmsg_pcm_resume(struct device *dev)
{ … }
#endif
static const struct dev_pm_ops imx_rpmsg_pcm_pm_ops = …;
static const struct platform_device_id imx_rpmsg_pcm_id_table[] = …;
MODULE_DEVICE_TABLE(platform, imx_rpmsg_pcm_id_table);
static struct platform_driver imx_pcm_rpmsg_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_ALIAS(…) …;
MODULE_LICENSE(…) …;