home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.2 / LINUX-1.2 / LINUX-1 / linux / drivers / sound / sb_mixer.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-20  |  7.0 KB  |  222 lines

  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 SB16_MIXER_DEVICES        (SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_SPEAKER | SOUND_MASK_LINE | SOUND_MASK_MIC | \
  54.                      SOUND_MASK_CD | SOUND_MASK_RECLEV | \
  55.                      SOUND_MASK_VOLUME | SOUND_MASK_BASS | SOUND_MASK_TREBLE)
  56.  
  57. /*
  58.  * Mixer registers
  59.  * 
  60.  * NOTE!    RECORD_SRC == IN_FILTER
  61.  */
  62.  
  63. /* 
  64.  * Mixer registers of SB Pro
  65.  */
  66. #define VOC_VOL        0x04
  67. #define MIC_VOL        0x0A
  68. #define MIC_MIX        0x0A
  69. #define RECORD_SRC    0x0C
  70. #define IN_FILTER    0x0C
  71. #define OUT_FILTER    0x0E
  72. #define MASTER_VOL    0x22
  73. #define FM_VOL        0x26
  74. #define CD_VOL        0x28
  75. #define LINE_VOL    0x2E
  76. #define IRQ_NR        0x80
  77. #define DMA_NR        0x81
  78. #define IRQ_STAT    0x82
  79. #define OPSW        0x3c
  80.  
  81. /*
  82.  * Additional registers on the SG NX Pro 
  83.  */
  84. #define COVOX_VOL    0x42
  85. #define TREBLE_LVL    0x44
  86. #define BASS_LVL    0x46
  87.  
  88. #define FREQ_HI         (1 << 3)/* Use High-frequency ANFI filters */
  89. #define FREQ_LOW        0    /* Use Low-frequency ANFI filters */
  90. #define FILT_ON         0    /* Yes, 0 to turn it on, 1 for off */
  91. #define FILT_OFF        (1 << 5)
  92.  
  93. #define MONO_DAC    0x00
  94. #define STEREO_DAC    0x02
  95.  
  96. /*
  97.  * Mixer registers of SB16
  98.  */
  99. #define SB16_IMASK_L    0x3d
  100. #define SB16_IMASK_R    0x3e
  101.  
  102. #define LEFT_CHN    0
  103. #define RIGHT_CHN    1
  104.  
  105. struct mixer_def {
  106.     unsigned int regno: 8;
  107.     unsigned int bitoffs:4;
  108.     unsigned int nbits:4;
  109. };
  110.  
  111.  
  112. typedef struct mixer_def mixer_tab[32][2];
  113. typedef struct mixer_def mixer_ent;
  114.  
  115. #define MIX_ENT(name, reg_l, bit_l, len_l, reg_r, bit_r, len_r)    \
  116.     {{reg_l, bit_l, len_l}, {reg_r, bit_r, len_r}}
  117.  
  118. #ifdef __SB_MIXER_C__
  119. mixer_tab sbpro_mix = {
  120. MIX_ENT(SOUND_MIXER_VOLUME,    0x22, 7, 4, 0x22, 3, 4),
  121. MIX_ENT(SOUND_MIXER_BASS,    0x00, 0, 0, 0x00, 0, 0),
  122. MIX_ENT(SOUND_MIXER_TREBLE,    0x00, 0, 0, 0x00, 0, 0),
  123. MIX_ENT(SOUND_MIXER_SYNTH,    0x26, 7, 4, 0x26, 3, 4),
  124. MIX_ENT(SOUND_MIXER_PCM,    0x04, 7, 4, 0x04, 3, 4),
  125. MIX_ENT(SOUND_MIXER_SPEAKER,    0x00, 0, 0, 0x00, 0, 0),
  126. MIX_ENT(SOUND_MIXER_LINE,    0x2e, 7, 4, 0x2e, 3, 4),
  127. MIX_ENT(SOUND_MIXER_MIC,    0x0a, 2, 3, 0x00, 0, 0),
  128. MIX_ENT(SOUND_MIXER_CD,        0x28, 7, 4, 0x28, 3, 4),
  129. MIX_ENT(SOUND_MIXER_IMIX,    0x00, 0, 0, 0x00, 0, 0),
  130. MIX_ENT(SOUND_MIXER_ALTPCM,    0x00, 0, 0, 0x00, 0, 0),
  131. MIX_ENT(SOUND_MIXER_RECLEV,    0x00, 0, 0, 0x00, 0, 0)
  132. };
  133.  
  134. #ifdef    __SGNXPRO__
  135. mixer_tab sgnxpro_mix = {
  136. MIX_ENT(SOUND_MIXER_VOLUME,    0x22, 7, 4, 0x22, 3, 4),
  137. MIX_ENT(SOUND_MIXER_BASS,    0x46, 2, 3, 0x00, 0, 0),
  138. MIX_ENT(SOUND_MIXER_TREBLE,    0x44, 2, 3, 0x00, 0, 0),
  139. MIX_ENT(SOUND_MIXER_SYNTH,    0x26, 7, 4, 0x26, 3, 4),
  140. MIX_ENT(SOUND_MIXER_PCM,    0x04, 7, 4, 0x04, 3, 4),
  141. MIX_ENT(SOUND_MIXER_SPEAKER,    0x42, 2, 3, 0x00, 0, 0),
  142. MIX_ENT(SOUND_MIXER_LINE,    0x2e, 7, 4, 0x2e, 3, 4),
  143. MIX_ENT(SOUND_MIXER_MIC,    0x0a, 2, 3, 0x00, 0, 0),
  144. MIX_ENT(SOUND_MIXER_CD,        0x28, 7, 4, 0x28, 3, 4),
  145. MIX_ENT(SOUND_MIXER_IMIX,    0x00, 0, 0, 0x00, 0, 0),
  146. MIX_ENT(SOUND_MIXER_ALTPCM,    0x00, 0, 0, 0x00, 0, 0),
  147. MIX_ENT(SOUND_MIXER_RECLEV,    0x00, 0, 0, 0x00, 0, 0)
  148. };
  149. #endif
  150.  
  151. mixer_tab sb16_mix = {
  152. MIX_ENT(SOUND_MIXER_VOLUME,    0x30, 7, 5, 0x31, 7, 5),
  153. MIX_ENT(SOUND_MIXER_BASS,    0x46, 7, 4, 0x47, 7, 4),
  154. MIX_ENT(SOUND_MIXER_TREBLE,    0x44, 7, 4, 0x45, 7, 4),
  155. MIX_ENT(SOUND_MIXER_SYNTH,    0x34, 7, 5, 0x35, 7, 5),
  156. MIX_ENT(SOUND_MIXER_PCM,    0x32, 7, 5, 0x33, 7, 5),
  157. MIX_ENT(SOUND_MIXER_SPEAKER,    0x3b, 7, 2, 0x00, 0, 0),
  158. MIX_ENT(SOUND_MIXER_LINE,    0x38, 7, 5, 0x39, 7, 5),
  159. MIX_ENT(SOUND_MIXER_MIC,    0x3a, 7, 5, 0x00, 0, 0),
  160. MIX_ENT(SOUND_MIXER_CD,        0x36, 7, 5, 0x37, 7, 5),
  161. MIX_ENT(SOUND_MIXER_IMIX,    0x00, 0, 0, 0x00, 0, 0),
  162. MIX_ENT(SOUND_MIXER_ALTPCM,    0x00, 0, 0, 0x00, 0, 0),
  163. MIX_ENT(SOUND_MIXER_RECLEV,    0x3f, 7, 2, 0x40, 7, 2)
  164. };
  165.  
  166. static unsigned short levels[SOUND_MIXER_NRDEVICES] =
  167. {
  168.   0x5a5a,            /* Master Volume */
  169.   0x3232,            /* Bass */
  170.   0x3232,            /* Treble */
  171.   0x4b4b,            /* FM */
  172.   0x4b4b,            /* PCM */
  173.   0x4b4b,            /* PC Speaker */
  174.   0x4b4b,            /* Ext Line */
  175.   0x0000,            /* Mic */
  176.   0x4b4b,            /* CD */
  177.   0x4b4b,            /* Recording monitor */
  178.   0x4b4b,            /* SB PCM */
  179.   0x4b4b};            /* Recording level */
  180.  
  181. static unsigned char sb16_recmasks_L[SOUND_MIXER_NRDEVICES] =
  182. {
  183.     0x00,    /* SOUND_MIXER_VOLUME    */
  184.     0x00,    /* SOUND_MIXER_BASS    */
  185.     0x00,    /* SOUND_MIXER_TREBLE    */
  186.     0x40,    /* SOUND_MIXER_SYNTH    */
  187.     0x00,    /* SOUND_MIXER_PCM    */
  188.     0x00,    /* SOUND_MIXER_SPEAKER    */
  189.     0x10,    /* SOUND_MIXER_LINE    */
  190.     0x01,    /* SOUND_MIXER_MIC    */
  191.     0x04,    /* SOUND_MIXER_CD    */
  192.     0x00,    /* SOUND_MIXER_IMIX    */
  193.     0x00,    /* SOUND_MIXER_ALTPCM    */
  194.     0x00    /* SOUND_MIXER_RECLEV    */
  195. };
  196.  
  197. static unsigned char sb16_recmasks_R[SOUND_MIXER_NRDEVICES] =
  198. {
  199.     0x00,    /* SOUND_MIXER_VOLUME    */
  200.     0x00,    /* SOUND_MIXER_BASS    */
  201.     0x00,    /* SOUND_MIXER_TREBLE    */
  202.     0x20,    /* SOUND_MIXER_SYNTH    */
  203.     0x00,    /* SOUND_MIXER_PCM    */
  204.     0x00,    /* SOUND_MIXER_SPEAKER    */
  205.     0x08,    /* SOUND_MIXER_LINE    */
  206.     0x01,    /* SOUND_MIXER_MIC    */
  207.     0x02,    /* SOUND_MIXER_CD    */
  208.     0x00,    /* SOUND_MIXER_IMIX    */
  209.     0x00,    /* SOUND_MIXER_ALTPCM    */
  210.     0x00    /* SOUND_MIXER_RECLEV    */
  211. };
  212.  
  213. /*
  214.  *    Recording sources (SB Pro)
  215.  */
  216.  
  217. #define SRC_MIC         1    /* Select Microphone recording source */
  218. #define SRC_CD          3    /* Select CD recording source */
  219. #define SRC_LINE        7    /* Use Line-in for recording source */
  220.  
  221. #endif
  222.