1 /* 2 * ALSA driver for RME Hammerfall DSP audio interface(s) 3 * 4 * Copyright (c) 2002 Paul Davis 5 * Marcus Andersson 6 * Thomas Charbonnel 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 */ 23 24 #include <sound/driver.h> 25 #include <linux/init.h> 26 #include <linux/delay.h> 27 #include <linux/interrupt.h> 28 #include <linux/slab.h> 29 #include <linux/pci.h> 30 #include <linux/firmware.h> 31 #include <linux/moduleparam.h> 32 33 #include <sound/core.h> 34 #include <sound/control.h> 35 #include <sound/pcm.h> 36 #include <sound/info.h> 37 #include <sound/asoundef.h> 38 #include <sound/rawmidi.h> 39 #include <sound/hwdep.h> 40 #include <sound/initval.h> 41 #include <sound/hdsp.h> 42 43 #include <asm/byteorder.h> 44 #include <asm/current.h> 45 #include <asm/io.h> 46 47 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ 48 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ 49 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ 50 51 module_param_array(index, int, NULL, 0444); 52 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface."); 53 module_param_array(id, charp, NULL, 0444); 54 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface."); 55 module_param_array(enable, bool, NULL, 0444); 56 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards."); 57 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>"); 58 MODULE_DESCRIPTION("RME Hammerfall DSP"); 59 MODULE_LICENSE("GPL"); 60 MODULE_SUPPORTED_DEVICE("{{RME Hammerfall-DSP}," 61 "{RME HDSP-9652}," 62 "{RME HDSP-9632}}"); 63 64 #define HDSP_MAX_CHANNELS 26 65 #define HDSP_MAX_DS_CHANNELS 14 66 #define HDSP_MAX_QS_CHANNELS 8 67 #define DIGIFACE_SS_CHANNELS 26 68 #define DIGIFACE_DS_CHANNELS 14 69 #define MULTIFACE_SS_CHANNELS 18 70 #define MULTIFACE_DS_CHANNELS 14 71 #define H9652_SS_CHANNELS 26 72 #define H9652_DS_CHANNELS 14 73 /* This does not include possible Analog Extension Boards 74 AEBs are detected at card initialization 75 */ 76 #define H9632_SS_CHANNELS 12 77 #define H9632_DS_CHANNELS 8 78 #define H9632_QS_CHANNELS 4 79 80 /* Write registers. These are defined as byte-offsets from the iobase value. 81 */ 82 #define HDSP_resetPointer 0 83 #define HDSP_outputBufferAddress 32 84 #define HDSP_inputBufferAddress 36 85 #define HDSP_controlRegister 64 86 #define HDSP_interruptConfirmation 96 87 #define HDSP_outputEnable 128 88 #define HDSP_control2Reg 256 89 #define HDSP_midiDataOut0 352 90 #define HDSP_midiDataOut1 356 91 #define HDSP_fifoData 368 92 #define HDSP_inputEnable 384 93 94 /* Read registers. These are defined as byte-offsets from the iobase value 95 */ 96 97 #define HDSP_statusRegister 0 98 #define HDSP_timecode 128 99 #define HDSP_status2Register 192 100 #define HDSP_midiDataOut0 352 101 #define HDSP_midiDataOut1 356 102 #define HDSP_midiDataIn0 360 103 #define HDSP_midiDataIn1 364 104 #define HDSP_midiStatusOut0 384 105 #define HDSP_midiStatusOut1 388 106 #define HDSP_midiStatusIn0 392 107 #define HDSP_midiStatusIn1 396 108 #define HDSP_fifoStatus 400 109 110 /* the meters are regular i/o-mapped registers, but offset 111 considerably from the rest. the peak registers are reset 112 when read; the least-significant 4 bits are full-scale counters; 113 the actual peak value is in the most-significant 24 bits. 114 */ 115 116 #define HDSP_playbackPeakLevel 4096 /* 26 * 32 bit values */ 117 #define HDSP_inputPeakLevel 4224 /* 26 * 32 bit values */ 118 #define HDSP_outputPeakLevel 4352 /* (26+2) * 32 bit values */ 119 #define HDSP_playbackRmsLevel 4612 /* 26 * 64 bit values */ 120 #define HDSP_inputRmsLevel 4868 /* 26 * 64 bit values */ 121 122 123 /* This is for H9652 cards 124 Peak values are read downward from the base 125 Rms values are read upward 126 There are rms values for the outputs too 127 26*3 values are read in ss mode 128 14*3 in ds mode, with no gap between values 129 */ 130 #define HDSP_9652_peakBase 7164 131 #define HDSP_9652_rmsBase 4096 132 133 /* c.f. the hdsp_9632_meters_t struct */ 134 #define HDSP_9632_metersBase 4096 135 136 #define HDSP_IO_EXTENT 7168 137 138 /* control2 register bits */ 139 140 #define HDSP_TMS 0x01 141 #define HDSP_TCK 0x02 142 #define HDSP_TDI 0x04 143 #define HDSP_JTAG 0x08 144 #define HDSP_PWDN 0x10 145 #define HDSP_PROGRAM 0x020 146 #define HDSP_CONFIG_MODE_0 0x040 147 #define HDSP_CONFIG_MODE_1 0x080 148 #define HDSP_VERSION_BIT 0x100 149 #define HDSP_BIGENDIAN_MODE 0x200 150 #define HDSP_RD_MULTIPLE 0x400 151 #define HDSP_9652_ENABLE_MIXER 0x800 152 #define HDSP_TDO 0x10000000 153 154 #define HDSP_S_PROGRAM (HDSP_PROGRAM|HDSP_CONFIG_MODE_0) 155 #define HDSP_S_LOAD (HDSP_PROGRAM|HDSP_CONFIG_MODE_1) 156 157 /* Control Register bits */ 158 159 #define HDSP_Start (1<<0) /* start engine */ 160 #define HDSP_Latency0 (1<<1) /* buffer size = 2^n where n is defined by Latency{2,1,0} */ 161 #define HDSP_Latency1 (1<<2) /* [ see above ] */ 162 #define HDSP_Latency2 (1<<3) /* [ see above ] */ 163 #define HDSP_ClockModeMaster (1<<4) /* 1=Master, 0=Slave/Autosync */ 164 #define HDSP_AudioInterruptEnable (1<<5) /* what do you think ? */ 165 #define HDSP_Frequency0 (1<<6) /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */ 166 #define HDSP_Frequency1 (1<<7) /* 0=32kHz/64kHz/128kHz */ 167 #define HDSP_DoubleSpeed (1<<8) /* 0=normal speed, 1=double speed */ 168 #define HDSP_SPDIFProfessional (1<<9) /* 0=consumer, 1=professional */ 169 #define HDSP_SPDIFEmphasis (1<<10) /* 0=none, 1=on */ 170 #define HDSP_SPDIFNonAudio (1<<11) /* 0=off, 1=on */ 171 #define HDSP_SPDIFOpticalOut (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */ 172 #define HDSP_SyncRef2 (1<<13) 173 #define HDSP_SPDIFInputSelect0 (1<<14) 174 #define HDSP_SPDIFInputSelect1 (1<<15) 175 #define HDSP_SyncRef0 (1<<16) 176 #define HDSP_SyncRef1 (1<<17) 177 #define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */ 178 #define HDSP_XLRBreakoutCable (1<<20) /* For H9632 cards */ 179 #define HDSP_Midi0InterruptEnable (1<<22) 180 #define HDSP_Midi1InterruptEnable (1<<23) 181 #define HDSP_LineOut (1<<24) 182 #define HDSP_ADGain0 (1<<25) /* From here : H9632 specific */ 183 #define HDSP_ADGain1 (1<<26) 184 #define HDSP_DAGain0 (1<<27) 185 #define HDSP_DAGain1 (1<<28) 186 #define HDSP_PhoneGain0 (1<<29) 187 #define HDSP_PhoneGain1 (1<<30) 188 #define HDSP_QuadSpeed (1<<31) 189 190 #define HDSP_ADGainMask (HDSP_ADGain0|HDSP_ADGain1) 191 #define HDSP_ADGainMinus10dBV HDSP_ADGainMask 192 #define HDSP_ADGainPlus4dBu (HDSP_ADGain0) 193 #define HDSP_ADGainLowGain 0 194 195 #define HDSP_DAGainMask (HDSP_DAGain0|HDSP_DAGain1) 196 #define HDSP_DAGainHighGain HDSP_DAGainMask 197 #define HDSP_DAGainPlus4dBu (HDSP_DAGain0) 198 #define HDSP_DAGainMinus10dBV 0 199 200 #define HDSP_PhoneGainMask (HDSP_PhoneGain0|HDSP_PhoneGain1) 201 #define HDSP_PhoneGain0dB HDSP_PhoneGainMask 202 #define HDSP_PhoneGainMinus6dB (HDSP_PhoneGain0) 203 #define HDSP_PhoneGainMinus12dB 0 204 205 #define HDSP_LatencyMask (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2) 206 #define HDSP_FrequencyMask (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed) 207 208 #define HDSP_SPDIFInputMask (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1) 209 #define HDSP_SPDIFInputADAT1 0 210 #define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0) 211 #define HDSP_SPDIFInputCdrom (HDSP_SPDIFInputSelect1) 212 #define HDSP_SPDIFInputAES (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1) 213 214 #define HDSP_SyncRefMask (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2) 215 #define HDSP_SyncRef_ADAT1 0 216 #define HDSP_SyncRef_ADAT2 (HDSP_SyncRef0) 217 #define HDSP_SyncRef_ADAT3 (HDSP_SyncRef1) 218 #define HDSP_SyncRef_SPDIF (HDSP_SyncRef0|HDSP_SyncRef1) 219 #define HDSP_SyncRef_WORD (HDSP_SyncRef2) 220 #define HDSP_SyncRef_ADAT_SYNC (HDSP_SyncRef0|HDSP_SyncRef2) 221 222 /* Sample Clock Sources */ 223 224 #define HDSP_CLOCK_SOURCE_AUTOSYNC 0 225 #define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ 1 226 #define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ 2 227 #define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ 3 228 #define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ 4 229 #define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ 5 230 #define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ 6 231 #define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ 7 232 #define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ 8 233 #define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ 9 234 235 /* Preferred sync reference choices - used by "pref_sync_ref" control switch */ 236 237 #define HDSP_SYNC_FROM_WORD 0 238 #define HDSP_SYNC_FROM_SPDIF 1 239 #define HDSP_SYNC_FROM_ADAT1 2 240 #define HDSP_SYNC_FROM_ADAT_SYNC 3 241 #define HDSP_SYNC_FROM_ADAT2 4 242 #define HDSP_SYNC_FROM_ADAT3 5 243 244 /* SyncCheck status */ 245 246 #define HDSP_SYNC_CHECK_NO_LOCK 0 247 #define HDSP_SYNC_CHECK_LOCK 1 248 #define HDSP_SYNC_CHECK_SYNC 2 249 250 /* AutoSync references - used by "autosync_ref" control switch */ 251 252 #define HDSP_AUTOSYNC_FROM_WORD 0 253 #define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1 254 #define HDSP_AUTOSYNC_FROM_SPDIF 2 255 #define HDSP_AUTOSYNC_FROM_NONE 3 256 #define HDSP_AUTOSYNC_FROM_ADAT1 4 257 #define HDSP_AUTOSYNC_FROM_ADAT2 5 258 #define HDSP_AUTOSYNC_FROM_ADAT3 6 259 260 /* Possible sources of S/PDIF input */ 261 262 #define HDSP_SPDIFIN_OPTICAL 0 /* optical (ADAT1) */ 263 #define HDSP_SPDIFIN_COAXIAL 1 /* coaxial (RCA) */ 264 #define HDSP_SPDIFIN_INTERNAL 2 /* internal (CDROM) */ 265 #define HDSP_SPDIFIN_AES 3 /* xlr for H9632 (AES)*/ 266 267 #define HDSP_Frequency32KHz HDSP_Frequency0 268 #define HDSP_Frequency44_1KHz HDSP_Frequency1 269 #define HDSP_Frequency48KHz (HDSP_Frequency1|HDSP_Frequency0) 270 #define HDSP_Frequency64KHz (HDSP_DoubleSpeed|HDSP_Frequency0) 271 #define HDSP_Frequency88_2KHz (HDSP_DoubleSpeed|HDSP_Frequency1) 272 #define HDSP_Frequency96KHz (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0) 273 /* For H9632 cards */ 274 #define HDSP_Frequency128KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0) 275 #define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1) 276 #define HDSP_Frequency192KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0) 277 278 #define hdsp_encode_latency(x) (((x)<<1) & HDSP_LatencyMask) 279 #define hdsp_decode_latency(x) (((x) & HDSP_LatencyMask)>>1) 280 281 #define hdsp_encode_spdif_in(x) (((x)&0x3)<<14) 282 #define hdsp_decode_spdif_in(x) (((x)>>14)&0x3) 283 284 /* Status Register bits */ 285 286 #define HDSP_audioIRQPending (1<<0) 287 #define HDSP_Lock2 (1<<1) /* this is for Digiface and H9652 */ 288 #define HDSP_spdifFrequency3 HDSP_Lock2 /* this is for H9632 only */ 289 #define HDSP_Lock1 (1<<2) 290 #define HDSP_Lock0 (1<<3) 291 #define HDSP_SPDIFSync (1<<4) 292 #define HDSP_TimecodeLock (1<<5) 293 #define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */ 294 #define HDSP_Sync2 (1<<16) 295 #define HDSP_Sync1 (1<<17) 296 #define HDSP_Sync0 (1<<18) 297 #define HDSP_DoubleSpeedStatus (1<<19) 298 #define HDSP_ConfigError (1<<20) 299 #define HDSP_DllError (1<<21) 300 #define HDSP_spdifFrequency0 (1<<22) 301 #define HDSP_spdifFrequency1 (1<<23) 302 #define HDSP_spdifFrequency2 (1<<24) 303 #define HDSP_SPDIFErrorFlag (1<<25) 304 #define HDSP_BufferID (1<<26) 305 #define HDSP_TimecodeSync (1<<27) 306 #define HDSP_AEBO (1<<28) /* H9632 specific Analog Extension Boards */ 307 #define HDSP_AEBI (1<<29) /* 0 = present, 1 = absent */ 308 #define HDSP_midi0IRQPending (1<<30) 309 #define HDSP_midi1IRQPending (1<<31) 310 311 #define HDSP_spdifFrequencyMask (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2) 312 313 #define HDSP_spdifFrequency32KHz (HDSP_spdifFrequency0) 314 #define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1) 315 #define HDSP_spdifFrequency48KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency1) 316 317 #define HDSP_spdifFrequency64KHz (HDSP_spdifFrequency2) 318 #define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2) 319 #define HDSP_spdifFrequency96KHz (HDSP_spdifFrequency2|HDSP_spdifFrequency1) 320 321 /* This is for H9632 cards */ 322 #define HDSP_spdifFrequency128KHz HDSP_spdifFrequencyMask 323 #define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3 324 #define HDSP_spdifFrequency192KHz (HDSP_spdifFrequency3|HDSP_spdifFrequency0) 325 326 /* Status2 Register bits */ 327 328 #define HDSP_version0 (1<<0) 329 #define HDSP_version1 (1<<1) 330 #define HDSP_version2 (1<<2) 331 #define HDSP_wc_lock (1<<3) 332 #define HDSP_wc_sync (1<<4) 333 #define HDSP_inp_freq0 (1<<5) 334 #define HDSP_inp_freq1 (1<<6) 335 #define HDSP_inp_freq2 (1<<7) 336 #define HDSP_SelSyncRef0 (1<<8) 337 #define HDSP_SelSyncRef1 (1<<9) 338 #define HDSP_SelSyncRef2 (1<<10) 339 340 #define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync) 341 342 #define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2) 343 #define HDSP_systemFrequency32 (HDSP_inp_freq0) 344 #define HDSP_systemFrequency44_1 (HDSP_inp_freq1) 345 #define HDSP_systemFrequency48 (HDSP_inp_freq0|HDSP_inp_freq1) 346 #define HDSP_systemFrequency64 (HDSP_inp_freq2) 347 #define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2) 348 #define HDSP_systemFrequency96 (HDSP_inp_freq1|HDSP_inp_freq2) 349 /* FIXME : more values for 9632 cards ? */ 350 351 #define HDSP_SelSyncRefMask (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2) 352 #define HDSP_SelSyncRef_ADAT1 0 353 #define HDSP_SelSyncRef_ADAT2 (HDSP_SelSyncRef0) 354 #define HDSP_SelSyncRef_ADAT3 (HDSP_SelSyncRef1) 355 #define HDSP_SelSyncRef_SPDIF (HDSP_SelSyncRef0|HDSP_SelSyncRef1) 356 #define HDSP_SelSyncRef_WORD (HDSP_SelSyncRef2) 357 #define HDSP_SelSyncRef_ADAT_SYNC (HDSP_SelSyncRef0|HDSP_SelSyncRef2) 358 359 /* Card state flags */ 360 361 #define HDSP_InitializationComplete (1<<0) 362 #define HDSP_FirmwareLoaded (1<<1) 363 #define HDSP_FirmwareCached (1<<2) 364 365 /* FIFO wait times, defined in terms of 1/10ths of msecs */ 366 367 #define HDSP_LONG_WAIT 5000 368 #define HDSP_SHORT_WAIT 30 369 370 #define UNITY_GAIN 32768 371 #define MINUS_INFINITY_GAIN 0 372 373 /* the size of a substream (1 mono data stream) */ 374 375 #define HDSP_CHANNEL_BUFFER_SAMPLES (16*1024) 376 #define HDSP_CHANNEL_BUFFER_BYTES (4*HDSP_CHANNEL_BUFFER_SAMPLES) 377 378 /* the size of the area we need to allocate for DMA transfers. the 379 size is the same regardless of the number of channels - the 380 Multiface still uses the same memory area. 381 382 Note that we allocate 1 more channel than is apparently needed 383 because the h/w seems to write 1 byte beyond the end of the last 384 page. Sigh. 385 */ 386 387 #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES) 388 #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024) 389 390 /* use hotplug firmeare loader? */ 391 #if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE) 392 #ifndef HDSP_USE_HWDEP_LOADER 393 #define HDSP_FW_LOADER 394 #endif 395 #endif 396 397 struct hdsp_9632_meters { 398 u32 input_peak[16]; 399 u32 playback_peak[16]; 400 u32 output_peak[16]; 401 u32 xxx_peak[16]; 402 u32 padding[64]; 403 u32 input_rms_low[16]; 404 u32 playback_rms_low[16]; 405 u32 output_rms_low[16]; 406 u32 xxx_rms_low[16]; 407 u32 input_rms_high[16]; 408 u32 playback_rms_high[16]; 409 u32 output_rms_high[16]; 410 u32 xxx_rms_high[16]; 411 }; 412 413 struct hdsp_midi { 414 struct hdsp *hdsp; 415 int id; 416 struct snd_rawmidi *rmidi; 417 struct snd_rawmidi_substream *input; 418 struct snd_rawmidi_substream *output; 419 char istimer; /* timer in use */ 420 struct timer_list timer; 421 spinlock_t lock; 422 int pending; 423 }; 424 425 struct hdsp { 426 spinlock_t lock; 427 struct snd_pcm_substream *capture_substream; 428 struct snd_pcm_substream *playback_substream; 429 struct hdsp_midi midi[2]; 430 struct tasklet_struct midi_tasklet; 431 int use_midi_tasklet; 432 int precise_ptr; 433 u32 control_register; /* cached value */ 434 u32 control2_register; /* cached value */ 435 u32 creg_spdif; 436 u32 creg_spdif_stream; 437 int clock_source_locked; 438 char *card_name; /* digiface/multiface */ 439 enum HDSP_IO_Type io_type; /* ditto, but for code use */ 440 unsigned short firmware_rev; 441 unsigned short state; /* stores state bits */ 442 u32 firmware_cache[24413]; /* this helps recover from accidental iobox power failure */ 443 size_t period_bytes; /* guess what this is */ 444 unsigned char max_channels; 445 unsigned char qs_in_channels; /* quad speed mode for H9632 */ 446 unsigned char ds_in_channels; 447 unsigned char ss_in_channels; /* different for multiface/digiface */ 448 unsigned char qs_out_channels; 449 unsigned char ds_out_channels; 450 unsigned char ss_out_channels; 451 452 struct snd_dma_buffer capture_dma_buf; 453 struct snd_dma_buffer playback_dma_buf; 454 unsigned char *capture_buffer; /* suitably aligned address */ 455 unsigned char *playback_buffer; /* suitably aligned address */ 456 457 pid_t capture_pid; 458 pid_t playback_pid; 459 int running; 460 int system_sample_rate; 461 char *channel_map; 462 int dev; 463 int irq; 464 unsigned long port; 465 void __iomem *iobase; 466 struct snd_card *card; 467 struct snd_pcm *pcm; 468 struct snd_hwdep *hwdep; 469 struct pci_dev *pci; 470 struct snd_kcontrol *spdif_ctl; 471 unsigned short mixer_matrix[HDSP_MATRIX_MIXER_SIZE]; 472 }; 473 474 /* These tables map the ALSA channels 1..N to the channels that we 475 need to use in order to find the relevant channel buffer. RME 476 refer to this kind of mapping as between "the ADAT channel and 477 the DMA channel." We index it using the logical audio channel, 478 and the value is the DMA channel (i.e. channel buffer number) 479 where the data for that channel can be read/written from/to. 480 */ 481 482 static char channel_map_df_ss[HDSP_MAX_CHANNELS] = { 483 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 484 18, 19, 20, 21, 22, 23, 24, 25 485 }; 486 487 static char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */ 488 /* Analog */ 489 0, 1, 2, 3, 4, 5, 6, 7, 490 /* ADAT 2 */ 491 16, 17, 18, 19, 20, 21, 22, 23, 492 /* SPDIF */ 493 24, 25, 494 -1, -1, -1, -1, -1, -1, -1, -1 495 }; 496 497 static char channel_map_ds[HDSP_MAX_CHANNELS] = { 498 /* ADAT channels are remapped */ 499 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 500 /* channels 12 and 13 are S/PDIF */ 501 24, 25, 502 /* others don't exist */ 503 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 504 }; 505 506 static char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = { 507 /* ADAT channels */ 508 0, 1, 2, 3, 4, 5, 6, 7, 509 /* SPDIF */ 510 8, 9, 511 /* Analog */ 512 10, 11, 513 /* AO4S-192 and AI4S-192 extension boards */ 514 12, 13, 14, 15, 515 /* others don't exist */ 516 -1, -1, -1, -1, -1, -1, -1, -1, 517 -1, -1 518 }; 519 520 static char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = { 521 /* ADAT */ 522 1, 3, 5, 7, 523 /* SPDIF */ 524 8, 9, 525 /* Analog */ 526 10, 11, 527 /* AO4S-192 and AI4S-192 extension boards */ 528 12, 13, 14, 15, 529 /* others don't exist */ 530 -1, -1, -1, -1, -1, -1, -1, -1, 531 -1, -1, -1, -1, -1, -1 532 }; 533 534 static char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = { 535 /* ADAT is disabled in this mode */ 536 /* SPDIF */ 537 8, 9, 538 /* Analog */ 539 10, 11, 540 /* AO4S-192 and AI4S-192 extension boards */ 541 12, 13, 14, 15, 542 /* others don't exist */ 543 -1, -1, -1, -1, -1, -1, -1, -1, 544 -1, -1, -1, -1, -1, -1, -1, -1, 545 -1, -1 546 }; 547 548 static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size) 549 { 550 dmab->dev.type = SNDRV_DMA_TYPE_DEV; 551 dmab->dev.dev = snd_dma_pci_data(pci); 552 if (snd_dma_get_reserved_buf(dmab, snd_dma_pci_buf_id(pci))) { 553 if (dmab->bytes >= size) 554 return 0; 555 } 556 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), 557 size, dmab) < 0) 558 return -ENOMEM; 559 return 0; 560 } 561 562 static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci) 563 { 564 if (dmab->area) { 565 dmab->dev.dev = NULL; /* make it anonymous */ 566 snd_dma_reserve_buf(dmab, snd_dma_pci_buf_id(pci)); 567 } 568 } 569 570 571 static struct pci_device_id snd_hdsp_ids[] = { 572 { 573 .vendor = PCI_VENDOR_ID_XILINX, 574 .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP, 575 .subvendor = PCI_ANY_ID, 576 .subdevice = PCI_ANY_ID, 577 }, /* RME Hammerfall-DSP */ 578 { 0, }, 579 }; 580 581 MODULE_DEVICE_TABLE(pci, snd_hdsp_ids); 582 583 /* prototypes */ 584 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp); 585 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp); 586 static int snd_hdsp_enable_io (struct hdsp *hdsp); 587 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp); 588 static void snd_hdsp_initialize_channels (struct hdsp *hdsp); 589 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout); 590 static int hdsp_autosync_ref(struct hdsp *hdsp); 591 static int snd_hdsp_set_defaults(struct hdsp *hdsp); 592 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp); 593 594 static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out) 595 { 596 switch (hdsp->firmware_rev) { 597 case 0xa: 598 return (64 * out) + (32 + (in)); 599 case 0x96: 600 case 0x97: 601 return (32 * out) + (16 + (in)); 602 default: 603 return (52 * out) + (26 + (in)); 604 } 605 } 606 607 static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out) 608 { 609 switch (hdsp->firmware_rev) { 610 case 0xa: 611 return (64 * out) + in; 612 case 0x96: 613 case 0x97: 614 return (32 * out) + in; 615 default: 616 return (52 * out) + in; 617 } 618 } 619 620 static void hdsp_write(struct hdsp *hdsp, int reg, int val) 621 { 622 writel(val, hdsp->iobase + reg); 623 } 624 625 static unsigned int hdsp_read(struct hdsp *hdsp, int reg) 626 { 627 return readl (hdsp->iobase + reg); 628 } 629 630 static int hdsp_check_for_iobox (struct hdsp *hdsp) 631 { 632 633 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0; 634 if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) { 635 snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n"); 636 hdsp->state &= ~HDSP_FirmwareLoaded; 637 return -EIO; 638 } 639 return 0; 640 641 } 642 643 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) { 644 645 int i; 646 unsigned long flags; 647 648 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 649 650 snd_printk ("Hammerfall-DSP: loading firmware\n"); 651 652 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM); 653 hdsp_write (hdsp, HDSP_fifoData, 0); 654 655 if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { 656 snd_printk ("Hammerfall-DSP: timeout waiting for download preparation\n"); 657 return -EIO; 658 } 659 660 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD); 661 662 for (i = 0; i < 24413; ++i) { 663 hdsp_write(hdsp, HDSP_fifoData, hdsp->firmware_cache[i]); 664 if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) { 665 snd_printk ("Hammerfall-DSP: timeout during firmware loading\n"); 666 return -EIO; 667 } 668 } 669 670 ssleep(3); 671 672 if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { 673 snd_printk ("Hammerfall-DSP: timeout at end of firmware loading\n"); 674 return -EIO; 675 } 676 677 #ifdef SNDRV_BIG_ENDIAN 678 hdsp->control2_register = HDSP_BIGENDIAN_MODE; 679 #else 680 hdsp->control2_register = 0; 681 #endif 682 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 683 snd_printk ("Hammerfall-DSP: finished firmware loading\n"); 684 685 } 686 if (hdsp->state & HDSP_InitializationComplete) { 687 snd_printk(KERN_INFO "Hammerfall-DSP: firmware loaded from cache, restoring defaults\n"); 688 spin_lock_irqsave(&hdsp->lock, flags); 689 snd_hdsp_set_defaults(hdsp); 690 spin_unlock_irqrestore(&hdsp->lock, flags); 691 } 692 693 hdsp->state |= HDSP_FirmwareLoaded; 694 695 return 0; 696 } 697 698 static int hdsp_get_iobox_version (struct hdsp *hdsp) 699 { 700 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 701 702 hdsp_write (hdsp, HDSP_control2Reg, HDSP_PROGRAM); 703 hdsp_write (hdsp, HDSP_fifoData, 0); 704 if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT) < 0) 705 return -EIO; 706 707 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD); 708 hdsp_write (hdsp, HDSP_fifoData, 0); 709 710 if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT)) { 711 hdsp->io_type = Multiface; 712 hdsp_write (hdsp, HDSP_control2Reg, HDSP_VERSION_BIT); 713 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD); 714 hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT); 715 } else { 716 hdsp->io_type = Digiface; 717 } 718 } else { 719 /* firmware was already loaded, get iobox type */ 720 if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) 721 hdsp->io_type = Multiface; 722 else 723 hdsp->io_type = Digiface; 724 } 725 return 0; 726 } 727 728 729 static int hdsp_check_for_firmware (struct hdsp *hdsp, int show_err) 730 { 731 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0; 732 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 733 snd_printk(KERN_ERR "Hammerfall-DSP: firmware not present.\n"); 734 hdsp->state &= ~HDSP_FirmwareLoaded; 735 if (! show_err) 736 return -EIO; 737 /* try to load firmware */ 738 if (hdsp->state & HDSP_FirmwareCached) { 739 if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) 740 snd_printk(KERN_ERR "Hammerfall-DSP: Firmware loading from cache failed, please upload manually.\n"); 741 } else { 742 snd_printk(KERN_ERR "Hammerfall-DSP: No firmware loaded nor cached, please upload firmware.\n"); 743 } 744 return -EIO; 745 } 746 return 0; 747 } 748 749 750 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout) 751 { 752 int i; 753 754 /* the fifoStatus registers reports on how many words 755 are available in the command FIFO. 756 */ 757 758 for (i = 0; i < timeout; i++) { 759 760 if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count) 761 return 0; 762 763 /* not very friendly, but we only do this during a firmware 764 load and changing the mixer, so we just put up with it. 765 */ 766 767 udelay (100); 768 } 769 770 snd_printk ("Hammerfall-DSP: wait for FIFO status <= %d failed after %d iterations\n", 771 count, timeout); 772 return -1; 773 } 774 775 static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr) 776 { 777 if (addr >= HDSP_MATRIX_MIXER_SIZE) 778 return 0; 779 780 return hdsp->mixer_matrix[addr]; 781 } 782 783 static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data) 784 { 785 unsigned int ad; 786 787 if (addr >= HDSP_MATRIX_MIXER_SIZE) 788 return -1; 789 790 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) { 791 792 /* from martin bjornsen: 793 794 "You can only write dwords to the 795 mixer memory which contain two 796 mixer values in the low and high 797 word. So if you want to change 798 value 0 you have to read value 1 799 from the cache and write both to 800 the first dword in the mixer 801 memory." 802 */ 803 804 if (hdsp->io_type == H9632 && addr >= 512) 805 return 0; 806 807 if (hdsp->io_type == H9652 && addr >= 1352) 808 return 0; 809 810 hdsp->mixer_matrix[addr] = data; 811 812 813 /* `addr' addresses a 16-bit wide address, but 814 the address space accessed via hdsp_write 815 uses byte offsets. put another way, addr 816 varies from 0 to 1351, but to access the 817 corresponding memory location, we need 818 to access 0 to 2703 ... 819 */ 820 ad = addr/2; 821 822 hdsp_write (hdsp, 4096 + (ad*4), 823 (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) + 824 hdsp->mixer_matrix[addr&0x7fe]); 825 826 return 0; 827 828 } else { 829 830 ad = (addr << 16) + data; 831 832 if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT)) 833 return -1; 834 835 hdsp_write (hdsp, HDSP_fifoData, ad); 836 hdsp->mixer_matrix[addr] = data; 837 838 } 839 840 return 0; 841 } 842 843 static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp) 844 { 845 unsigned long flags; 846 int ret = 1; 847 848 spin_lock_irqsave(&hdsp->lock, flags); 849 if ((hdsp->playback_pid != hdsp->capture_pid) && 850 (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0)) 851 ret = 0; 852 spin_unlock_irqrestore(&hdsp->lock, flags); 853 return ret; 854 } 855 856 static int hdsp_external_sample_rate (struct hdsp *hdsp) 857 { 858 unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); 859 unsigned int rate_bits = status2 & HDSP_systemFrequencyMask; 860 861 switch (rate_bits) { 862 case HDSP_systemFrequency32: return 32000; 863 case HDSP_systemFrequency44_1: return 44100; 864 case HDSP_systemFrequency48: return 48000; 865 case HDSP_systemFrequency64: return 64000; 866 case HDSP_systemFrequency88_2: return 88200; 867 case HDSP_systemFrequency96: return 96000; 868 default: 869 return 0; 870 } 871 } 872 873 static int hdsp_spdif_sample_rate(struct hdsp *hdsp) 874 { 875 unsigned int status = hdsp_read(hdsp, HDSP_statusRegister); 876 unsigned int rate_bits = (status & HDSP_spdifFrequencyMask); 877 878 if (status & HDSP_SPDIFErrorFlag) 879 return 0; 880 881 switch (rate_bits) { 882 case HDSP_spdifFrequency32KHz: return 32000; 883 case HDSP_spdifFrequency44_1KHz: return 44100; 884 case HDSP_spdifFrequency48KHz: return 48000; 885 case HDSP_spdifFrequency64KHz: return 64000; 886 case HDSP_spdifFrequency88_2KHz: return 88200; 887 case HDSP_spdifFrequency96KHz: return 96000; 888 case HDSP_spdifFrequency128KHz: 889 if (hdsp->io_type == H9632) return 128000; 890 break; 891 case HDSP_spdifFrequency176_4KHz: 892 if (hdsp->io_type == H9632) return 176400; 893 break; 894 case HDSP_spdifFrequency192KHz: 895 if (hdsp->io_type == H9632) return 192000; 896 break; 897 default: 898 break; 899 } 900 snd_printk ("Hammerfall-DSP: unknown spdif frequency status; bits = 0x%x, status = 0x%x\n", rate_bits, status); 901 return 0; 902 } 903 904 static void hdsp_compute_period_size(struct hdsp *hdsp) 905 { 906 hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8)); 907 } 908 909 static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp) 910 { 911 int position; 912 913 position = hdsp_read(hdsp, HDSP_statusRegister); 914 915 if (!hdsp->precise_ptr) 916 return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0; 917 918 position &= HDSP_BufferPositionMask; 919 position /= 4; 920 position &= (hdsp->period_bytes/2) - 1; 921 return position; 922 } 923 924 static void hdsp_reset_hw_pointer(struct hdsp *hdsp) 925 { 926 hdsp_write (hdsp, HDSP_resetPointer, 0); 927 } 928 929 static void hdsp_start_audio(struct hdsp *s) 930 { 931 s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start); 932 hdsp_write(s, HDSP_controlRegister, s->control_register); 933 } 934 935 static void hdsp_stop_audio(struct hdsp *s) 936 { 937 s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable); 938 hdsp_write(s, HDSP_controlRegister, s->control_register); 939 } 940 941 static void hdsp_silence_playback(struct hdsp *hdsp) 942 { 943 memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES); 944 } 945 946 static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames) 947 { 948 int n; 949 950 spin_lock_irq(&s->lock); 951 952 frames >>= 7; 953 n = 0; 954 while (frames) { 955 n++; 956 frames >>= 1; 957 } 958 959 s->control_register &= ~HDSP_LatencyMask; 960 s->control_register |= hdsp_encode_latency(n); 961 962 hdsp_write(s, HDSP_controlRegister, s->control_register); 963 964 hdsp_compute_period_size(s); 965 966 spin_unlock_irq(&s->lock); 967 968 return 0; 969 } 970 971 static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally) 972 { 973 int reject_if_open = 0; 974 int current_rate; 975 int rate_bits; 976 977 /* ASSUMPTION: hdsp->lock is either held, or 978 there is no need for it (e.g. during module 979 initialization). 980 */ 981 982 if (!(hdsp->control_register & HDSP_ClockModeMaster)) { 983 if (called_internally) { 984 /* request from ctl or card initialization */ 985 snd_printk(KERN_ERR "Hammerfall-DSP: device is not running as a clock master: cannot set sample rate.\n"); 986 return -1; 987 } else { 988 /* hw_param request while in AutoSync mode */ 989 int external_freq = hdsp_external_sample_rate(hdsp); 990 int spdif_freq = hdsp_spdif_sample_rate(hdsp); 991 992 if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1)) 993 snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in double speed mode\n"); 994 else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1)) 995 snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in quad speed mode\n"); 996 else if (rate != external_freq) { 997 snd_printk(KERN_INFO "Hammerfall-DSP: No AutoSync source for requested rate\n"); 998 return -1; 999 } 1000 } 1001 } 1002 1003 current_rate = hdsp->system_sample_rate; 1004 1005 /* Changing from a "single speed" to a "double speed" rate is 1006 not allowed if any substreams are open. This is because 1007 such a change causes a shift in the location of 1008 the DMA buffers and a reduction in the number of available 1009 buffers. 1010 1011 Note that a similar but essentially insoluble problem 1012 exists for externally-driven rate changes. All we can do 1013 is to flag rate changes in the read/write routines. */ 1014 1015 if (rate > 96000 && hdsp->io_type != H9632) 1016 return -EINVAL; 1017 1018 switch (rate) { 1019 case 32000: 1020 if (current_rate > 48000) 1021 reject_if_open = 1; 1022 rate_bits = HDSP_Frequency32KHz; 1023 break; 1024 case 44100: 1025 if (current_rate > 48000) 1026 reject_if_open = 1; 1027 rate_bits = HDSP_Frequency44_1KHz; 1028 break; 1029 case 48000: 1030 if (current_rate > 48000) 1031 reject_if_open = 1; 1032 rate_bits = HDSP_Frequency48KHz; 1033 break; 1034 case 64000: 1035 if (current_rate <= 48000 || current_rate > 96000) 1036 reject_if_open = 1; 1037 rate_bits = HDSP_Frequency64KHz; 1038 break; 1039 case 88200: 1040 if (current_rate <= 48000 || current_rate > 96000) 1041 reject_if_open = 1; 1042 rate_bits = HDSP_Frequency88_2KHz; 1043 break; 1044 case 96000: 1045 if (current_rate <= 48000 || current_rate > 96000) 1046 reject_if_open = 1; 1047 rate_bits = HDSP_Frequency96KHz; 1048 break; 1049 case 128000: 1050 if (current_rate < 128000) 1051 reject_if_open = 1; 1052 rate_bits = HDSP_Frequency128KHz; 1053 break; 1054 case 176400: 1055 if (current_rate < 128000) 1056 reject_if_open = 1; 1057 rate_bits = HDSP_Frequency176_4KHz; 1058 break; 1059 case 192000: 1060 if (current_rate < 128000) 1061 reject_if_open = 1; 1062 rate_bits = HDSP_Frequency192KHz; 1063 break; 1064 default: 1065 return -EINVAL; 1066 } 1067 1068 if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) { 1069 snd_printk ("Hammerfall-DSP: cannot change speed mode (capture PID = %d, playback PID = %d)\n", 1070 hdsp->capture_pid, 1071 hdsp->playback_pid); 1072 return -EBUSY; 1073 } 1074 1075 hdsp->control_register &= ~HDSP_FrequencyMask; 1076 hdsp->control_register |= rate_bits; 1077 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1078 1079 if (rate >= 128000) { 1080 hdsp->channel_map = channel_map_H9632_qs; 1081 } else if (rate > 48000) { 1082 if (hdsp->io_type == H9632) 1083 hdsp->channel_map = channel_map_H9632_ds; 1084 else 1085 hdsp->channel_map = channel_map_ds; 1086 } else { 1087 switch (hdsp->io_type) { 1088 case Multiface: 1089 hdsp->channel_map = channel_map_mf_ss; 1090 break; 1091 case Digiface: 1092 case H9652: 1093 hdsp->channel_map = channel_map_df_ss; 1094 break; 1095 case H9632: 1096 hdsp->channel_map = channel_map_H9632_ss; 1097 break; 1098 default: 1099 /* should never happen */ 1100 break; 1101 } 1102 } 1103 1104 hdsp->system_sample_rate = rate; 1105 1106 return 0; 1107 } 1108 1109 /*---------------------------------------------------------------------------- 1110 MIDI 1111 ----------------------------------------------------------------------------*/ 1112 1113 static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id) 1114 { 1115 /* the hardware already does the relevant bit-mask with 0xff */ 1116 if (id) 1117 return hdsp_read(hdsp, HDSP_midiDataIn1); 1118 else 1119 return hdsp_read(hdsp, HDSP_midiDataIn0); 1120 } 1121 1122 static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val) 1123 { 1124 /* the hardware already does the relevant bit-mask with 0xff */ 1125 if (id) 1126 hdsp_write(hdsp, HDSP_midiDataOut1, val); 1127 else 1128 hdsp_write(hdsp, HDSP_midiDataOut0, val); 1129 } 1130 1131 static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id) 1132 { 1133 if (id) 1134 return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff); 1135 else 1136 return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff); 1137 } 1138 1139 static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id) 1140 { 1141 int fifo_bytes_used; 1142 1143 if (id) 1144 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff; 1145 else 1146 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff; 1147 1148 if (fifo_bytes_used < 128) 1149 return 128 - fifo_bytes_used; 1150 else 1151 return 0; 1152 } 1153 1154 static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id) 1155 { 1156 while (snd_hdsp_midi_input_available (hdsp, id)) 1157 snd_hdsp_midi_read_byte (hdsp, id); 1158 } 1159 1160 static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi) 1161 { 1162 unsigned long flags; 1163 int n_pending; 1164 int to_write; 1165 int i; 1166 unsigned char buf[128]; 1167 1168 /* Output is not interrupt driven */ 1169 1170 spin_lock_irqsave (&hmidi->lock, flags); 1171 if (hmidi->output) { 1172 if (!snd_rawmidi_transmit_empty (hmidi->output)) { 1173 if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) { 1174 if (n_pending > (int)sizeof (buf)) 1175 n_pending = sizeof (buf); 1176 1177 if ((to_write = snd_rawmidi_transmit (hmidi->output, buf, n_pending)) > 0) { 1178 for (i = 0; i < to_write; ++i) 1179 snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]); 1180 } 1181 } 1182 } 1183 } 1184 spin_unlock_irqrestore (&hmidi->lock, flags); 1185 return 0; 1186 } 1187 1188 static int snd_hdsp_midi_input_read (struct hdsp_midi *hmidi) 1189 { 1190 unsigned char buf[128]; /* this buffer is designed to match the MIDI input FIFO size */ 1191 unsigned long flags; 1192 int n_pending; 1193 int i; 1194 1195 spin_lock_irqsave (&hmidi->lock, flags); 1196 if ((n_pending = snd_hdsp_midi_input_available (hmidi->hdsp, hmidi->id)) > 0) { 1197 if (hmidi->input) { 1198 if (n_pending > (int)sizeof (buf)) 1199 n_pending = sizeof (buf); 1200 for (i = 0; i < n_pending; ++i) 1201 buf[i] = snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id); 1202 if (n_pending) 1203 snd_rawmidi_receive (hmidi->input, buf, n_pending); 1204 } else { 1205 /* flush the MIDI input FIFO */ 1206 while (--n_pending) 1207 snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id); 1208 } 1209 } 1210 hmidi->pending = 0; 1211 if (hmidi->id) 1212 hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable; 1213 else 1214 hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable; 1215 hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register); 1216 spin_unlock_irqrestore (&hmidi->lock, flags); 1217 return snd_hdsp_midi_output_write (hmidi); 1218 } 1219 1220 static void snd_hdsp_midi_input_trigger(struct snd_rawmidi_substream *substream, int up) 1221 { 1222 struct hdsp *hdsp; 1223 struct hdsp_midi *hmidi; 1224 unsigned long flags; 1225 u32 ie; 1226 1227 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1228 hdsp = hmidi->hdsp; 1229 ie = hmidi->id ? HDSP_Midi1InterruptEnable : HDSP_Midi0InterruptEnable; 1230 spin_lock_irqsave (&hdsp->lock, flags); 1231 if (up) { 1232 if (!(hdsp->control_register & ie)) { 1233 snd_hdsp_flush_midi_input (hdsp, hmidi->id); 1234 hdsp->control_register |= ie; 1235 } 1236 } else { 1237 hdsp->control_register &= ~ie; 1238 tasklet_kill(&hdsp->midi_tasklet); 1239 } 1240 1241 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1242 spin_unlock_irqrestore (&hdsp->lock, flags); 1243 } 1244 1245 static void snd_hdsp_midi_output_timer(unsigned long data) 1246 { 1247 struct hdsp_midi *hmidi = (struct hdsp_midi *) data; 1248 unsigned long flags; 1249 1250 snd_hdsp_midi_output_write(hmidi); 1251 spin_lock_irqsave (&hmidi->lock, flags); 1252 1253 /* this does not bump hmidi->istimer, because the 1254 kernel automatically removed the timer when it 1255 expired, and we are now adding it back, thus 1256 leaving istimer wherever it was set before. 1257 */ 1258 1259 if (hmidi->istimer) { 1260 hmidi->timer.expires = 1 + jiffies; 1261 add_timer(&hmidi->timer); 1262 } 1263 1264 spin_unlock_irqrestore (&hmidi->lock, flags); 1265 } 1266 1267 static void snd_hdsp_midi_output_trigger(struct snd_rawmidi_substream *substream, int up) 1268 { 1269 struct hdsp_midi *hmidi; 1270 unsigned long flags; 1271 1272 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1273 spin_lock_irqsave (&hmidi->lock, flags); 1274 if (up) { 1275 if (!hmidi->istimer) { 1276 init_timer(&hmidi->timer); 1277 hmidi->timer.function = snd_hdsp_midi_output_timer; 1278 hmidi->timer.data = (unsigned long) hmidi; 1279 hmidi->timer.expires = 1 + jiffies; 1280 add_timer(&hmidi->timer); 1281 hmidi->istimer++; 1282 } 1283 } else { 1284 if (hmidi->istimer && --hmidi->istimer <= 0) 1285 del_timer (&hmidi->timer); 1286 } 1287 spin_unlock_irqrestore (&hmidi->lock, flags); 1288 if (up) 1289 snd_hdsp_midi_output_write(hmidi); 1290 } 1291 1292 static int snd_hdsp_midi_input_open(struct snd_rawmidi_substream *substream) 1293 { 1294 struct hdsp_midi *hmidi; 1295 1296 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1297 spin_lock_irq (&hmidi->lock); 1298 snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id); 1299 hmidi->input = substream; 1300 spin_unlock_irq (&hmidi->lock); 1301 1302 return 0; 1303 } 1304 1305 static int snd_hdsp_midi_output_open(struct snd_rawmidi_substream *substream) 1306 { 1307 struct hdsp_midi *hmidi; 1308 1309 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1310 spin_lock_irq (&hmidi->lock); 1311 hmidi->output = substream; 1312 spin_unlock_irq (&hmidi->lock); 1313 1314 return 0; 1315 } 1316 1317 static int snd_hdsp_midi_input_close(struct snd_rawmidi_substream *substream) 1318 { 1319 struct hdsp_midi *hmidi; 1320 1321 snd_hdsp_midi_input_trigger (substream, 0); 1322 1323 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1324 spin_lock_irq (&hmidi->lock); 1325 hmidi->input = NULL; 1326 spin_unlock_irq (&hmidi->lock); 1327 1328 return 0; 1329 } 1330 1331 static int snd_hdsp_midi_output_close(struct snd_rawmidi_substream *substream) 1332 { 1333 struct hdsp_midi *hmidi; 1334 1335 snd_hdsp_midi_output_trigger (substream, 0); 1336 1337 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1338 spin_lock_irq (&hmidi->lock); 1339 hmidi->output = NULL; 1340 spin_unlock_irq (&hmidi->lock); 1341 1342 return 0; 1343 } 1344 1345 static struct snd_rawmidi_ops snd_hdsp_midi_output = 1346 { 1347 .open = snd_hdsp_midi_output_open, 1348 .close = snd_hdsp_midi_output_close, 1349 .trigger = snd_hdsp_midi_output_trigger, 1350 }; 1351 1352 static struct snd_rawmidi_ops snd_hdsp_midi_input = 1353 { 1354 .open = snd_hdsp_midi_input_open, 1355 .close = snd_hdsp_midi_input_close, 1356 .trigger = snd_hdsp_midi_input_trigger, 1357 }; 1358 1359 static int __devinit snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int id) 1360 { 1361 char buf[32]; 1362 1363 hdsp->midi[id].id = id; 1364 hdsp->midi[id].rmidi = NULL; 1365 hdsp->midi[id].input = NULL; 1366 hdsp->midi[id].output = NULL; 1367 hdsp->midi[id].hdsp = hdsp; 1368 hdsp->midi[id].istimer = 0; 1369 hdsp->midi[id].pending = 0; 1370 spin_lock_init (&hdsp->midi[id].lock); 1371 1372 sprintf (buf, "%s MIDI %d", card->shortname, id+1); 1373 if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0) 1374 return -1; 1375 1376 sprintf (hdsp->midi[id].rmidi->name, "%s MIDI %d", card->id, id+1); 1377 hdsp->midi[id].rmidi->private_data = &hdsp->midi[id]; 1378 1379 snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output); 1380 snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_hdsp_midi_input); 1381 1382 hdsp->midi[id].rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT | 1383 SNDRV_RAWMIDI_INFO_INPUT | 1384 SNDRV_RAWMIDI_INFO_DUPLEX; 1385 1386 return 0; 1387 } 1388 1389 /*----------------------------------------------------------------------------- 1390 Control Interface 1391 ----------------------------------------------------------------------------*/ 1392 1393 static u32 snd_hdsp_convert_from_aes(struct snd_aes_iec958 *aes) 1394 { 1395 u32 val = 0; 1396 val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? HDSP_SPDIFProfessional : 0; 1397 val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? HDSP_SPDIFNonAudio : 0; 1398 if (val & HDSP_SPDIFProfessional) 1399 val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0; 1400 else 1401 val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0; 1402 return val; 1403 } 1404 1405 static void snd_hdsp_convert_to_aes(struct snd_aes_iec958 *aes, u32 val) 1406 { 1407 aes->status[0] = ((val & HDSP_SPDIFProfessional) ? IEC958_AES0_PROFESSIONAL : 0) | 1408 ((val & HDSP_SPDIFNonAudio) ? IEC958_AES0_NONAUDIO : 0); 1409 if (val & HDSP_SPDIFProfessional) 1410 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0; 1411 else 1412 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_CON_EMPHASIS_5015 : 0; 1413 } 1414 1415 static int snd_hdsp_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1416 { 1417 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1418 uinfo->count = 1; 1419 return 0; 1420 } 1421 1422 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1423 { 1424 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1425 1426 snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif); 1427 return 0; 1428 } 1429 1430 static int snd_hdsp_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1431 { 1432 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1433 int change; 1434 u32 val; 1435 1436 val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958); 1437 spin_lock_irq(&hdsp->lock); 1438 change = val != hdsp->creg_spdif; 1439 hdsp->creg_spdif = val; 1440 spin_unlock_irq(&hdsp->lock); 1441 return change; 1442 } 1443 1444 static int snd_hdsp_control_spdif_stream_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1445 { 1446 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1447 uinfo->count = 1; 1448 return 0; 1449 } 1450 1451 static int snd_hdsp_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1452 { 1453 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1454 1455 snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream); 1456 return 0; 1457 } 1458 1459 static int snd_hdsp_control_spdif_stream_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1460 { 1461 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1462 int change; 1463 u32 val; 1464 1465 val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958); 1466 spin_lock_irq(&hdsp->lock); 1467 change = val != hdsp->creg_spdif_stream; 1468 hdsp->creg_spdif_stream = val; 1469 hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis); 1470 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val); 1471 spin_unlock_irq(&hdsp->lock); 1472 return change; 1473 } 1474 1475 static int snd_hdsp_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1476 { 1477 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1478 uinfo->count = 1; 1479 return 0; 1480 } 1481 1482 static int snd_hdsp_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1483 { 1484 ucontrol->value.iec958.status[0] = kcontrol->private_value; 1485 return 0; 1486 } 1487 1488 #define HDSP_SPDIF_IN(xname, xindex) \ 1489 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1490 .name = xname, \ 1491 .index = xindex, \ 1492 .info = snd_hdsp_info_spdif_in, \ 1493 .get = snd_hdsp_get_spdif_in, \ 1494 .put = snd_hdsp_put_spdif_in } 1495 1496 static unsigned int hdsp_spdif_in(struct hdsp *hdsp) 1497 { 1498 return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask); 1499 } 1500 1501 static int hdsp_set_spdif_input(struct hdsp *hdsp, int in) 1502 { 1503 hdsp->control_register &= ~HDSP_SPDIFInputMask; 1504 hdsp->control_register |= hdsp_encode_spdif_in(in); 1505 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1506 return 0; 1507 } 1508 1509 static int snd_hdsp_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1510 { 1511 static char *texts[4] = {"Optical", "Coaxial", "Internal", "AES"}; 1512 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1513 1514 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1515 uinfo->count = 1; 1516 uinfo->value.enumerated.items = ((hdsp->io_type == H9632) ? 4 : 3); 1517 if (uinfo->value.enumerated.item > ((hdsp->io_type == H9632) ? 3 : 2)) 1518 uinfo->value.enumerated.item = ((hdsp->io_type == H9632) ? 3 : 2); 1519 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1520 return 0; 1521 } 1522 1523 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1524 { 1525 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1526 1527 ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp); 1528 return 0; 1529 } 1530 1531 static int snd_hdsp_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1532 { 1533 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1534 int change; 1535 unsigned int val; 1536 1537 if (!snd_hdsp_use_is_exclusive(hdsp)) 1538 return -EBUSY; 1539 val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3); 1540 spin_lock_irq(&hdsp->lock); 1541 change = val != hdsp_spdif_in(hdsp); 1542 if (change) 1543 hdsp_set_spdif_input(hdsp, val); 1544 spin_unlock_irq(&hdsp->lock); 1545 return change; 1546 } 1547 1548 #define HDSP_SPDIF_OUT(xname, xindex) \ 1549 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ 1550 .info = snd_hdsp_info_spdif_bits, \ 1551 .get = snd_hdsp_get_spdif_out, .put = snd_hdsp_put_spdif_out } 1552 1553 static int hdsp_spdif_out(struct hdsp *hdsp) 1554 { 1555 return (hdsp->control_register & HDSP_SPDIFOpticalOut) ? 1 : 0; 1556 } 1557 1558 static int hdsp_set_spdif_output(struct hdsp *hdsp, int out) 1559 { 1560 if (out) 1561 hdsp->control_register |= HDSP_SPDIFOpticalOut; 1562 else 1563 hdsp->control_register &= ~HDSP_SPDIFOpticalOut; 1564 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1565 return 0; 1566 } 1567 1568 static int snd_hdsp_info_spdif_bits(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1569 { 1570 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1571 uinfo->count = 1; 1572 uinfo->value.integer.min = 0; 1573 uinfo->value.integer.max = 1; 1574 return 0; 1575 } 1576 1577 static int snd_hdsp_get_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1578 { 1579 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1580 1581 ucontrol->value.integer.value[0] = hdsp_spdif_out(hdsp); 1582 return 0; 1583 } 1584 1585 static int snd_hdsp_put_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1586 { 1587 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1588 int change; 1589 unsigned int val; 1590 1591 if (!snd_hdsp_use_is_exclusive(hdsp)) 1592 return -EBUSY; 1593 val = ucontrol->value.integer.value[0] & 1; 1594 spin_lock_irq(&hdsp->lock); 1595 change = (int)val != hdsp_spdif_out(hdsp); 1596 hdsp_set_spdif_output(hdsp, val); 1597 spin_unlock_irq(&hdsp->lock); 1598 return change; 1599 } 1600 1601 #define HDSP_SPDIF_PROFESSIONAL(xname, xindex) \ 1602 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ 1603 .info = snd_hdsp_info_spdif_bits, \ 1604 .get = snd_hdsp_get_spdif_professional, .put = snd_hdsp_put_spdif_professional } 1605 1606 static int hdsp_spdif_professional(struct hdsp *hdsp) 1607 { 1608 return (hdsp->control_register & HDSP_SPDIFProfessional) ? 1 : 0; 1609 } 1610 1611 static int hdsp_set_spdif_professional(struct hdsp *hdsp, int val) 1612 { 1613 if (val) 1614 hdsp->control_register |= HDSP_SPDIFProfessional; 1615 else 1616 hdsp->control_register &= ~HDSP_SPDIFProfessional; 1617 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1618 return 0; 1619 } 1620 1621 static int snd_hdsp_get_spdif_professional(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1622 { 1623 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1624 1625 ucontrol->value.integer.value[0] = hdsp_spdif_professional(hdsp); 1626 return 0; 1627 } 1628 1629 static int snd_hdsp_put_spdif_professional(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1630 { 1631 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1632 int change; 1633 unsigned int val; 1634 1635 if (!snd_hdsp_use_is_exclusive(hdsp)) 1636 return -EBUSY; 1637 val = ucontrol->value.integer.value[0] & 1; 1638 spin_lock_irq(&hdsp->lock); 1639 change = (int)val != hdsp_spdif_professional(hdsp); 1640 hdsp_set_spdif_professional(hdsp, val); 1641 spin_unlock_irq(&hdsp->lock); 1642 return change; 1643 } 1644 1645 #define HDSP_SPDIF_EMPHASIS(xname, xindex) \ 1646 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ 1647 .info = snd_hdsp_info_spdif_bits, \ 1648 .get = snd_hdsp_get_spdif_emphasis, .put = snd_hdsp_put_spdif_emphasis } 1649 1650 static int hdsp_spdif_emphasis(struct hdsp *hdsp) 1651 { 1652 return (hdsp->control_register & HDSP_SPDIFEmphasis) ? 1 : 0; 1653 } 1654 1655 static int hdsp_set_spdif_emphasis(struct hdsp *hdsp, int val) 1656 { 1657 if (val) 1658 hdsp->control_register |= HDSP_SPDIFEmphasis; 1659 else 1660 hdsp->control_register &= ~HDSP_SPDIFEmphasis; 1661 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1662 return 0; 1663 } 1664 1665 static int snd_hdsp_get_spdif_emphasis(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1666 { 1667 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1668 1669 ucontrol->value.integer.value[0] = hdsp_spdif_emphasis(hdsp); 1670 return 0; 1671 } 1672 1673 static int snd_hdsp_put_spdif_emphasis(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1674 { 1675 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1676 int change; 1677 unsigned int val; 1678 1679 if (!snd_hdsp_use_is_exclusive(hdsp)) 1680 return -EBUSY; 1681 val = ucontrol->value.integer.value[0] & 1; 1682 spin_lock_irq(&hdsp->lock); 1683 change = (int)val != hdsp_spdif_emphasis(hdsp); 1684 hdsp_set_spdif_emphasis(hdsp, val); 1685 spin_unlock_irq(&hdsp->lock); 1686 return change; 1687 } 1688 1689 #define HDSP_SPDIF_NON_AUDIO(xname, xindex) \ 1690 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \ 1691 .info = snd_hdsp_info_spdif_bits, \ 1692 .get = snd_hdsp_get_spdif_nonaudio, .put = snd_hdsp_put_spdif_nonaudio } 1693 1694 static int hdsp_spdif_nonaudio(struct hdsp *hdsp) 1695 { 1696 return (hdsp->control_register & HDSP_SPDIFNonAudio) ? 1 : 0; 1697 } 1698 1699 static int hdsp_set_spdif_nonaudio(struct hdsp *hdsp, int val) 1700 { 1701 if (val) 1702 hdsp->control_register |= HDSP_SPDIFNonAudio; 1703 else 1704 hdsp->control_register &= ~HDSP_SPDIFNonAudio; 1705 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1706 return 0; 1707 } 1708 1709 static int snd_hdsp_get_spdif_nonaudio(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1710 { 1711 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1712 1713 ucontrol->value.integer.value[0] = hdsp_spdif_nonaudio(hdsp); 1714 return 0; 1715 } 1716 1717 static int snd_hdsp_put_spdif_nonaudio(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1718 { 1719 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1720 int change; 1721 unsigned int val; 1722 1723 if (!snd_hdsp_use_is_exclusive(hdsp)) 1724 return -EBUSY; 1725 val = ucontrol->value.integer.value[0] & 1; 1726 spin_lock_irq(&hdsp->lock); 1727 change = (int)val != hdsp_spdif_nonaudio(hdsp); 1728 hdsp_set_spdif_nonaudio(hdsp, val); 1729 spin_unlock_irq(&hdsp->lock); 1730 return change; 1731 } 1732 1733 #define HDSP_SPDIF_SAMPLE_RATE(xname, xindex) \ 1734 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1735 .name = xname, \ 1736 .index = xindex, \ 1737 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1738 .info = snd_hdsp_info_spdif_sample_rate, \ 1739 .get = snd_hdsp_get_spdif_sample_rate \ 1740 } 1741 1742 static int snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1743 { 1744 static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"}; 1745 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1746 1747 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1748 uinfo->count = 1; 1749 uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7; 1750 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1751 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1752 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1753 return 0; 1754 } 1755 1756 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1757 { 1758 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1759 1760 switch (hdsp_spdif_sample_rate(hdsp)) { 1761 case 32000: 1762 ucontrol->value.enumerated.item[0] = 0; 1763 break; 1764 case 44100: 1765 ucontrol->value.enumerated.item[0] = 1; 1766 break; 1767 case 48000: 1768 ucontrol->value.enumerated.item[0] = 2; 1769 break; 1770 case 64000: 1771 ucontrol->value.enumerated.item[0] = 3; 1772 break; 1773 case 88200: 1774 ucontrol->value.enumerated.item[0] = 4; 1775 break; 1776 case 96000: 1777 ucontrol->value.enumerated.item[0] = 5; 1778 break; 1779 case 128000: 1780 ucontrol->value.enumerated.item[0] = 7; 1781 break; 1782 case 176400: 1783 ucontrol->value.enumerated.item[0] = 8; 1784 break; 1785 case 192000: 1786 ucontrol->value.enumerated.item[0] = 9; 1787 break; 1788 default: 1789 ucontrol->value.enumerated.item[0] = 6; 1790 } 1791 return 0; 1792 } 1793 1794 #define HDSP_SYSTEM_SAMPLE_RATE(xname, xindex) \ 1795 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1796 .name = xname, \ 1797 .index = xindex, \ 1798 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1799 .info = snd_hdsp_info_system_sample_rate, \ 1800 .get = snd_hdsp_get_system_sample_rate \ 1801 } 1802 1803 static int snd_hdsp_info_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1804 { 1805 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1806 uinfo->count = 1; 1807 return 0; 1808 } 1809 1810 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1811 { 1812 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1813 1814 ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate; 1815 return 0; 1816 } 1817 1818 #define HDSP_AUTOSYNC_SAMPLE_RATE(xname, xindex) \ 1819 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1820 .name = xname, \ 1821 .index = xindex, \ 1822 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1823 .info = snd_hdsp_info_autosync_sample_rate, \ 1824 .get = snd_hdsp_get_autosync_sample_rate \ 1825 } 1826 1827 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1828 { 1829 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1830 static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"}; 1831 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1832 uinfo->count = 1; 1833 uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7 ; 1834 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1835 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1836 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1837 return 0; 1838 } 1839 1840 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1841 { 1842 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1843 1844 switch (hdsp_external_sample_rate(hdsp)) { 1845 case 32000: 1846 ucontrol->value.enumerated.item[0] = 0; 1847 break; 1848 case 44100: 1849 ucontrol->value.enumerated.item[0] = 1; 1850 break; 1851 case 48000: 1852 ucontrol->value.enumerated.item[0] = 2; 1853 break; 1854 case 64000: 1855 ucontrol->value.enumerated.item[0] = 3; 1856 break; 1857 case 88200: 1858 ucontrol->value.enumerated.item[0] = 4; 1859 break; 1860 case 96000: 1861 ucontrol->value.enumerated.item[0] = 5; 1862 break; 1863 case 128000: 1864 ucontrol->value.enumerated.item[0] = 7; 1865 break; 1866 case 176400: 1867 ucontrol->value.enumerated.item[0] = 8; 1868 break; 1869 case 192000: 1870 ucontrol->value.enumerated.item[0] = 9; 1871 break; 1872 default: 1873 ucontrol->value.enumerated.item[0] = 6; 1874 } 1875 return 0; 1876 } 1877 1878 #define HDSP_SYSTEM_CLOCK_MODE(xname, xindex) \ 1879 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1880 .name = xname, \ 1881 .index = xindex, \ 1882 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1883 .info = snd_hdsp_info_system_clock_mode, \ 1884 .get = snd_hdsp_get_system_clock_mode \ 1885 } 1886 1887 static int hdsp_system_clock_mode(struct hdsp *hdsp) 1888 { 1889 if (hdsp->control_register & HDSP_ClockModeMaster) 1890 return 0; 1891 else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate) 1892 return 0; 1893 return 1; 1894 } 1895 1896 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1897 { 1898 static char *texts[] = {"Master", "Slave" }; 1899 1900 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1901 uinfo->count = 1; 1902 uinfo->value.enumerated.items = 2; 1903 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1904 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1905 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1906 return 0; 1907 } 1908 1909 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1910 { 1911 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1912 1913 ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp); 1914 return 0; 1915 } 1916 1917 #define HDSP_CLOCK_SOURCE(xname, xindex) \ 1918 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1919 .name = xname, \ 1920 .index = xindex, \ 1921 .info = snd_hdsp_info_clock_source, \ 1922 .get = snd_hdsp_get_clock_source, \ 1923 .put = snd_hdsp_put_clock_source \ 1924 } 1925 1926 static int hdsp_clock_source(struct hdsp *hdsp) 1927 { 1928 if (hdsp->control_register & HDSP_ClockModeMaster) { 1929 switch (hdsp->system_sample_rate) { 1930 case 32000: 1931 return 1; 1932 case 44100: 1933 return 2; 1934 case 48000: 1935 return 3; 1936 case 64000: 1937 return 4; 1938 case 88200: 1939 return 5; 1940 case 96000: 1941 return 6; 1942 case 128000: 1943 return 7; 1944 case 176400: 1945 return 8; 1946 case 192000: 1947 return 9; 1948 default: 1949 return 3; 1950 } 1951 } else { 1952 return 0; 1953 } 1954 } 1955 1956 static int hdsp_set_clock_source(struct hdsp *hdsp, int mode) 1957 { 1958 int rate; 1959 switch (mode) { 1960 case HDSP_CLOCK_SOURCE_AUTOSYNC: 1961 if (hdsp_external_sample_rate(hdsp) != 0) { 1962 if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) { 1963 hdsp->control_register &= ~HDSP_ClockModeMaster; 1964 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1965 return 0; 1966 } 1967 } 1968 return -1; 1969 case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: 1970 rate = 32000; 1971 break; 1972 case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: 1973 rate = 44100; 1974 break; 1975 case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: 1976 rate = 48000; 1977 break; 1978 case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: 1979 rate = 64000; 1980 break; 1981 case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: 1982 rate = 88200; 1983 break; 1984 case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: 1985 rate = 96000; 1986 break; 1987 case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ: 1988 rate = 128000; 1989 break; 1990 case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ: 1991 rate = 176400; 1992 break; 1993 case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ: 1994 rate = 192000; 1995 break; 1996 default: 1997 rate = 48000; 1998 } 1999 hdsp->control_register |= HDSP_ClockModeMaster; 2000 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2001 hdsp_set_rate(hdsp, rate, 1); 2002 return 0; 2003 } 2004 2005 static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2006 { 2007 static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz", "Internal 192.0 KHz" }; 2008 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2009 2010 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2011 uinfo->count = 1; 2012 if (hdsp->io_type == H9632) 2013 uinfo->value.enumerated.items = 10; 2014 else 2015 uinfo->value.enumerated.items = 7; 2016 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2017 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2018 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2019 return 0; 2020 } 2021 2022 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2023 { 2024 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2025 2026 ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp); 2027 return 0; 2028 } 2029 2030 static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2031 { 2032 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2033 int change; 2034 int val; 2035 2036 if (!snd_hdsp_use_is_exclusive(hdsp)) 2037 return -EBUSY; 2038 val = ucontrol->value.enumerated.item[0]; 2039 if (val < 0) val = 0; 2040 if (hdsp->io_type == H9632) { 2041 if (val > 9) 2042 val = 9; 2043 } else { 2044 if (val > 6) 2045 val = 6; 2046 } 2047 spin_lock_irq(&hdsp->lock); 2048 if (val != hdsp_clock_source(hdsp)) 2049 change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0; 2050 else 2051 change = 0; 2052 spin_unlock_irq(&hdsp->lock); 2053 return change; 2054 } 2055 2056 static int snd_hdsp_info_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2057 { 2058 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2059 uinfo->count = 1; 2060 uinfo->value.integer.min = 0; 2061 uinfo->value.integer.max = 1; 2062 return 0; 2063 } 2064 2065 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2066 { 2067 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2068 2069 ucontrol->value.integer.value[0] = hdsp->clock_source_locked; 2070 return 0; 2071 } 2072 2073 static int snd_hdsp_put_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2074 { 2075 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2076 int change; 2077 2078 change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked; 2079 if (change) 2080 hdsp->clock_source_locked = ucontrol->value.integer.value[0]; 2081 return change; 2082 } 2083 2084 #define HDSP_DA_GAIN(xname, xindex) \ 2085 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2086 .name = xname, \ 2087 .index = xindex, \ 2088 .info = snd_hdsp_info_da_gain, \ 2089 .get = snd_hdsp_get_da_gain, \ 2090 .put = snd_hdsp_put_da_gain \ 2091 } 2092 2093 static int hdsp_da_gain(struct hdsp *hdsp) 2094 { 2095 switch (hdsp->control_register & HDSP_DAGainMask) { 2096 case HDSP_DAGainHighGain: 2097 return 0; 2098 case HDSP_DAGainPlus4dBu: 2099 return 1; 2100 case HDSP_DAGainMinus10dBV: 2101 return 2; 2102 default: 2103 return 1; 2104 } 2105 } 2106 2107 static int hdsp_set_da_gain(struct hdsp *hdsp, int mode) 2108 { 2109 hdsp->control_register &= ~HDSP_DAGainMask; 2110 switch (mode) { 2111 case 0: 2112 hdsp->control_register |= HDSP_DAGainHighGain; 2113 break; 2114 case 1: 2115 hdsp->control_register |= HDSP_DAGainPlus4dBu; 2116 break; 2117 case 2: 2118 hdsp->control_register |= HDSP_DAGainMinus10dBV; 2119 break; 2120 default: 2121 return -1; 2122 2123 } 2124 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2125 return 0; 2126 } 2127 2128 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2129 { 2130 static char *texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"}; 2131 2132 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2133 uinfo->count = 1; 2134 uinfo->value.enumerated.items = 3; 2135 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2136 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2137 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2138 return 0; 2139 } 2140 2141 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2142 { 2143 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2144 2145 ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp); 2146 return 0; 2147 } 2148 2149 static int snd_hdsp_put_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2150 { 2151 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2152 int change; 2153 int val; 2154 2155 if (!snd_hdsp_use_is_exclusive(hdsp)) 2156 return -EBUSY; 2157 val = ucontrol->value.enumerated.item[0]; 2158 if (val < 0) val = 0; 2159 if (val > 2) val = 2; 2160 spin_lock_irq(&hdsp->lock); 2161 if (val != hdsp_da_gain(hdsp)) 2162 change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0; 2163 else 2164 change = 0; 2165 spin_unlock_irq(&hdsp->lock); 2166 return change; 2167 } 2168 2169 #define HDSP_AD_GAIN(xname, xindex) \ 2170 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2171 .name = xname, \ 2172 .index = xindex, \ 2173 .info = snd_hdsp_info_ad_gain, \ 2174 .get = snd_hdsp_get_ad_gain, \ 2175 .put = snd_hdsp_put_ad_gain \ 2176 } 2177 2178 static int hdsp_ad_gain(struct hdsp *hdsp) 2179 { 2180 switch (hdsp->control_register & HDSP_ADGainMask) { 2181 case HDSP_ADGainMinus10dBV: 2182 return 0; 2183 case HDSP_ADGainPlus4dBu: 2184 return 1; 2185 case HDSP_ADGainLowGain: 2186 return 2; 2187 default: 2188 return 1; 2189 } 2190 } 2191 2192 static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode) 2193 { 2194 hdsp->control_register &= ~HDSP_ADGainMask; 2195 switch (mode) { 2196 case 0: 2197 hdsp->control_register |= HDSP_ADGainMinus10dBV; 2198 break; 2199 case 1: 2200 hdsp->control_register |= HDSP_ADGainPlus4dBu; 2201 break; 2202 case 2: 2203 hdsp->control_register |= HDSP_ADGainLowGain; 2204 break; 2205 default: 2206 return -1; 2207 2208 } 2209 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2210 return 0; 2211 } 2212 2213 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2214 { 2215 static char *texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"}; 2216 2217 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2218 uinfo->count = 1; 2219 uinfo->value.enumerated.items = 3; 2220 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2221 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2222 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2223 return 0; 2224 } 2225 2226 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2227 { 2228 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2229 2230 ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp); 2231 return 0; 2232 } 2233 2234 static int snd_hdsp_put_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2235 { 2236 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2237 int change; 2238 int val; 2239 2240 if (!snd_hdsp_use_is_exclusive(hdsp)) 2241 return -EBUSY; 2242 val = ucontrol->value.enumerated.item[0]; 2243 if (val < 0) val = 0; 2244 if (val > 2) val = 2; 2245 spin_lock_irq(&hdsp->lock); 2246 if (val != hdsp_ad_gain(hdsp)) 2247 change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0; 2248 else 2249 change = 0; 2250 spin_unlock_irq(&hdsp->lock); 2251 return change; 2252 } 2253 2254 #define HDSP_PHONE_GAIN(xname, xindex) \ 2255 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2256 .name = xname, \ 2257 .index = xindex, \ 2258 .info = snd_hdsp_info_phone_gain, \ 2259 .get = snd_hdsp_get_phone_gain, \ 2260 .put = snd_hdsp_put_phone_gain \ 2261 } 2262 2263 static int hdsp_phone_gain(struct hdsp *hdsp) 2264 { 2265 switch (hdsp->control_register & HDSP_PhoneGainMask) { 2266 case HDSP_PhoneGain0dB: 2267 return 0; 2268 case HDSP_PhoneGainMinus6dB: 2269 return 1; 2270 case HDSP_PhoneGainMinus12dB: 2271 return 2; 2272 default: 2273 return 0; 2274 } 2275 } 2276 2277 static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode) 2278 { 2279 hdsp->control_register &= ~HDSP_PhoneGainMask; 2280 switch (mode) { 2281 case 0: 2282 hdsp->control_register |= HDSP_PhoneGain0dB; 2283 break; 2284 case 1: 2285 hdsp->control_register |= HDSP_PhoneGainMinus6dB; 2286 break; 2287 case 2: 2288 hdsp->control_register |= HDSP_PhoneGainMinus12dB; 2289 break; 2290 default: 2291 return -1; 2292 2293 } 2294 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2295 return 0; 2296 } 2297 2298 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2299 { 2300 static char *texts[] = {"0 dB", "-6 dB", "-12 dB"}; 2301 2302 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2303 uinfo->count = 1; 2304 uinfo->value.enumerated.items = 3; 2305 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2306 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2307 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2308 return 0; 2309 } 2310 2311 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2312 { 2313 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2314 2315 ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp); 2316 return 0; 2317 } 2318 2319 static int snd_hdsp_put_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2320 { 2321 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2322 int change; 2323 int val; 2324 2325 if (!snd_hdsp_use_is_exclusive(hdsp)) 2326 return -EBUSY; 2327 val = ucontrol->value.enumerated.item[0]; 2328 if (val < 0) val = 0; 2329 if (val > 2) val = 2; 2330 spin_lock_irq(&hdsp->lock); 2331 if (val != hdsp_phone_gain(hdsp)) 2332 change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0; 2333 else 2334 change = 0; 2335 spin_unlock_irq(&hdsp->lock); 2336 return change; 2337 } 2338 2339 #define HDSP_XLR_BREAKOUT_CABLE(xname, xindex) \ 2340 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2341 .name = xname, \ 2342 .index = xindex, \ 2343 .info = snd_hdsp_info_xlr_breakout_cable, \ 2344 .get = snd_hdsp_get_xlr_breakout_cable, \ 2345 .put = snd_hdsp_put_xlr_breakout_cable \ 2346 } 2347 2348 static int hdsp_xlr_breakout_cable(struct hdsp *hdsp) 2349 { 2350 if (hdsp->control_register & HDSP_XLRBreakoutCable) 2351 return 1; 2352 return 0; 2353 } 2354 2355 static int hdsp_set_xlr_breakout_cable(struct hdsp *hdsp, int mode) 2356 { 2357 if (mode) 2358 hdsp->control_register |= HDSP_XLRBreakoutCable; 2359 else 2360 hdsp->control_register &= ~HDSP_XLRBreakoutCable; 2361 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2362 return 0; 2363 } 2364 2365 static int snd_hdsp_info_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2366 { 2367 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2368 uinfo->count = 1; 2369 uinfo->value.integer.min = 0; 2370 uinfo->value.integer.max = 1; 2371 return 0; 2372 } 2373 2374 static int snd_hdsp_get_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2375 { 2376 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2377 2378 ucontrol->value.enumerated.item[0] = hdsp_xlr_breakout_cable(hdsp); 2379 return 0; 2380 } 2381 2382 static int snd_hdsp_put_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2383 { 2384 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2385 int change; 2386 int val; 2387 2388 if (!snd_hdsp_use_is_exclusive(hdsp)) 2389 return -EBUSY; 2390 val = ucontrol->value.integer.value[0] & 1; 2391 spin_lock_irq(&hdsp->lock); 2392 change = (int)val != hdsp_xlr_breakout_cable(hdsp); 2393 hdsp_set_xlr_breakout_cable(hdsp, val); 2394 spin_unlock_irq(&hdsp->lock); 2395 return change; 2396 } 2397 2398 /* (De)activates old RME Analog Extension Board 2399 These are connected to the internal ADAT connector 2400 Switching this on desactivates external ADAT 2401 */ 2402 #define HDSP_AEB(xname, xindex) \ 2403 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2404 .name = xname, \ 2405 .index = xindex, \ 2406 .info = snd_hdsp_info_aeb, \ 2407 .get = snd_hdsp_get_aeb, \ 2408 .put = snd_hdsp_put_aeb \ 2409 } 2410 2411 static int hdsp_aeb(struct hdsp *hdsp) 2412 { 2413 if (hdsp->control_register & HDSP_AnalogExtensionBoard) 2414 return 1; 2415 return 0; 2416 } 2417 2418 static int hdsp_set_aeb(struct hdsp *hdsp, int mode) 2419 { 2420 if (mode) 2421 hdsp->control_register |= HDSP_AnalogExtensionBoard; 2422 else 2423 hdsp->control_register &= ~HDSP_AnalogExtensionBoard; 2424 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2425 return 0; 2426 } 2427 2428 static int snd_hdsp_info_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2429 { 2430 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2431 uinfo->count = 1; 2432 uinfo->value.integer.min = 0; 2433 uinfo->value.integer.max = 1; 2434 return 0; 2435 } 2436 2437 static int snd_hdsp_get_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2438 { 2439 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2440 2441 ucontrol->value.enumerated.item[0] = hdsp_aeb(hdsp); 2442 return 0; 2443 } 2444 2445 static int snd_hdsp_put_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2446 { 2447 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2448 int change; 2449 int val; 2450 2451 if (!snd_hdsp_use_is_exclusive(hdsp)) 2452 return -EBUSY; 2453 val = ucontrol->value.integer.value[0] & 1; 2454 spin_lock_irq(&hdsp->lock); 2455 change = (int)val != hdsp_aeb(hdsp); 2456 hdsp_set_aeb(hdsp, val); 2457 spin_unlock_irq(&hdsp->lock); 2458 return change; 2459 } 2460 2461 #define HDSP_PREF_SYNC_REF(xname, xindex) \ 2462 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2463 .name = xname, \ 2464 .index = xindex, \ 2465 .info = snd_hdsp_info_pref_sync_ref, \ 2466 .get = snd_hdsp_get_pref_sync_ref, \ 2467 .put = snd_hdsp_put_pref_sync_ref \ 2468 } 2469 2470 static int hdsp_pref_sync_ref(struct hdsp *hdsp) 2471 { 2472 /* Notice that this looks at the requested sync source, 2473 not the one actually in use. 2474 */ 2475 2476 switch (hdsp->control_register & HDSP_SyncRefMask) { 2477 case HDSP_SyncRef_ADAT1: 2478 return HDSP_SYNC_FROM_ADAT1; 2479 case HDSP_SyncRef_ADAT2: 2480 return HDSP_SYNC_FROM_ADAT2; 2481 case HDSP_SyncRef_ADAT3: 2482 return HDSP_SYNC_FROM_ADAT3; 2483 case HDSP_SyncRef_SPDIF: 2484 return HDSP_SYNC_FROM_SPDIF; 2485 case HDSP_SyncRef_WORD: 2486 return HDSP_SYNC_FROM_WORD; 2487 case HDSP_SyncRef_ADAT_SYNC: 2488 return HDSP_SYNC_FROM_ADAT_SYNC; 2489 default: 2490 return HDSP_SYNC_FROM_WORD; 2491 } 2492 return 0; 2493 } 2494 2495 static int hdsp_set_pref_sync_ref(struct hdsp *hdsp, int pref) 2496 { 2497 hdsp->control_register &= ~HDSP_SyncRefMask; 2498 switch (pref) { 2499 case HDSP_SYNC_FROM_ADAT1: 2500 hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */ 2501 break; 2502 case HDSP_SYNC_FROM_ADAT2: 2503 hdsp->control_register |= HDSP_SyncRef_ADAT2; 2504 break; 2505 case HDSP_SYNC_FROM_ADAT3: 2506 hdsp->control_register |= HDSP_SyncRef_ADAT3; 2507 break; 2508 case HDSP_SYNC_FROM_SPDIF: 2509 hdsp->control_register |= HDSP_SyncRef_SPDIF; 2510 break; 2511 case HDSP_SYNC_FROM_WORD: 2512 hdsp->control_register |= HDSP_SyncRef_WORD; 2513 break; 2514 case HDSP_SYNC_FROM_ADAT_SYNC: 2515 hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC; 2516 break; 2517 default: 2518 return -1; 2519 } 2520 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2521 return 0; 2522 } 2523 2524 static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2525 { 2526 static char *texts[] = {"Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3" }; 2527 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2528 2529 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2530 uinfo->count = 1; 2531 2532 switch (hdsp->io_type) { 2533 case Digiface: 2534 case H9652: 2535 uinfo->value.enumerated.items = 6; 2536 break; 2537 case Multiface: 2538 uinfo->value.enumerated.items = 4; 2539 break; 2540 case H9632: 2541 uinfo->value.enumerated.items = 3; 2542 break; 2543 default: 2544 uinfo->value.enumerated.items = 0; 2545 break; 2546 } 2547 2548 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2549 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2550 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2551 return 0; 2552 } 2553 2554 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2555 { 2556 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2557 2558 ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp); 2559 return 0; 2560 } 2561 2562 static int snd_hdsp_put_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2563 { 2564 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2565 int change, max; 2566 unsigned int val; 2567 2568 if (!snd_hdsp_use_is_exclusive(hdsp)) 2569 return -EBUSY; 2570 2571 switch (hdsp->io_type) { 2572 case Digiface: 2573 case H9652: 2574 max = 6; 2575 break; 2576 case Multiface: 2577 max = 4; 2578 break; 2579 case H9632: 2580 max = 3; 2581 break; 2582 default: 2583 return -EIO; 2584 } 2585 2586 val = ucontrol->value.enumerated.item[0] % max; 2587 spin_lock_irq(&hdsp->lock); 2588 change = (int)val != hdsp_pref_sync_ref(hdsp); 2589 hdsp_set_pref_sync_ref(hdsp, val); 2590 spin_unlock_irq(&hdsp->lock); 2591 return change; 2592 } 2593 2594 #define HDSP_AUTOSYNC_REF(xname, xindex) \ 2595 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2596 .name = xname, \ 2597 .index = xindex, \ 2598 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 2599 .info = snd_hdsp_info_autosync_ref, \ 2600 .get = snd_hdsp_get_autosync_ref, \ 2601 } 2602 2603 static int hdsp_autosync_ref(struct hdsp *hdsp) 2604 { 2605 /* This looks at the autosync selected sync reference */ 2606 unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); 2607 2608 switch (status2 & HDSP_SelSyncRefMask) { 2609 case HDSP_SelSyncRef_WORD: 2610 return HDSP_AUTOSYNC_FROM_WORD; 2611 case HDSP_SelSyncRef_ADAT_SYNC: 2612 return HDSP_AUTOSYNC_FROM_ADAT_SYNC; 2613 case HDSP_SelSyncRef_SPDIF: 2614 return HDSP_AUTOSYNC_FROM_SPDIF; 2615 case HDSP_SelSyncRefMask: 2616 return HDSP_AUTOSYNC_FROM_NONE; 2617 case HDSP_SelSyncRef_ADAT1: 2618 return HDSP_AUTOSYNC_FROM_ADAT1; 2619 case HDSP_SelSyncRef_ADAT2: 2620 return HDSP_AUTOSYNC_FROM_ADAT2; 2621 case HDSP_SelSyncRef_ADAT3: 2622 return HDSP_AUTOSYNC_FROM_ADAT3; 2623 default: 2624 return HDSP_AUTOSYNC_FROM_WORD; 2625 } 2626 return 0; 2627 } 2628 2629 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2630 { 2631 static char *texts[] = {"Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3" }; 2632 2633 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2634 uinfo->count = 1; 2635 uinfo->value.enumerated.items = 7; 2636 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2637 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2638 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2639 return 0; 2640 } 2641 2642 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2643 { 2644 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2645 2646 ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp); 2647 return 0; 2648 } 2649 2650 #define HDSP_LINE_OUT(xname, xindex) \ 2651 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2652 .name = xname, \ 2653 .index = xindex, \ 2654 .info = snd_hdsp_info_line_out, \ 2655 .get = snd_hdsp_get_line_out, \ 2656 .put = snd_hdsp_put_line_out \ 2657 } 2658 2659 static int hdsp_line_out(struct hdsp *hdsp) 2660 { 2661 return (hdsp->control_register & HDSP_LineOut) ? 1 : 0; 2662 } 2663 2664 static int hdsp_set_line_output(struct hdsp *hdsp, int out) 2665 { 2666 if (out) 2667 hdsp->control_register |= HDSP_LineOut; 2668 else 2669 hdsp->control_register &= ~HDSP_LineOut; 2670 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2671 return 0; 2672 } 2673 2674 static int snd_hdsp_info_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2675 { 2676 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2677 uinfo->count = 1; 2678 uinfo->value.integer.min = 0; 2679 uinfo->value.integer.max = 1; 2680 return 0; 2681 } 2682 2683 static int snd_hdsp_get_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2684 { 2685 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2686 2687 spin_lock_irq(&hdsp->lock); 2688 ucontrol->value.integer.value[0] = hdsp_line_out(hdsp); 2689 spin_unlock_irq(&hdsp->lock); 2690 return 0; 2691 } 2692 2693 static int snd_hdsp_put_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2694 { 2695 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2696 int change; 2697 unsigned int val; 2698 2699 if (!snd_hdsp_use_is_exclusive(hdsp)) 2700 return -EBUSY; 2701 val = ucontrol->value.integer.value[0] & 1; 2702 spin_lock_irq(&hdsp->lock); 2703 change = (int)val != hdsp_line_out(hdsp); 2704 hdsp_set_line_output(hdsp, val); 2705 spin_unlock_irq(&hdsp->lock); 2706 return change; 2707 } 2708 2709 #define HDSP_PRECISE_POINTER(xname, xindex) \ 2710 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \ 2711 .name = xname, \ 2712 .index = xindex, \ 2713 .info = snd_hdsp_info_precise_pointer, \ 2714 .get = snd_hdsp_get_precise_pointer, \ 2715 .put = snd_hdsp_put_precise_pointer \ 2716 } 2717 2718 static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise) 2719 { 2720 if (precise) 2721 hdsp->precise_ptr = 1; 2722 else 2723 hdsp->precise_ptr = 0; 2724 return 0; 2725 } 2726 2727 static int snd_hdsp_info_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2728 { 2729 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2730 uinfo->count = 1; 2731 uinfo->value.integer.min = 0; 2732 uinfo->value.integer.max = 1; 2733 return 0; 2734 } 2735 2736 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2737 { 2738 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2739 2740 spin_lock_irq(&hdsp->lock); 2741 ucontrol->value.integer.value[0] = hdsp->precise_ptr; 2742 spin_unlock_irq(&hdsp->lock); 2743 return 0; 2744 } 2745 2746 static int snd_hdsp_put_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2747 { 2748 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2749 int change; 2750 unsigned int val; 2751 2752 if (!snd_hdsp_use_is_exclusive(hdsp)) 2753 return -EBUSY; 2754 val = ucontrol->value.integer.value[0] & 1; 2755 spin_lock_irq(&hdsp->lock); 2756 change = (int)val != hdsp->precise_ptr; 2757 hdsp_set_precise_pointer(hdsp, val); 2758 spin_unlock_irq(&hdsp->lock); 2759 return change; 2760 } 2761 2762 #define HDSP_USE_MIDI_TASKLET(xname, xindex) \ 2763 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \ 2764 .name = xname, \ 2765 .index = xindex, \ 2766 .info = snd_hdsp_info_use_midi_tasklet, \ 2767 .get = snd_hdsp_get_use_midi_tasklet, \ 2768 .put = snd_hdsp_put_use_midi_tasklet \ 2769 } 2770 2771 static int hdsp_set_use_midi_tasklet(struct hdsp *hdsp, int use_tasklet) 2772 { 2773 if (use_tasklet) 2774 hdsp->use_midi_tasklet = 1; 2775 else 2776 hdsp->use_midi_tasklet = 0; 2777 return 0; 2778 } 2779 2780 static int snd_hdsp_info_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2781 { 2782 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 2783 uinfo->count = 1; 2784 uinfo->value.integer.min = 0; 2785 uinfo->value.integer.max = 1; 2786 return 0; 2787 } 2788 2789 static int snd_hdsp_get_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2790 { 2791 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2792 2793 spin_lock_irq(&hdsp->lock); 2794 ucontrol->value.integer.value[0] = hdsp->use_midi_tasklet; 2795 spin_unlock_irq(&hdsp->lock); 2796 return 0; 2797 } 2798 2799 static int snd_hdsp_put_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2800 { 2801 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2802 int change; 2803 unsigned int val; 2804 2805 if (!snd_hdsp_use_is_exclusive(hdsp)) 2806 return -EBUSY; 2807 val = ucontrol->value.integer.value[0] & 1; 2808 spin_lock_irq(&hdsp->lock); 2809 change = (int)val != hdsp->use_midi_tasklet; 2810 hdsp_set_use_midi_tasklet(hdsp, val); 2811 spin_unlock_irq(&hdsp->lock); 2812 return change; 2813 } 2814 2815 #define HDSP_MIXER(xname, xindex) \ 2816 { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ 2817 .name = xname, \ 2818 .index = xindex, \ 2819 .device = 0, \ 2820 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \ 2821 SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2822 .info = snd_hdsp_info_mixer, \ 2823 .get = snd_hdsp_get_mixer, \ 2824 .put = snd_hdsp_put_mixer \ 2825 } 2826 2827 static int snd_hdsp_info_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2828 { 2829 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2830 uinfo->count = 3; 2831 uinfo->value.integer.min = 0; 2832 uinfo->value.integer.max = 65536; 2833 uinfo->value.integer.step = 1; 2834 return 0; 2835 } 2836 2837 static int snd_hdsp_get_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2838 { 2839 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2840 int source; 2841 int destination; 2842 int addr; 2843 2844 source = ucontrol->value.integer.value[0]; 2845 destination = ucontrol->value.integer.value[1]; 2846 2847 if (source >= hdsp->max_channels) 2848 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination); 2849 else 2850 addr = hdsp_input_to_output_key(hdsp,source, destination); 2851 2852 spin_lock_irq(&hdsp->lock); 2853 ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr); 2854 spin_unlock_irq(&hdsp->lock); 2855 return 0; 2856 } 2857 2858 static int snd_hdsp_put_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2859 { 2860 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2861 int change; 2862 int source; 2863 int destination; 2864 int gain; 2865 int addr; 2866 2867 if (!snd_hdsp_use_is_exclusive(hdsp)) 2868 return -EBUSY; 2869 2870 source = ucontrol->value.integer.value[0]; 2871 destination = ucontrol->value.integer.value[1]; 2872 2873 if (source >= hdsp->max_channels) 2874 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination); 2875 else 2876 addr = hdsp_input_to_output_key(hdsp,source, destination); 2877 2878 gain = ucontrol->value.integer.value[2]; 2879 2880 spin_lock_irq(&hdsp->lock); 2881 change = gain != hdsp_read_gain(hdsp, addr); 2882 if (change) 2883 hdsp_write_gain(hdsp, addr, gain); 2884 spin_unlock_irq(&hdsp->lock); 2885 return change; 2886 } 2887 2888 #define HDSP_WC_SYNC_CHECK(xname, xindex) \ 2889 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2890 .name = xname, \ 2891 .index = xindex, \ 2892 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2893 .info = snd_hdsp_info_sync_check, \ 2894 .get = snd_hdsp_get_wc_sync_check \ 2895 } 2896 2897 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2898 { 2899 static char *texts[] = {"No Lock", "Lock", "Sync" }; 2900 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2901 uinfo->count = 1; 2902 uinfo->value.enumerated.items = 3; 2903 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2904 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2905 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2906 return 0; 2907 } 2908 2909 static int hdsp_wc_sync_check(struct hdsp *hdsp) 2910 { 2911 int status2 = hdsp_read(hdsp, HDSP_status2Register); 2912 if (status2 & HDSP_wc_lock) { 2913 if (status2 & HDSP_wc_sync) 2914 return 2; 2915 else 2916 return 1; 2917 } else 2918 return 0; 2919 return 0; 2920 } 2921 2922 static int snd_hdsp_get_wc_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2923 { 2924 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2925 2926 ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp); 2927 return 0; 2928 } 2929 2930 #define HDSP_SPDIF_SYNC_CHECK(xname, xindex) \ 2931 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2932 .name = xname, \ 2933 .index = xindex, \ 2934 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2935 .info = snd_hdsp_info_sync_check, \ 2936 .get = snd_hdsp_get_spdif_sync_check \ 2937 } 2938 2939 static int hdsp_spdif_sync_check(struct hdsp *hdsp) 2940 { 2941 int status = hdsp_read(hdsp, HDSP_statusRegister); 2942 if (status & HDSP_SPDIFErrorFlag) 2943 return 0; 2944 else { 2945 if (status & HDSP_SPDIFSync) 2946 return 2; 2947 else 2948 return 1; 2949 } 2950 return 0; 2951 } 2952 2953 static int snd_hdsp_get_spdif_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2954 { 2955 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2956 2957 ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp); 2958 return 0; 2959 } 2960 2961 #define HDSP_ADATSYNC_SYNC_CHECK(xname, xindex) \ 2962 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2963 .name = xname, \ 2964 .index = xindex, \ 2965 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2966 .info = snd_hdsp_info_sync_check, \ 2967 .get = snd_hdsp_get_adatsync_sync_check \ 2968 } 2969 2970 static int hdsp_adatsync_sync_check(struct hdsp *hdsp) 2971 { 2972 int status = hdsp_read(hdsp, HDSP_statusRegister); 2973 if (status & HDSP_TimecodeLock) { 2974 if (status & HDSP_TimecodeSync) 2975 return 2; 2976 else 2977 return 1; 2978 } else 2979 return 0; 2980 } 2981 2982 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2983 { 2984 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2985 2986 ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp); 2987 return 0; 2988 } 2989 2990 #define HDSP_ADAT_SYNC_CHECK \ 2991 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2992 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2993 .info = snd_hdsp_info_sync_check, \ 2994 .get = snd_hdsp_get_adat_sync_check \ 2995 } 2996 2997 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx) 2998 { 2999 int status = hdsp_read(hdsp, HDSP_statusRegister); 3000 3001 if (status & (HDSP_Lock0>>idx)) { 3002 if (status & (HDSP_Sync0>>idx)) 3003 return 2; 3004 else 3005 return 1; 3006 } else 3007 return 0; 3008 } 3009 3010 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3011 { 3012 int offset; 3013 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3014 3015 offset = ucontrol->id.index - 1; 3016 snd_assert(offset >= 0); 3017 3018 switch (hdsp->io_type) { 3019 case Digiface: 3020 case H9652: 3021 if (offset >= 3) 3022 return -EINVAL; 3023 break; 3024 case Multiface: 3025 case H9632: 3026 if (offset >= 1) 3027 return -EINVAL; 3028 break; 3029 default: 3030 return -EIO; 3031 } 3032 3033 ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset); 3034 return 0; 3035 } 3036 3037 static struct snd_kcontrol_new snd_hdsp_9632_controls[] = { 3038 HDSP_DA_GAIN("DA Gain", 0), 3039 HDSP_AD_GAIN("AD Gain", 0), 3040 HDSP_PHONE_GAIN("Phones Gain", 0), 3041 HDSP_XLR_BREAKOUT_CABLE("XLR Breakout Cable", 0) 3042 }; 3043 3044 static struct snd_kcontrol_new snd_hdsp_controls[] = { 3045 { 3046 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 3047 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), 3048 .info = snd_hdsp_control_spdif_info, 3049 .get = snd_hdsp_control_spdif_get, 3050 .put = snd_hdsp_control_spdif_put, 3051 }, 3052 { 3053 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, 3054 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 3055 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM), 3056 .info = snd_hdsp_control_spdif_stream_info, 3057 .get = snd_hdsp_control_spdif_stream_get, 3058 .put = snd_hdsp_control_spdif_stream_put, 3059 }, 3060 { 3061 .access = SNDRV_CTL_ELEM_ACCESS_READ, 3062 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 3063 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK), 3064 .info = snd_hdsp_control_spdif_mask_info, 3065 .get = snd_hdsp_control_spdif_mask_get, 3066 .private_value = IEC958_AES0_NONAUDIO | 3067 IEC958_AES0_PROFESSIONAL | 3068 IEC958_AES0_CON_EMPHASIS, 3069 }, 3070 { 3071 .access = SNDRV_CTL_ELEM_ACCESS_READ, 3072 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 3073 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK), 3074 .info = snd_hdsp_control_spdif_mask_info, 3075 .get = snd_hdsp_control_spdif_mask_get, 3076 .private_value = IEC958_AES0_NONAUDIO | 3077 IEC958_AES0_PROFESSIONAL | 3078 IEC958_AES0_PRO_EMPHASIS, 3079 }, 3080 HDSP_MIXER("Mixer", 0), 3081 HDSP_SPDIF_IN("IEC958 Input Connector", 0), 3082 HDSP_SPDIF_OUT("IEC958 Output also on ADAT1", 0), 3083 HDSP_SPDIF_PROFESSIONAL("IEC958 Professional Bit", 0), 3084 HDSP_SPDIF_EMPHASIS("IEC958 Emphasis Bit", 0), 3085 HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0), 3086 /* 'Sample Clock Source' complies with the alsa control naming scheme */ 3087 HDSP_CLOCK_SOURCE("Sample Clock Source", 0), 3088 { 3089 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3090 .name = "Sample Clock Source Locking", 3091 .info = snd_hdsp_info_clock_source_lock, 3092 .get = snd_hdsp_get_clock_source_lock, 3093 .put = snd_hdsp_put_clock_source_lock, 3094 }, 3095 HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0), 3096 HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0), 3097 HDSP_AUTOSYNC_REF("AutoSync Reference", 0), 3098 HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0), 3099 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0), 3100 /* 'External Rate' complies with the alsa control naming scheme */ 3101 HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0), 3102 HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0), 3103 HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0), 3104 HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0), 3105 HDSP_LINE_OUT("Line Out", 0), 3106 HDSP_PRECISE_POINTER("Precise Pointer", 0), 3107 HDSP_USE_MIDI_TASKLET("Use Midi Tasklet", 0), 3108 }; 3109 3110 static struct snd_kcontrol_new snd_hdsp_96xx_aeb = HDSP_AEB("Analog Extension Board", 0); 3111 static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK; 3112 3113 static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp) 3114 { 3115 unsigned int idx; 3116 int err; 3117 struct snd_kcontrol *kctl; 3118 3119 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) { 3120 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp))) < 0) 3121 return err; 3122 if (idx == 1) /* IEC958 (S/PDIF) Stream */ 3123 hdsp->spdif_ctl = kctl; 3124 } 3125 3126 /* ADAT SyncCheck status */ 3127 snd_hdsp_adat_sync_check.name = "ADAT Lock Status"; 3128 snd_hdsp_adat_sync_check.index = 1; 3129 if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) 3130 return err; 3131 if (hdsp->io_type == Digiface || hdsp->io_type == H9652) { 3132 for (idx = 1; idx < 3; ++idx) { 3133 snd_hdsp_adat_sync_check.index = idx+1; 3134 if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) 3135 return err; 3136 } 3137 } 3138 3139 /* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */ 3140 if (hdsp->io_type == H9632) { 3141 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) { 3142 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp))) < 0) 3143 return err; 3144 } 3145 } 3146 3147 /* AEB control for H96xx card */ 3148 if (hdsp->io_type == H9632 || hdsp->io_type == H9652) { 3149 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp))) < 0) 3150 return err; 3151 } 3152 3153 return 0; 3154 } 3155 3156 /*------------------------------------------------------------ 3157 /proc interface 3158 ------------------------------------------------------------*/ 3159 3160 static void 3161 snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer) 3162 { 3163 struct hdsp *hdsp = (struct hdsp *) entry->private_data; 3164 unsigned int status; 3165 unsigned int status2; 3166 char *pref_sync_ref; 3167 char *autosync_ref; 3168 char *system_clock_mode; 3169 char *clock_source; 3170 int x; 3171 3172 if (hdsp_check_for_iobox (hdsp)) 3173 snd_iprintf(buffer, "No I/O box connected.\nPlease connect one and upload firmware.\n"); 3174 return; 3175 3176 if (hdsp_check_for_firmware(hdsp, 0)) { 3177 if (hdsp->state & HDSP_FirmwareCached) { 3178 if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { 3179 snd_iprintf(buffer, "Firmware loading from cache failed, please upload manually.\n"); 3180 return; 3181 } 3182 } else { 3183 snd_iprintf(buffer, "No firmware loaded nor cached, please upload firmware.\n"); 3184 return; 3185 } 3186 } 3187 3188 status = hdsp_read(hdsp, HDSP_statusRegister); 3189 status2 = hdsp_read(hdsp, HDSP_status2Register); 3190 3191 snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name, hdsp->card->number + 1); 3192 snd_iprintf(buffer, "Buffers: capture %p playback %p\n", 3193 hdsp->capture_buffer, hdsp->playback_buffer); 3194 snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n", 3195 hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase); 3196 snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register); 3197 snd_iprintf(buffer, "Control2 register: 0x%x\n", hdsp->control2_register); 3198 snd_iprintf(buffer, "Status register: 0x%x\n", status); 3199 snd_iprintf(buffer, "Status2 register: 0x%x\n", status2); 3200 snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff); 3201 snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0)); 3202 snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0)); 3203 snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1)); 3204 snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1)); 3205 snd_iprintf(buffer, "Use Midi Tasklet: %s\n", hdsp->use_midi_tasklet ? "on" : "off"); 3206 3207 snd_iprintf(buffer, "\n"); 3208 3209 x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask)); 3210 3211 snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes); 3212 snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp)); 3213 snd_iprintf(buffer, "Precise pointer: %s\n", hdsp->precise_ptr ? "on" : "off"); 3214 snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off"); 3215 3216 snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2); 3217 3218 snd_iprintf(buffer, "\n"); 3219 3220 3221 switch (hdsp_clock_source(hdsp)) { 3222 case HDSP_CLOCK_SOURCE_AUTOSYNC: 3223 clock_source = "AutoSync"; 3224 break; 3225 case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: 3226 clock_source = "Internal 32 kHz"; 3227 break; 3228 case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: 3229 clock_source = "Internal 44.1 kHz"; 3230 break; 3231 case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: 3232 clock_source = "Internal 48 kHz"; 3233 break; 3234 case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: 3235 clock_source = "Internal 64 kHz"; 3236 break; 3237 case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: 3238 clock_source = "Internal 88.2 kHz"; 3239 break; 3240 case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: 3241 clock_source = "Internal 96 kHz"; 3242 break; 3243 case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ: 3244 clock_source = "Internal 128 kHz"; 3245 break; 3246 case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ: 3247 clock_source = "Internal 176.4 kHz"; 3248 break; 3249 case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ: 3250 clock_source = "Internal 192 kHz"; 3251 break; 3252 default: 3253 clock_source = "Error"; 3254 } 3255 snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source); 3256 3257 if (hdsp_system_clock_mode(hdsp)) 3258 system_clock_mode = "Slave"; 3259 else 3260 system_clock_mode = "Master"; 3261 3262 switch (hdsp_pref_sync_ref (hdsp)) { 3263 case HDSP_SYNC_FROM_WORD: 3264 pref_sync_ref = "Word Clock"; 3265 break; 3266 case HDSP_SYNC_FROM_ADAT_SYNC: 3267 pref_sync_ref = "ADAT Sync"; 3268 break; 3269 case HDSP_SYNC_FROM_SPDIF: 3270 pref_sync_ref = "SPDIF"; 3271 break; 3272 case HDSP_SYNC_FROM_ADAT1: 3273 pref_sync_ref = "ADAT1"; 3274 break; 3275 case HDSP_SYNC_FROM_ADAT2: 3276 pref_sync_ref = "ADAT2"; 3277 break; 3278 case HDSP_SYNC_FROM_ADAT3: 3279 pref_sync_ref = "ADAT3"; 3280 break; 3281 default: 3282 pref_sync_ref = "Word Clock"; 3283 break; 3284 } 3285 snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref); 3286 3287 switch (hdsp_autosync_ref (hdsp)) { 3288 case HDSP_AUTOSYNC_FROM_WORD: 3289 autosync_ref = "Word Clock"; 3290 break; 3291 case HDSP_AUTOSYNC_FROM_ADAT_SYNC: 3292 autosync_ref = "ADAT Sync"; 3293 break; 3294 case HDSP_AUTOSYNC_FROM_SPDIF: 3295 autosync_ref = "SPDIF"; 3296 break; 3297 case HDSP_AUTOSYNC_FROM_NONE: 3298 autosync_ref = "None"; 3299 break; 3300 case HDSP_AUTOSYNC_FROM_ADAT1: 3301 autosync_ref = "ADAT1"; 3302 break; 3303 case HDSP_AUTOSYNC_FROM_ADAT2: 3304 autosync_ref = "ADAT2"; 3305 break; 3306 case HDSP_AUTOSYNC_FROM_ADAT3: 3307 autosync_ref = "ADAT3"; 3308 break; 3309 default: 3310 autosync_ref = "---"; 3311 break; 3312 } 3313 snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref); 3314 3315 snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp)); 3316 3317 snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode); 3318 3319 snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate); 3320 snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No"); 3321 3322 snd_iprintf(buffer, "\n"); 3323 3324 switch (hdsp_spdif_in(hdsp)) { 3325 case HDSP_SPDIFIN_OPTICAL: 3326 snd_iprintf(buffer, "IEC958 input: Optical\n"); 3327 break; 3328 case HDSP_SPDIFIN_COAXIAL: 3329 snd_iprintf(buffer, "IEC958 input: Coaxial\n"); 3330 break; 3331 case HDSP_SPDIFIN_INTERNAL: 3332 snd_iprintf(buffer, "IEC958 input: Internal\n"); 3333 break; 3334 case HDSP_SPDIFIN_AES: 3335 snd_iprintf(buffer, "IEC958 input: AES\n"); 3336 break; 3337 default: 3338 snd_iprintf(buffer, "IEC958 input: ???\n"); 3339 break; 3340 } 3341 3342 if (hdsp->control_register & HDSP_SPDIFOpticalOut) 3343 snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n"); 3344 else 3345 snd_iprintf(buffer, "IEC958 output: Coaxial only\n"); 3346 3347 if (hdsp->control_register & HDSP_SPDIFProfessional) 3348 snd_iprintf(buffer, "IEC958 quality: Professional\n"); 3349 else 3350 snd_iprintf(buffer, "IEC958 quality: Consumer\n"); 3351 3352 if (hdsp->control_register & HDSP_SPDIFEmphasis) 3353 snd_iprintf(buffer, "IEC958 emphasis: on\n"); 3354 else 3355 snd_iprintf(buffer, "IEC958 emphasis: off\n"); 3356 3357 if (hdsp->control_register & HDSP_SPDIFNonAudio) 3358 snd_iprintf(buffer, "IEC958 NonAudio: on\n"); 3359 else 3360 snd_iprintf(buffer, "IEC958 NonAudio: off\n"); 3361 if ((x = hdsp_spdif_sample_rate (hdsp)) != 0) 3362 snd_iprintf (buffer, "IEC958 sample rate: %d\n", x); 3363 else 3364 snd_iprintf (buffer, "IEC958 sample rate: Error flag set\n"); 3365 3366 snd_iprintf(buffer, "\n"); 3367 3368 /* Sync Check */ 3369 x = status & HDSP_Sync0; 3370 if (status & HDSP_Lock0) 3371 snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock"); 3372 else 3373 snd_iprintf(buffer, "ADAT1: No Lock\n"); 3374 3375 switch (hdsp->io_type) { 3376 case Digiface: 3377 case H9652: 3378 x = status & HDSP_Sync1; 3379 if (status & HDSP_Lock1) 3380 snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock"); 3381 else 3382 snd_iprintf(buffer, "ADAT2: No Lock\n"); 3383 x = status & HDSP_Sync2; 3384 if (status & HDSP_Lock2) 3385 snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock"); 3386 else 3387 snd_iprintf(buffer, "ADAT3: No Lock\n"); 3388 break; 3389 default: 3390 /* relax */ 3391 break; 3392 } 3393 3394 x = status & HDSP_SPDIFSync; 3395 if (status & HDSP_SPDIFErrorFlag) 3396 snd_iprintf (buffer, "SPDIF: No Lock\n"); 3397 else 3398 snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock"); 3399 3400 x = status2 & HDSP_wc_sync; 3401 if (status2 & HDSP_wc_lock) 3402 snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock"); 3403 else 3404 snd_iprintf (buffer, "Word Clock: No Lock\n"); 3405 3406 x = status & HDSP_TimecodeSync; 3407 if (status & HDSP_TimecodeLock) 3408 snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock"); 3409 else 3410 snd_iprintf(buffer, "ADAT Sync: No Lock\n"); 3411 3412 snd_iprintf(buffer, "\n"); 3413 3414 /* Informations about H9632 specific controls */ 3415 if (hdsp->io_type == H9632) { 3416 char *tmp; 3417 3418 switch (hdsp_ad_gain(hdsp)) { 3419 case 0: 3420 tmp = "-10 dBV"; 3421 break; 3422 case 1: 3423 tmp = "+4 dBu"; 3424 break; 3425 default: 3426 tmp = "Lo Gain"; 3427 break; 3428 } 3429 snd_iprintf(buffer, "AD Gain : %s\n", tmp); 3430 3431 switch (hdsp_da_gain(hdsp)) { 3432 case 0: 3433 tmp = "Hi Gain"; 3434 break; 3435 case 1: 3436 tmp = "+4 dBu"; 3437 break; 3438 default: 3439 tmp = "-10 dBV"; 3440 break; 3441 } 3442 snd_iprintf(buffer, "DA Gain : %s\n", tmp); 3443 3444 switch (hdsp_phone_gain(hdsp)) { 3445 case 0: 3446 tmp = "0 dB"; 3447 break; 3448 case 1: 3449 tmp = "-6 dB"; 3450 break; 3451 default: 3452 tmp = "-12 dB"; 3453 break; 3454 } 3455 snd_iprintf(buffer, "Phones Gain : %s\n", tmp); 3456 3457 snd_iprintf(buffer, "XLR Breakout Cable : %s\n", hdsp_xlr_breakout_cable(hdsp) ? "yes" : "no"); 3458 3459 if (hdsp->control_register & HDSP_AnalogExtensionBoard) 3460 snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n"); 3461 else 3462 snd_iprintf(buffer, "AEB : off (ADAT1 external)\n"); 3463 snd_iprintf(buffer, "\n"); 3464 } 3465 3466 } 3467 3468 static void __devinit snd_hdsp_proc_init(struct hdsp *hdsp) 3469 { 3470 struct snd_info_entry *entry; 3471 3472 if (! snd_card_proc_new(hdsp->card, "hdsp", &entry)) 3473 snd_info_set_text_ops(entry, hdsp, 1024, snd_hdsp_proc_read); 3474 } 3475 3476 static void snd_hdsp_free_buffers(struct hdsp *hdsp) 3477 { 3478 snd_hammerfall_free_buffer(&hdsp->capture_dma_buf, hdsp->pci); 3479 snd_hammerfall_free_buffer(&hdsp->playback_dma_buf, hdsp->pci); 3480 } 3481 3482 static int __devinit snd_hdsp_initialize_memory(struct hdsp *hdsp) 3483 { 3484 unsigned long pb_bus, cb_bus; 3485 3486 if (snd_hammerfall_get_buffer(hdsp->pci, &hdsp->capture_dma_buf, HDSP_DMA_AREA_BYTES) < 0 || 3487 snd_hammerfall_get_buffer(hdsp->pci, &hdsp->playback_dma_buf, HDSP_DMA_AREA_BYTES) < 0) { 3488 if (hdsp->capture_dma_buf.area) 3489 snd_dma_free_pages(&hdsp->capture_dma_buf); 3490 printk(KERN_ERR "%s: no buffers available\n", hdsp->card_name); 3491 return -ENOMEM; 3492 } 3493 3494 /* Align to bus-space 64K boundary */ 3495 3496 cb_bus = (hdsp->capture_dma_buf.addr + 0xFFFF) & ~0xFFFFl; 3497 pb_bus = (hdsp->playback_dma_buf.addr + 0xFFFF) & ~0xFFFFl; 3498 3499 /* Tell the card where it is */ 3500 3501 hdsp_write(hdsp, HDSP_inputBufferAddress, cb_bus); 3502 hdsp_write(hdsp, HDSP_outputBufferAddress, pb_bus); 3503 3504 hdsp->capture_buffer = hdsp->capture_dma_buf.area + (cb_bus - hdsp->capture_dma_buf.addr); 3505 hdsp->playback_buffer = hdsp->playback_dma_buf.area + (pb_bus - hdsp->playback_dma_buf.addr); 3506 3507 return 0; 3508 } 3509 3510 static int snd_hdsp_set_defaults(struct hdsp *hdsp) 3511 { 3512 unsigned int i; 3513 3514 /* ASSUMPTION: hdsp->lock is either held, or 3515 there is no need to hold it (e.g. during module 3516 initalization). 3517 */ 3518 3519 /* set defaults: 3520 3521 SPDIF Input via Coax 3522 Master clock mode 3523 maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer, 3524 which implies 2 4096 sample, 32Kbyte periods). 3525 Enable line out. 3526 */ 3527 3528 hdsp->control_register = HDSP_ClockModeMaster | 3529 HDSP_SPDIFInputCoaxial | 3530 hdsp_encode_latency(7) | 3531 HDSP_LineOut; 3532 3533 3534 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3535 3536 #ifdef SNDRV_BIG_ENDIAN 3537 hdsp->control2_register = HDSP_BIGENDIAN_MODE; 3538 #else 3539 hdsp->control2_register = 0; 3540 #endif 3541 if (hdsp->io_type == H9652) 3542 snd_hdsp_9652_enable_mixer (hdsp); 3543 else 3544 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 3545 3546 hdsp_reset_hw_pointer(hdsp); 3547 hdsp_compute_period_size(hdsp); 3548 3549 /* silence everything */ 3550 3551 for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i) 3552 hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN; 3553 3554 for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) { 3555 if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN)) 3556 return -EIO; 3557 } 3558 3559 /* H9632 specific defaults */ 3560 if (hdsp->io_type == H9632) { 3561 hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB); 3562 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3563 } 3564 3565 /* set a default rate so that the channel map is set up. 3566 */ 3567 3568 hdsp_set_rate(hdsp, 48000, 1); 3569 3570 return 0; 3571 } 3572 3573 static void hdsp_midi_tasklet(unsigned long arg) 3574 { 3575 struct hdsp *hdsp = (struct hdsp *)arg; 3576 3577 if (hdsp->midi[0].pending) 3578 snd_hdsp_midi_input_read (&hdsp->midi[0]); 3579 if (hdsp->midi[1].pending) 3580 snd_hdsp_midi_input_read (&hdsp->midi[1]); 3581 } 3582 3583 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs) 3584 { 3585 struct hdsp *hdsp = (struct hdsp *) dev_id; 3586 unsigned int status; 3587 int audio; 3588 int midi0; 3589 int midi1; 3590 unsigned int midi0status; 3591 unsigned int midi1status; 3592 int schedule = 0; 3593 3594 status = hdsp_read(hdsp, HDSP_statusRegister); 3595 3596 audio = status & HDSP_audioIRQPending; 3597 midi0 = status & HDSP_midi0IRQPending; 3598 midi1 = status & HDSP_midi1IRQPending; 3599 3600 if (!audio && !midi0 && !midi1) 3601 return IRQ_NONE; 3602 3603 hdsp_write(hdsp, HDSP_interruptConfirmation, 0); 3604 3605 midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff; 3606 midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff; 3607 3608 if (audio) { 3609 if (hdsp->capture_substream) 3610 snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream); 3611 3612 if (hdsp->playback_substream) 3613 snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream); 3614 } 3615 3616 if (midi0 && midi0status) { 3617 if (hdsp->use_midi_tasklet) { 3618 /* we disable interrupts for this input until processing is done */ 3619 hdsp->control_register &= ~HDSP_Midi0InterruptEnable; 3620 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3621 hdsp->midi[0].pending = 1; 3622 schedule = 1; 3623 } else { 3624 snd_hdsp_midi_input_read (&hdsp->midi[0]); 3625 } 3626 } 3627 if (hdsp->io_type != Multiface && hdsp->io_type != H9632 && midi1 && midi1status) { 3628 if (hdsp->use_midi_tasklet) { 3629 /* we disable interrupts for this input until processing is done */ 3630 hdsp->control_register &= ~HDSP_Midi1InterruptEnable; 3631 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3632 hdsp->midi[1].pending = 1; 3633 schedule = 1; 3634 } else { 3635 snd_hdsp_midi_input_read (&hdsp->midi[1]); 3636 } 3637 } 3638 if (hdsp->use_midi_tasklet && schedule) 3639 tasklet_hi_schedule(&hdsp->midi_tasklet); 3640 return IRQ_HANDLED; 3641 } 3642 3643 static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substream) 3644 { 3645 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3646 return hdsp_hw_pointer(hdsp); 3647 } 3648 3649 static char *hdsp_channel_buffer_location(struct hdsp *hdsp, 3650 int stream, 3651 int channel) 3652 3653 { 3654 int mapped_channel; 3655 3656 snd_assert(channel >= 0 && channel < hdsp->max_channels, return NULL); 3657 3658 if ((mapped_channel = hdsp->channel_map[channel]) < 0) 3659 return NULL; 3660 3661 if (stream == SNDRV_PCM_STREAM_CAPTURE) 3662 return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES); 3663 else 3664 return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES); 3665 } 3666 3667 static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream, int channel, 3668 snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count) 3669 { 3670 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3671 char *channel_buf; 3672 3673 snd_assert(pos + count <= HDSP_CHANNEL_BUFFER_BYTES / 4, return -EINVAL); 3674 3675 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 3676 snd_assert(channel_buf != NULL, return -EIO); 3677 if (copy_from_user(channel_buf + pos * 4, src, count * 4)) 3678 return -EFAULT; 3679 return count; 3680 } 3681 3682 static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream, int channel, 3683 snd_pcm_uframes_t pos, void __user *dst, snd_pcm_uframes_t count) 3684 { 3685 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3686 char *channel_buf; 3687 3688 snd_assert(pos + count <= HDSP_CHANNEL_BUFFER_BYTES / 4, return -EINVAL); 3689 3690 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 3691 snd_assert(channel_buf != NULL, return -EIO); 3692 if (copy_to_user(dst, channel_buf + pos * 4, count * 4)) 3693 return -EFAULT; 3694 return count; 3695 } 3696 3697 static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream, int channel, 3698 snd_pcm_uframes_t pos, snd_pcm_uframes_t count) 3699 { 3700 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3701 char *channel_buf; 3702 3703 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 3704 snd_assert(channel_buf != NULL, return -EIO); 3705 memset(channel_buf + pos * 4, 0, count * 4); 3706 return count; 3707 } 3708 3709 static int snd_hdsp_reset(struct snd_pcm_substream *substream) 3710 { 3711 struct snd_pcm_runtime *runtime = substream->runtime; 3712 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3713 struct snd_pcm_substream *other; 3714 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 3715 other = hdsp->capture_substream; 3716 else 3717 other = hdsp->playback_substream; 3718 if (hdsp->running) 3719 runtime->status->hw_ptr = hdsp_hw_pointer(hdsp); 3720 else 3721 runtime->status->hw_ptr = 0; 3722 if (other) { 3723 struct list_head *pos; 3724 struct snd_pcm_substream *s; 3725 struct snd_pcm_runtime *oruntime = other->runtime; 3726 snd_pcm_group_for_each(pos, substream) { 3727 s = snd_pcm_group_substream_entry(pos); 3728 if (s == other) { 3729 oruntime->status->hw_ptr = runtime->status->hw_ptr; 3730 break; 3731 } 3732 } 3733 } 3734 return 0; 3735 } 3736 3737 static int snd_hdsp_hw_params(struct snd_pcm_substream *substream, 3738 struct snd_pcm_hw_params *params) 3739 { 3740 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3741 int err; 3742 pid_t this_pid; 3743 pid_t other_pid; 3744 3745 if (hdsp_check_for_iobox (hdsp)) 3746 return -EIO; 3747 3748 if (hdsp_check_for_firmware(hdsp, 1)) 3749 return -EIO; 3750 3751 spin_lock_irq(&hdsp->lock); 3752 3753 if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) { 3754 hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis); 3755 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream); 3756 this_pid = hdsp->playback_pid; 3757 other_pid = hdsp->capture_pid; 3758 } else { 3759 this_pid = hdsp->capture_pid; 3760 other_pid = hdsp->playback_pid; 3761 } 3762 3763 if ((other_pid > 0) && (this_pid != other_pid)) { 3764 3765 /* The other stream is open, and not by the same 3766 task as this one. Make sure that the parameters 3767 that matter are the same. 3768 */ 3769 3770 if (params_rate(params) != hdsp->system_sample_rate) { 3771 spin_unlock_irq(&hdsp->lock); 3772 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); 3773 return -EBUSY; 3774 } 3775 3776 if (params_period_size(params) != hdsp->period_bytes / 4) { 3777 spin_unlock_irq(&hdsp->lock); 3778 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); 3779 return -EBUSY; 3780 } 3781 3782 /* We're fine. */ 3783 3784 spin_unlock_irq(&hdsp->lock); 3785 return 0; 3786 3787 } else { 3788 spin_unlock_irq(&hdsp->lock); 3789 } 3790 3791 /* how to make sure that the rate matches an externally-set one ? 3792 */ 3793 3794 spin_lock_irq(&hdsp->lock); 3795 if (! hdsp->clock_source_locked) { 3796 if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { 3797 spin_unlock_irq(&hdsp->lock); 3798 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); 3799 return err; 3800 } 3801 } 3802 spin_unlock_irq(&hdsp->lock); 3803 3804 if ((err = hdsp_set_interrupt_interval(hdsp, params_period_size(params))) < 0) { 3805 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); 3806 return err; 3807 } 3808 3809 return 0; 3810 } 3811 3812 static int snd_hdsp_channel_info(struct snd_pcm_substream *substream, 3813 struct snd_pcm_channel_info *info) 3814 { 3815 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3816 int mapped_channel; 3817 3818 snd_assert(info->channel < hdsp->max_channels, return -EINVAL); 3819 3820 if ((mapped_channel = hdsp->channel_map[info->channel]) < 0) 3821 return -EINVAL; 3822 3823 info->offset = mapped_channel * HDSP_CHANNEL_BUFFER_BYTES; 3824 info->first = 0; 3825 info->step = 32; 3826 return 0; 3827 } 3828 3829 static int snd_hdsp_ioctl(struct snd_pcm_substream *substream, 3830 unsigned int cmd, void *arg) 3831 { 3832 switch (cmd) { 3833 case SNDRV_PCM_IOCTL1_RESET: 3834 return snd_hdsp_reset(substream); 3835 case SNDRV_PCM_IOCTL1_CHANNEL_INFO: 3836 return snd_hdsp_channel_info(substream, arg); 3837 default: 3838 break; 3839 } 3840 3841 return snd_pcm_lib_ioctl(substream, cmd, arg); 3842 } 3843 3844 static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd) 3845 { 3846 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3847 struct snd_pcm_substream *other; 3848 int running; 3849 3850 if (hdsp_check_for_iobox (hdsp)) 3851 return -EIO; 3852 3853 if (hdsp_check_for_firmware(hdsp, 1)) 3854 return -EIO; 3855 3856 spin_lock(&hdsp->lock); 3857 running = hdsp->running; 3858 switch (cmd) { 3859 case SNDRV_PCM_TRIGGER_START: 3860 running |= 1 << substream->stream; 3861 break; 3862 case SNDRV_PCM_TRIGGER_STOP: 3863 running &= ~(1 << substream->stream); 3864 break; 3865 default: 3866 snd_BUG(); 3867 spin_unlock(&hdsp->lock); 3868 return -EINVAL; 3869 } 3870 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 3871 other = hdsp->capture_substream; 3872 else 3873 other = hdsp->playback_substream; 3874 3875 if (other) { 3876 struct list_head *pos; 3877 struct snd_pcm_substream *s; 3878 snd_pcm_group_for_each(pos, substream) { 3879 s = snd_pcm_group_substream_entry(pos); 3880 if (s == other) { 3881 snd_pcm_trigger_done(s, substream); 3882 if (cmd == SNDRV_PCM_TRIGGER_START) 3883 running |= 1 << s->stream; 3884 else 3885 running &= ~(1 << s->stream); 3886 goto _ok; 3887 } 3888 } 3889 if (cmd == SNDRV_PCM_TRIGGER_START) { 3890 if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) && 3891 substream->stream == SNDRV_PCM_STREAM_CAPTURE) 3892 hdsp_silence_playback(hdsp); 3893 } else { 3894 if (running && 3895 substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 3896 hdsp_silence_playback(hdsp); 3897 } 3898 } else { 3899 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 3900 hdsp_silence_playback(hdsp); 3901 } 3902 _ok: 3903 snd_pcm_trigger_done(substream, substream); 3904 if (!hdsp->running && running) 3905 hdsp_start_audio(hdsp); 3906 else if (hdsp->running && !running) 3907 hdsp_stop_audio(hdsp); 3908 hdsp->running = running; 3909 spin_unlock(&hdsp->lock); 3910 3911 return 0; 3912 } 3913 3914 static int snd_hdsp_prepare(struct snd_pcm_substream *substream) 3915 { 3916 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3917 int result = 0; 3918 3919 if (hdsp_check_for_iobox (hdsp)) 3920 return -EIO; 3921 3922 if (hdsp_check_for_firmware(hdsp, 1)) 3923 return -EIO; 3924 3925 spin_lock_irq(&hdsp->lock); 3926 if (!hdsp->running) 3927 hdsp_reset_hw_pointer(hdsp); 3928 spin_unlock_irq(&hdsp->lock); 3929 return result; 3930 } 3931 3932 static struct snd_pcm_hardware snd_hdsp_playback_subinfo = 3933 { 3934 .info = (SNDRV_PCM_INFO_MMAP | 3935 SNDRV_PCM_INFO_MMAP_VALID | 3936 SNDRV_PCM_INFO_NONINTERLEAVED | 3937 SNDRV_PCM_INFO_SYNC_START | 3938 SNDRV_PCM_INFO_DOUBLE), 3939 #ifdef SNDRV_BIG_ENDIAN 3940 .formats = SNDRV_PCM_FMTBIT_S32_BE, 3941 #else 3942 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3943 #endif 3944 .rates = (SNDRV_PCM_RATE_32000 | 3945 SNDRV_PCM_RATE_44100 | 3946 SNDRV_PCM_RATE_48000 | 3947 SNDRV_PCM_RATE_64000 | 3948 SNDRV_PCM_RATE_88200 | 3949 SNDRV_PCM_RATE_96000), 3950 .rate_min = 32000, 3951 .rate_max = 96000, 3952 .channels_min = 14, 3953 .channels_max = HDSP_MAX_CHANNELS, 3954 .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS, 3955 .period_bytes_min = (64 * 4) * 10, 3956 .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, 3957 .periods_min = 2, 3958 .periods_max = 2, 3959 .fifo_size = 0 3960 }; 3961 3962 static struct snd_pcm_hardware snd_hdsp_capture_subinfo = 3963 { 3964 .info = (SNDRV_PCM_INFO_MMAP | 3965 SNDRV_PCM_INFO_MMAP_VALID | 3966 SNDRV_PCM_INFO_NONINTERLEAVED | 3967 SNDRV_PCM_INFO_SYNC_START), 3968 #ifdef SNDRV_BIG_ENDIAN 3969 .formats = SNDRV_PCM_FMTBIT_S32_BE, 3970 #else 3971 .formats = SNDRV_PCM_FMTBIT_S32_LE, 3972 #endif 3973 .rates = (SNDRV_PCM_RATE_32000 | 3974 SNDRV_PCM_RATE_44100 | 3975 SNDRV_PCM_RATE_48000 | 3976 SNDRV_PCM_RATE_64000 | 3977 SNDRV_PCM_RATE_88200 | 3978 SNDRV_PCM_RATE_96000), 3979 .rate_min = 32000, 3980 .rate_max = 96000, 3981 .channels_min = 14, 3982 .channels_max = HDSP_MAX_CHANNELS, 3983 .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS, 3984 .period_bytes_min = (64 * 4) * 10, 3985 .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, 3986 .periods_min = 2, 3987 .periods_max = 2, 3988 .fifo_size = 0 3989 }; 3990 3991 static unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; 3992 3993 static struct snd_pcm_hw_constraint_list hdsp_hw_constraints_period_sizes = { 3994 .count = ARRAY_SIZE(hdsp_period_sizes), 3995 .list = hdsp_period_sizes, 3996 .mask = 0 3997 }; 3998 3999 static unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 }; 4000 4001 static struct snd_pcm_hw_constraint_list hdsp_hw_constraints_9632_sample_rates = { 4002 .count = ARRAY_SIZE(hdsp_9632_sample_rates), 4003 .list = hdsp_9632_sample_rates, 4004 .mask = 0 4005 }; 4006 4007 static int snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params *params, 4008 struct snd_pcm_hw_rule *rule) 4009 { 4010 struct hdsp *hdsp = rule->private; 4011 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4012 if (hdsp->io_type == H9632) { 4013 unsigned int list[3]; 4014 list[0] = hdsp->qs_in_channels; 4015 list[1] = hdsp->ds_in_channels; 4016 list[2] = hdsp->ss_in_channels; 4017 return snd_interval_list(c, 3, list, 0); 4018 } else { 4019 unsigned int list[2]; 4020 list[0] = hdsp->ds_in_channels; 4021 list[1] = hdsp->ss_in_channels; 4022 return snd_interval_list(c, 2, list, 0); 4023 } 4024 } 4025 4026 static int snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params *params, 4027 struct snd_pcm_hw_rule *rule) 4028 { 4029 unsigned int list[3]; 4030 struct hdsp *hdsp = rule->private; 4031 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4032 if (hdsp->io_type == H9632) { 4033 list[0] = hdsp->qs_out_channels; 4034 list[1] = hdsp->ds_out_channels; 4035 list[2] = hdsp->ss_out_channels; 4036 return snd_interval_list(c, 3, list, 0); 4037 } else { 4038 list[0] = hdsp->ds_out_channels; 4039 list[1] = hdsp->ss_out_channels; 4040 } 4041 return snd_interval_list(c, 2, list, 0); 4042 } 4043 4044 static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params, 4045 struct snd_pcm_hw_rule *rule) 4046 { 4047 struct hdsp *hdsp = rule->private; 4048 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4049 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4050 if (r->min > 96000 && hdsp->io_type == H9632) { 4051 struct snd_interval t = { 4052 .min = hdsp->qs_in_channels, 4053 .max = hdsp->qs_in_channels, 4054 .integer = 1, 4055 }; 4056 return snd_interval_refine(c, &t); 4057 } else if (r->min > 48000 && r->max <= 96000) { 4058 struct snd_interval t = { 4059 .min = hdsp->ds_in_channels, 4060 .max = hdsp->ds_in_channels, 4061 .integer = 1, 4062 }; 4063 return snd_interval_refine(c, &t); 4064 } else if (r->max < 64000) { 4065 struct snd_interval t = { 4066 .min = hdsp->ss_in_channels, 4067 .max = hdsp->ss_in_channels, 4068 .integer = 1, 4069 }; 4070 return snd_interval_refine(c, &t); 4071 } 4072 return 0; 4073 } 4074 4075 static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params, 4076 struct snd_pcm_hw_rule *rule) 4077 { 4078 struct hdsp *hdsp = rule->private; 4079 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4080 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4081 if (r->min > 96000 && hdsp->io_type == H9632) { 4082 struct snd_interval t = { 4083 .min = hdsp->qs_out_channels, 4084 .max = hdsp->qs_out_channels, 4085 .integer = 1, 4086 }; 4087 return snd_interval_refine(c, &t); 4088 } else if (r->min > 48000 && r->max <= 96000) { 4089 struct snd_interval t = { 4090 .min = hdsp->ds_out_channels, 4091 .max = hdsp->ds_out_channels, 4092 .integer = 1, 4093 }; 4094 return snd_interval_refine(c, &t); 4095 } else if (r->max < 64000) { 4096 struct snd_interval t = { 4097 .min = hdsp->ss_out_channels, 4098 .max = hdsp->ss_out_channels, 4099 .integer = 1, 4100 }; 4101 return snd_interval_refine(c, &t); 4102 } 4103 return 0; 4104 } 4105 4106 static int snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params *params, 4107 struct snd_pcm_hw_rule *rule) 4108 { 4109 struct hdsp *hdsp = rule->private; 4110 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4111 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4112 if (c->min >= hdsp->ss_out_channels) { 4113 struct snd_interval t = { 4114 .min = 32000, 4115 .max = 48000, 4116 .integer = 1, 4117 }; 4118 return snd_interval_refine(r, &t); 4119 } else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) { 4120 struct snd_interval t = { 4121 .min = 128000, 4122 .max = 192000, 4123 .integer = 1, 4124 }; 4125 return snd_interval_refine(r, &t); 4126 } else if (c->max <= hdsp->ds_out_channels) { 4127 struct snd_interval t = { 4128 .min = 64000, 4129 .max = 96000, 4130 .integer = 1, 4131 }; 4132 return snd_interval_refine(r, &t); 4133 } 4134 return 0; 4135 } 4136 4137 static int snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params *params, 4138 struct snd_pcm_hw_rule *rule) 4139 { 4140 struct hdsp *hdsp = rule->private; 4141 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4142 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4143 if (c->min >= hdsp->ss_in_channels) { 4144 struct snd_interval t = { 4145 .min = 32000, 4146 .max = 48000, 4147 .integer = 1, 4148 }; 4149 return snd_interval_refine(r, &t); 4150 } else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) { 4151 struct snd_interval t = { 4152 .min = 128000, 4153 .max = 192000, 4154 .integer = 1, 4155 }; 4156 return snd_interval_refine(r, &t); 4157 } else if (c->max <= hdsp->ds_in_channels) { 4158 struct snd_interval t = { 4159 .min = 64000, 4160 .max = 96000, 4161 .integer = 1, 4162 }; 4163 return snd_interval_refine(r, &t); 4164 } 4165 return 0; 4166 } 4167 4168 static int snd_hdsp_playback_open(struct snd_pcm_substream *substream) 4169 { 4170 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4171 struct snd_pcm_runtime *runtime = substream->runtime; 4172 4173 if (hdsp_check_for_iobox (hdsp)) 4174 return -EIO; 4175 4176 if (hdsp_check_for_firmware(hdsp, 1)) 4177 return -EIO; 4178 4179 spin_lock_irq(&hdsp->lock); 4180 4181 snd_pcm_set_sync(substream); 4182 4183 runtime->hw = snd_hdsp_playback_subinfo; 4184 runtime->dma_area = hdsp->playback_buffer; 4185 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4186 4187 hdsp->playback_pid = current->pid; 4188 hdsp->playback_substream = substream; 4189 4190 spin_unlock_irq(&hdsp->lock); 4191 4192 snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); 4193 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); 4194 if (hdsp->clock_source_locked) { 4195 runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate; 4196 } else if (hdsp->io_type == H9632) { 4197 runtime->hw.rate_max = 192000; 4198 runtime->hw.rates = SNDRV_PCM_RATE_KNOT; 4199 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); 4200 } 4201 if (hdsp->io_type == H9632) { 4202 runtime->hw.channels_min = hdsp->qs_out_channels; 4203 runtime->hw.channels_max = hdsp->ss_out_channels; 4204 } 4205 4206 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4207 snd_hdsp_hw_rule_out_channels, hdsp, 4208 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4209 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4210 snd_hdsp_hw_rule_out_channels_rate, hdsp, 4211 SNDRV_PCM_HW_PARAM_RATE, -1); 4212 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 4213 snd_hdsp_hw_rule_rate_out_channels, hdsp, 4214 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4215 4216 hdsp->creg_spdif_stream = hdsp->creg_spdif; 4217 hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; 4218 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | 4219 SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); 4220 return 0; 4221 } 4222 4223 static int snd_hdsp_playback_release(struct snd_pcm_substream *substream) 4224 { 4225 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4226 4227 spin_lock_irq(&hdsp->lock); 4228 4229 hdsp->playback_pid = -1; 4230 hdsp->playback_substream = NULL; 4231 4232 spin_unlock_irq(&hdsp->lock); 4233 4234 hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; 4235 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | 4236 SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); 4237 return 0; 4238 } 4239 4240 4241 static int snd_hdsp_capture_open(struct snd_pcm_substream *substream) 4242 { 4243 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4244 struct snd_pcm_runtime *runtime = substream->runtime; 4245 4246 if (hdsp_check_for_iobox (hdsp)) 4247 return -EIO; 4248 4249 if (hdsp_check_for_firmware(hdsp, 1)) 4250 return -EIO; 4251 4252 spin_lock_irq(&hdsp->lock); 4253 4254 snd_pcm_set_sync(substream); 4255 4256 runtime->hw = snd_hdsp_capture_subinfo; 4257 runtime->dma_area = hdsp->capture_buffer; 4258 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4259 4260 hdsp->capture_pid = current->pid; 4261 hdsp->capture_substream = substream; 4262 4263 spin_unlock_irq(&hdsp->lock); 4264 4265 snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); 4266 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); 4267 if (hdsp->io_type == H9632) { 4268 runtime->hw.channels_min = hdsp->qs_in_channels; 4269 runtime->hw.channels_max = hdsp->ss_in_channels; 4270 runtime->hw.rate_max = 192000; 4271 runtime->hw.rates = SNDRV_PCM_RATE_KNOT; 4272 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); 4273 } 4274 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4275 snd_hdsp_hw_rule_in_channels, hdsp, 4276 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4277 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4278 snd_hdsp_hw_rule_in_channels_rate, hdsp, 4279 SNDRV_PCM_HW_PARAM_RATE, -1); 4280 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 4281 snd_hdsp_hw_rule_rate_in_channels, hdsp, 4282 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4283 return 0; 4284 } 4285 4286 static int snd_hdsp_capture_release(struct snd_pcm_substream *substream) 4287 { 4288 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4289 4290 spin_lock_irq(&hdsp->lock); 4291 4292 hdsp->capture_pid = -1; 4293 hdsp->capture_substream = NULL; 4294 4295 spin_unlock_irq(&hdsp->lock); 4296 return 0; 4297 } 4298 4299 static int snd_hdsp_hwdep_dummy_op(struct snd_hwdep *hw, struct file *file) 4300 { 4301 /* we have nothing to initialize but the call is required */ 4302 return 0; 4303 } 4304 4305 4306 /* helper functions for copying meter values */ 4307 static inline int copy_u32_le(void __user *dest, void __iomem *src) 4308 { 4309 u32 val = readl(src); 4310 return copy_to_user(dest, &val, 4); 4311 } 4312 4313 static inline int copy_u64_le(void __user *dest, void __iomem *src_low, void __iomem *src_high) 4314 { 4315 u32 rms_low, rms_high; 4316 u64 rms; 4317 rms_low = readl(src_low); 4318 rms_high = readl(src_high); 4319 rms = ((u64)rms_high << 32) | rms_low; 4320 return copy_to_user(dest, &rms, 8); 4321 } 4322 4323 static inline int copy_u48_le(void __user *dest, void __iomem *src_low, void __iomem *src_high) 4324 { 4325 u32 rms_low, rms_high; 4326 u64 rms; 4327 rms_low = readl(src_low) & 0xffffff00; 4328 rms_high = readl(src_high) & 0xffffff00; 4329 rms = ((u64)rms_high << 32) | rms_low; 4330 return copy_to_user(dest, &rms, 8); 4331 } 4332 4333 static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4334 { 4335 int doublespeed = 0; 4336 int i, j, channels, ofs; 4337 4338 if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus) 4339 doublespeed = 1; 4340 channels = doublespeed ? 14 : 26; 4341 for (i = 0, j = 0; i < 26; ++i) { 4342 if (doublespeed && (i & 4)) 4343 continue; 4344 ofs = HDSP_9652_peakBase - j * 4; 4345 if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs)) 4346 return -EFAULT; 4347 ofs -= channels * 4; 4348 if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs)) 4349 return -EFAULT; 4350 ofs -= channels * 4; 4351 if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs)) 4352 return -EFAULT; 4353 ofs = HDSP_9652_rmsBase + j * 8; 4354 if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs, 4355 hdsp->iobase + ofs + 4)) 4356 return -EFAULT; 4357 ofs += channels * 8; 4358 if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs, 4359 hdsp->iobase + ofs + 4)) 4360 return -EFAULT; 4361 ofs += channels * 8; 4362 if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs, 4363 hdsp->iobase + ofs + 4)) 4364 return -EFAULT; 4365 j++; 4366 } 4367 return 0; 4368 } 4369 4370 static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4371 { 4372 int i, j; 4373 struct hdsp_9632_meters __iomem *m; 4374 int doublespeed = 0; 4375 4376 if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus) 4377 doublespeed = 1; 4378 m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase); 4379 for (i = 0, j = 0; i < 16; ++i, ++j) { 4380 if (copy_u32_le(&peak_rms->input_peaks[i], &m->input_peak[j])) 4381 return -EFAULT; 4382 if (copy_u32_le(&peak_rms->playback_peaks[i], &m->playback_peak[j])) 4383 return -EFAULT; 4384 if (copy_u32_le(&peak_rms->output_peaks[i], &m->output_peak[j])) 4385 return -EFAULT; 4386 if (copy_u64_le(&peak_rms->input_rms[i], &m->input_rms_low[j], 4387 &m->input_rms_high[j])) 4388 return -EFAULT; 4389 if (copy_u64_le(&peak_rms->playback_rms[i], &m->playback_rms_low[j], 4390 &m->playback_rms_high[j])) 4391 return -EFAULT; 4392 if (copy_u64_le(&peak_rms->output_rms[i], &m->output_rms_low[j], 4393 &m->output_rms_high[j])) 4394 return -EFAULT; 4395 if (doublespeed && i == 3) i += 4; 4396 } 4397 return 0; 4398 } 4399 4400 static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4401 { 4402 int i; 4403 4404 for (i = 0; i < 26; i++) { 4405 if (copy_u32_le(&peak_rms->playback_peaks[i], 4406 hdsp->iobase + HDSP_playbackPeakLevel + i * 4)) 4407 return -EFAULT; 4408 if (copy_u32_le(&peak_rms->input_peaks[i], 4409 hdsp->iobase + HDSP_inputPeakLevel + i * 4)) 4410 return -EFAULT; 4411 } 4412 for (i = 0; i < 28; i++) { 4413 if (copy_u32_le(&peak_rms->output_peaks[i], 4414 hdsp->iobase + HDSP_outputPeakLevel + i * 4)) 4415 return -EFAULT; 4416 } 4417 for (i = 0; i < 26; ++i) { 4418 if (copy_u64_le(&peak_rms->playback_rms[i], 4419 hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4, 4420 hdsp->iobase + HDSP_playbackRmsLevel + i * 8)) 4421 return -EFAULT; 4422 if (copy_u64_le(&peak_rms->input_rms[i], 4423 hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4, 4424 hdsp->iobase + HDSP_inputRmsLevel + i * 8)) 4425 return -EFAULT; 4426 } 4427 return 0; 4428 } 4429 4430 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg) 4431 { 4432 struct hdsp *hdsp = (struct hdsp *)hw->private_data; 4433 void __user *argp = (void __user *)arg; 4434 4435 switch (cmd) { 4436 case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: { 4437 struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg; 4438 4439 if (!(hdsp->state & HDSP_FirmwareLoaded)) { 4440 snd_printk(KERN_ERR "Hammerfall-DSP: firmware needs to be uploaded to the card.\n"); 4441 return -EINVAL; 4442 } 4443 4444 switch (hdsp->io_type) { 4445 case H9652: 4446 return hdsp_9652_get_peak(hdsp, peak_rms); 4447 case H9632: 4448 return hdsp_9632_get_peak(hdsp, peak_rms); 4449 default: 4450 return hdsp_get_peak(hdsp, peak_rms); 4451 } 4452 } 4453 case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: { 4454 struct hdsp_config_info info; 4455 unsigned long flags; 4456 int i; 4457 4458 if (!(hdsp->state & HDSP_FirmwareLoaded)) { 4459 snd_printk(KERN_ERR "Hammerfall-DSP: Firmware needs to be uploaded to the card.\n"); 4460 return -EINVAL; 4461 } 4462 spin_lock_irqsave(&hdsp->lock, flags); 4463 info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp); 4464 info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp); 4465 if (hdsp->io_type != H9632) 4466 info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp); 4467 info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp); 4468 for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != H9632) ? 3 : 1); ++i) 4469 info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i); 4470 info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp); 4471 info.spdif_out = (unsigned char)hdsp_spdif_out(hdsp); 4472 info.spdif_professional = (unsigned char)hdsp_spdif_professional(hdsp); 4473 info.spdif_emphasis = (unsigned char)hdsp_spdif_emphasis(hdsp); 4474 info.spdif_nonaudio = (unsigned char)hdsp_spdif_nonaudio(hdsp); 4475 info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp); 4476 info.system_sample_rate = hdsp->system_sample_rate; 4477 info.autosync_sample_rate = hdsp_external_sample_rate(hdsp); 4478 info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp); 4479 info.clock_source = (unsigned char)hdsp_clock_source(hdsp); 4480 info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp); 4481 info.line_out = (unsigned char)hdsp_line_out(hdsp); 4482 if (hdsp->io_type == H9632) { 4483 info.da_gain = (unsigned char)hdsp_da_gain(hdsp); 4484 info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp); 4485 info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp); 4486 info.xlr_breakout_cable = (unsigned char)hdsp_xlr_breakout_cable(hdsp); 4487 4488 } 4489 if (hdsp->io_type == H9632 || hdsp->io_type == H9652) 4490 info.analog_extension_board = (unsigned char)hdsp_aeb(hdsp); 4491 spin_unlock_irqrestore(&hdsp->lock, flags); 4492 if (copy_to_user(argp, &info, sizeof(info))) 4493 return -EFAULT; 4494 break; 4495 } 4496 case SNDRV_HDSP_IOCTL_GET_9632_AEB: { 4497 struct hdsp_9632_aeb h9632_aeb; 4498 4499 if (hdsp->io_type != H9632) return -EINVAL; 4500 h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS; 4501 h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS; 4502 if (copy_to_user(argp, &h9632_aeb, sizeof(h9632_aeb))) 4503 return -EFAULT; 4504 break; 4505 } 4506 case SNDRV_HDSP_IOCTL_GET_VERSION: { 4507 struct hdsp_version hdsp_version; 4508 int err; 4509 4510 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL; 4511 if (hdsp->io_type == Undefined) { 4512 if ((err = hdsp_get_iobox_version(hdsp)) < 0) 4513 return err; 4514 } 4515 hdsp_version.io_type = hdsp->io_type; 4516 hdsp_version.firmware_rev = hdsp->firmware_rev; 4517 if ((err = copy_to_user(argp, &hdsp_version, sizeof(hdsp_version)))) 4518 return -EFAULT; 4519 break; 4520 } 4521 case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: { 4522 struct hdsp_firmware __user *firmware; 4523 u32 __user *firmware_data; 4524 int err; 4525 4526 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL; 4527 /* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */ 4528 if (hdsp->io_type == Undefined) return -EINVAL; 4529 4530 if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded)) 4531 return -EBUSY; 4532 4533 snd_printk(KERN_INFO "Hammerfall-DSP: initializing firmware upload\n"); 4534 firmware = (struct hdsp_firmware __user *)argp; 4535 4536 if (get_user(firmware_data, &firmware->firmware_data)) 4537 return -EFAULT; 4538 4539 if (hdsp_check_for_iobox (hdsp)) 4540 return -EIO; 4541 4542 if (copy_from_user(hdsp->firmware_cache, firmware_data, sizeof(hdsp->firmware_cache)) != 0) 4543 return -EFAULT; 4544 4545 hdsp->state |= HDSP_FirmwareCached; 4546 4547 if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0) 4548 return err; 4549 4550 if (!(hdsp->state & HDSP_InitializationComplete)) { 4551 if ((err = snd_hdsp_enable_io(hdsp)) < 0) 4552 return err; 4553 4554 snd_hdsp_initialize_channels(hdsp); 4555 snd_hdsp_initialize_midi_flush(hdsp); 4556 4557 if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) { 4558 snd_printk(KERN_ERR "Hammerfall-DSP: error creating alsa devices\n"); 4559 return err; 4560 } 4561 } 4562 break; 4563 } 4564 case SNDRV_HDSP_IOCTL_GET_MIXER: { 4565 struct hdsp_mixer __user *mixer = (struct hdsp_mixer __user *)argp; 4566 if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE)) 4567 return -EFAULT; 4568 break; 4569 } 4570 default: 4571 return -EINVAL; 4572 } 4573 return 0; 4574 } 4575 4576 static struct snd_pcm_ops snd_hdsp_playback_ops = { 4577 .open = snd_hdsp_playback_open, 4578 .close = snd_hdsp_playback_release, 4579 .ioctl = snd_hdsp_ioctl, 4580 .hw_params = snd_hdsp_hw_params, 4581 .prepare = snd_hdsp_prepare, 4582 .trigger = snd_hdsp_trigger, 4583 .pointer = snd_hdsp_hw_pointer, 4584 .copy = snd_hdsp_playback_copy, 4585 .silence = snd_hdsp_hw_silence, 4586 }; 4587 4588 static struct snd_pcm_ops snd_hdsp_capture_ops = { 4589 .open = snd_hdsp_capture_open, 4590 .close = snd_hdsp_capture_release, 4591 .ioctl = snd_hdsp_ioctl, 4592 .hw_params = snd_hdsp_hw_params, 4593 .prepare = snd_hdsp_prepare, 4594 .trigger = snd_hdsp_trigger, 4595 .pointer = snd_hdsp_hw_pointer, 4596 .copy = snd_hdsp_capture_copy, 4597 }; 4598 4599 static int __devinit snd_hdsp_create_hwdep(struct snd_card *card, 4600 struct hdsp *hdsp) 4601 { 4602 struct snd_hwdep *hw; 4603 int err; 4604 4605 if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0) 4606 return err; 4607 4608 hdsp->hwdep = hw; 4609 hw->private_data = hdsp; 4610 strcpy(hw->name, "HDSP hwdep interface"); 4611 4612 hw->ops.open = snd_hdsp_hwdep_dummy_op; 4613 hw->ops.ioctl = snd_hdsp_hwdep_ioctl; 4614 hw->ops.release = snd_hdsp_hwdep_dummy_op; 4615 4616 return 0; 4617 } 4618 4619 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp) 4620 { 4621 struct snd_pcm *pcm; 4622 int err; 4623 4624 if ((err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm)) < 0) 4625 return err; 4626 4627 hdsp->pcm = pcm; 4628 pcm->private_data = hdsp; 4629 strcpy(pcm->name, hdsp->card_name); 4630 4631 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_hdsp_playback_ops); 4632 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_hdsp_capture_ops); 4633 4634 pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX; 4635 4636 return 0; 4637 } 4638 4639 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp) 4640 { 4641 hdsp->control2_register |= HDSP_9652_ENABLE_MIXER; 4642 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 4643 } 4644 4645 static int snd_hdsp_enable_io (struct hdsp *hdsp) 4646 { 4647 int i; 4648 4649 if (hdsp_fifo_wait (hdsp, 0, 100)) { 4650 snd_printk(KERN_ERR "Hammerfall-DSP: enable_io fifo_wait failed\n"); 4651 return -EIO; 4652 } 4653 4654 for (i = 0; i < hdsp->max_channels; ++i) { 4655 hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1); 4656 hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1); 4657 } 4658 4659 return 0; 4660 } 4661 4662 static void snd_hdsp_initialize_channels(struct hdsp *hdsp) 4663 { 4664 int status, aebi_channels, aebo_channels; 4665 4666 switch (hdsp->io_type) { 4667 case Digiface: 4668 hdsp->card_name = "RME Hammerfall DSP + Digiface"; 4669 hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS; 4670 hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS; 4671 break; 4672 4673 case H9652: 4674 hdsp->card_name = "RME Hammerfall HDSP 9652"; 4675 hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS; 4676 hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS; 4677 break; 4678 4679 case H9632: 4680 status = hdsp_read(hdsp, HDSP_statusRegister); 4681 /* HDSP_AEBx bits are low when AEB are connected */ 4682 aebi_channels = (status & HDSP_AEBI) ? 0 : 4; 4683 aebo_channels = (status & HDSP_AEBO) ? 0 : 4; 4684 hdsp->card_name = "RME Hammerfall HDSP 9632"; 4685 hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels; 4686 hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels; 4687 hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels; 4688 hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels; 4689 hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels; 4690 hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels; 4691 break; 4692 4693 case Multiface: 4694 hdsp->card_name = "RME Hammerfall DSP + Multiface"; 4695 hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS; 4696 hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS; 4697 break; 4698 4699 default: 4700 /* should never get here */ 4701 break; 4702 } 4703 } 4704 4705 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp) 4706 { 4707 snd_hdsp_flush_midi_input (hdsp, 0); 4708 snd_hdsp_flush_midi_input (hdsp, 1); 4709 } 4710 4711 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp) 4712 { 4713 int err; 4714 4715 if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) { 4716 snd_printk(KERN_ERR "Hammerfall-DSP: Error creating pcm interface\n"); 4717 return err; 4718 } 4719 4720 4721 if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) { 4722 snd_printk(KERN_ERR "Hammerfall-DSP: Error creating first midi interface\n"); 4723 return err; 4724 } 4725 4726 if (hdsp->io_type == Digiface || hdsp->io_type == H9652) { 4727 if ((err = snd_hdsp_create_midi(card, hdsp, 1)) < 0) { 4728 snd_printk(KERN_ERR "Hammerfall-DSP: Error creating second midi interface\n"); 4729 return err; 4730 } 4731 } 4732 4733 if ((err = snd_hdsp_create_controls(card, hdsp)) < 0) { 4734 snd_printk(KERN_ERR "Hammerfall-DSP: Error creating ctl interface\n"); 4735 return err; 4736 } 4737 4738 snd_hdsp_proc_init(hdsp); 4739 4740 hdsp->system_sample_rate = -1; 4741 hdsp->playback_pid = -1; 4742 hdsp->capture_pid = -1; 4743 hdsp->capture_substream = NULL; 4744 hdsp->playback_substream = NULL; 4745 4746 if ((err = snd_hdsp_set_defaults(hdsp)) < 0) { 4747 snd_printk(KERN_ERR "Hammerfall-DSP: Error setting default values\n"); 4748 return err; 4749 } 4750 4751 if (!(hdsp->state & HDSP_InitializationComplete)) { 4752 strcpy(card->shortname, "Hammerfall DSP"); 4753 sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 4754 hdsp->port, hdsp->irq); 4755 4756 if ((err = snd_card_register(card)) < 0) { 4757 snd_printk(KERN_ERR "Hammerfall-DSP: error registering card\n"); 4758 return err; 4759 } 4760 hdsp->state |= HDSP_InitializationComplete; 4761 } 4762 4763 return 0; 4764 } 4765 4766 #ifdef HDSP_FW_LOADER 4767 /* load firmware via hotplug fw loader */ 4768 static int __devinit hdsp_request_fw_loader(struct hdsp *hdsp) 4769 { 4770 const char *fwfile; 4771 const struct firmware *fw; 4772 int err; 4773 4774 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 4775 return 0; 4776 if (hdsp->io_type == Undefined) { 4777 if ((err = hdsp_get_iobox_version(hdsp)) < 0) 4778 return err; 4779 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 4780 return 0; 4781 } 4782 4783 /* caution: max length of firmware filename is 30! */ 4784 switch (hdsp->io_type) { 4785 case Multiface: 4786 if (hdsp->firmware_rev == 0xa) 4787 fwfile = "multiface_firmware.bin"; 4788 else 4789 fwfile = "multiface_firmware_rev11.bin"; 4790 break; 4791 case Digiface: 4792 if (hdsp->firmware_rev == 0xa) 4793 fwfile = "digiface_firmware.bin"; 4794 else 4795 fwfile = "digiface_firmware_rev11.bin"; 4796 break; 4797 default: 4798 snd_printk(KERN_ERR "Hammerfall-DSP: invalid io_type %d\n", hdsp->io_type); 4799 return -EINVAL; 4800 } 4801 4802 if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) { 4803 snd_printk(KERN_ERR "Hammerfall-DSP: cannot load firmware %s\n", fwfile); 4804 return -ENOENT; 4805 } 4806 if (fw->size < sizeof(hdsp->firmware_cache)) { 4807 snd_printk(KERN_ERR "Hammerfall-DSP: too short firmware size %d (expected %d)\n", 4808 (int)fw->size, (int)sizeof(hdsp->firmware_cache)); 4809 release_firmware(fw); 4810 return -EINVAL; 4811 } 4812 4813 memcpy(hdsp->firmware_cache, fw->data, sizeof(hdsp->firmware_cache)); 4814 4815 release_firmware(fw); 4816 4817 hdsp->state |= HDSP_FirmwareCached; 4818 4819 if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0) 4820 return err; 4821 4822 if (!(hdsp->state & HDSP_InitializationComplete)) { 4823 if ((err = snd_hdsp_enable_io(hdsp)) < 0) 4824 return err; 4825 4826 if ((err = snd_hdsp_create_hwdep(hdsp->card, hdsp)) < 0) { 4827 snd_printk(KERN_ERR "Hammerfall-DSP: error creating hwdep device\n"); 4828 return err; 4829 } 4830 snd_hdsp_initialize_channels(hdsp); 4831 snd_hdsp_initialize_midi_flush(hdsp); 4832 if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) { 4833 snd_printk(KERN_ERR "Hammerfall-DSP: error creating alsa devices\n"); 4834 return err; 4835 } 4836 } 4837 return 0; 4838 } 4839 #endif 4840 4841 static int __devinit snd_hdsp_create(struct snd_card *card, 4842 struct hdsp *hdsp) 4843 { 4844 struct pci_dev *pci = hdsp->pci; 4845 int err; 4846 int is_9652 = 0; 4847 int is_9632 = 0; 4848 4849 hdsp->irq = -1; 4850 hdsp->state = 0; 4851 hdsp->midi[0].rmidi = NULL; 4852 hdsp->midi[1].rmidi = NULL; 4853 hdsp->midi[0].input = NULL; 4854 hdsp->midi[1].input = NULL; 4855 hdsp->midi[0].output = NULL; 4856 hdsp->midi[1].output = NULL; 4857 hdsp->midi[0].pending = 0; 4858 hdsp->midi[1].pending = 0; 4859 spin_lock_init(&hdsp->midi[0].lock); 4860 spin_lock_init(&hdsp->midi[1].lock); 4861 hdsp->iobase = NULL; 4862 hdsp->control_register = 0; 4863 hdsp->control2_register = 0; 4864 hdsp->io_type = Undefined; 4865 hdsp->max_channels = 26; 4866 4867 hdsp->card = card; 4868 4869 spin_lock_init(&hdsp->lock); 4870 4871 tasklet_init(&hdsp->midi_tasklet, hdsp_midi_tasklet, (unsigned long)hdsp); 4872 4873 pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev); 4874 hdsp->firmware_rev &= 0xff; 4875 4876 /* From Martin Bjoernsen : 4877 "It is important that the card's latency timer register in 4878 the PCI configuration space is set to a value much larger 4879 than 0 by the computer's BIOS or the driver. 4880 The windows driver always sets this 8 bit register [...] 4881 to its maximum 255 to avoid problems with some computers." 4882 */ 4883 pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF); 4884 4885 strcpy(card->driver, "H-DSP"); 4886 strcpy(card->mixername, "Xilinx FPGA"); 4887 4888 if (hdsp->firmware_rev < 0xa) 4889 return -ENODEV; 4890 else if (hdsp->firmware_rev < 0x64) 4891 hdsp->card_name = "RME Hammerfall DSP"; 4892 else if (hdsp->firmware_rev < 0x96) { 4893 hdsp->card_name = "RME HDSP 9652"; 4894 is_9652 = 1; 4895 } else { 4896 hdsp->card_name = "RME HDSP 9632"; 4897 hdsp->max_channels = 16; 4898 is_9632 = 1; 4899 } 4900 4901 if ((err = pci_enable_device(pci)) < 0) 4902 return err; 4903 4904 pci_set_master(hdsp->pci); 4905 4906 if ((err = pci_request_regions(pci, "hdsp")) < 0) 4907 return err; 4908 hdsp->port = pci_resource_start(pci, 0); 4909 if ((hdsp->iobase = ioremap_nocache(hdsp->port, HDSP_IO_EXTENT)) == NULL) { 4910 snd_printk(KERN_ERR "Hammerfall-DSP: unable to remap region 0x%lx-0x%lx\n", hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1); 4911 return -EBUSY; 4912 } 4913 4914 if (request_irq(pci->irq, snd_hdsp_interrupt, SA_INTERRUPT|SA_SHIRQ, "hdsp", (void *)hdsp)) { 4915 snd_printk(KERN_ERR "Hammerfall-DSP: unable to use IRQ %d\n", pci->irq); 4916 return -EBUSY; 4917 } 4918 4919 hdsp->irq = pci->irq; 4920 hdsp->precise_ptr = 1; 4921 hdsp->use_midi_tasklet = 1; 4922 4923 if ((err = snd_hdsp_initialize_memory(hdsp)) < 0) 4924 return err; 4925 4926 if (!is_9652 && !is_9632) { 4927 /* we wait 2 seconds to let freshly inserted cardbus cards do their hardware init */ 4928 ssleep(2); 4929 4930 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 4931 #ifdef HDSP_FW_LOADER 4932 if ((err = hdsp_request_fw_loader(hdsp)) < 0) 4933 /* we don't fail as this can happen 4934 if userspace is not ready for 4935 firmware upload 4936 */ 4937 snd_printk(KERN_ERR "Hammerfall-DSP: couldn't get firmware from userspace. try using hdsploader\n"); 4938 else 4939 /* init is complete, we return */ 4940 return 0; 4941 #endif 4942 /* no iobox connected, we defer initialization */ 4943 snd_printk(KERN_INFO "Hammerfall-DSP: card initialization pending : waiting for firmware\n"); 4944 if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) 4945 return err; 4946 return 0; 4947 } else { 4948 snd_printk(KERN_INFO "Hammerfall-DSP: Firmware already present, initializing card.\n"); 4949 if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) 4950 hdsp->io_type = Multiface; 4951 else 4952 hdsp->io_type = Digiface; 4953 } 4954 } 4955 4956 if ((err = snd_hdsp_enable_io(hdsp)) != 0) 4957 return err; 4958 4959 if (is_9652) 4960 hdsp->io_type = H9652; 4961 4962 if (is_9632) 4963 hdsp->io_type = H9632; 4964 4965 if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) 4966 return err; 4967 4968 snd_hdsp_initialize_channels(hdsp); 4969 snd_hdsp_initialize_midi_flush(hdsp); 4970 4971 hdsp->state |= HDSP_FirmwareLoaded; 4972 4973 if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0) 4974 return err; 4975 4976 return 0; 4977 } 4978 4979 static int snd_hdsp_free(struct hdsp *hdsp) 4980 { 4981 if (hdsp->port) { 4982 /* stop the audio, and cancel all interrupts */ 4983 tasklet_kill(&hdsp->midi_tasklet); 4984 hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable); 4985 hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register); 4986 } 4987 4988 if (hdsp->irq >= 0) 4989 free_irq(hdsp->irq, (void *)hdsp); 4990 4991 snd_hdsp_free_buffers(hdsp); 4992 4993 if (hdsp->iobase) 4994 iounmap(hdsp->iobase); 4995 4996 if (hdsp->port) 4997 pci_release_regions(hdsp->pci); 4998 4999 pci_disable_device(hdsp->pci); 5000 return 0; 5001 } 5002 5003 static void snd_hdsp_card_free(struct snd_card *card) 5004 { 5005 struct hdsp *hdsp = (struct hdsp *) card->private_data; 5006 5007 if (hdsp) 5008 snd_hdsp_free(hdsp); 5009 } 5010 5011 static int __devinit snd_hdsp_probe(struct pci_dev *pci, 5012 const struct pci_device_id *pci_id) 5013 { 5014 static int dev; 5015 struct hdsp *hdsp; 5016 struct snd_card *card; 5017 int err; 5018 5019 if (dev >= SNDRV_CARDS) 5020 return -ENODEV; 5021 if (!enable[dev]) { 5022 dev++; 5023 return -ENOENT; 5024 } 5025 5026 if (!(card = snd_card_new(index[dev], id[dev], THIS_MODULE, sizeof(struct hdsp)))) 5027 return -ENOMEM; 5028 5029 hdsp = (struct hdsp *) card->private_data; 5030 card->private_free = snd_hdsp_card_free; 5031 hdsp->dev = dev; 5032 hdsp->pci = pci; 5033 snd_card_set_dev(card, &pci->dev); 5034 5035 if ((err = snd_hdsp_create(card, hdsp)) < 0) { 5036 snd_card_free(card); 5037 return err; 5038 } 5039 5040 strcpy(card->shortname, "Hammerfall DSP"); 5041 sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 5042 hdsp->port, hdsp->irq); 5043 5044 if ((err = snd_card_register(card)) < 0) { 5045 snd_card_free(card); 5046 return err; 5047 } 5048 pci_set_drvdata(pci, card); 5049 dev++; 5050 return 0; 5051 } 5052 5053 static void __devexit snd_hdsp_remove(struct pci_dev *pci) 5054 { 5055 snd_card_free(pci_get_drvdata(pci)); 5056 pci_set_drvdata(pci, NULL); 5057 } 5058 5059 static struct pci_driver driver = { 5060 .name = "RME Hammerfall DSP", 5061 .id_table = snd_hdsp_ids, 5062 .probe = snd_hdsp_probe, 5063 .remove = __devexit_p(snd_hdsp_remove), 5064 }; 5065 5066 static int __init alsa_card_hdsp_init(void) 5067 { 5068 return pci_register_driver(&driver); 5069 } 5070 5071 static void __exit alsa_card_hdsp_exit(void) 5072 { 5073 pci_unregister_driver(&driver); 5074 } 5075 5076 module_init(alsa_card_hdsp_init) 5077 module_exit(alsa_card_hdsp_exit) 5078