Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  **********************************************************************
  3  *     recmgr.c -- Recording manager for emu10k1 driver
  4  *     Copyright 1999, 2000 Creative Labs, Inc.
  5  *
  6  **********************************************************************
  7  *
  8  *     Date                 Author          Summary of changes
  9  *     ----                 ------          ------------------
 10  *     October 20, 1999     Bertrand Lee    base code release
 11  *
 12  **********************************************************************
 13  *
 14  *     This program is free software; you can redistribute it and/or
 15  *     modify it under the terms of the GNU General Public License as
 16  *     published by the Free Software Foundation; either version 2 of
 17  *     the License, or (at your option) any later version.
 18  *
 19  *     This program is distributed in the hope that it will be useful,
 20  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 21  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 22  *     GNU General Public License for more details.
 23  *
 24  *     You should have received a copy of the GNU General Public
 25  *     License along with this program; if not, write to the Free
 26  *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
 27  *     USA.
 28  *
 29  **********************************************************************
 30  */
 31 
 32 #include <asm/delay.h>
 33 #include "8010.h"
 34 #include "recmgr.h"
 35 
 36 void emu10k1_reset_record(struct emu10k1_card *card, struct wavein_buffer *buffer)
 37 {
 38         DPF(2, "emu10k1_reset_record()\n");
 39 
 40         sblive_writeptr(card, buffer->sizereg, 0, ADCBS_BUFSIZE_NONE);
 41 
 42         sblive_writeptr(card, buffer->sizereg, 0, buffer->sizeregval);  
 43 
 44         while (sblive_readptr(card, buffer->idxreg, 0))
 45                 udelay(5);
 46 }
 47 
 48 void emu10k1_start_record(struct emu10k1_card *card, struct wavein_buffer *buffer)
 49 {
 50         DPF(2, "emu10k1_start_record()\n");
 51 
 52         if (buffer->adcctl)
 53                 sblive_writeptr(card, ADCCR, 0, buffer->adcctl);
 54 }
 55 
 56 void emu10k1_stop_record(struct emu10k1_card *card, struct wavein_buffer *buffer)
 57 {
 58         DPF(2, "emu10k1_stop_record()\n");
 59 
 60         /* Disable record transfer */
 61         if (buffer->adcctl)
 62                 sblive_writeptr(card, ADCCR, 0, 0);
 63 }
 64 
 65 void emu10k1_set_record_src(struct emu10k1_card *card, struct wiinst *wiinst)
 66 {
 67         struct wavein_buffer *buffer = &wiinst->buffer;
 68 
 69         DPF(2, "emu10k1_set_record_src()\n");
 70 
 71         switch (wiinst->recsrc) {
 72 
 73         case WAVERECORD_AC97:
 74                 DPF(2, "recording source: AC97\n");
 75                 buffer->sizereg = ADCBS;
 76                 buffer->addrreg = ADCBA;
 77                 buffer->idxreg = card->is_audigy ? A_ADCIDX_IDX : ADCIDX_IDX;
 78 
 79                 switch (wiinst->format.samplingrate) {
 80                 case 0xBB80:
 81                         buffer->adcctl = ADCCR_SAMPLERATE_48;
 82                         break;
 83                 case 0xAC44:
 84                         buffer->adcctl = ADCCR_SAMPLERATE_44;
 85                         break;
 86                 case 0x7D00:
 87                         buffer->adcctl = ADCCR_SAMPLERATE_32;
 88                         break;
 89                 case 0x5DC0:
 90                         buffer->adcctl = ADCCR_SAMPLERATE_24;
 91                         break;
 92                 case 0x5622:
 93                         buffer->adcctl = ADCCR_SAMPLERATE_22;
 94                         break;
 95                 case 0x3E80:
 96                         buffer->adcctl = ADCCR_SAMPLERATE_16;
 97                         break;
 98                 // FIXME: audigy supports 12kHz recording
 99                 /*
100                 case ????:
101                         buffer->adcctl = A_ADCCR_SAMPLERATE_12;
102                         break;
103                 */
104                 case 0x2B11:
105                         buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_11 : ADCCR_SAMPLERATE_11;
106                         break;
107                 case 0x1F40:
108                         buffer->adcctl = card->is_audigy ? A_ADCCR_SAMPLERATE_8 : ADCCR_SAMPLERATE_8;
109                         break;
110                 default:
111                         BUG();
112                         break;
113                 }
114 
115                 buffer->adcctl |= card->is_audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE;
116 
117                 if (wiinst->format.channels == 2)
118                         buffer->adcctl |= card->is_audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE;
119 
120                 break;
121 
122         case WAVERECORD_MIC:
123                 DPF(2, "recording source: MIC\n");
124                 buffer->sizereg = MICBS;
125                 buffer->addrreg = MICBA;
126                 buffer->idxreg = MICIDX_IDX;
127                 buffer->adcctl = 0;
128                 break;
129 
130         case WAVERECORD_FX:
131                 DPF(2, "recording source: FX\n");
132                 buffer->sizereg = FXBS;
133                 buffer->addrreg = FXBA;
134                 buffer->idxreg = FXIDX_IDX;
135                 buffer->adcctl = 0;
136 
137                 sblive_writeptr(card, FXWC, 0, wiinst->fxwc);
138                 break;
139         default:
140                 BUG();
141                 break;
142         }
143 
144         DPD(2, "bus addx: %#lx\n", (unsigned long) buffer->dma_handle);
145 
146         sblive_writeptr(card, buffer->addrreg, 0, (u32)buffer->dma_handle);
147 }
148 
  This page was automatically generated by the LXR engine.