root/drivers/sound/sb_mixer.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * sound/sb_mixer.h
   3  * 
   4  * Definitions for the SB Pro and SB16 mixers
   5  * 
   6  * Copyright by Hannu Savolainen 1993
   7  * 
   8  * Redistribution and use in source and binary forms, with or without
   9  * modification, are permitted provided that the following conditions are
  10  * met: 1. Redistributions of source code must retain the above copyright
  11  * notice, this list of conditions and the following disclaimer. 2.
  12  * Redistributions in binary form must reproduce the above copyright notice,
  13  * this list of conditions and the following disclaimer in the documentation
  14  * and/or other materials provided with the distribution.
  15  * 
  16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
  17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  20  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  22  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  23  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26  * SUCH DAMAGE.
  27  *
  28  * Modified:
  29  *      Hunyue Yau      Jan 6 1994
  30  *      Added defines for the Sound Galaxy NX Pro mixer.
  31  * 
  32  */
  33 
  34 #define SBPRO_RECORDING_DEVICES (SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_CD)
  35 
  36 /* Same as SB Pro, unless I find otherwise */
  37 #define SGNXPRO_RECORDING_DEVICES SBPRO_RECORDING_DEVICES
  38 
  39 #define SBPRO_MIXER_DEVICES             (SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_LINE | SOUND_MASK_MIC | \
  40                                          SOUND_MASK_CD | SOUND_MASK_VOLUME)
  41 
  42 /* SG NX Pro has treble and bass settings on the mixer. The 'speaker'
  43  * channel is the COVOX/DisneySoundSource emulation volume control
  44  * on the mixer. It does NOT control speaker volume. Should have own
  45  * mask eventually?
  46  */
  47 #define SGNXPRO_MIXER_DEVICES   (SBPRO_MIXER_DEVICES|SOUND_MASK_BASS| \
  48                                  SOUND_MASK_TREBLE|SOUND_MASK_SPEAKER )
  49 
  50 #define SB16_RECORDING_DEVICES          (SOUND_MASK_SYNTH | SOUND_MASK_LINE | SOUND_MASK_MIC | \
  51                                          SOUND_MASK_CD)
  52 
  53 #define ES688_RECORDING_DEVICES SBPRO_RECORDING_DEVICES
  54 #define ES688_MIXER_DEVICES (SBPRO_MIXER_DEVICES|SOUND_MASK_LINE2|SOUND_MASK_SPEAKER)
  55 
  56 #define SB16_MIXER_DEVICES              (SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_SPEAKER | SOUND_MASK_LINE | SOUND_MASK_MIC | \
  57                                          SOUND_MASK_CD | \
  58                                          SOUND_MASK_IGAIN | SOUND_MASK_OGAIN | \
  59                                          SOUND_MASK_VOLUME | SOUND_MASK_BASS | SOUND_MASK_TREBLE)
  60 
  61 /*
  62  * Mixer registers
  63  * 
  64  * NOTE!        RECORD_SRC == IN_FILTER
  65  */
  66 
  67 /* 
  68  * Mixer registers of SB Pro
  69  */
  70 #define VOC_VOL         0x04
  71 #define MIC_VOL         0x0A
  72 #define MIC_MIX         0x0A
  73 #define RECORD_SRC      0x0C
  74 #define IN_FILTER       0x0C
  75 #define OUT_FILTER      0x0E
  76 #define MASTER_VOL      0x22
  77 #define FM_VOL          0x26
  78 #define CD_VOL          0x28
  79 #define LINE_VOL        0x2E
  80 #define IRQ_NR          0x80
  81 #define DMA_NR          0x81
  82 #define IRQ_STAT        0x82
  83 #define OPSW            0x3c
  84 
  85 /*
  86  * Additional registers on the SG NX Pro 
  87  */
  88 #define COVOX_VOL       0x42
  89 #define TREBLE_LVL      0x44
  90 #define BASS_LVL        0x46
  91 
  92 #define FREQ_HI         (1 << 3)/* Use High-frequency ANFI filters */
  93 #define FREQ_LOW        0       /* Use Low-frequency ANFI filters */
  94 #define FILT_ON         0       /* Yes, 0 to turn it on, 1 for off */
  95 #define FILT_OFF        (1 << 5)
  96 
  97 #define MONO_DAC        0x00
  98 #define STEREO_DAC      0x02
  99 
 100 /*
 101  * Mixer registers of SB16
 102  */
 103 #define SB16_IMASK_L    0x3d
 104 #define SB16_IMASK_R    0x3e
 105 
 106 #define LEFT_CHN        0
 107 #define RIGHT_CHN       1
 108 
 109 struct mixer_def {
 110         unsigned int regno: 8;
 111         unsigned int bitoffs:4;
 112         unsigned int nbits:4;
 113 };
 114 
 115 
 116 typedef struct mixer_def mixer_tab[32][2];
 117 typedef struct mixer_def mixer_ent;
 118 
 119 #define MIX_ENT(name, reg_l, bit_l, len_l, reg_r, bit_r, len_r) \
 120         {{reg_l, bit_l, len_l}, {reg_r, bit_r, len_r}}
 121 
 122 #ifdef __SB_MIXER_C__
 123 mixer_tab sbpro_mix = {
 124 MIX_ENT(SOUND_MIXER_VOLUME,     0x22, 7, 4, 0x22, 3, 4),
 125 MIX_ENT(SOUND_MIXER_BASS,       0x00, 0, 0, 0x00, 0, 0),
 126 MIX_ENT(SOUND_MIXER_TREBLE,     0x00, 0, 0, 0x00, 0, 0),
 127 MIX_ENT(SOUND_MIXER_SYNTH,      0x26, 7, 4, 0x26, 3, 4),
 128 MIX_ENT(SOUND_MIXER_PCM,        0x04, 7, 4, 0x04, 3, 4),
 129 MIX_ENT(SOUND_MIXER_SPEAKER,    0x00, 0, 0, 0x00, 0, 0),
 130 MIX_ENT(SOUND_MIXER_LINE,       0x2e, 7, 4, 0x2e, 3, 4),
 131 MIX_ENT(SOUND_MIXER_MIC,        0x0a, 2, 3, 0x00, 0, 0),
 132 MIX_ENT(SOUND_MIXER_CD,         0x28, 7, 4, 0x28, 3, 4),
 133 MIX_ENT(SOUND_MIXER_IMIX,       0x00, 0, 0, 0x00, 0, 0),
 134 MIX_ENT(SOUND_MIXER_ALTPCM,     0x00, 0, 0, 0x00, 0, 0),
 135 MIX_ENT(SOUND_MIXER_RECLEV,     0x00, 0, 0, 0x00, 0, 0)
 136 };
 137 mixer_tab es688_mix = {
 138 MIX_ENT(SOUND_MIXER_VOLUME,     0x32, 7, 4, 0x32, 3, 4),
 139 MIX_ENT(SOUND_MIXER_BASS,       0x00, 0, 0, 0x00, 0, 0),
 140 MIX_ENT(SOUND_MIXER_TREBLE,     0x00, 0, 0, 0x00, 0, 0),
 141 MIX_ENT(SOUND_MIXER_SYNTH,      0x36, 7, 4, 0x36, 3, 4),
 142 MIX_ENT(SOUND_MIXER_PCM,        0x14, 7, 4, 0x14, 3, 4),
 143 MIX_ENT(SOUND_MIXER_SPEAKER,    0x3c, 2, 3, 0x00, 0, 0),
 144 MIX_ENT(SOUND_MIXER_LINE,       0x3e, 7, 4, 0x3e, 3, 4),
 145 MIX_ENT(SOUND_MIXER_MIC,        0x1a, 7, 4, 0x1a, 3, 4),
 146 MIX_ENT(SOUND_MIXER_CD,         0x38, 7, 4, 0x38, 3, 4),
 147 MIX_ENT(SOUND_MIXER_IMIX,       0x00, 0, 0, 0x00, 0, 0),
 148 MIX_ENT(SOUND_MIXER_ALTPCM,     0x00, 0, 0, 0x00, 0, 0),
 149 MIX_ENT(SOUND_MIXER_RECLEV,     0x00, 0, 0, 0x00, 0, 0),
 150 MIX_ENT(SOUND_MIXER_IGAIN,      0x00, 0, 0, 0x00, 0, 0),
 151 MIX_ENT(SOUND_MIXER_OGAIN,      0x00, 0, 0, 0x00, 0, 0),
 152 MIX_ENT(SOUND_MIXER_LINE1,      0x00, 0, 0, 0x00, 0, 0),
 153 MIX_ENT(SOUND_MIXER_LINE2,      0x3a, 7, 4, 0x3a, 3, 4),
 154 MIX_ENT(SOUND_MIXER_LINE3,      0x00, 0, 0, 0x00, 0, 0)
 155 };
 156 
 157 #ifdef  __SGNXPRO__
 158 mixer_tab sgnxpro_mix = {
 159 MIX_ENT(SOUND_MIXER_VOLUME,     0x22, 7, 4, 0x22, 3, 4),
 160 MIX_ENT(SOUND_MIXER_BASS,       0x46, 2, 3, 0x00, 0, 0),
 161 MIX_ENT(SOUND_MIXER_TREBLE,     0x44, 2, 3, 0x00, 0, 0),
 162 MIX_ENT(SOUND_MIXER_SYNTH,      0x26, 7, 4, 0x26, 3, 4),
 163 MIX_ENT(SOUND_MIXER_PCM,        0x04, 7, 4, 0x04, 3, 4),
 164 MIX_ENT(SOUND_MIXER_SPEAKER,    0x42, 2, 3, 0x00, 0, 0),
 165 MIX_ENT(SOUND_MIXER_LINE,       0x2e, 7, 4, 0x2e, 3, 4),
 166 MIX_ENT(SOUND_MIXER_MIC,        0x0a, 2, 3, 0x00, 0, 0),
 167 MIX_ENT(SOUND_MIXER_CD,         0x28, 7, 4, 0x28, 3, 4),
 168 MIX_ENT(SOUND_MIXER_IMIX,       0x00, 0, 0, 0x00, 0, 0),
 169 MIX_ENT(SOUND_MIXER_ALTPCM,     0x00, 0, 0, 0x00, 0, 0),
 170 MIX_ENT(SOUND_MIXER_RECLEV,     0x00, 0, 0, 0x00, 0, 0),
 171 MIX_ENT(SOUND_MIXER_IGAIN,      0x00, 0, 0, 0x00, 0, 0),
 172 MIX_ENT(SOUND_MIXER_OGAIN,      0x00, 0, 0, 0x00, 0, 0)
 173 };
 174 #endif
 175 
 176 mixer_tab sb16_mix = {
 177 MIX_ENT(SOUND_MIXER_VOLUME,     0x30, 7, 5, 0x31, 7, 5),
 178 MIX_ENT(SOUND_MIXER_BASS,       0x46, 7, 4, 0x47, 7, 4),
 179 MIX_ENT(SOUND_MIXER_TREBLE,     0x44, 7, 4, 0x45, 7, 4),
 180 MIX_ENT(SOUND_MIXER_SYNTH,      0x34, 7, 5, 0x35, 7, 5),
 181 MIX_ENT(SOUND_MIXER_PCM,        0x32, 7, 5, 0x33, 7, 5),
 182 MIX_ENT(SOUND_MIXER_SPEAKER,    0x3b, 7, 2, 0x00, 0, 0),
 183 MIX_ENT(SOUND_MIXER_LINE,       0x38, 7, 5, 0x39, 7, 5),
 184 MIX_ENT(SOUND_MIXER_MIC,        0x3a, 7, 5, 0x00, 0, 0),
 185 MIX_ENT(SOUND_MIXER_CD,         0x36, 7, 5, 0x37, 7, 5),
 186 MIX_ENT(SOUND_MIXER_IMIX,       0x00, 0, 0, 0x00, 0, 0),
 187 MIX_ENT(SOUND_MIXER_ALTPCM,     0x00, 0, 0, 0x00, 0, 0),
 188 MIX_ENT(SOUND_MIXER_RECLEV,     0x3f, 7, 2, 0x40, 7, 2), /* Obsolete. Use IGAIN */
 189 MIX_ENT(SOUND_MIXER_IGAIN,      0x3f, 7, 2, 0x40, 7, 2),
 190 MIX_ENT(SOUND_MIXER_OGAIN,      0x41, 7, 2, 0x42, 7, 2)
 191 };
 192 
 193 #ifdef SM_GAMES       /* Master volume is lower and PCM & FM volumes
 194                              higher than with SB Pro. This improves the
 195                              sound quality */
 196 
 197 static unsigned short levels[SOUND_MIXER_NRDEVICES] =
 198 {
 199   0x2020,                       /* Master Volume */
 200   0x4b4b,                       /* Bass */
 201   0x4b4b,                       /* Treble */
 202   0x6464,                       /* FM */
 203   0x6464,                       /* PCM */
 204   0x4b4b,                       /* PC Speaker */
 205   0x4b4b,                       /* Ext Line */
 206   0x0000,                       /* Mic */
 207   0x4b4b,                       /* CD */
 208   0x4b4b,                       /* Recording monitor */
 209   0x4b4b,                       /* SB PCM */
 210   0x4b4b,                       /* Recording level */
 211   0x4b4b,                       /* Input gain */
 212   0x4b4b,                       /* Output gain */
 213   0x4040,                       /* Line1 */
 214   0x4040,                       /* Line2 */
 215   0x1515                        /* Line3 */
 216 
 217 #else  /* If the user selected just plain SB Pro */
 218 
 219 static unsigned short levels[SOUND_MIXER_NRDEVICES] =
 220 {
 221   0x5a5a,                       /* Master Volume */
 222   0x4b4b,                       /* Bass */
 223   0x4b4b,                       /* Treble */
 224   0x4b4b,                       /* FM */
 225   0x4b4b,                       /* PCM */
 226   0x4b4b,                       /* PC Speaker */
 227   0x4b4b,                       /* Ext Line */
 228   0x1010,                       /* Mic */
 229   0x4b4b,                       /* CD */
 230   0x4b4b,                       /* Recording monitor */
 231   0x4b4b,                       /* SB PCM */
 232   0x4b4b,                       /* Recording level */
 233   0x4b4b,                       /* Input gain */
 234   0x4b4b,                       /* Output gain */
 235   0x4040,                       /* Line1 */
 236   0x4040,                       /* Line2 */
 237   0x1515                        /* Line3 */
 238 };
 239 #endif /* SM_GAMES */
 240 
 241 static unsigned char sb16_recmasks_L[SOUND_MIXER_NRDEVICES] =
 242 {
 243         0x00,   /* SOUND_MIXER_VOLUME   */
 244         0x00,   /* SOUND_MIXER_BASS     */
 245         0x00,   /* SOUND_MIXER_TREBLE   */
 246         0x40,   /* SOUND_MIXER_SYNTH    */
 247         0x00,   /* SOUND_MIXER_PCM      */
 248         0x00,   /* SOUND_MIXER_SPEAKER  */
 249         0x10,   /* SOUND_MIXER_LINE     */
 250         0x01,   /* SOUND_MIXER_MIC      */
 251         0x04,   /* SOUND_MIXER_CD       */
 252         0x00,   /* SOUND_MIXER_IMIX     */
 253         0x00,   /* SOUND_MIXER_ALTPCM   */
 254         0x00,   /* SOUND_MIXER_RECLEV   */
 255         0x00,   /* SOUND_MIXER_IGAIN    */
 256         0x00    /* SOUND_MIXER_OGAIN    */
 257 };
 258 
 259 static unsigned char sb16_recmasks_R[SOUND_MIXER_NRDEVICES] =
 260 {
 261         0x00,   /* SOUND_MIXER_VOLUME   */
 262         0x00,   /* SOUND_MIXER_BASS     */
 263         0x00,   /* SOUND_MIXER_TREBLE   */
 264         0x20,   /* SOUND_MIXER_SYNTH    */
 265         0x00,   /* SOUND_MIXER_PCM      */
 266         0x00,   /* SOUND_MIXER_SPEAKER  */
 267         0x08,   /* SOUND_MIXER_LINE     */
 268         0x01,   /* SOUND_MIXER_MIC      */
 269         0x02,   /* SOUND_MIXER_CD       */
 270         0x00,   /* SOUND_MIXER_IMIX     */
 271         0x00,   /* SOUND_MIXER_ALTPCM   */
 272         0x00,   /* SOUND_MIXER_RECLEV   */
 273         0x00,   /* SOUND_MIXER_IGAIN    */
 274         0x00    /* SOUND_MIXER_OGAIN    */
 275 };
 276 
 277 /*
 278  *      Recording sources (SB Pro)
 279  */
 280 
 281 #define SRC_MIC         1       /* Select Microphone recording source */
 282 #define SRC_CD          3       /* Select CD recording source */
 283 #define SRC_LINE        7       /* Use Line-in for recording source */
 284 
 285 #endif

/* [previous][next][first][last][top][bottom][index][help] */