linux/drivers/staging/intel_sst/intelmid.h
<<
>>
Prefs
   1/*
   2 *  intelmid.h - Intel Sound card driver for MID
   3 *
   4 *  Copyright (C) 2008-10 Intel Corp
   5 *  Authors:    Harsha Priya <priya.harsha@intel.com>
   6 *              Vinod Koul <vinod.koul@intel.com>
   7 *              Dharageswari R <dharageswari.r@intel.com>
   8 *              KP Jeeja <jeeja.kp@intel.com>
   9 *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10 *
  11 *  This program is free software; you can redistribute it and/or modify
  12 *  it under the terms of the GNU General Public License as published by
  13 *  the Free Software Foundation version 2 of the License.
  14 *
  15 *  This program is distributed in the hope that it will be useful, but
  16 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18 *  General Public License for more details.
  19 *
  20 *  You should have received a copy of the GNU General Public License along
  21 *  with this program; if not, write to the Free Software Foundation, Inc.,
  22 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  23 *
  24 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  25 *  ALSA driver header for Intel MAD chipset
  26 */
  27#ifndef __INTELMID_H
  28#define __INTELMID_H
  29
  30#include <linux/time.h>
  31
  32#define DRIVER_NAME_MFLD "msic_audio"
  33#define DRIVER_NAME_MRST "pmic_audio"
  34#define DRIVER_NAME "intelmid_audio"
  35#define PMIC_SOUND_IRQ_TYPE_MASK (1 << 15)
  36#define AUDINT_BASE (0xFFFFEFF8 + (6 * sizeof(u8)))
  37#define REG_IRQ
  38/* values #defined   */
  39/* will differ for different hw - to be taken from config  */
  40#define MAX_DEVICES             1
  41#define MIN_RATE                8000
  42#define MAX_RATE                48000
  43#define MAX_BUFFER              (800*1024) /* for PCM */
  44#define MIN_BUFFER              (800*1024)
  45#define MAX_PERIODS             (1024*2)
  46#define MIN_PERIODS             1
  47#define MAX_PERIOD_BYTES MAX_BUFFER
  48#define MIN_PERIOD_BYTES 32
  49/*#define MIN_PERIOD_BYTES 160*/
  50#define MAX_MUTE                1
  51#define MIN_MUTE                0
  52#define MONO_CNTL               1
  53#define STEREO_CNTL             2
  54#define MIN_CHANNEL             1
  55#define MAX_CHANNEL_AMIC        2
  56#define MAX_CHANNEL_DMIC        4
  57#define FIFO_SIZE               0 /* fifo not being used */
  58#define INTEL_MAD               "Intel MAD"
  59#define MAX_CTRL_MRST           7
  60#define MAX_CTRL_MFLD           2
  61#define MAX_CTRL                7
  62#define MAX_VENDORS             4
  63/* TODO +6 db */
  64#define MAX_VOL         64
  65/* TODO -57 db */
  66#define MIN_VOL         0
  67#define PLAYBACK_COUNT  1
  68#define CAPTURE_COUNT   1
  69
  70extern int      sst_card_vendor_id;
  71
  72struct mad_jack {
  73        struct snd_jack jack;
  74        int jack_status;
  75        struct timeval buttonpressed;
  76        struct timeval  buttonreleased;
  77};
  78
  79struct mad_jack_msg_wq {
  80        u8 intsts;
  81        struct snd_intelmad *intelmaddata;
  82        struct work_struct      wq;
  83
  84};
  85
  86/**
  87 * struct snd_intelmad - intelmad driver structure
  88 *
  89 * @card: ptr to the card details
  90 * @card_index: sound card index
  91 * @card_id: sound card id detected
  92 * @sstdrv_ops: ptr to sst driver ops
  93 * @pdev: ptr to platform device
  94 * @irq: interrupt number detected
  95 * @pmic_status: Device status of sound card
  96 * @int_base: ptr to MMIO interrupt region
  97 * @output_sel: device selected as o/p
  98 * @input_sel: device selected as i/p
  99 * @master_mute: master mute status
 100 * @jack: jack status
 101 * @playback_cnt: active pb streams
 102 * @capture_cnt: active cp streams
 103 * @mad_jack_msg: wq struct for jack interrupt processing
 104 * @mad_jack_wq: wq for jack interrupt processing
 105 * @jack_prev_state: Previos state of jack detected
 106 * @cpu_id: current cpu id loaded for
 107 */
 108struct snd_intelmad {
 109        struct snd_card *card; /* ptr to the card details */
 110        int             card_index;/*  card index  */
 111        char            *card_id; /* card id */
 112        struct intel_sst_card_ops *sstdrv_ops;/* ptr to sst driver ops */
 113        struct platform_device *pdev;
 114        int irq;
 115        int pmic_status;
 116        void __iomem *int_base;
 117        int output_sel;
 118        int input_sel;
 119        int master_mute;
 120        struct mad_jack jack[4];
 121        int playback_cnt;
 122        int capture_cnt;
 123        struct mad_jack_msg_wq  mad_jack_msg;
 124        struct workqueue_struct *mad_jack_wq;
 125        u8 jack_prev_state;
 126        unsigned int cpu_id;
 127};
 128
 129struct snd_control_val {
 130        int     playback_vol_max;
 131        int     playback_vol_min;
 132        int     capture_vol_max;
 133        int     capture_vol_min;
 134};
 135
 136struct mad_stream_pvt {
 137        int                     stream_status;
 138        int                     stream_ops;
 139        struct snd_pcm_substream *substream;
 140        struct pcm_stream_info stream_info;
 141        ssize_t         dbg_cum_bytes;
 142        enum snd_sst_device_type device;
 143};
 144
 145enum mad_drv_status {
 146    INIT = 1,
 147    STARTED,
 148    RUNNING,
 149    PAUSED,
 150    DROPPED,
 151};
 152
 153enum mad_pmic_status {
 154        PMIC_UNINIT = 1,
 155        PMIC_INIT,
 156};
 157enum _widget_ctrl {
 158        OUTPUT_SEL = 1,
 159        INPUT_SEL,
 160        PLAYBACK_VOL,
 161        PLAYBACK_MUTE,
 162        CAPTURE_VOL,
 163        CAPTURE_MUTE,
 164        MASTER_MUTE
 165};
 166
 167void period_elapsed(void *mad_substream);
 168int snd_intelmad_alloc_stream(struct snd_pcm_substream *substream);
 169int snd_intelmad_init_stream(struct snd_pcm_substream *substream);
 170
 171int sst_sc_reg_access(struct sc_reg_access *sc_access,
 172                                        int type, int num_val);
 173#define CPU_CHIP_LINCROFT       1 /* System running lincroft */
 174#define CPU_CHIP_PENWELL        2 /* System running penwell */
 175
 176extern struct snd_control_val intelmad_ctrl_val[];
 177extern struct snd_kcontrol_new snd_intelmad_controls_mrst[];
 178extern struct snd_kcontrol_new snd_intelmad_controls_mfld[];
 179extern struct snd_pmic_ops *intelmad_vendor_ops[];
 180
 181#endif /* __INTELMID_H */
 182