linux/arch/arm/plat-omap/include/mach/omap-alsa.h
<<
>>
Prefs
   1/*
   2 * arch/arm/plat-omap/include/mach/omap-alsa.h
   3 *
   4 * Alsa Driver for AIC23 and TSC2101 codecs on OMAP platform boards.
   5 *
   6 * Copyright (C) 2006 Mika Laitio <lamikr@cc.jyu.fi>
   7 *
   8 * Copyright (C) 2005 Instituto Nokia de Tecnologia - INdT - Manaus Brazil
   9 * Written by Daniel Petrini, David Cohen, Anderson Briglia
  10 *            {daniel.petrini, david.cohen, anderson.briglia}@indt.org.br
  11 *
  12 * This program is free software; you can redistribute it and/or modify it
  13 * under the terms of the GNU General Public License as published by the
  14 * Free Software Foundation; either version 2 of the License, or (at your
  15 * option) any later version.
  16 *
  17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
  20 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  23 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  24 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27 *
  28 * You should have received a copy of the  GNU General Public License along
  29 * with this program; if not, write  to the Free Software Foundation, Inc.,
  30 * 675 Mass Ave, Cambridge, MA 02139, USA.
  31 *
  32 *  History
  33 *  -------
  34 *
  35 *  2005/07/25 INdT-10LE Kernel Team -  Alsa driver for omap osk,
  36 *                                      original version based in sa1100 driver
  37 *                                      and omap oss driver.
  38 */
  39
  40#ifndef __OMAP_ALSA_H
  41#define __OMAP_ALSA_H
  42
  43#include <mach/dma.h>
  44#include <sound/core.h>
  45#include <sound/pcm.h>
  46#include <mach/mcbsp.h>
  47#include <linux/platform_device.h>
  48
  49#define DMA_BUF_SIZE    (1024 * 8)
  50
  51/*
  52 * Buffer management for alsa and dma
  53 */
  54struct audio_stream {
  55        char *id;               /* identification string */
  56        int stream_id;          /* numeric identification */
  57        int dma_dev;            /* dma number of that device */
  58        int *lch;               /* Chain of channels this stream is linked to */
  59        char started;           /* to store if the chain was started or not */
  60        int dma_q_head;         /* DMA Channel Q Head */
  61        int dma_q_tail;         /* DMA Channel Q Tail */
  62        char dma_q_count;       /* DMA Channel Q Count */
  63        int active:1;           /* we are using this stream for transfer now */
  64        int period;             /* current transfer period */
  65        int periods;            /* current count of periods registerd in the DMA engine */
  66        spinlock_t dma_lock;    /* for locking in DMA operations */
  67        struct snd_pcm_substream *stream;       /* the pcm stream */
  68        unsigned linked:1;      /* dma channels linked */
  69        int offset;             /* store start position of the last period in the alsa buffer */
  70        int (*hw_start)(void);  /* interface to start HW interface, e.g. McBSP */
  71        int (*hw_stop)(void);   /* interface to stop HW interface, e.g. McBSP */
  72};
  73
  74/*
  75 * Alsa card structure for aic23
  76 */
  77struct snd_card_omap_codec {
  78        struct snd_card *card;
  79        struct snd_pcm *pcm;
  80        long samplerate;
  81        struct audio_stream s[2];       /* playback & capture */
  82};
  83
  84/* Codec specific information and function pointers.
  85 * Codec (omap-alsa-aic23.c and omap-alsa-tsc2101.c)
  86 * are responsible for defining the function pointers.
  87 */
  88struct omap_alsa_codec_config {
  89        char    *name;
  90        struct  omap_mcbsp_reg_cfg *mcbsp_regs_alsa;
  91        struct  snd_pcm_hw_constraint_list *hw_constraints_rates;
  92        struct  snd_pcm_hardware *snd_omap_alsa_playback;
  93        struct  snd_pcm_hardware *snd_omap_alsa_capture;
  94        void    (*codec_configure_dev)(void);
  95        void    (*codec_set_samplerate)(long);
  96        void    (*codec_clock_setup)(void);
  97        int     (*codec_clock_on)(void);
  98        int     (*codec_clock_off)(void);
  99        int     (*get_default_samplerate)(void);
 100};
 101
 102/*********** Mixer function prototypes *************************/
 103int snd_omap_mixer(struct snd_card_omap_codec *);
 104void snd_omap_init_mixer(void);
 105
 106#ifdef CONFIG_PM
 107void snd_omap_suspend_mixer(void);
 108void snd_omap_resume_mixer(void);
 109#endif
 110
 111int snd_omap_alsa_post_probe(struct platform_device *pdev, struct omap_alsa_codec_config *config);
 112int snd_omap_alsa_remove(struct platform_device *pdev);
 113#ifdef CONFIG_PM
 114int snd_omap_alsa_suspend(struct platform_device *pdev, pm_message_t state);
 115int snd_omap_alsa_resume(struct platform_device *pdev);
 116#else
 117#define snd_omap_alsa_suspend   NULL
 118#define snd_omap_alsa_resume    NULL
 119#endif
 120
 121void callback_omap_alsa_sound_dma(void *);
 122
 123#endif
 124