home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / arch-omap / omap-alsa.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.4 KB  |  125 lines

  1. /*
  2.  * linux/include/asm-arm/arch-omap/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 <sound/driver.h>
  44. #include <asm/arch/dma.h>
  45. #include <sound/core.h>
  46. #include <sound/pcm.h>
  47. #include <asm/arch/mcbsp.h>
  48. #include <linux/platform_device.h>
  49.  
  50. #define DMA_BUF_SIZE    (1024 * 8)
  51.  
  52. /*
  53.  * Buffer management for alsa and dma
  54.  */
  55. struct audio_stream {
  56.     char *id;        /* identification string */
  57.     int stream_id;        /* numeric identification */
  58.     int dma_dev;        /* dma number of that device */
  59.     int *lch;        /* Chain of channels this stream is linked to */
  60.     char started;        /* to store if the chain was started or not */
  61.     int dma_q_head;        /* DMA Channel Q Head */
  62.     int dma_q_tail;        /* DMA Channel Q Tail */
  63.     char dma_q_count;    /* DMA Channel Q Count */
  64.     int active:1;        /* we are using this stream for transfer now */
  65.     int period;        /* current transfer period */
  66.     int periods;        /* current count of periods registerd in the DMA engine */
  67.     spinlock_t dma_lock;    /* for locking in DMA operations */
  68.     snd_pcm_substream_t *stream;    /* the pcm stream */
  69.     unsigned linked:1;    /* dma channels linked */
  70.     int offset;        /* store start position of the last period in the alsa buffer */
  71.     int (*hw_start)(void);  /* interface to start HW interface, e.g. McBSP */
  72.     int (*hw_stop)(void);   /* interface to stop HW interface, e.g. McBSP */
  73. };
  74.  
  75. /*
  76.  * Alsa card structure for aic23
  77.  */
  78. struct snd_card_omap_codec {
  79.     snd_card_t *card;
  80.     snd_pcm_t *pcm;
  81.     long samplerate;
  82.     struct audio_stream s[2];    /* playback & capture */
  83. };
  84.  
  85. /* Codec specific information and function pointers.
  86.  * Codec (omap-alsa-aic23.c and omap-alsa-tsc2101.c)
  87.  * are responsible for defining the function pointers.
  88.  */
  89. struct omap_alsa_codec_config {
  90.     char     *name;
  91.     struct    omap_mcbsp_reg_cfg *mcbsp_regs_alsa;
  92.     snd_pcm_hw_constraint_list_t *hw_constraints_rates;
  93.     snd_pcm_hardware_t *snd_omap_alsa_playback;
  94.     snd_pcm_hardware_t *snd_omap_alsa_capture;
  95.     void    (*codec_configure_dev)(void);
  96.     void    (*codec_set_samplerate)(long);
  97.     void    (*codec_clock_setup)(void);
  98.     int    (*codec_clock_on)(void);
  99.     int     (*codec_clock_off)(void);
  100.     int    (*get_default_samplerate)(void);
  101. };
  102.  
  103. /*********** Mixer function prototypes *************************/
  104. int snd_omap_mixer(struct snd_card_omap_codec *);
  105. void snd_omap_init_mixer(void);
  106.  
  107. #ifdef CONFIG_PM
  108. void snd_omap_suspend_mixer(void);
  109. void snd_omap_resume_mixer(void);
  110. #endif
  111.  
  112. int snd_omap_alsa_post_probe(struct platform_device *pdev, struct omap_alsa_codec_config *config);
  113. int snd_omap_alsa_remove(struct platform_device *pdev);
  114. #ifdef CONFIG_PM
  115. int snd_omap_alsa_suspend(struct platform_device *pdev, pm_message_t state);
  116. int snd_omap_alsa_resume(struct platform_device *pdev);
  117. #else
  118. #define snd_omap_alsa_suspend    NULL
  119. #define snd_omap_alsa_resume    NULL
  120. #endif
  121.  
  122. void callback_omap_alsa_sound_dma(void *);
  123.  
  124. #endif
  125.