home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / plat-omap / include / mach / omap-alsa.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.4 KB  |  124 lines

  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.  */
  54. struct 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.  */
  77. struct 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.  */
  88. struct 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 *************************/
  103. int snd_omap_mixer(struct snd_card_omap_codec *);
  104. void snd_omap_init_mixer(void);
  105.  
  106. #ifdef CONFIG_PM
  107. void snd_omap_suspend_mixer(void);
  108. void snd_omap_resume_mixer(void);
  109. #endif
  110.  
  111. int snd_omap_alsa_post_probe(struct platform_device *pdev, struct omap_alsa_codec_config *config);
  112. int snd_omap_alsa_remove(struct platform_device *pdev);
  113. #ifdef CONFIG_PM
  114. int snd_omap_alsa_suspend(struct platform_device *pdev, pm_message_t state);
  115. int 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.  
  121. void callback_omap_alsa_sound_dma(void *);
  122.  
  123. #endif
  124.