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