#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include "i2s.h"
#include "idma.h"
#include "i2s-regs.h"
#define ST_RUNNING …
#define ST_OPENED …
static const struct snd_pcm_hardware idma_hardware = …;
struct idma_ctrl { … };
static struct idma_info { … } idma;
static int idma_irq;
static void idma_getpos(dma_addr_t *src)
{ … }
static int idma_enqueue(struct snd_pcm_substream *substream)
{ … }
static void idma_setcallbk(struct snd_pcm_substream *substream,
void (*cb)(void *, int))
{ … }
static void idma_control(int op)
{ … }
static void idma_done(void *id, int bytes_xfer)
{ … }
static int idma_hw_params(struct snd_soc_component *component,
struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
{ … }
static int idma_hw_free(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int idma_prepare(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int idma_trigger(struct snd_soc_component *component,
struct snd_pcm_substream *substream, int cmd)
{ … }
static snd_pcm_uframes_t
idma_pointer(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int idma_mmap(struct snd_soc_component *component,
struct snd_pcm_substream *substream,
struct vm_area_struct *vma)
{ … }
static irqreturn_t iis_irq(int irqno, void *dev_id)
{ … }
static int idma_open(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static int idma_close(struct snd_soc_component *component,
struct snd_pcm_substream *substream)
{ … }
static void idma_free(struct snd_soc_component *component,
struct snd_pcm *pcm)
{ … }
static int preallocate_idma_buffer(struct snd_pcm *pcm, int stream)
{ … }
static int idma_new(struct snd_soc_component *component,
struct snd_soc_pcm_runtime *rtd)
{ … }
void idma_reg_addr_init(void __iomem *regs, dma_addr_t addr)
{ … }
EXPORT_SYMBOL_GPL(…);
static const struct snd_soc_component_driver asoc_idma_platform = …;
static int asoc_idma_platform_probe(struct platform_device *pdev)
{ … }
static struct platform_driver asoc_idma_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;