Version:  2.0.40 2.2.26 2.4.37 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17

Linux/sound/soc/cirrus/ep93xx-pcm.c

  1 /*
  2  * linux/sound/arm/ep93xx-pcm.c - EP93xx ALSA PCM interface
  3  *
  4  * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
  5  * Copyright (C) 2006 Applied Data Systems
  6  *
  7  * Rewritten for the SoC audio subsystem (Based on PXA2xx code):
  8  *   Copyright (c) 2008 Ryan Mallon
  9  *
 10  * This program is free software; you can redistribute it and/or modify
 11  * it under the terms of the GNU General Public License version 2 as
 12  * published by the Free Software Foundation.
 13  */
 14 
 15 #include <linux/module.h>
 16 #include <linux/init.h>
 17 #include <linux/platform_device.h>
 18 #include <linux/dmaengine.h>
 19 
 20 #include <sound/pcm.h>
 21 #include <sound/soc.h>
 22 #include <sound/dmaengine_pcm.h>
 23 
 24 #include <linux/platform_data/dma-ep93xx.h>
 25 
 26 #include "ep93xx-pcm.h"
 27 
 28 static const struct snd_pcm_hardware ep93xx_pcm_hardware = {
 29         .info                   = (SNDRV_PCM_INFO_MMAP          |
 30                                    SNDRV_PCM_INFO_MMAP_VALID    |
 31                                    SNDRV_PCM_INFO_INTERLEAVED   |
 32                                    SNDRV_PCM_INFO_BLOCK_TRANSFER),
 33         .buffer_bytes_max       = 131072,
 34         .period_bytes_min       = 32,
 35         .period_bytes_max       = 32768,
 36         .periods_min            = 1,
 37         .periods_max            = 32,
 38         .fifo_size              = 32,
 39 };
 40 
 41 static bool ep93xx_pcm_dma_filter(struct dma_chan *chan, void *filter_param)
 42 {
 43         struct ep93xx_dma_data *data = filter_param;
 44 
 45         if (data->direction == ep93xx_dma_chan_direction(chan)) {
 46                 chan->private = data;
 47                 return true;
 48         }
 49 
 50         return false;
 51 }
 52 
 53 static const struct snd_dmaengine_pcm_config ep93xx_dmaengine_pcm_config = {
 54         .pcm_hardware = &ep93xx_pcm_hardware,
 55         .compat_filter_fn = ep93xx_pcm_dma_filter,
 56         .prealloc_buffer_size = 131072,
 57 };
 58 
 59 int devm_ep93xx_pcm_platform_register(struct device *dev)
 60 {
 61         return devm_snd_dmaengine_pcm_register(dev,
 62                 &ep93xx_dmaengine_pcm_config,
 63                 SND_DMAENGINE_PCM_FLAG_NO_RESIDUE |
 64                 SND_DMAENGINE_PCM_FLAG_NO_DT |
 65                 SND_DMAENGINE_PCM_FLAG_COMPAT);
 66 }
 67 EXPORT_SYMBOL_GPL(devm_ep93xx_pcm_platform_register);
 68 
 69 MODULE_AUTHOR("Ryan Mallon");
 70 MODULE_DESCRIPTION("EP93xx ALSA PCM interface");
 71 MODULE_LICENSE("GPL");
 72 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us