root/sound/pci/rme9652/hdsp.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. snd_hammerfall_get_buffer
  2. snd_hammerfall_free_buffer
  3. hdsp_playback_to_output_key
  4. hdsp_input_to_output_key
  5. hdsp_write
  6. hdsp_read
  7. hdsp_check_for_iobox
  8. hdsp_wait_for_iobox
  9. snd_hdsp_load_firmware_from_cache
  10. hdsp_get_iobox_version
  11. hdsp_check_for_firmware
  12. hdsp_fifo_wait
  13. hdsp_read_gain
  14. hdsp_write_gain
  15. snd_hdsp_use_is_exclusive
  16. hdsp_spdif_sample_rate
  17. hdsp_external_sample_rate
  18. hdsp_compute_period_size
  19. hdsp_hw_pointer
  20. hdsp_reset_hw_pointer
  21. hdsp_start_audio
  22. hdsp_stop_audio
  23. hdsp_silence_playback
  24. hdsp_set_interrupt_interval
  25. hdsp_set_dds_value
  26. hdsp_set_rate
  27. snd_hdsp_midi_read_byte
  28. snd_hdsp_midi_write_byte
  29. snd_hdsp_midi_input_available
  30. snd_hdsp_midi_output_possible
  31. snd_hdsp_flush_midi_input
  32. snd_hdsp_midi_output_write
  33. snd_hdsp_midi_input_read
  34. snd_hdsp_midi_input_trigger
  35. snd_hdsp_midi_output_timer
  36. snd_hdsp_midi_output_trigger
  37. snd_hdsp_midi_input_open
  38. snd_hdsp_midi_output_open
  39. snd_hdsp_midi_input_close
  40. snd_hdsp_midi_output_close
  41. snd_hdsp_create_midi
  42. snd_hdsp_convert_from_aes
  43. snd_hdsp_convert_to_aes
  44. snd_hdsp_control_spdif_info
  45. snd_hdsp_control_spdif_get
  46. snd_hdsp_control_spdif_put
  47. snd_hdsp_control_spdif_stream_info
  48. snd_hdsp_control_spdif_stream_get
  49. snd_hdsp_control_spdif_stream_put
  50. snd_hdsp_control_spdif_mask_info
  51. snd_hdsp_control_spdif_mask_get
  52. hdsp_spdif_in
  53. hdsp_set_spdif_input
  54. snd_hdsp_info_spdif_in
  55. snd_hdsp_get_spdif_in
  56. snd_hdsp_put_spdif_in
  57. hdsp_toggle_setting
  58. hdsp_set_toggle_setting
  59. snd_hdsp_get_toggle_setting
  60. snd_hdsp_put_toggle_setting
  61. snd_hdsp_info_spdif_sample_rate
  62. snd_hdsp_get_spdif_sample_rate
  63. snd_hdsp_info_system_sample_rate
  64. snd_hdsp_get_system_sample_rate
  65. snd_hdsp_info_autosync_sample_rate
  66. snd_hdsp_get_autosync_sample_rate
  67. hdsp_system_clock_mode
  68. snd_hdsp_info_system_clock_mode
  69. snd_hdsp_get_system_clock_mode
  70. hdsp_clock_source
  71. hdsp_set_clock_source
  72. snd_hdsp_info_clock_source
  73. snd_hdsp_get_clock_source
  74. snd_hdsp_put_clock_source
  75. snd_hdsp_get_clock_source_lock
  76. snd_hdsp_put_clock_source_lock
  77. hdsp_da_gain
  78. hdsp_set_da_gain
  79. snd_hdsp_info_da_gain
  80. snd_hdsp_get_da_gain
  81. snd_hdsp_put_da_gain
  82. hdsp_ad_gain
  83. hdsp_set_ad_gain
  84. snd_hdsp_info_ad_gain
  85. snd_hdsp_get_ad_gain
  86. snd_hdsp_put_ad_gain
  87. hdsp_phone_gain
  88. hdsp_set_phone_gain
  89. snd_hdsp_info_phone_gain
  90. snd_hdsp_get_phone_gain
  91. snd_hdsp_put_phone_gain
  92. hdsp_pref_sync_ref
  93. hdsp_set_pref_sync_ref
  94. snd_hdsp_info_pref_sync_ref
  95. snd_hdsp_get_pref_sync_ref
  96. snd_hdsp_put_pref_sync_ref
  97. hdsp_autosync_ref
  98. snd_hdsp_info_autosync_ref
  99. snd_hdsp_get_autosync_ref
  100. hdsp_set_precise_pointer
  101. snd_hdsp_get_precise_pointer
  102. snd_hdsp_put_precise_pointer
  103. hdsp_set_use_midi_tasklet
  104. snd_hdsp_get_use_midi_tasklet
  105. snd_hdsp_put_use_midi_tasklet
  106. snd_hdsp_info_mixer
  107. snd_hdsp_get_mixer
  108. snd_hdsp_put_mixer
  109. snd_hdsp_info_sync_check
  110. hdsp_wc_sync_check
  111. snd_hdsp_get_wc_sync_check
  112. hdsp_spdif_sync_check
  113. snd_hdsp_get_spdif_sync_check
  114. hdsp_adatsync_sync_check
  115. snd_hdsp_get_adatsync_sync_check
  116. hdsp_adat_sync_check
  117. snd_hdsp_get_adat_sync_check
  118. hdsp_dds_offset
  119. hdsp_set_dds_offset
  120. snd_hdsp_info_dds_offset
  121. snd_hdsp_get_dds_offset
  122. snd_hdsp_put_dds_offset
  123. hdsp_rpm_input12
  124. snd_hdsp_get_rpm_input12
  125. hdsp_set_rpm_input12
  126. snd_hdsp_put_rpm_input12
  127. snd_hdsp_info_rpm_input
  128. hdsp_rpm_input34
  129. snd_hdsp_get_rpm_input34
  130. hdsp_set_rpm_input34
  131. snd_hdsp_put_rpm_input34
  132. hdsp_rpm_bypass
  133. snd_hdsp_get_rpm_bypass
  134. hdsp_set_rpm_bypass
  135. snd_hdsp_put_rpm_bypass
  136. snd_hdsp_info_rpm_bypass
  137. hdsp_rpm_disconnect
  138. snd_hdsp_get_rpm_disconnect
  139. hdsp_set_rpm_disconnect
  140. snd_hdsp_put_rpm_disconnect
  141. snd_hdsp_info_rpm_disconnect
  142. snd_hdsp_create_controls
  143. snd_hdsp_proc_read
  144. snd_hdsp_proc_init
  145. snd_hdsp_free_buffers
  146. snd_hdsp_initialize_memory
  147. snd_hdsp_set_defaults
  148. hdsp_midi_tasklet
  149. snd_hdsp_interrupt
  150. snd_hdsp_hw_pointer
  151. hdsp_channel_buffer_location
  152. snd_hdsp_playback_copy
  153. snd_hdsp_playback_copy_kernel
  154. snd_hdsp_capture_copy
  155. snd_hdsp_capture_copy_kernel
  156. snd_hdsp_hw_silence
  157. snd_hdsp_reset
  158. snd_hdsp_hw_params
  159. snd_hdsp_channel_info
  160. snd_hdsp_ioctl
  161. snd_hdsp_trigger
  162. snd_hdsp_prepare
  163. snd_hdsp_hw_rule_in_channels
  164. snd_hdsp_hw_rule_out_channels
  165. snd_hdsp_hw_rule_in_channels_rate
  166. snd_hdsp_hw_rule_out_channels_rate
  167. snd_hdsp_hw_rule_rate_out_channels
  168. snd_hdsp_hw_rule_rate_in_channels
  169. snd_hdsp_playback_open
  170. snd_hdsp_playback_release
  171. snd_hdsp_capture_open
  172. snd_hdsp_capture_release
  173. copy_u32_le
  174. copy_u64_le
  175. copy_u48_le
  176. hdsp_9652_get_peak
  177. hdsp_9632_get_peak
  178. hdsp_get_peak
  179. snd_hdsp_hwdep_ioctl
  180. snd_hdsp_create_hwdep
  181. snd_hdsp_create_pcm
  182. snd_hdsp_9652_enable_mixer
  183. snd_hdsp_enable_io
  184. snd_hdsp_initialize_channels
  185. snd_hdsp_initialize_midi_flush
  186. snd_hdsp_create_alsa_devices
  187. hdsp_request_fw_loader
  188. snd_hdsp_create
  189. snd_hdsp_free
  190. snd_hdsp_card_free
  191. snd_hdsp_probe
  192. snd_hdsp_remove

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

/* [<][>][^][v][top][bottom][index][help] */