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