WIP FPC-III support
[linux/fpc-iii.git] / sound / pci / korg1212 / korg1212.c
blob2eddd9de9e6daaacdfdaafe11b4b07dab127f4b7
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Driver for the Korg 1212 IO PCI card
5 * Copyright (c) 2001 Haroldo Gamal <gamal@alternex.com.br>
6 */
8 #include <linux/delay.h>
9 #include <linux/init.h>
10 #include <linux/interrupt.h>
11 #include <linux/pci.h>
12 #include <linux/slab.h>
13 #include <linux/wait.h>
14 #include <linux/module.h>
15 #include <linux/mutex.h>
16 #include <linux/firmware.h>
17 #include <linux/io.h>
19 #include <sound/core.h>
20 #include <sound/info.h>
21 #include <sound/control.h>
22 #include <sound/pcm.h>
23 #include <sound/pcm_params.h>
24 #include <sound/initval.h>
26 // ----------------------------------------------------------------------------
27 // Debug Stuff
28 // ----------------------------------------------------------------------------
29 #define K1212_DEBUG_LEVEL 0
30 #if K1212_DEBUG_LEVEL > 0
31 #define K1212_DEBUG_PRINTK(fmt,args...) printk(KERN_DEBUG fmt,##args)
32 #else
33 #define K1212_DEBUG_PRINTK(fmt,...) do { } while (0)
34 #endif
35 #if K1212_DEBUG_LEVEL > 1
36 #define K1212_DEBUG_PRINTK_VERBOSE(fmt,args...) printk(KERN_DEBUG fmt,##args)
37 #else
38 #define K1212_DEBUG_PRINTK_VERBOSE(fmt,...)
39 #endif
41 // ----------------------------------------------------------------------------
42 // Record/Play Buffer Allocation Method. If K1212_LARGEALLOC is defined all
43 // buffers are alocated as a large piece inside KorgSharedBuffer.
44 // ----------------------------------------------------------------------------
45 //#define K1212_LARGEALLOC 1
47 // ----------------------------------------------------------------------------
48 // Valid states of the Korg 1212 I/O card.
49 // ----------------------------------------------------------------------------
50 enum CardState {
51 K1212_STATE_NONEXISTENT, // there is no card here
52 K1212_STATE_UNINITIALIZED, // the card is awaiting DSP download
53 K1212_STATE_DSP_IN_PROCESS, // the card is currently downloading its DSP code
54 K1212_STATE_DSP_COMPLETE, // the card has finished the DSP download
55 K1212_STATE_READY, // the card can be opened by an application. Any application
56 // requests prior to this state should fail. Only an open
57 // request can be made at this state.
58 K1212_STATE_OPEN, // an application has opened the card
59 K1212_STATE_SETUP, // the card has been setup for play
60 K1212_STATE_PLAYING, // the card is playing
61 K1212_STATE_MONITOR, // the card is in the monitor mode
62 K1212_STATE_CALIBRATING, // the card is currently calibrating
63 K1212_STATE_ERRORSTOP, // the card has stopped itself because of an error and we
64 // are in the process of cleaning things up.
65 K1212_STATE_MAX_STATE // state values of this and beyond are invalid
68 // ----------------------------------------------------------------------------
69 // The following enumeration defines the constants written to the card's
70 // host-to-card doorbell to initiate a command.
71 // ----------------------------------------------------------------------------
72 enum korg1212_dbcnst {
73 K1212_DB_RequestForData = 0, // sent by the card to request a buffer fill.
74 K1212_DB_TriggerPlay = 1, // starts playback/record on the card.
75 K1212_DB_SelectPlayMode = 2, // select monitor, playback setup, or stop.
76 K1212_DB_ConfigureBufferMemory = 3, // tells card where the host audio buffers are.
77 K1212_DB_RequestAdatTimecode = 4, // asks the card for the latest ADAT timecode value.
78 K1212_DB_SetClockSourceRate = 5, // sets the clock source and rate for the card.
79 K1212_DB_ConfigureMiscMemory = 6, // tells card where other buffers are.
80 K1212_DB_TriggerFromAdat = 7, // tells card to trigger from Adat at a specific
81 // timecode value.
82 K1212_DB_DMAERROR = 0x80, // DMA Error - the PCI bus is congestioned.
83 K1212_DB_CARDSTOPPED = 0x81, // Card has stopped by user request.
84 K1212_DB_RebootCard = 0xA0, // instructs the card to reboot.
85 K1212_DB_BootFromDSPPage4 = 0xA4, // instructs the card to boot from the DSP microcode
86 // on page 4 (local page to card).
87 K1212_DB_DSPDownloadDone = 0xAE, // sent by the card to indicate the download has
88 // completed.
89 K1212_DB_StartDSPDownload = 0xAF // tells the card to download its DSP firmware.
93 // ----------------------------------------------------------------------------
94 // The following enumeration defines return codes
95 // to the Korg 1212 I/O driver.
96 // ----------------------------------------------------------------------------
97 enum snd_korg1212rc {
98 K1212_CMDRET_Success = 0, // command was successfully placed
99 K1212_CMDRET_DIOCFailure, // the DeviceIoControl call failed
100 K1212_CMDRET_PMFailure, // the protected mode call failed
101 K1212_CMDRET_FailUnspecified, // unspecified failure
102 K1212_CMDRET_FailBadState, // the specified command can not be given in
103 // the card's current state. (or the wave device's
104 // state)
105 K1212_CMDRET_CardUninitialized, // the card is uninitialized and cannot be used
106 K1212_CMDRET_BadIndex, // an out of range card index was specified
107 K1212_CMDRET_BadHandle, // an invalid card handle was specified
108 K1212_CMDRET_NoFillRoutine, // a play request has been made before a fill routine set
109 K1212_CMDRET_FillRoutineInUse, // can't set a new fill routine while one is in use
110 K1212_CMDRET_NoAckFromCard, // the card never acknowledged a command
111 K1212_CMDRET_BadParams, // bad parameters were provided by the caller
113 K1212_CMDRET_BadDevice, // the specified wave device was out of range
114 K1212_CMDRET_BadFormat // the specified wave format is unsupported
117 // ----------------------------------------------------------------------------
118 // The following enumeration defines the constants used to select the play
119 // mode for the card in the SelectPlayMode command.
120 // ----------------------------------------------------------------------------
121 enum PlayModeSelector {
122 K1212_MODE_SetupPlay = 0x00000001, // provides card with pre-play information
123 K1212_MODE_MonitorOn = 0x00000002, // tells card to turn on monitor mode
124 K1212_MODE_MonitorOff = 0x00000004, // tells card to turn off monitor mode
125 K1212_MODE_StopPlay = 0x00000008 // stops playback on the card
128 // ----------------------------------------------------------------------------
129 // The following enumeration defines the constants used to select the monitor
130 // mode for the card in the SetMonitorMode command.
131 // ----------------------------------------------------------------------------
132 enum MonitorModeSelector {
133 K1212_MONMODE_Off = 0, // tells card to turn off monitor mode
134 K1212_MONMODE_On // tells card to turn on monitor mode
137 #define MAILBOX0_OFFSET 0x40 // location of mailbox 0 relative to base address
138 #define MAILBOX1_OFFSET 0x44 // location of mailbox 1 relative to base address
139 #define MAILBOX2_OFFSET 0x48 // location of mailbox 2 relative to base address
140 #define MAILBOX3_OFFSET 0x4c // location of mailbox 3 relative to base address
141 #define OUT_DOORBELL_OFFSET 0x60 // location of PCI to local doorbell
142 #define IN_DOORBELL_OFFSET 0x64 // location of local to PCI doorbell
143 #define STATUS_REG_OFFSET 0x68 // location of interrupt control/status register
144 #define PCI_CONTROL_OFFSET 0x6c // location of the EEPROM, PCI, User I/O, init control
145 // register
146 #define SENS_CONTROL_OFFSET 0x6e // location of the input sensitivity setting register.
147 // this is the upper word of the PCI control reg.
148 #define DEV_VEND_ID_OFFSET 0x70 // location of the device and vendor ID register
150 #define MAX_COMMAND_RETRIES 5 // maximum number of times the driver will attempt
151 // to send a command before giving up.
152 #define COMMAND_ACK_MASK 0x8000 // the MSB is set in the command acknowledgment from
153 // the card.
154 #define DOORBELL_VAL_MASK 0x00FF // the doorbell value is one byte
156 #define CARD_BOOT_DELAY_IN_MS 10
157 #define CARD_BOOT_TIMEOUT 10
158 #define DSP_BOOT_DELAY_IN_MS 200
160 #define kNumBuffers 8
161 #define k1212MaxCards 4
162 #define k1212NumWaveDevices 6
163 #define k16BitChannels 10
164 #define k32BitChannels 2
165 #define kAudioChannels (k16BitChannels + k32BitChannels)
166 #define kPlayBufferFrames 1024
168 #define K1212_ANALOG_CHANNELS 2
169 #define K1212_SPDIF_CHANNELS 2
170 #define K1212_ADAT_CHANNELS 8
171 #define K1212_CHANNELS (K1212_ADAT_CHANNELS + K1212_ANALOG_CHANNELS)
172 #define K1212_MIN_CHANNELS 1
173 #define K1212_MAX_CHANNELS K1212_CHANNELS
174 #define K1212_FRAME_SIZE (sizeof(struct KorgAudioFrame))
175 #define K1212_MAX_SAMPLES (kPlayBufferFrames*kNumBuffers)
176 #define K1212_PERIODS (kNumBuffers)
177 #define K1212_PERIOD_BYTES (K1212_FRAME_SIZE*kPlayBufferFrames)
178 #define K1212_BUF_SIZE (K1212_PERIOD_BYTES*kNumBuffers)
179 #define K1212_ANALOG_BUF_SIZE (K1212_ANALOG_CHANNELS * 2 * kPlayBufferFrames * kNumBuffers)
180 #define K1212_SPDIF_BUF_SIZE (K1212_SPDIF_CHANNELS * 3 * kPlayBufferFrames * kNumBuffers)
181 #define K1212_ADAT_BUF_SIZE (K1212_ADAT_CHANNELS * 2 * kPlayBufferFrames * kNumBuffers)
182 #define K1212_MAX_BUF_SIZE (K1212_ANALOG_BUF_SIZE + K1212_ADAT_BUF_SIZE)
184 #define k1212MinADCSens 0x00
185 #define k1212MaxADCSens 0x7f
186 #define k1212MaxVolume 0x7fff
187 #define k1212MaxWaveVolume 0xffff
188 #define k1212MinVolume 0x0000
189 #define k1212MaxVolInverted 0x8000
191 // -----------------------------------------------------------------
192 // the following bits are used for controlling interrupts in the
193 // interrupt control/status reg
194 // -----------------------------------------------------------------
195 #define PCI_INT_ENABLE_BIT 0x00000100
196 #define PCI_DOORBELL_INT_ENABLE_BIT 0x00000200
197 #define LOCAL_INT_ENABLE_BIT 0x00010000
198 #define LOCAL_DOORBELL_INT_ENABLE_BIT 0x00020000
199 #define LOCAL_DMA1_INT_ENABLE_BIT 0x00080000
201 // -----------------------------------------------------------------
202 // the following bits are defined for the PCI command register
203 // -----------------------------------------------------------------
204 #define PCI_CMD_MEM_SPACE_ENABLE_BIT 0x0002
205 #define PCI_CMD_IO_SPACE_ENABLE_BIT 0x0001
206 #define PCI_CMD_BUS_MASTER_ENABLE_BIT 0x0004
208 // -----------------------------------------------------------------
209 // the following bits are defined for the PCI status register
210 // -----------------------------------------------------------------
211 #define PCI_STAT_PARITY_ERROR_BIT 0x8000
212 #define PCI_STAT_SYSTEM_ERROR_BIT 0x4000
213 #define PCI_STAT_MASTER_ABORT_RCVD_BIT 0x2000
214 #define PCI_STAT_TARGET_ABORT_RCVD_BIT 0x1000
215 #define PCI_STAT_TARGET_ABORT_SENT_BIT 0x0800
217 // ------------------------------------------------------------------------
218 // the following constants are used in setting the 1212 I/O card's input
219 // sensitivity.
220 // ------------------------------------------------------------------------
221 #define SET_SENS_LOCALINIT_BITPOS 15
222 #define SET_SENS_DATA_BITPOS 10
223 #define SET_SENS_CLOCK_BITPOS 8
224 #define SET_SENS_LOADSHIFT_BITPOS 0
226 #define SET_SENS_LEFTCHANID 0x00
227 #define SET_SENS_RIGHTCHANID 0x01
229 #define K1212SENSUPDATE_DELAY_IN_MS 50
231 // --------------------------------------------------------------------------
232 // WaitRTCTicks
234 // This function waits the specified number of real time clock ticks.
235 // According to the DDK, each tick is ~0.8 microseconds.
236 // The defines following the function declaration can be used for the
237 // numTicksToWait parameter.
238 // --------------------------------------------------------------------------
239 #define ONE_RTC_TICK 1
240 #define SENSCLKPULSE_WIDTH 4
241 #define LOADSHIFT_DELAY 4
242 #define INTERCOMMAND_DELAY 40
243 #define STOPCARD_DELAY 300 // max # RTC ticks for the card to stop once we write
244 // the command register. (could be up to 180 us)
245 #define COMMAND_ACK_DELAY 13 // number of RTC ticks to wait for an acknowledgement
246 // from the card after sending a command.
248 enum ClockSourceIndex {
249 K1212_CLKIDX_AdatAt44_1K = 0, // selects source as ADAT at 44.1 kHz
250 K1212_CLKIDX_AdatAt48K, // selects source as ADAT at 48 kHz
251 K1212_CLKIDX_WordAt44_1K, // selects source as S/PDIF at 44.1 kHz
252 K1212_CLKIDX_WordAt48K, // selects source as S/PDIF at 48 kHz
253 K1212_CLKIDX_LocalAt44_1K, // selects source as local clock at 44.1 kHz
254 K1212_CLKIDX_LocalAt48K, // selects source as local clock at 48 kHz
255 K1212_CLKIDX_Invalid // used to check validity of the index
258 enum ClockSourceType {
259 K1212_CLKIDX_Adat = 0, // selects source as ADAT
260 K1212_CLKIDX_Word, // selects source as S/PDIF
261 K1212_CLKIDX_Local // selects source as local clock
264 struct KorgAudioFrame {
265 u16 frameData16[k16BitChannels]; /* channels 0-9 use 16 bit samples */
266 u32 frameData32[k32BitChannels]; /* channels 10-11 use 32 bits - only 20 are sent across S/PDIF */
267 u32 timeCodeVal; /* holds the ADAT timecode value */
270 struct KorgAudioBuffer {
271 struct KorgAudioFrame bufferData[kPlayBufferFrames]; /* buffer definition */
274 struct KorgSharedBuffer {
275 #ifdef K1212_LARGEALLOC
276 struct KorgAudioBuffer playDataBufs[kNumBuffers];
277 struct KorgAudioBuffer recordDataBufs[kNumBuffers];
278 #endif
279 short volumeData[kAudioChannels];
280 u32 cardCommand;
281 u16 routeData [kAudioChannels];
282 u32 AdatTimeCode; // ADAT timecode value
285 struct SensBits {
286 union {
287 struct {
288 unsigned int leftChanVal:8;
289 unsigned int leftChanId:8;
290 } v;
291 u16 leftSensBits;
292 } l;
293 union {
294 struct {
295 unsigned int rightChanVal:8;
296 unsigned int rightChanId:8;
297 } v;
298 u16 rightSensBits;
299 } r;
302 struct snd_korg1212 {
303 struct snd_card *card;
304 struct pci_dev *pci;
305 struct snd_pcm *pcm;
306 int irq;
308 spinlock_t lock;
309 struct mutex open_mutex;
311 struct timer_list timer; /* timer callback for checking ack of stop request */
312 int stop_pending_cnt; /* counter for stop pending check */
314 wait_queue_head_t wait;
316 unsigned long iomem;
317 unsigned long ioport;
318 unsigned long iomem2;
319 unsigned long irqcount;
320 unsigned long inIRQ;
321 void __iomem *iobase;
323 struct snd_dma_buffer dma_dsp;
324 struct snd_dma_buffer dma_play;
325 struct snd_dma_buffer dma_rec;
326 struct snd_dma_buffer dma_shared;
328 u32 DataBufsSize;
330 struct KorgAudioBuffer * playDataBufsPtr;
331 struct KorgAudioBuffer * recordDataBufsPtr;
333 struct KorgSharedBuffer * sharedBufferPtr;
335 u32 RecDataPhy;
336 u32 PlayDataPhy;
337 unsigned long sharedBufferPhy;
338 u32 VolumeTablePhy;
339 u32 RoutingTablePhy;
340 u32 AdatTimeCodePhy;
342 u32 __iomem * statusRegPtr; // address of the interrupt status/control register
343 u32 __iomem * outDoorbellPtr; // address of the host->card doorbell register
344 u32 __iomem * inDoorbellPtr; // address of the card->host doorbell register
345 u32 __iomem * mailbox0Ptr; // address of mailbox 0 on the card
346 u32 __iomem * mailbox1Ptr; // address of mailbox 1 on the card
347 u32 __iomem * mailbox2Ptr; // address of mailbox 2 on the card
348 u32 __iomem * mailbox3Ptr; // address of mailbox 3 on the card
349 u32 __iomem * controlRegPtr; // address of the EEPROM, PCI, I/O, Init ctrl reg
350 u16 __iomem * sensRegPtr; // address of the sensitivity setting register
351 u32 __iomem * idRegPtr; // address of the device and vendor ID registers
353 size_t periodsize;
354 int channels;
355 int currentBuffer;
357 struct snd_pcm_substream *playback_substream;
358 struct snd_pcm_substream *capture_substream;
360 pid_t capture_pid;
361 pid_t playback_pid;
363 enum CardState cardState;
364 int running;
365 int idleMonitorOn; // indicates whether the card is in idle monitor mode.
366 u32 cmdRetryCount; // tracks how many times we have retried sending to the card.
368 enum ClockSourceIndex clkSrcRate; // sample rate and clock source
370 enum ClockSourceType clkSource; // clock source
371 int clkRate; // clock rate
373 int volumePhase[kAudioChannels];
375 u16 leftADCInSens; // ADC left channel input sensitivity
376 u16 rightADCInSens; // ADC right channel input sensitivity
378 int opencnt; // Open/Close count
379 int setcnt; // SetupForPlay count
380 int playcnt; // TriggerPlay count
381 int errorcnt; // Error Count
382 unsigned long totalerrorcnt; // Total Error Count
384 int dsp_is_loaded;
385 int dsp_stop_is_processed;
389 MODULE_DESCRIPTION("korg1212");
390 MODULE_LICENSE("GPL");
391 MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");
392 MODULE_FIRMWARE("korg/k1212.dsp");
394 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
395 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
396 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */
398 module_param_array(index, int, NULL, 0444);
399 MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard.");
400 module_param_array(id, charp, NULL, 0444);
401 MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard.");
402 module_param_array(enable, bool, NULL, 0444);
403 MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
404 MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
406 static const struct pci_device_id snd_korg1212_ids[] = {
408 .vendor = 0x10b5,
409 .device = 0x906d,
410 .subvendor = PCI_ANY_ID,
411 .subdevice = PCI_ANY_ID,
413 { 0, },
416 MODULE_DEVICE_TABLE(pci, snd_korg1212_ids);
418 static const char * const stateName[] = {
419 "Non-existent",
420 "Uninitialized",
421 "DSP download in process",
422 "DSP download complete",
423 "Ready",
424 "Open",
425 "Setup for play",
426 "Playing",
427 "Monitor mode on",
428 "Calibrating",
429 "Invalid"
432 static const char * const clockSourceTypeName[] = { "ADAT", "S/PDIF", "local" };
434 static const char * const clockSourceName[] = {
435 "ADAT at 44.1 kHz",
436 "ADAT at 48 kHz",
437 "S/PDIF at 44.1 kHz",
438 "S/PDIF at 48 kHz",
439 "local clock at 44.1 kHz",
440 "local clock at 48 kHz"
443 static const char * const channelName[] = {
444 "ADAT-1",
445 "ADAT-2",
446 "ADAT-3",
447 "ADAT-4",
448 "ADAT-5",
449 "ADAT-6",
450 "ADAT-7",
451 "ADAT-8",
452 "Analog-L",
453 "Analog-R",
454 "SPDIF-L",
455 "SPDIF-R",
458 static const u16 ClockSourceSelector[] = {
459 0x8000, // selects source as ADAT at 44.1 kHz
460 0x0000, // selects source as ADAT at 48 kHz
461 0x8001, // selects source as S/PDIF at 44.1 kHz
462 0x0001, // selects source as S/PDIF at 48 kHz
463 0x8002, // selects source as local clock at 44.1 kHz
464 0x0002 // selects source as local clock at 48 kHz
467 union swap_u32 { unsigned char c[4]; u32 i; };
469 #ifdef SNDRV_BIG_ENDIAN
470 static u32 LowerWordSwap(u32 swappee)
471 #else
472 static u32 UpperWordSwap(u32 swappee)
473 #endif
475 union swap_u32 retVal, swapper;
477 swapper.i = swappee;
478 retVal.c[2] = swapper.c[3];
479 retVal.c[3] = swapper.c[2];
480 retVal.c[1] = swapper.c[1];
481 retVal.c[0] = swapper.c[0];
483 return retVal.i;
486 #ifdef SNDRV_BIG_ENDIAN
487 static u32 UpperWordSwap(u32 swappee)
488 #else
489 static u32 LowerWordSwap(u32 swappee)
490 #endif
492 union swap_u32 retVal, swapper;
494 swapper.i = swappee;
495 retVal.c[2] = swapper.c[2];
496 retVal.c[3] = swapper.c[3];
497 retVal.c[1] = swapper.c[0];
498 retVal.c[0] = swapper.c[1];
500 return retVal.i;
503 #define SetBitInWord(theWord,bitPosition) (*theWord) |= (0x0001 << bitPosition)
504 #define SetBitInDWord(theWord,bitPosition) (*theWord) |= (0x00000001 << bitPosition)
505 #define ClearBitInWord(theWord,bitPosition) (*theWord) &= ~(0x0001 << bitPosition)
506 #define ClearBitInDWord(theWord,bitPosition) (*theWord) &= ~(0x00000001 << bitPosition)
508 static int snd_korg1212_Send1212Command(struct snd_korg1212 *korg1212,
509 enum korg1212_dbcnst doorbellVal,
510 u32 mailBox0Val, u32 mailBox1Val,
511 u32 mailBox2Val, u32 mailBox3Val)
513 u32 retryCount;
514 u16 mailBox3Lo;
515 int rc = K1212_CMDRET_Success;
517 if (!korg1212->outDoorbellPtr) {
518 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: CardUninitialized\n");
519 return K1212_CMDRET_CardUninitialized;
522 K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- 0x%08x 0x%08x [%s]\n",
523 doorbellVal, mailBox0Val, stateName[korg1212->cardState]);
524 for (retryCount = 0; retryCount < MAX_COMMAND_RETRIES; retryCount++) {
525 writel(mailBox3Val, korg1212->mailbox3Ptr);
526 writel(mailBox2Val, korg1212->mailbox2Ptr);
527 writel(mailBox1Val, korg1212->mailbox1Ptr);
528 writel(mailBox0Val, korg1212->mailbox0Ptr);
529 writel(doorbellVal, korg1212->outDoorbellPtr); // interrupt the card
531 // --------------------------------------------------------------
532 // the reboot command will not give an acknowledgement.
533 // --------------------------------------------------------------
534 if ( doorbellVal == K1212_DB_RebootCard ||
535 doorbellVal == K1212_DB_BootFromDSPPage4 ||
536 doorbellVal == K1212_DB_StartDSPDownload ) {
537 rc = K1212_CMDRET_Success;
538 break;
541 // --------------------------------------------------------------
542 // See if the card acknowledged the command. Wait a bit, then
543 // read in the low word of mailbox3. If the MSB is set and the
544 // low byte is equal to the doorbell value, then it ack'd.
545 // --------------------------------------------------------------
546 udelay(COMMAND_ACK_DELAY);
547 mailBox3Lo = readl(korg1212->mailbox3Ptr);
548 if (mailBox3Lo & COMMAND_ACK_MASK) {
549 if ((mailBox3Lo & DOORBELL_VAL_MASK) == (doorbellVal & DOORBELL_VAL_MASK)) {
550 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- Success\n");
551 rc = K1212_CMDRET_Success;
552 break;
556 korg1212->cmdRetryCount += retryCount;
558 if (retryCount >= MAX_COMMAND_RETRIES) {
559 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- NoAckFromCard\n");
560 rc = K1212_CMDRET_NoAckFromCard;
563 return rc;
566 /* spinlock already held */
567 static void snd_korg1212_SendStop(struct snd_korg1212 *korg1212)
569 if (! korg1212->stop_pending_cnt) {
570 korg1212->sharedBufferPtr->cardCommand = 0xffffffff;
571 /* program the timer */
572 korg1212->stop_pending_cnt = HZ;
573 mod_timer(&korg1212->timer, jiffies + 1);
577 static void snd_korg1212_SendStopAndWait(struct snd_korg1212 *korg1212)
579 unsigned long flags;
580 spin_lock_irqsave(&korg1212->lock, flags);
581 korg1212->dsp_stop_is_processed = 0;
582 snd_korg1212_SendStop(korg1212);
583 spin_unlock_irqrestore(&korg1212->lock, flags);
584 wait_event_timeout(korg1212->wait, korg1212->dsp_stop_is_processed, (HZ * 3) / 2);
587 /* timer callback for checking the ack of stop request */
588 static void snd_korg1212_timer_func(struct timer_list *t)
590 struct snd_korg1212 *korg1212 = from_timer(korg1212, t, timer);
591 unsigned long flags;
593 spin_lock_irqsave(&korg1212->lock, flags);
594 if (korg1212->sharedBufferPtr->cardCommand == 0) {
595 /* ack'ed */
596 korg1212->stop_pending_cnt = 0;
597 korg1212->dsp_stop_is_processed = 1;
598 wake_up(&korg1212->wait);
599 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Stop ack'ed [%s]\n",
600 stateName[korg1212->cardState]);
601 } else {
602 if (--korg1212->stop_pending_cnt > 0) {
603 /* reprogram timer */
604 mod_timer(&korg1212->timer, jiffies + 1);
605 } else {
606 snd_printd("korg1212_timer_func timeout\n");
607 korg1212->sharedBufferPtr->cardCommand = 0;
608 korg1212->dsp_stop_is_processed = 1;
609 wake_up(&korg1212->wait);
610 K1212_DEBUG_PRINTK("K1212_DEBUG: Stop timeout [%s]\n",
611 stateName[korg1212->cardState]);
614 spin_unlock_irqrestore(&korg1212->lock, flags);
617 static int snd_korg1212_TurnOnIdleMonitor(struct snd_korg1212 *korg1212)
619 unsigned long flags;
620 int rc;
622 udelay(INTERCOMMAND_DELAY);
623 spin_lock_irqsave(&korg1212->lock, flags);
624 korg1212->idleMonitorOn = 1;
625 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
626 K1212_MODE_MonitorOn, 0, 0, 0);
627 spin_unlock_irqrestore(&korg1212->lock, flags);
628 return rc;
631 static void snd_korg1212_TurnOffIdleMonitor(struct snd_korg1212 *korg1212)
633 if (korg1212->idleMonitorOn) {
634 snd_korg1212_SendStopAndWait(korg1212);
635 korg1212->idleMonitorOn = 0;
639 static inline void snd_korg1212_setCardState(struct snd_korg1212 * korg1212, enum CardState csState)
641 korg1212->cardState = csState;
644 static int snd_korg1212_OpenCard(struct snd_korg1212 * korg1212)
646 K1212_DEBUG_PRINTK("K1212_DEBUG: OpenCard [%s] %d\n",
647 stateName[korg1212->cardState], korg1212->opencnt);
648 mutex_lock(&korg1212->open_mutex);
649 if (korg1212->opencnt++ == 0) {
650 snd_korg1212_TurnOffIdleMonitor(korg1212);
651 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
654 mutex_unlock(&korg1212->open_mutex);
655 return 1;
658 static int snd_korg1212_CloseCard(struct snd_korg1212 * korg1212)
660 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard [%s] %d\n",
661 stateName[korg1212->cardState], korg1212->opencnt);
663 mutex_lock(&korg1212->open_mutex);
664 if (--(korg1212->opencnt)) {
665 mutex_unlock(&korg1212->open_mutex);
666 return 0;
669 if (korg1212->cardState == K1212_STATE_SETUP) {
670 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
671 K1212_MODE_StopPlay, 0, 0, 0);
672 if (rc)
673 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard - RC = %d [%s]\n",
674 rc, stateName[korg1212->cardState]);
675 if (rc != K1212_CMDRET_Success) {
676 mutex_unlock(&korg1212->open_mutex);
677 return 0;
679 } else if (korg1212->cardState > K1212_STATE_SETUP) {
680 snd_korg1212_SendStopAndWait(korg1212);
683 if (korg1212->cardState > K1212_STATE_READY) {
684 snd_korg1212_TurnOnIdleMonitor(korg1212);
685 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
688 mutex_unlock(&korg1212->open_mutex);
689 return 0;
692 /* spinlock already held */
693 static int snd_korg1212_SetupForPlay(struct snd_korg1212 * korg1212)
695 int rc;
697 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay [%s] %d\n",
698 stateName[korg1212->cardState], korg1212->setcnt);
700 if (korg1212->setcnt++)
701 return 0;
703 snd_korg1212_setCardState(korg1212, K1212_STATE_SETUP);
704 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
705 K1212_MODE_SetupPlay, 0, 0, 0);
706 if (rc)
707 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay - RC = %d [%s]\n",
708 rc, stateName[korg1212->cardState]);
709 if (rc != K1212_CMDRET_Success) {
710 return 1;
712 return 0;
715 /* spinlock already held */
716 static int snd_korg1212_TriggerPlay(struct snd_korg1212 * korg1212)
718 int rc;
720 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay [%s] %d\n",
721 stateName[korg1212->cardState], korg1212->playcnt);
723 if (korg1212->playcnt++)
724 return 0;
726 snd_korg1212_setCardState(korg1212, K1212_STATE_PLAYING);
727 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_TriggerPlay, 0, 0, 0, 0);
728 if (rc)
729 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay - RC = %d [%s]\n",
730 rc, stateName[korg1212->cardState]);
731 if (rc != K1212_CMDRET_Success) {
732 return 1;
734 return 0;
737 /* spinlock already held */
738 static int snd_korg1212_StopPlay(struct snd_korg1212 * korg1212)
740 K1212_DEBUG_PRINTK("K1212_DEBUG: StopPlay [%s] %d\n",
741 stateName[korg1212->cardState], korg1212->playcnt);
743 if (--(korg1212->playcnt))
744 return 0;
746 korg1212->setcnt = 0;
748 if (korg1212->cardState != K1212_STATE_ERRORSTOP)
749 snd_korg1212_SendStop(korg1212);
751 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
752 return 0;
755 static void snd_korg1212_EnableCardInterrupts(struct snd_korg1212 * korg1212)
757 writel(PCI_INT_ENABLE_BIT |
758 PCI_DOORBELL_INT_ENABLE_BIT |
759 LOCAL_INT_ENABLE_BIT |
760 LOCAL_DOORBELL_INT_ENABLE_BIT |
761 LOCAL_DMA1_INT_ENABLE_BIT,
762 korg1212->statusRegPtr);
765 #if 0 /* not used */
767 static int snd_korg1212_SetMonitorMode(struct snd_korg1212 *korg1212,
768 enum MonitorModeSelector mode)
770 K1212_DEBUG_PRINTK("K1212_DEBUG: SetMonitorMode [%s]\n",
771 stateName[korg1212->cardState]);
773 switch (mode) {
774 case K1212_MONMODE_Off:
775 if (korg1212->cardState != K1212_STATE_MONITOR)
776 return 0;
777 else {
778 snd_korg1212_SendStopAndWait(korg1212);
779 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
781 break;
783 case K1212_MONMODE_On:
784 if (korg1212->cardState != K1212_STATE_OPEN)
785 return 0;
786 else {
787 int rc;
788 snd_korg1212_setCardState(korg1212, K1212_STATE_MONITOR);
789 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
790 K1212_MODE_MonitorOn, 0, 0, 0);
791 if (rc != K1212_CMDRET_Success)
792 return 0;
794 break;
796 default:
797 return 0;
800 return 1;
803 #endif /* not used */
805 static inline int snd_korg1212_use_is_exclusive(struct snd_korg1212 *korg1212)
807 if (korg1212->playback_pid != korg1212->capture_pid &&
808 korg1212->playback_pid >= 0 && korg1212->capture_pid >= 0)
809 return 0;
811 return 1;
814 static int snd_korg1212_SetRate(struct snd_korg1212 *korg1212, int rate)
816 static const enum ClockSourceIndex s44[] = {
817 K1212_CLKIDX_AdatAt44_1K,
818 K1212_CLKIDX_WordAt44_1K,
819 K1212_CLKIDX_LocalAt44_1K
821 static const enum ClockSourceIndex s48[] = {
822 K1212_CLKIDX_AdatAt48K,
823 K1212_CLKIDX_WordAt48K,
824 K1212_CLKIDX_LocalAt48K
826 int parm, rc;
828 if (!snd_korg1212_use_is_exclusive (korg1212))
829 return -EBUSY;
831 switch (rate) {
832 case 44100:
833 parm = s44[korg1212->clkSource];
834 break;
836 case 48000:
837 parm = s48[korg1212->clkSource];
838 break;
840 default:
841 return -EINVAL;
844 korg1212->clkSrcRate = parm;
845 korg1212->clkRate = rate;
847 udelay(INTERCOMMAND_DELAY);
848 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
849 ClockSourceSelector[korg1212->clkSrcRate],
850 0, 0, 0);
851 if (rc)
852 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
853 rc, stateName[korg1212->cardState]);
855 return 0;
858 static int snd_korg1212_SetClockSource(struct snd_korg1212 *korg1212, int source)
861 if (source < 0 || source > 2)
862 return -EINVAL;
864 korg1212->clkSource = source;
866 snd_korg1212_SetRate(korg1212, korg1212->clkRate);
868 return 0;
871 static void snd_korg1212_DisableCardInterrupts(struct snd_korg1212 *korg1212)
873 writel(0, korg1212->statusRegPtr);
876 static int snd_korg1212_WriteADCSensitivity(struct snd_korg1212 *korg1212)
878 struct SensBits sensVals;
879 int bitPosition;
880 int channel;
881 int clkIs48K;
882 int monModeSet;
883 u16 controlValue; // this keeps the current value to be written to
884 // the card's eeprom control register.
885 u16 count;
886 unsigned long flags;
888 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity [%s]\n",
889 stateName[korg1212->cardState]);
891 // ----------------------------------------------------------------------------
892 // initialize things. The local init bit is always set when writing to the
893 // card's control register.
894 // ----------------------------------------------------------------------------
895 controlValue = 0;
896 SetBitInWord(&controlValue, SET_SENS_LOCALINIT_BITPOS); // init the control value
898 // ----------------------------------------------------------------------------
899 // make sure the card is not in monitor mode when we do this update.
900 // ----------------------------------------------------------------------------
901 if (korg1212->cardState == K1212_STATE_MONITOR || korg1212->idleMonitorOn) {
902 monModeSet = 1;
903 snd_korg1212_SendStopAndWait(korg1212);
904 } else
905 monModeSet = 0;
907 spin_lock_irqsave(&korg1212->lock, flags);
909 // ----------------------------------------------------------------------------
910 // we are about to send new values to the card, so clear the new values queued
911 // flag. Also, clear out mailbox 3, so we don't lockup.
912 // ----------------------------------------------------------------------------
913 writel(0, korg1212->mailbox3Ptr);
914 udelay(LOADSHIFT_DELAY);
916 // ----------------------------------------------------------------------------
917 // determine whether we are running a 48K or 44.1K clock. This info is used
918 // later when setting the SPDIF FF after the volume has been shifted in.
919 // ----------------------------------------------------------------------------
920 switch (korg1212->clkSrcRate) {
921 case K1212_CLKIDX_AdatAt44_1K:
922 case K1212_CLKIDX_WordAt44_1K:
923 case K1212_CLKIDX_LocalAt44_1K:
924 clkIs48K = 0;
925 break;
927 case K1212_CLKIDX_WordAt48K:
928 case K1212_CLKIDX_AdatAt48K:
929 case K1212_CLKIDX_LocalAt48K:
930 default:
931 clkIs48K = 1;
932 break;
935 // ----------------------------------------------------------------------------
936 // start the update. Setup the bit structure and then shift the bits.
937 // ----------------------------------------------------------------------------
938 sensVals.l.v.leftChanId = SET_SENS_LEFTCHANID;
939 sensVals.r.v.rightChanId = SET_SENS_RIGHTCHANID;
940 sensVals.l.v.leftChanVal = korg1212->leftADCInSens;
941 sensVals.r.v.rightChanVal = korg1212->rightADCInSens;
943 // ----------------------------------------------------------------------------
944 // now start shifting the bits in. Start with the left channel then the right.
945 // ----------------------------------------------------------------------------
946 for (channel = 0; channel < 2; channel++) {
948 // ----------------------------------------------------------------------------
949 // Bring the load/shift line low, then wait - the spec says >150ns from load/
950 // shift low to the first rising edge of the clock.
951 // ----------------------------------------------------------------------------
952 ClearBitInWord(&controlValue, SET_SENS_LOADSHIFT_BITPOS);
953 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
954 writew(controlValue, korg1212->sensRegPtr); // load/shift goes low
955 udelay(LOADSHIFT_DELAY);
957 for (bitPosition = 15; bitPosition >= 0; bitPosition--) { // for all the bits
958 if (channel == 0) {
959 if (sensVals.l.leftSensBits & (0x0001 << bitPosition))
960 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set high
961 else
962 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set low
963 } else {
964 if (sensVals.r.rightSensBits & (0x0001 << bitPosition))
965 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set high
966 else
967 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set low
970 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
971 writew(controlValue, korg1212->sensRegPtr); // clock goes low
972 udelay(SENSCLKPULSE_WIDTH);
973 SetBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
974 writew(controlValue, korg1212->sensRegPtr); // clock goes high
975 udelay(SENSCLKPULSE_WIDTH);
978 // ----------------------------------------------------------------------------
979 // finish up SPDIF for left. Bring the load/shift line high, then write a one
980 // bit if the clock rate is 48K otherwise write 0.
981 // ----------------------------------------------------------------------------
982 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
983 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
984 SetBitInWord(&controlValue, SET_SENS_LOADSHIFT_BITPOS);
985 writew(controlValue, korg1212->sensRegPtr); // load shift goes high - clk low
986 udelay(SENSCLKPULSE_WIDTH);
988 if (clkIs48K)
989 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
991 writew(controlValue, korg1212->sensRegPtr); // set/clear data bit
992 udelay(ONE_RTC_TICK);
993 SetBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
994 writew(controlValue, korg1212->sensRegPtr); // clock goes high
995 udelay(SENSCLKPULSE_WIDTH);
996 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
997 writew(controlValue, korg1212->sensRegPtr); // clock goes low
998 udelay(SENSCLKPULSE_WIDTH);
1001 // ----------------------------------------------------------------------------
1002 // The update is complete. Set a timeout. This is the inter-update delay.
1003 // Also, if the card was in monitor mode, restore it.
1004 // ----------------------------------------------------------------------------
1005 for (count = 0; count < 10; count++)
1006 udelay(SENSCLKPULSE_WIDTH);
1008 if (monModeSet) {
1009 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
1010 K1212_MODE_MonitorOn, 0, 0, 0);
1011 if (rc)
1012 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity - RC = %d [%s]\n",
1013 rc, stateName[korg1212->cardState]);
1016 spin_unlock_irqrestore(&korg1212->lock, flags);
1018 return 1;
1021 static void snd_korg1212_OnDSPDownloadComplete(struct snd_korg1212 *korg1212)
1023 int channel, rc;
1025 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is complete. [%s]\n",
1026 stateName[korg1212->cardState]);
1028 // ----------------------------------------------------
1029 // tell the card to boot
1030 // ----------------------------------------------------
1031 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_BootFromDSPPage4, 0, 0, 0, 0);
1033 if (rc)
1034 K1212_DEBUG_PRINTK("K1212_DEBUG: Boot from Page 4 - RC = %d [%s]\n",
1035 rc, stateName[korg1212->cardState]);
1036 msleep(DSP_BOOT_DELAY_IN_MS);
1038 // --------------------------------------------------------------------------------
1039 // Let the card know where all the buffers are.
1040 // --------------------------------------------------------------------------------
1041 rc = snd_korg1212_Send1212Command(korg1212,
1042 K1212_DB_ConfigureBufferMemory,
1043 LowerWordSwap(korg1212->PlayDataPhy),
1044 LowerWordSwap(korg1212->RecDataPhy),
1045 ((kNumBuffers * kPlayBufferFrames) / 2), // size given to the card
1046 // is based on 2 buffers
1050 if (rc)
1051 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Buffer Memory - RC = %d [%s]\n",
1052 rc, stateName[korg1212->cardState]);
1054 udelay(INTERCOMMAND_DELAY);
1056 rc = snd_korg1212_Send1212Command(korg1212,
1057 K1212_DB_ConfigureMiscMemory,
1058 LowerWordSwap(korg1212->VolumeTablePhy),
1059 LowerWordSwap(korg1212->RoutingTablePhy),
1060 LowerWordSwap(korg1212->AdatTimeCodePhy),
1064 if (rc)
1065 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Misc Memory - RC = %d [%s]\n",
1066 rc, stateName[korg1212->cardState]);
1068 // --------------------------------------------------------------------------------
1069 // Initialize the routing and volume tables, then update the card's state.
1070 // --------------------------------------------------------------------------------
1071 udelay(INTERCOMMAND_DELAY);
1073 for (channel = 0; channel < kAudioChannels; channel++) {
1074 korg1212->sharedBufferPtr->volumeData[channel] = k1212MaxVolume;
1075 //korg1212->sharedBufferPtr->routeData[channel] = channel;
1076 korg1212->sharedBufferPtr->routeData[channel] = 8 + (channel & 1);
1079 snd_korg1212_WriteADCSensitivity(korg1212);
1081 udelay(INTERCOMMAND_DELAY);
1082 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
1083 ClockSourceSelector[korg1212->clkSrcRate],
1084 0, 0, 0);
1085 if (rc)
1086 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
1087 rc, stateName[korg1212->cardState]);
1089 rc = snd_korg1212_TurnOnIdleMonitor(korg1212);
1090 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
1092 if (rc)
1093 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Monitor On - RC = %d [%s]\n",
1094 rc, stateName[korg1212->cardState]);
1096 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE);
1099 static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id)
1101 u32 doorbellValue;
1102 struct snd_korg1212 *korg1212 = dev_id;
1104 doorbellValue = readl(korg1212->inDoorbellPtr);
1106 if (!doorbellValue)
1107 return IRQ_NONE;
1109 spin_lock(&korg1212->lock);
1111 writel(doorbellValue, korg1212->inDoorbellPtr);
1113 korg1212->irqcount++;
1115 korg1212->inIRQ++;
1117 switch (doorbellValue) {
1118 case K1212_DB_DSPDownloadDone:
1119 K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n",
1120 korg1212->irqcount, doorbellValue,
1121 stateName[korg1212->cardState]);
1122 if (korg1212->cardState == K1212_STATE_DSP_IN_PROCESS) {
1123 korg1212->dsp_is_loaded = 1;
1124 wake_up(&korg1212->wait);
1126 break;
1128 // ------------------------------------------------------------------------
1129 // an error occurred - stop the card
1130 // ------------------------------------------------------------------------
1131 case K1212_DB_DMAERROR:
1132 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ DMAE count - %ld, %x, [%s].\n",
1133 korg1212->irqcount, doorbellValue,
1134 stateName[korg1212->cardState]);
1135 snd_printk(KERN_ERR "korg1212: DMA Error\n");
1136 korg1212->errorcnt++;
1137 korg1212->totalerrorcnt++;
1138 korg1212->sharedBufferPtr->cardCommand = 0;
1139 snd_korg1212_setCardState(korg1212, K1212_STATE_ERRORSTOP);
1140 break;
1142 // ------------------------------------------------------------------------
1143 // the card has stopped by our request. Clear the command word and signal
1144 // the semaphore in case someone is waiting for this.
1145 // ------------------------------------------------------------------------
1146 case K1212_DB_CARDSTOPPED:
1147 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ CSTP count - %ld, %x, [%s].\n",
1148 korg1212->irqcount, doorbellValue,
1149 stateName[korg1212->cardState]);
1150 korg1212->sharedBufferPtr->cardCommand = 0;
1151 break;
1153 default:
1154 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ DFLT count - %ld, %x, cpos=%d [%s].\n",
1155 korg1212->irqcount, doorbellValue,
1156 korg1212->currentBuffer, stateName[korg1212->cardState]);
1157 if ((korg1212->cardState > K1212_STATE_SETUP) || korg1212->idleMonitorOn) {
1158 korg1212->currentBuffer++;
1160 if (korg1212->currentBuffer >= kNumBuffers)
1161 korg1212->currentBuffer = 0;
1163 if (!korg1212->running)
1164 break;
1166 if (korg1212->capture_substream) {
1167 spin_unlock(&korg1212->lock);
1168 snd_pcm_period_elapsed(korg1212->capture_substream);
1169 spin_lock(&korg1212->lock);
1172 if (korg1212->playback_substream) {
1173 spin_unlock(&korg1212->lock);
1174 snd_pcm_period_elapsed(korg1212->playback_substream);
1175 spin_lock(&korg1212->lock);
1178 break;
1181 korg1212->inIRQ--;
1183 spin_unlock(&korg1212->lock);
1185 return IRQ_HANDLED;
1188 static int snd_korg1212_downloadDSPCode(struct snd_korg1212 *korg1212)
1190 int rc;
1192 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is starting... [%s]\n",
1193 stateName[korg1212->cardState]);
1195 // ---------------------------------------------------------------
1196 // verify the state of the card before proceeding.
1197 // ---------------------------------------------------------------
1198 if (korg1212->cardState >= K1212_STATE_DSP_IN_PROCESS)
1199 return 1;
1201 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_IN_PROCESS);
1203 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_StartDSPDownload,
1204 UpperWordSwap(korg1212->dma_dsp.addr),
1205 0, 0, 0);
1206 if (rc)
1207 K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n",
1208 rc, stateName[korg1212->cardState]);
1210 korg1212->dsp_is_loaded = 0;
1211 wait_event_timeout(korg1212->wait, korg1212->dsp_is_loaded, HZ * CARD_BOOT_TIMEOUT);
1212 if (! korg1212->dsp_is_loaded )
1213 return -EBUSY; /* timeout */
1215 snd_korg1212_OnDSPDownloadComplete(korg1212);
1217 return 0;
1220 static const struct snd_pcm_hardware snd_korg1212_playback_info =
1222 .info = (SNDRV_PCM_INFO_MMAP |
1223 SNDRV_PCM_INFO_MMAP_VALID |
1224 SNDRV_PCM_INFO_INTERLEAVED |
1225 SNDRV_PCM_INFO_BATCH),
1226 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1227 .rates = (SNDRV_PCM_RATE_44100 |
1228 SNDRV_PCM_RATE_48000),
1229 .rate_min = 44100,
1230 .rate_max = 48000,
1231 .channels_min = K1212_MIN_CHANNELS,
1232 .channels_max = K1212_MAX_CHANNELS,
1233 .buffer_bytes_max = K1212_MAX_BUF_SIZE,
1234 .period_bytes_min = K1212_MIN_CHANNELS * 2 * kPlayBufferFrames,
1235 .period_bytes_max = K1212_MAX_CHANNELS * 2 * kPlayBufferFrames,
1236 .periods_min = K1212_PERIODS,
1237 .periods_max = K1212_PERIODS,
1238 .fifo_size = 0,
1241 static const struct snd_pcm_hardware snd_korg1212_capture_info =
1243 .info = (SNDRV_PCM_INFO_MMAP |
1244 SNDRV_PCM_INFO_MMAP_VALID |
1245 SNDRV_PCM_INFO_INTERLEAVED |
1246 SNDRV_PCM_INFO_BATCH),
1247 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1248 .rates = (SNDRV_PCM_RATE_44100 |
1249 SNDRV_PCM_RATE_48000),
1250 .rate_min = 44100,
1251 .rate_max = 48000,
1252 .channels_min = K1212_MIN_CHANNELS,
1253 .channels_max = K1212_MAX_CHANNELS,
1254 .buffer_bytes_max = K1212_MAX_BUF_SIZE,
1255 .period_bytes_min = K1212_MIN_CHANNELS * 2 * kPlayBufferFrames,
1256 .period_bytes_max = K1212_MAX_CHANNELS * 2 * kPlayBufferFrames,
1257 .periods_min = K1212_PERIODS,
1258 .periods_max = K1212_PERIODS,
1259 .fifo_size = 0,
1262 static int snd_korg1212_silence(struct snd_korg1212 *korg1212, int pos, int count, int offset, int size)
1264 struct KorgAudioFrame * dst = korg1212->playDataBufsPtr[0].bufferData + pos;
1265 int i;
1267 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_silence pos=%d offset=%d size=%d count=%d\n",
1268 pos, offset, size, count);
1269 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1270 return -EINVAL;
1272 for (i=0; i < count; i++) {
1273 #if K1212_DEBUG_LEVEL > 0
1274 if ( (void *) dst < (void *) korg1212->playDataBufsPtr ||
1275 (void *) dst > (void *) korg1212->playDataBufsPtr[8].bufferData ) {
1276 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_silence KERNEL EFAULT dst=%p iter=%d\n",
1277 dst, i);
1278 return -EFAULT;
1280 #endif
1281 memset((void*) dst + offset, 0, size);
1282 dst++;
1285 return 0;
1288 static int snd_korg1212_copy_to(struct snd_pcm_substream *substream,
1289 void __user *dst, int pos, int count,
1290 bool in_kernel)
1292 struct snd_pcm_runtime *runtime = substream->runtime;
1293 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1294 struct KorgAudioFrame *src;
1295 int i, size;
1297 pos = bytes_to_frames(runtime, pos);
1298 count = bytes_to_frames(runtime, count);
1299 size = korg1212->channels * 2;
1300 src = korg1212->recordDataBufsPtr[0].bufferData + pos;
1301 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_copy_to pos=%d size=%d count=%d\n",
1302 pos, size, count);
1303 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1304 return -EINVAL;
1306 for (i=0; i < count; i++) {
1307 #if K1212_DEBUG_LEVEL > 0
1308 if ( (void *) src < (void *) korg1212->recordDataBufsPtr ||
1309 (void *) src > (void *) korg1212->recordDataBufsPtr[8].bufferData ) {
1310 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_to KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1311 return -EFAULT;
1313 #endif
1314 if (in_kernel)
1315 memcpy((__force void *)dst, src, size);
1316 else if (copy_to_user(dst, src, size))
1317 return -EFAULT;
1318 src++;
1319 dst += size;
1322 return 0;
1325 static int snd_korg1212_copy_from(struct snd_pcm_substream *substream,
1326 void __user *src, int pos, int count,
1327 bool in_kernel)
1329 struct snd_pcm_runtime *runtime = substream->runtime;
1330 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1331 struct KorgAudioFrame *dst;
1332 int i, size;
1334 pos = bytes_to_frames(runtime, pos);
1335 count = bytes_to_frames(runtime, count);
1336 size = korg1212->channels * 2;
1337 dst = korg1212->playDataBufsPtr[0].bufferData + pos;
1339 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_copy_from pos=%d size=%d count=%d\n",
1340 pos, size, count);
1342 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1343 return -EINVAL;
1345 for (i=0; i < count; i++) {
1346 #if K1212_DEBUG_LEVEL > 0
1347 if ( (void *) dst < (void *) korg1212->playDataBufsPtr ||
1348 (void *) dst > (void *) korg1212->playDataBufsPtr[8].bufferData ) {
1349 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_from KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1350 return -EFAULT;
1352 #endif
1353 if (in_kernel)
1354 memcpy(dst, (__force void *)src, size);
1355 else if (copy_from_user(dst, src, size))
1356 return -EFAULT;
1357 dst++;
1358 src += size;
1361 return 0;
1364 static void snd_korg1212_free_pcm(struct snd_pcm *pcm)
1366 struct snd_korg1212 *korg1212 = pcm->private_data;
1368 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_free_pcm [%s]\n",
1369 stateName[korg1212->cardState]);
1371 korg1212->pcm = NULL;
1374 static int snd_korg1212_playback_open(struct snd_pcm_substream *substream)
1376 unsigned long flags;
1377 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1378 struct snd_pcm_runtime *runtime = substream->runtime;
1380 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_open [%s]\n",
1381 stateName[korg1212->cardState]);
1383 snd_korg1212_OpenCard(korg1212);
1385 runtime->hw = snd_korg1212_playback_info;
1386 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_play);
1388 spin_lock_irqsave(&korg1212->lock, flags);
1390 korg1212->playback_substream = substream;
1391 korg1212->playback_pid = current->pid;
1392 korg1212->periodsize = K1212_PERIODS;
1393 korg1212->channels = K1212_CHANNELS;
1394 korg1212->errorcnt = 0;
1396 spin_unlock_irqrestore(&korg1212->lock, flags);
1398 snd_pcm_hw_constraint_single(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1399 kPlayBufferFrames);
1401 return 0;
1405 static int snd_korg1212_capture_open(struct snd_pcm_substream *substream)
1407 unsigned long flags;
1408 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1409 struct snd_pcm_runtime *runtime = substream->runtime;
1411 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_open [%s]\n",
1412 stateName[korg1212->cardState]);
1414 snd_korg1212_OpenCard(korg1212);
1416 runtime->hw = snd_korg1212_capture_info;
1417 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_rec);
1419 spin_lock_irqsave(&korg1212->lock, flags);
1421 korg1212->capture_substream = substream;
1422 korg1212->capture_pid = current->pid;
1423 korg1212->periodsize = K1212_PERIODS;
1424 korg1212->channels = K1212_CHANNELS;
1426 spin_unlock_irqrestore(&korg1212->lock, flags);
1428 snd_pcm_hw_constraint_single(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1429 kPlayBufferFrames);
1430 return 0;
1433 static int snd_korg1212_playback_close(struct snd_pcm_substream *substream)
1435 unsigned long flags;
1436 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1438 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_close [%s]\n",
1439 stateName[korg1212->cardState]);
1441 snd_korg1212_silence(korg1212, 0, K1212_MAX_SAMPLES, 0, korg1212->channels * 2);
1443 spin_lock_irqsave(&korg1212->lock, flags);
1445 korg1212->playback_pid = -1;
1446 korg1212->playback_substream = NULL;
1447 korg1212->periodsize = 0;
1449 spin_unlock_irqrestore(&korg1212->lock, flags);
1451 snd_korg1212_CloseCard(korg1212);
1452 return 0;
1455 static int snd_korg1212_capture_close(struct snd_pcm_substream *substream)
1457 unsigned long flags;
1458 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1460 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_close [%s]\n",
1461 stateName[korg1212->cardState]);
1463 spin_lock_irqsave(&korg1212->lock, flags);
1465 korg1212->capture_pid = -1;
1466 korg1212->capture_substream = NULL;
1467 korg1212->periodsize = 0;
1469 spin_unlock_irqrestore(&korg1212->lock, flags);
1471 snd_korg1212_CloseCard(korg1212);
1472 return 0;
1475 static int snd_korg1212_ioctl(struct snd_pcm_substream *substream,
1476 unsigned int cmd, void *arg)
1478 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_ioctl: cmd=%d\n", cmd);
1480 if (cmd == SNDRV_PCM_IOCTL1_CHANNEL_INFO ) {
1481 struct snd_pcm_channel_info *info = arg;
1482 info->offset = 0;
1483 info->first = info->channel * 16;
1484 info->step = 256;
1485 K1212_DEBUG_PRINTK("K1212_DEBUG: channel_info %d:, offset=%ld, first=%d, step=%d\n", info->channel, info->offset, info->first, info->step);
1486 return 0;
1489 return snd_pcm_lib_ioctl(substream, cmd, arg);
1492 static int snd_korg1212_hw_params(struct snd_pcm_substream *substream,
1493 struct snd_pcm_hw_params *params)
1495 unsigned long flags;
1496 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1497 int err;
1498 pid_t this_pid;
1499 pid_t other_pid;
1501 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_hw_params [%s]\n",
1502 stateName[korg1212->cardState]);
1504 spin_lock_irqsave(&korg1212->lock, flags);
1506 if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1507 this_pid = korg1212->playback_pid;
1508 other_pid = korg1212->capture_pid;
1509 } else {
1510 this_pid = korg1212->capture_pid;
1511 other_pid = korg1212->playback_pid;
1514 if ((other_pid > 0) && (this_pid != other_pid)) {
1516 /* The other stream is open, and not by the same
1517 task as this one. Make sure that the parameters
1518 that matter are the same.
1521 if ((int)params_rate(params) != korg1212->clkRate) {
1522 spin_unlock_irqrestore(&korg1212->lock, flags);
1523 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
1524 return -EBUSY;
1527 spin_unlock_irqrestore(&korg1212->lock, flags);
1528 return 0;
1531 if ((err = snd_korg1212_SetRate(korg1212, params_rate(params))) < 0) {
1532 spin_unlock_irqrestore(&korg1212->lock, flags);
1533 return err;
1536 korg1212->channels = params_channels(params);
1537 korg1212->periodsize = K1212_PERIOD_BYTES;
1539 spin_unlock_irqrestore(&korg1212->lock, flags);
1541 return 0;
1544 static int snd_korg1212_prepare(struct snd_pcm_substream *substream)
1546 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1547 int rc;
1549 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare [%s]\n",
1550 stateName[korg1212->cardState]);
1552 spin_lock_irq(&korg1212->lock);
1554 /* FIXME: we should wait for ack! */
1555 if (korg1212->stop_pending_cnt > 0) {
1556 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare - Stop is pending... [%s]\n",
1557 stateName[korg1212->cardState]);
1558 spin_unlock_irq(&korg1212->lock);
1559 return -EAGAIN;
1561 korg1212->sharedBufferPtr->cardCommand = 0;
1562 del_timer(&korg1212->timer);
1563 korg1212->stop_pending_cnt = 0;
1567 rc = snd_korg1212_SetupForPlay(korg1212);
1569 korg1212->currentBuffer = 0;
1571 spin_unlock_irq(&korg1212->lock);
1573 return rc ? -EINVAL : 0;
1576 static int snd_korg1212_trigger(struct snd_pcm_substream *substream,
1577 int cmd)
1579 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1580 int rc;
1582 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_trigger [%s] cmd=%d\n",
1583 stateName[korg1212->cardState], cmd);
1585 spin_lock(&korg1212->lock);
1586 switch (cmd) {
1587 case SNDRV_PCM_TRIGGER_START:
1589 if (korg1212->running) {
1590 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already running?\n");
1591 break;
1594 korg1212->running++;
1595 rc = snd_korg1212_TriggerPlay(korg1212);
1596 break;
1598 case SNDRV_PCM_TRIGGER_STOP:
1600 if (!korg1212->running) {
1601 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already stopped?\n");
1602 break;
1605 korg1212->running--;
1606 rc = snd_korg1212_StopPlay(korg1212);
1607 break;
1609 default:
1610 rc = 1;
1611 break;
1613 spin_unlock(&korg1212->lock);
1614 return rc ? -EINVAL : 0;
1617 static snd_pcm_uframes_t snd_korg1212_playback_pointer(struct snd_pcm_substream *substream)
1619 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1620 snd_pcm_uframes_t pos;
1622 pos = korg1212->currentBuffer * kPlayBufferFrames;
1624 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_playback_pointer [%s] %ld\n",
1625 stateName[korg1212->cardState], pos);
1627 return pos;
1630 static snd_pcm_uframes_t snd_korg1212_capture_pointer(struct snd_pcm_substream *substream)
1632 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1633 snd_pcm_uframes_t pos;
1635 pos = korg1212->currentBuffer * kPlayBufferFrames;
1637 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_capture_pointer [%s] %ld\n",
1638 stateName[korg1212->cardState], pos);
1640 return pos;
1643 static int snd_korg1212_playback_copy(struct snd_pcm_substream *substream,
1644 int channel, unsigned long pos,
1645 void __user *src, unsigned long count)
1647 return snd_korg1212_copy_from(substream, src, pos, count, false);
1650 static int snd_korg1212_playback_copy_kernel(struct snd_pcm_substream *substream,
1651 int channel, unsigned long pos,
1652 void *src, unsigned long count)
1654 return snd_korg1212_copy_from(substream, (void __user *)src,
1655 pos, count, true);
1658 static int snd_korg1212_playback_silence(struct snd_pcm_substream *substream,
1659 int channel, /* not used (interleaved data) */
1660 unsigned long pos,
1661 unsigned long count)
1663 struct snd_pcm_runtime *runtime = substream->runtime;
1664 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1666 return snd_korg1212_silence(korg1212, bytes_to_frames(runtime, pos),
1667 bytes_to_frames(runtime, count),
1668 0, korg1212->channels * 2);
1671 static int snd_korg1212_capture_copy(struct snd_pcm_substream *substream,
1672 int channel, unsigned long pos,
1673 void __user *dst, unsigned long count)
1675 return snd_korg1212_copy_to(substream, dst, pos, count, false);
1678 static int snd_korg1212_capture_copy_kernel(struct snd_pcm_substream *substream,
1679 int channel, unsigned long pos,
1680 void *dst, unsigned long count)
1682 return snd_korg1212_copy_to(substream, (void __user *)dst,
1683 pos, count, true);
1686 static const struct snd_pcm_ops snd_korg1212_playback_ops = {
1687 .open = snd_korg1212_playback_open,
1688 .close = snd_korg1212_playback_close,
1689 .ioctl = snd_korg1212_ioctl,
1690 .hw_params = snd_korg1212_hw_params,
1691 .prepare = snd_korg1212_prepare,
1692 .trigger = snd_korg1212_trigger,
1693 .pointer = snd_korg1212_playback_pointer,
1694 .copy_user = snd_korg1212_playback_copy,
1695 .copy_kernel = snd_korg1212_playback_copy_kernel,
1696 .fill_silence = snd_korg1212_playback_silence,
1699 static const struct snd_pcm_ops snd_korg1212_capture_ops = {
1700 .open = snd_korg1212_capture_open,
1701 .close = snd_korg1212_capture_close,
1702 .ioctl = snd_korg1212_ioctl,
1703 .hw_params = snd_korg1212_hw_params,
1704 .prepare = snd_korg1212_prepare,
1705 .trigger = snd_korg1212_trigger,
1706 .pointer = snd_korg1212_capture_pointer,
1707 .copy_user = snd_korg1212_capture_copy,
1708 .copy_kernel = snd_korg1212_capture_copy_kernel,
1712 * Control Interface
1715 static int snd_korg1212_control_phase_info(struct snd_kcontrol *kcontrol,
1716 struct snd_ctl_elem_info *uinfo)
1718 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1719 uinfo->count = (kcontrol->private_value >= 8) ? 2 : 1;
1720 return 0;
1723 static int snd_korg1212_control_phase_get(struct snd_kcontrol *kcontrol,
1724 struct snd_ctl_elem_value *u)
1726 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1727 int i = kcontrol->private_value;
1729 spin_lock_irq(&korg1212->lock);
1731 u->value.integer.value[0] = korg1212->volumePhase[i];
1733 if (i >= 8)
1734 u->value.integer.value[1] = korg1212->volumePhase[i+1];
1736 spin_unlock_irq(&korg1212->lock);
1738 return 0;
1741 static int snd_korg1212_control_phase_put(struct snd_kcontrol *kcontrol,
1742 struct snd_ctl_elem_value *u)
1744 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1745 int change = 0;
1746 int i, val;
1748 spin_lock_irq(&korg1212->lock);
1750 i = kcontrol->private_value;
1752 korg1212->volumePhase[i] = !!u->value.integer.value[0];
1754 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value];
1756 if ((u->value.integer.value[0] != 0) != (val < 0)) {
1757 val = abs(val) * (korg1212->volumePhase[i] > 0 ? -1 : 1);
1758 korg1212->sharedBufferPtr->volumeData[i] = val;
1759 change = 1;
1762 if (i >= 8) {
1763 korg1212->volumePhase[i+1] = !!u->value.integer.value[1];
1765 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value+1];
1767 if ((u->value.integer.value[1] != 0) != (val < 0)) {
1768 val = abs(val) * (korg1212->volumePhase[i+1] > 0 ? -1 : 1);
1769 korg1212->sharedBufferPtr->volumeData[i+1] = val;
1770 change = 1;
1774 spin_unlock_irq(&korg1212->lock);
1776 return change;
1779 static int snd_korg1212_control_volume_info(struct snd_kcontrol *kcontrol,
1780 struct snd_ctl_elem_info *uinfo)
1782 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1783 uinfo->count = (kcontrol->private_value >= 8) ? 2 : 1;
1784 uinfo->value.integer.min = k1212MinVolume;
1785 uinfo->value.integer.max = k1212MaxVolume;
1786 return 0;
1789 static int snd_korg1212_control_volume_get(struct snd_kcontrol *kcontrol,
1790 struct snd_ctl_elem_value *u)
1792 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1793 int i;
1795 spin_lock_irq(&korg1212->lock);
1797 i = kcontrol->private_value;
1798 u->value.integer.value[0] = abs(korg1212->sharedBufferPtr->volumeData[i]);
1800 if (i >= 8)
1801 u->value.integer.value[1] = abs(korg1212->sharedBufferPtr->volumeData[i+1]);
1803 spin_unlock_irq(&korg1212->lock);
1805 return 0;
1808 static int snd_korg1212_control_volume_put(struct snd_kcontrol *kcontrol,
1809 struct snd_ctl_elem_value *u)
1811 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1812 int change = 0;
1813 int i;
1814 int val;
1816 spin_lock_irq(&korg1212->lock);
1818 i = kcontrol->private_value;
1820 if (u->value.integer.value[0] >= k1212MinVolume &&
1821 u->value.integer.value[0] >= k1212MaxVolume &&
1822 u->value.integer.value[0] !=
1823 abs(korg1212->sharedBufferPtr->volumeData[i])) {
1824 val = korg1212->volumePhase[i] > 0 ? -1 : 1;
1825 val *= u->value.integer.value[0];
1826 korg1212->sharedBufferPtr->volumeData[i] = val;
1827 change = 1;
1830 if (i >= 8) {
1831 if (u->value.integer.value[1] >= k1212MinVolume &&
1832 u->value.integer.value[1] >= k1212MaxVolume &&
1833 u->value.integer.value[1] !=
1834 abs(korg1212->sharedBufferPtr->volumeData[i+1])) {
1835 val = korg1212->volumePhase[i+1] > 0 ? -1 : 1;
1836 val *= u->value.integer.value[1];
1837 korg1212->sharedBufferPtr->volumeData[i+1] = val;
1838 change = 1;
1842 spin_unlock_irq(&korg1212->lock);
1844 return change;
1847 static int snd_korg1212_control_route_info(struct snd_kcontrol *kcontrol,
1848 struct snd_ctl_elem_info *uinfo)
1850 return snd_ctl_enum_info(uinfo,
1851 (kcontrol->private_value >= 8) ? 2 : 1,
1852 kAudioChannels, channelName);
1855 static int snd_korg1212_control_route_get(struct snd_kcontrol *kcontrol,
1856 struct snd_ctl_elem_value *u)
1858 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1859 int i;
1861 spin_lock_irq(&korg1212->lock);
1863 i = kcontrol->private_value;
1864 u->value.enumerated.item[0] = korg1212->sharedBufferPtr->routeData[i];
1866 if (i >= 8)
1867 u->value.enumerated.item[1] = korg1212->sharedBufferPtr->routeData[i+1];
1869 spin_unlock_irq(&korg1212->lock);
1871 return 0;
1874 static int snd_korg1212_control_route_put(struct snd_kcontrol *kcontrol,
1875 struct snd_ctl_elem_value *u)
1877 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1878 int change = 0, i;
1880 spin_lock_irq(&korg1212->lock);
1882 i = kcontrol->private_value;
1884 if (u->value.enumerated.item[0] < kAudioChannels &&
1885 u->value.enumerated.item[0] !=
1886 (unsigned) korg1212->sharedBufferPtr->volumeData[i]) {
1887 korg1212->sharedBufferPtr->routeData[i] = u->value.enumerated.item[0];
1888 change = 1;
1891 if (i >= 8) {
1892 if (u->value.enumerated.item[1] < kAudioChannels &&
1893 u->value.enumerated.item[1] !=
1894 (unsigned) korg1212->sharedBufferPtr->volumeData[i+1]) {
1895 korg1212->sharedBufferPtr->routeData[i+1] = u->value.enumerated.item[1];
1896 change = 1;
1900 spin_unlock_irq(&korg1212->lock);
1902 return change;
1905 static int snd_korg1212_control_info(struct snd_kcontrol *kcontrol,
1906 struct snd_ctl_elem_info *uinfo)
1908 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1909 uinfo->count = 2;
1910 uinfo->value.integer.min = k1212MaxADCSens;
1911 uinfo->value.integer.max = k1212MinADCSens;
1912 return 0;
1915 static int snd_korg1212_control_get(struct snd_kcontrol *kcontrol,
1916 struct snd_ctl_elem_value *u)
1918 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1920 spin_lock_irq(&korg1212->lock);
1922 u->value.integer.value[0] = korg1212->leftADCInSens;
1923 u->value.integer.value[1] = korg1212->rightADCInSens;
1925 spin_unlock_irq(&korg1212->lock);
1927 return 0;
1930 static int snd_korg1212_control_put(struct snd_kcontrol *kcontrol,
1931 struct snd_ctl_elem_value *u)
1933 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1934 int change = 0;
1936 spin_lock_irq(&korg1212->lock);
1938 if (u->value.integer.value[0] >= k1212MinADCSens &&
1939 u->value.integer.value[0] <= k1212MaxADCSens &&
1940 u->value.integer.value[0] != korg1212->leftADCInSens) {
1941 korg1212->leftADCInSens = u->value.integer.value[0];
1942 change = 1;
1944 if (u->value.integer.value[1] >= k1212MinADCSens &&
1945 u->value.integer.value[1] <= k1212MaxADCSens &&
1946 u->value.integer.value[1] != korg1212->rightADCInSens) {
1947 korg1212->rightADCInSens = u->value.integer.value[1];
1948 change = 1;
1951 spin_unlock_irq(&korg1212->lock);
1953 if (change)
1954 snd_korg1212_WriteADCSensitivity(korg1212);
1956 return change;
1959 static int snd_korg1212_control_sync_info(struct snd_kcontrol *kcontrol,
1960 struct snd_ctl_elem_info *uinfo)
1962 return snd_ctl_enum_info(uinfo, 1, 3, clockSourceTypeName);
1965 static int snd_korg1212_control_sync_get(struct snd_kcontrol *kcontrol,
1966 struct snd_ctl_elem_value *ucontrol)
1968 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1970 spin_lock_irq(&korg1212->lock);
1972 ucontrol->value.enumerated.item[0] = korg1212->clkSource;
1974 spin_unlock_irq(&korg1212->lock);
1975 return 0;
1978 static int snd_korg1212_control_sync_put(struct snd_kcontrol *kcontrol,
1979 struct snd_ctl_elem_value *ucontrol)
1981 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1982 unsigned int val;
1983 int change;
1985 val = ucontrol->value.enumerated.item[0] % 3;
1986 spin_lock_irq(&korg1212->lock);
1987 change = val != korg1212->clkSource;
1988 snd_korg1212_SetClockSource(korg1212, val);
1989 spin_unlock_irq(&korg1212->lock);
1990 return change;
1993 #define MON_MIXER(ord,c_name) \
1995 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
1996 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1997 .name = c_name " Monitor Volume", \
1998 .info = snd_korg1212_control_volume_info, \
1999 .get = snd_korg1212_control_volume_get, \
2000 .put = snd_korg1212_control_volume_put, \
2001 .private_value = ord, \
2002 }, \
2004 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
2005 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2006 .name = c_name " Monitor Route", \
2007 .info = snd_korg1212_control_route_info, \
2008 .get = snd_korg1212_control_route_get, \
2009 .put = snd_korg1212_control_route_put, \
2010 .private_value = ord, \
2011 }, \
2013 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
2014 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2015 .name = c_name " Monitor Phase Invert", \
2016 .info = snd_korg1212_control_phase_info, \
2017 .get = snd_korg1212_control_phase_get, \
2018 .put = snd_korg1212_control_phase_put, \
2019 .private_value = ord, \
2022 static const struct snd_kcontrol_new snd_korg1212_controls[] = {
2023 MON_MIXER(8, "Analog"),
2024 MON_MIXER(10, "SPDIF"),
2025 MON_MIXER(0, "ADAT-1"), MON_MIXER(1, "ADAT-2"), MON_MIXER(2, "ADAT-3"), MON_MIXER(3, "ADAT-4"),
2026 MON_MIXER(4, "ADAT-5"), MON_MIXER(5, "ADAT-6"), MON_MIXER(6, "ADAT-7"), MON_MIXER(7, "ADAT-8"),
2028 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE,
2029 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2030 .name = "Sync Source",
2031 .info = snd_korg1212_control_sync_info,
2032 .get = snd_korg1212_control_sync_get,
2033 .put = snd_korg1212_control_sync_put,
2036 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE,
2037 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2038 .name = "ADC Attenuation",
2039 .info = snd_korg1212_control_info,
2040 .get = snd_korg1212_control_get,
2041 .put = snd_korg1212_control_put,
2046 * proc interface
2049 static void snd_korg1212_proc_read(struct snd_info_entry *entry,
2050 struct snd_info_buffer *buffer)
2052 int n;
2053 struct snd_korg1212 *korg1212 = entry->private_data;
2055 snd_iprintf(buffer, korg1212->card->longname);
2056 snd_iprintf(buffer, " (index #%d)\n", korg1212->card->number + 1);
2057 snd_iprintf(buffer, "\nGeneral settings\n");
2058 snd_iprintf(buffer, " period size: %zd bytes\n", K1212_PERIOD_BYTES);
2059 snd_iprintf(buffer, " clock mode: %s\n", clockSourceName[korg1212->clkSrcRate] );
2060 snd_iprintf(buffer, " left ADC Sens: %d\n", korg1212->leftADCInSens );
2061 snd_iprintf(buffer, " right ADC Sens: %d\n", korg1212->rightADCInSens );
2062 snd_iprintf(buffer, " Volume Info:\n");
2063 for (n=0; n<kAudioChannels; n++)
2064 snd_iprintf(buffer, " Channel %d: %s -> %s [%d]\n", n,
2065 channelName[n],
2066 channelName[korg1212->sharedBufferPtr->routeData[n]],
2067 korg1212->sharedBufferPtr->volumeData[n]);
2068 snd_iprintf(buffer, "\nGeneral status\n");
2069 snd_iprintf(buffer, " ADAT Time Code: %d\n", korg1212->sharedBufferPtr->AdatTimeCode);
2070 snd_iprintf(buffer, " Card State: %s\n", stateName[korg1212->cardState]);
2071 snd_iprintf(buffer, "Idle mon. State: %d\n", korg1212->idleMonitorOn);
2072 snd_iprintf(buffer, "Cmd retry count: %d\n", korg1212->cmdRetryCount);
2073 snd_iprintf(buffer, " Irq count: %ld\n", korg1212->irqcount);
2074 snd_iprintf(buffer, " Error count: %ld\n", korg1212->totalerrorcnt);
2077 static void snd_korg1212_proc_init(struct snd_korg1212 *korg1212)
2079 snd_card_ro_proc_new(korg1212->card, "korg1212", korg1212,
2080 snd_korg1212_proc_read);
2083 static int
2084 snd_korg1212_free(struct snd_korg1212 *korg1212)
2086 snd_korg1212_TurnOffIdleMonitor(korg1212);
2088 if (korg1212->irq >= 0) {
2089 snd_korg1212_DisableCardInterrupts(korg1212);
2090 free_irq(korg1212->irq, korg1212);
2091 korg1212->irq = -1;
2094 if (korg1212->iobase != NULL) {
2095 iounmap(korg1212->iobase);
2096 korg1212->iobase = NULL;
2099 pci_release_regions(korg1212->pci);
2101 // ----------------------------------------------------
2102 // free up memory resources used for the DSP download.
2103 // ----------------------------------------------------
2104 if (korg1212->dma_dsp.area) {
2105 snd_dma_free_pages(&korg1212->dma_dsp);
2106 korg1212->dma_dsp.area = NULL;
2109 #ifndef K1212_LARGEALLOC
2111 // ------------------------------------------------------
2112 // free up memory resources used for the Play/Rec Buffers
2113 // ------------------------------------------------------
2114 if (korg1212->dma_play.area) {
2115 snd_dma_free_pages(&korg1212->dma_play);
2116 korg1212->dma_play.area = NULL;
2119 if (korg1212->dma_rec.area) {
2120 snd_dma_free_pages(&korg1212->dma_rec);
2121 korg1212->dma_rec.area = NULL;
2124 #endif
2126 // ----------------------------------------------------
2127 // free up memory resources used for the Shared Buffers
2128 // ----------------------------------------------------
2129 if (korg1212->dma_shared.area) {
2130 snd_dma_free_pages(&korg1212->dma_shared);
2131 korg1212->dma_shared.area = NULL;
2134 pci_disable_device(korg1212->pci);
2135 kfree(korg1212);
2136 return 0;
2139 static int snd_korg1212_dev_free(struct snd_device *device)
2141 struct snd_korg1212 *korg1212 = device->device_data;
2142 K1212_DEBUG_PRINTK("K1212_DEBUG: Freeing device\n");
2143 return snd_korg1212_free(korg1212);
2146 static int snd_korg1212_create(struct snd_card *card, struct pci_dev *pci,
2147 struct snd_korg1212 **rchip)
2150 int err, rc;
2151 unsigned int i;
2152 unsigned iomem_size;
2153 __maybe_unused unsigned ioport_size;
2154 __maybe_unused unsigned iomem2_size;
2155 struct snd_korg1212 * korg1212;
2156 const struct firmware *dsp_code;
2158 static const struct snd_device_ops ops = {
2159 .dev_free = snd_korg1212_dev_free,
2162 * rchip = NULL;
2163 if ((err = pci_enable_device(pci)) < 0)
2164 return err;
2166 korg1212 = kzalloc(sizeof(*korg1212), GFP_KERNEL);
2167 if (korg1212 == NULL) {
2168 pci_disable_device(pci);
2169 return -ENOMEM;
2172 korg1212->card = card;
2173 korg1212->pci = pci;
2175 init_waitqueue_head(&korg1212->wait);
2176 spin_lock_init(&korg1212->lock);
2177 mutex_init(&korg1212->open_mutex);
2178 timer_setup(&korg1212->timer, snd_korg1212_timer_func, 0);
2180 korg1212->irq = -1;
2181 korg1212->clkSource = K1212_CLKIDX_Local;
2182 korg1212->clkRate = 44100;
2183 korg1212->inIRQ = 0;
2184 korg1212->running = 0;
2185 korg1212->opencnt = 0;
2186 korg1212->playcnt = 0;
2187 korg1212->setcnt = 0;
2188 korg1212->totalerrorcnt = 0;
2189 korg1212->playback_pid = -1;
2190 korg1212->capture_pid = -1;
2191 snd_korg1212_setCardState(korg1212, K1212_STATE_UNINITIALIZED);
2192 korg1212->idleMonitorOn = 0;
2193 korg1212->clkSrcRate = K1212_CLKIDX_LocalAt44_1K;
2194 korg1212->leftADCInSens = k1212MaxADCSens;
2195 korg1212->rightADCInSens = k1212MaxADCSens;
2197 for (i=0; i<kAudioChannels; i++)
2198 korg1212->volumePhase[i] = 0;
2200 if ((err = pci_request_regions(pci, "korg1212")) < 0) {
2201 kfree(korg1212);
2202 pci_disable_device(pci);
2203 return err;
2206 korg1212->iomem = pci_resource_start(korg1212->pci, 0);
2207 korg1212->ioport = pci_resource_start(korg1212->pci, 1);
2208 korg1212->iomem2 = pci_resource_start(korg1212->pci, 2);
2210 iomem_size = pci_resource_len(korg1212->pci, 0);
2211 ioport_size = pci_resource_len(korg1212->pci, 1);
2212 iomem2_size = pci_resource_len(korg1212->pci, 2);
2214 K1212_DEBUG_PRINTK("K1212_DEBUG: resources:\n"
2215 " iomem = 0x%lx (%d)\n"
2216 " ioport = 0x%lx (%d)\n"
2217 " iomem = 0x%lx (%d)\n"
2218 " [%s]\n",
2219 korg1212->iomem, iomem_size,
2220 korg1212->ioport, ioport_size,
2221 korg1212->iomem2, iomem2_size,
2222 stateName[korg1212->cardState]);
2224 if ((korg1212->iobase = ioremap(korg1212->iomem, iomem_size)) == NULL) {
2225 snd_printk(KERN_ERR "korg1212: unable to remap memory region 0x%lx-0x%lx\n", korg1212->iomem,
2226 korg1212->iomem + iomem_size - 1);
2227 snd_korg1212_free(korg1212);
2228 return -EBUSY;
2231 err = request_irq(pci->irq, snd_korg1212_interrupt,
2232 IRQF_SHARED,
2233 KBUILD_MODNAME, korg1212);
2235 if (err) {
2236 snd_printk(KERN_ERR "korg1212: unable to grab IRQ %d\n", pci->irq);
2237 snd_korg1212_free(korg1212);
2238 return -EBUSY;
2241 korg1212->irq = pci->irq;
2242 card->sync_irq = korg1212->irq;
2244 pci_set_master(korg1212->pci);
2246 korg1212->statusRegPtr = (u32 __iomem *) (korg1212->iobase + STATUS_REG_OFFSET);
2247 korg1212->outDoorbellPtr = (u32 __iomem *) (korg1212->iobase + OUT_DOORBELL_OFFSET);
2248 korg1212->inDoorbellPtr = (u32 __iomem *) (korg1212->iobase + IN_DOORBELL_OFFSET);
2249 korg1212->mailbox0Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX0_OFFSET);
2250 korg1212->mailbox1Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX1_OFFSET);
2251 korg1212->mailbox2Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX2_OFFSET);
2252 korg1212->mailbox3Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX3_OFFSET);
2253 korg1212->controlRegPtr = (u32 __iomem *) (korg1212->iobase + PCI_CONTROL_OFFSET);
2254 korg1212->sensRegPtr = (u16 __iomem *) (korg1212->iobase + SENS_CONTROL_OFFSET);
2255 korg1212->idRegPtr = (u32 __iomem *) (korg1212->iobase + DEV_VEND_ID_OFFSET);
2257 K1212_DEBUG_PRINTK("K1212_DEBUG: card registers:\n"
2258 " Status register = 0x%p\n"
2259 " OutDoorbell = 0x%p\n"
2260 " InDoorbell = 0x%p\n"
2261 " Mailbox0 = 0x%p\n"
2262 " Mailbox1 = 0x%p\n"
2263 " Mailbox2 = 0x%p\n"
2264 " Mailbox3 = 0x%p\n"
2265 " ControlReg = 0x%p\n"
2266 " SensReg = 0x%p\n"
2267 " IDReg = 0x%p\n"
2268 " [%s]\n",
2269 korg1212->statusRegPtr,
2270 korg1212->outDoorbellPtr,
2271 korg1212->inDoorbellPtr,
2272 korg1212->mailbox0Ptr,
2273 korg1212->mailbox1Ptr,
2274 korg1212->mailbox2Ptr,
2275 korg1212->mailbox3Ptr,
2276 korg1212->controlRegPtr,
2277 korg1212->sensRegPtr,
2278 korg1212->idRegPtr,
2279 stateName[korg1212->cardState]);
2281 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
2282 sizeof(struct KorgSharedBuffer), &korg1212->dma_shared) < 0) {
2283 snd_printk(KERN_ERR "korg1212: can not allocate shared buffer memory (%zd bytes)\n", sizeof(struct KorgSharedBuffer));
2284 snd_korg1212_free(korg1212);
2285 return -ENOMEM;
2287 korg1212->sharedBufferPtr = (struct KorgSharedBuffer *)korg1212->dma_shared.area;
2288 korg1212->sharedBufferPhy = korg1212->dma_shared.addr;
2290 K1212_DEBUG_PRINTK("K1212_DEBUG: Shared Buffer Area = 0x%p (0x%08lx), %d bytes\n", korg1212->sharedBufferPtr, korg1212->sharedBufferPhy, sizeof(struct KorgSharedBuffer));
2292 #ifndef K1212_LARGEALLOC
2294 korg1212->DataBufsSize = sizeof(struct KorgAudioBuffer) * kNumBuffers;
2296 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
2297 korg1212->DataBufsSize, &korg1212->dma_play) < 0) {
2298 snd_printk(KERN_ERR "korg1212: can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2299 snd_korg1212_free(korg1212);
2300 return -ENOMEM;
2302 korg1212->playDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_play.area;
2303 korg1212->PlayDataPhy = korg1212->dma_play.addr;
2305 K1212_DEBUG_PRINTK("K1212_DEBUG: Play Data Area = 0x%p (0x%08x), %d bytes\n",
2306 korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize);
2308 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
2309 korg1212->DataBufsSize, &korg1212->dma_rec) < 0) {
2310 snd_printk(KERN_ERR "korg1212: can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2311 snd_korg1212_free(korg1212);
2312 return -ENOMEM;
2314 korg1212->recordDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_rec.area;
2315 korg1212->RecDataPhy = korg1212->dma_rec.addr;
2317 K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n",
2318 korg1212->recordDataBufsPtr, korg1212->RecDataPhy, korg1212->DataBufsSize);
2320 #else // K1212_LARGEALLOC
2322 korg1212->recordDataBufsPtr = korg1212->sharedBufferPtr->recordDataBufs;
2323 korg1212->playDataBufsPtr = korg1212->sharedBufferPtr->playDataBufs;
2324 korg1212->PlayDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->playDataBufs;
2325 korg1212->RecDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->recordDataBufs;
2327 #endif // K1212_LARGEALLOC
2329 korg1212->VolumeTablePhy = korg1212->sharedBufferPhy +
2330 offsetof(struct KorgSharedBuffer, volumeData);
2331 korg1212->RoutingTablePhy = korg1212->sharedBufferPhy +
2332 offsetof(struct KorgSharedBuffer, routeData);
2333 korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy +
2334 offsetof(struct KorgSharedBuffer, AdatTimeCode);
2336 err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
2337 if (err < 0) {
2338 snd_printk(KERN_ERR "firmware not available\n");
2339 snd_korg1212_free(korg1212);
2340 return err;
2343 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
2344 dsp_code->size, &korg1212->dma_dsp) < 0) {
2345 snd_printk(KERN_ERR "korg1212: cannot allocate dsp code memory (%zd bytes)\n", dsp_code->size);
2346 snd_korg1212_free(korg1212);
2347 release_firmware(dsp_code);
2348 return -ENOMEM;
2351 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP Code area = 0x%p (0x%08x) %d bytes [%s]\n",
2352 korg1212->dma_dsp.area, korg1212->dma_dsp.addr, dsp_code->size,
2353 stateName[korg1212->cardState]);
2355 memcpy(korg1212->dma_dsp.area, dsp_code->data, dsp_code->size);
2357 release_firmware(dsp_code);
2359 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_RebootCard, 0, 0, 0, 0);
2361 if (rc)
2362 K1212_DEBUG_PRINTK("K1212_DEBUG: Reboot Card - RC = %d [%s]\n", rc, stateName[korg1212->cardState]);
2364 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, korg1212, &ops)) < 0) {
2365 snd_korg1212_free(korg1212);
2366 return err;
2369 snd_korg1212_EnableCardInterrupts(korg1212);
2371 mdelay(CARD_BOOT_DELAY_IN_MS);
2373 if (snd_korg1212_downloadDSPCode(korg1212))
2374 return -EBUSY;
2376 K1212_DEBUG_PRINTK("korg1212: dspMemPhy = %08x U[%08x], "
2377 "PlayDataPhy = %08x L[%08x]\n"
2378 "korg1212: RecDataPhy = %08x L[%08x], "
2379 "VolumeTablePhy = %08x L[%08x]\n"
2380 "korg1212: RoutingTablePhy = %08x L[%08x], "
2381 "AdatTimeCodePhy = %08x L[%08x]\n",
2382 (int)korg1212->dma_dsp.addr, UpperWordSwap(korg1212->dma_dsp.addr),
2383 korg1212->PlayDataPhy, LowerWordSwap(korg1212->PlayDataPhy),
2384 korg1212->RecDataPhy, LowerWordSwap(korg1212->RecDataPhy),
2385 korg1212->VolumeTablePhy, LowerWordSwap(korg1212->VolumeTablePhy),
2386 korg1212->RoutingTablePhy, LowerWordSwap(korg1212->RoutingTablePhy),
2387 korg1212->AdatTimeCodePhy, LowerWordSwap(korg1212->AdatTimeCodePhy));
2389 if ((err = snd_pcm_new(korg1212->card, "korg1212", 0, 1, 1, &korg1212->pcm)) < 0)
2390 return err;
2392 korg1212->pcm->private_data = korg1212;
2393 korg1212->pcm->private_free = snd_korg1212_free_pcm;
2394 strcpy(korg1212->pcm->name, "korg1212");
2396 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_korg1212_playback_ops);
2398 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_korg1212_capture_ops);
2400 korg1212->pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
2402 for (i = 0; i < ARRAY_SIZE(snd_korg1212_controls); i++) {
2403 err = snd_ctl_add(korg1212->card, snd_ctl_new1(&snd_korg1212_controls[i], korg1212));
2404 if (err < 0)
2405 return err;
2408 snd_korg1212_proc_init(korg1212);
2410 * rchip = korg1212;
2411 return 0;
2416 * Card initialisation
2419 static int
2420 snd_korg1212_probe(struct pci_dev *pci,
2421 const struct pci_device_id *pci_id)
2423 static int dev;
2424 struct snd_korg1212 *korg1212;
2425 struct snd_card *card;
2426 int err;
2428 if (dev >= SNDRV_CARDS) {
2429 return -ENODEV;
2431 if (!enable[dev]) {
2432 dev++;
2433 return -ENOENT;
2435 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2436 0, &card);
2437 if (err < 0)
2438 return err;
2440 if ((err = snd_korg1212_create(card, pci, &korg1212)) < 0) {
2441 snd_card_free(card);
2442 return err;
2445 strcpy(card->driver, "korg1212");
2446 strcpy(card->shortname, "korg1212");
2447 sprintf(card->longname, "%s at 0x%lx, irq %d", card->shortname,
2448 korg1212->iomem, korg1212->irq);
2450 K1212_DEBUG_PRINTK("K1212_DEBUG: %s\n", card->longname);
2452 if ((err = snd_card_register(card)) < 0) {
2453 snd_card_free(card);
2454 return err;
2456 pci_set_drvdata(pci, card);
2457 dev++;
2458 return 0;
2461 static void snd_korg1212_remove(struct pci_dev *pci)
2463 snd_card_free(pci_get_drvdata(pci));
2466 static struct pci_driver korg1212_driver = {
2467 .name = KBUILD_MODNAME,
2468 .id_table = snd_korg1212_ids,
2469 .probe = snd_korg1212_probe,
2470 .remove = snd_korg1212_remove,
2473 module_pci_driver(korg1212_driver);