ALSA: pci: Avoid non-standard macro usage
[linux-2.6-block.git] / sound / pci / korg1212 / korg1212.c
CommitLineData
1a59d1b8 1// SPDX-License-Identifier: GPL-2.0-or-later
1da177e4
LT
2/*
3 * Driver for the Korg 1212 IO PCI card
4 *
5 * Copyright (c) 2001 Haroldo Gamal <gamal@alternex.com.br>
1da177e4
LT
6 */
7
1da177e4
LT
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>
65a77217 14#include <linux/module.h>
62932df8 15#include <linux/mutex.h>
2493a6d1 16#include <linux/firmware.h>
6cbbfe1c 17#include <linux/io.h>
1da177e4
LT
18
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>
25
1da177e4
LT
26// ----------------------------------------------------------------------------
27// Debug Stuff
28// ----------------------------------------------------------------------------
29#define K1212_DEBUG_LEVEL 0
9fd9156c
TI
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,...)
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
1da177e4
LT
40
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
46
47// ----------------------------------------------------------------------------
48// Valid states of the Korg 1212 I/O card.
49// ----------------------------------------------------------------------------
fcfd3332 50enum CardState {
1da177e4
LT
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
fcfd3332 66};
1da177e4
LT
67
68// ----------------------------------------------------------------------------
69// The following enumeration defines the constants written to the card's
70// host-to-card doorbell to initiate a command.
71// ----------------------------------------------------------------------------
fcfd3332 72enum korg1212_dbcnst {
1da177e4
LT
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.
fcfd3332 90};
1da177e4
LT
91
92
93// ----------------------------------------------------------------------------
94// The following enumeration defines return codes
95// to the Korg 1212 I/O driver.
96// ----------------------------------------------------------------------------
fcfd3332 97enum snd_korg1212rc {
1da177e4
LT
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
112
113 K1212_CMDRET_BadDevice, // the specified wave device was out of range
114 K1212_CMDRET_BadFormat // the specified wave format is unsupported
fcfd3332 115};
1da177e4
LT
116
117// ----------------------------------------------------------------------------
118// The following enumeration defines the constants used to select the play
119// mode for the card in the SelectPlayMode command.
120// ----------------------------------------------------------------------------
fcfd3332 121enum PlayModeSelector {
1da177e4
LT
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
fcfd3332 126};
1da177e4
LT
127
128// ----------------------------------------------------------------------------
129// The following enumeration defines the constants used to select the monitor
130// mode for the card in the SetMonitorMode command.
131// ----------------------------------------------------------------------------
fcfd3332 132enum MonitorModeSelector {
1da177e4
LT
133 K1212_MONMODE_Off = 0, // tells card to turn off monitor mode
134 K1212_MONMODE_On // tells card to turn on monitor mode
fcfd3332 135};
1da177e4
LT
136
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
149
1da177e4
LT
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
155
156#define CARD_BOOT_DELAY_IN_MS 10
157#define CARD_BOOT_TIMEOUT 10
158#define DSP_BOOT_DELAY_IN_MS 200
159
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
167
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
fcfd3332 174#define K1212_FRAME_SIZE (sizeof(struct KorgAudioFrame))
1da177e4
LT
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)
183
fbaf6a5a
TI
184#define k1212MinADCSens 0x00
185#define k1212MaxADCSens 0x7f
1da177e4
LT
186#define k1212MaxVolume 0x7fff
187#define k1212MaxWaveVolume 0xffff
188#define k1212MinVolume 0x0000
189#define k1212MaxVolInverted 0x8000
190
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
200
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
207
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
216
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
225
226#define SET_SENS_LEFTCHANID 0x00
227#define SET_SENS_RIGHTCHANID 0x01
228
229#define K1212SENSUPDATE_DELAY_IN_MS 50
230
231// --------------------------------------------------------------------------
232// WaitRTCTicks
233//
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.
247
fcfd3332 248enum ClockSourceIndex {
1da177e4
LT
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
fcfd3332 256};
1da177e4 257
fcfd3332 258enum ClockSourceType {
1da177e4
LT
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
fcfd3332 262};
1da177e4 263
fcfd3332
TI
264struct 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 */
268};
1da177e4 269
fcfd3332
TI
270struct KorgAudioBuffer {
271 struct KorgAudioFrame bufferData[kPlayBufferFrames]; /* buffer definition */
272};
1da177e4 273
fcfd3332 274struct KorgSharedBuffer {
1da177e4 275#ifdef K1212_LARGEALLOC
fcfd3332
TI
276 struct KorgAudioBuffer playDataBufs[kNumBuffers];
277 struct KorgAudioBuffer recordDataBufs[kNumBuffers];
1da177e4
LT
278#endif
279 short volumeData[kAudioChannels];
280 u32 cardCommand;
281 u16 routeData [kAudioChannels];
282 u32 AdatTimeCode; // ADAT timecode value
fcfd3332 283};
1da177e4 284
fcfd3332 285struct SensBits {
1da177e4
LT
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;
fcfd3332 300};
1da177e4 301
fcfd3332
TI
302struct snd_korg1212 {
303 struct snd_card *card;
1da177e4 304 struct pci_dev *pci;
fcfd3332 305 struct snd_pcm *pcm;
1da177e4
LT
306 int irq;
307
308 spinlock_t lock;
62932df8 309 struct mutex open_mutex;
1da177e4
LT
310
311 struct timer_list timer; /* timer callback for checking ack of stop request */
312 int stop_pending_cnt; /* counter for stop pending check */
313
314 wait_queue_head_t wait;
315
316 unsigned long iomem;
317 unsigned long ioport;
318 unsigned long iomem2;
319 unsigned long irqcount;
320 unsigned long inIRQ;
321 void __iomem *iobase;
322
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;
327
1da177e4
LT
328 u32 DataBufsSize;
329
fcfd3332
TI
330 struct KorgAudioBuffer * playDataBufsPtr;
331 struct KorgAudioBuffer * recordDataBufsPtr;
1da177e4 332
fcfd3332 333 struct KorgSharedBuffer * sharedBufferPtr;
1da177e4
LT
334
335 u32 RecDataPhy;
336 u32 PlayDataPhy;
337 unsigned long sharedBufferPhy;
338 u32 VolumeTablePhy;
339 u32 RoutingTablePhy;
340 u32 AdatTimeCodePhy;
341
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
352
353 size_t periodsize;
354 int channels;
355 int currentBuffer;
356
fcfd3332
TI
357 struct snd_pcm_substream *playback_substream;
358 struct snd_pcm_substream *capture_substream;
1da177e4
LT
359
360 pid_t capture_pid;
361 pid_t playback_pid;
362
fcfd3332 363 enum CardState cardState;
1da177e4
LT
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.
367
fcfd3332 368 enum ClockSourceIndex clkSrcRate; // sample rate and clock source
1da177e4 369
fcfd3332 370 enum ClockSourceType clkSource; // clock source
1da177e4
LT
371 int clkRate; // clock rate
372
373 int volumePhase[kAudioChannels];
374
375 u16 leftADCInSens; // ADC left channel input sensitivity
376 u16 rightADCInSens; // ADC right channel input sensitivity
377
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
383
384 int dsp_is_loaded;
385 int dsp_stop_is_processed;
386
387};
388
389MODULE_DESCRIPTION("korg1212");
390MODULE_LICENSE("GPL");
391MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");
7e0af29d 392MODULE_FIRMWARE("korg/k1212.dsp");
1da177e4
LT
393
394static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
395static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
a67ff6a5 396static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */
1da177e4
LT
397
398module_param_array(index, int, NULL, 0444);
399MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard.");
400module_param_array(id, charp, NULL, 0444);
401MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard.");
402module_param_array(enable, bool, NULL, 0444);
403MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
404MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
405
9baa3c34 406static const struct pci_device_id snd_korg1212_ids[] = {
1da177e4
LT
407 {
408 .vendor = 0x10b5,
409 .device = 0x906d,
410 .subvendor = PCI_ANY_ID,
411 .subdevice = PCI_ANY_ID,
412 },
413 { 0, },
414};
415
fcfd3332
TI
416MODULE_DEVICE_TABLE(pci, snd_korg1212_ids);
417
9fd9156c
TI
418static char *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"
1da177e4
LT
430};
431
f861237c 432static const char * const clockSourceTypeName[] = { "ADAT", "S/PDIF", "local" };
1da177e4 433
f861237c 434static const char * const clockSourceName[] = {
9fd9156c
TI
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"
1da177e4
LT
441};
442
f861237c 443static const char * const channelName[] = {
9fd9156c
TI
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",
1da177e4
LT
456};
457
9fd9156c
TI
458static 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
465};
1da177e4 466
fcfd3332 467union swap_u32 { unsigned char c[4]; u32 i; };
1da177e4
LT
468
469#ifdef SNDRV_BIG_ENDIAN
470static u32 LowerWordSwap(u32 swappee)
471#else
472static u32 UpperWordSwap(u32 swappee)
473#endif
474{
fcfd3332 475 union swap_u32 retVal, swapper;
1da177e4
LT
476
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];
482
483 return retVal.i;
484}
485
486#ifdef SNDRV_BIG_ENDIAN
487static u32 UpperWordSwap(u32 swappee)
488#else
489static u32 LowerWordSwap(u32 swappee)
490#endif
491{
fcfd3332 492 union swap_u32 retVal, swapper;
1da177e4
LT
493
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];
499
500 return retVal.i;
501}
502
1da177e4
LT
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)
507
fcfd3332
TI
508static int snd_korg1212_Send1212Command(struct snd_korg1212 *korg1212,
509 enum korg1212_dbcnst doorbellVal,
510 u32 mailBox0Val, u32 mailBox1Val,
511 u32 mailBox2Val, u32 mailBox3Val)
1da177e4
LT
512{
513 u32 retryCount;
514 u16 mailBox3Lo;
fcfd3332 515 int rc = K1212_CMDRET_Success;
1da177e4
LT
516
517 if (!korg1212->outDoorbellPtr) {
9fd9156c 518 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: CardUninitialized\n");
1da177e4
LT
519 return K1212_CMDRET_CardUninitialized;
520 }
521
9fd9156c
TI
522 K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- 0x%08x 0x%08x [%s]\n",
523 doorbellVal, mailBox0Val, stateName[korg1212->cardState]);
1da177e4
LT
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
530
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;
539 }
540
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)) {
9fd9156c 550 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- Success\n");
1da177e4
LT
551 rc = K1212_CMDRET_Success;
552 break;
553 }
554 }
555 }
556 korg1212->cmdRetryCount += retryCount;
557
558 if (retryCount >= MAX_COMMAND_RETRIES) {
9fd9156c 559 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- NoAckFromCard\n");
1da177e4
LT
560 rc = K1212_CMDRET_NoAckFromCard;
561 }
562
563 return rc;
564}
565
566/* spinlock already held */
fcfd3332 567static void snd_korg1212_SendStop(struct snd_korg1212 *korg1212)
1da177e4
LT
568{
569 if (! korg1212->stop_pending_cnt) {
570 korg1212->sharedBufferPtr->cardCommand = 0xffffffff;
571 /* program the timer */
572 korg1212->stop_pending_cnt = HZ;
3d6f0e0c 573 mod_timer(&korg1212->timer, jiffies + 1);
1da177e4
LT
574 }
575}
576
fcfd3332 577static void snd_korg1212_SendStopAndWait(struct snd_korg1212 *korg1212)
1da177e4
LT
578{
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);
585}
586
587/* timer callback for checking the ack of stop request */
7211ec63 588static void snd_korg1212_timer_func(struct timer_list *t)
1da177e4 589{
7211ec63 590 struct snd_korg1212 *korg1212 = from_timer(korg1212, t, timer);
b32425ac 591 unsigned long flags;
1da177e4 592
b32425ac 593 spin_lock_irqsave(&korg1212->lock, flags);
1da177e4
LT
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);
9fd9156c
TI
599 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Stop ack'ed [%s]\n",
600 stateName[korg1212->cardState]);
1da177e4
LT
601 } else {
602 if (--korg1212->stop_pending_cnt > 0) {
603 /* reprogram timer */
3d6f0e0c 604 mod_timer(&korg1212->timer, jiffies + 1);
1da177e4
LT
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);
9fd9156c
TI
610 K1212_DEBUG_PRINTK("K1212_DEBUG: Stop timeout [%s]\n",
611 stateName[korg1212->cardState]);
1da177e4
LT
612 }
613 }
b32425ac 614 spin_unlock_irqrestore(&korg1212->lock, flags);
1da177e4
LT
615}
616
fcfd3332 617static int snd_korg1212_TurnOnIdleMonitor(struct snd_korg1212 *korg1212)
1da177e4
LT
618{
619 unsigned long flags;
9fd9156c 620 int rc;
1da177e4
LT
621
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);
9fd9156c 628 return rc;
1da177e4
LT
629}
630
fcfd3332 631static void snd_korg1212_TurnOffIdleMonitor(struct snd_korg1212 *korg1212)
1da177e4
LT
632{
633 if (korg1212->idleMonitorOn) {
634 snd_korg1212_SendStopAndWait(korg1212);
635 korg1212->idleMonitorOn = 0;
636 }
637}
638
fcfd3332 639static inline void snd_korg1212_setCardState(struct snd_korg1212 * korg1212, enum CardState csState)
1da177e4
LT
640{
641 korg1212->cardState = csState;
642}
643
fcfd3332 644static int snd_korg1212_OpenCard(struct snd_korg1212 * korg1212)
1da177e4 645{
9fd9156c
TI
646 K1212_DEBUG_PRINTK("K1212_DEBUG: OpenCard [%s] %d\n",
647 stateName[korg1212->cardState], korg1212->opencnt);
62932df8 648 mutex_lock(&korg1212->open_mutex);
1da177e4
LT
649 if (korg1212->opencnt++ == 0) {
650 snd_korg1212_TurnOffIdleMonitor(korg1212);
651 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
652 }
653
62932df8 654 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
655 return 1;
656}
657
fcfd3332 658static int snd_korg1212_CloseCard(struct snd_korg1212 * korg1212)
1da177e4 659{
9fd9156c
TI
660 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard [%s] %d\n",
661 stateName[korg1212->cardState], korg1212->opencnt);
1da177e4 662
62932df8 663 mutex_lock(&korg1212->open_mutex);
1da177e4 664 if (--(korg1212->opencnt)) {
62932df8 665 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
666 return 0;
667 }
668
669 if (korg1212->cardState == K1212_STATE_SETUP) {
9fd9156c 670 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
1da177e4 671 K1212_MODE_StopPlay, 0, 0, 0);
9fd9156c
TI
672 if (rc)
673 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard - RC = %d [%s]\n",
674 rc, stateName[korg1212->cardState]);
1da177e4 675 if (rc != K1212_CMDRET_Success) {
62932df8 676 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
677 return 0;
678 }
679 } else if (korg1212->cardState > K1212_STATE_SETUP) {
680 snd_korg1212_SendStopAndWait(korg1212);
681 }
682
683 if (korg1212->cardState > K1212_STATE_READY) {
684 snd_korg1212_TurnOnIdleMonitor(korg1212);
685 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
686 }
687
62932df8 688 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
689 return 0;
690}
691
692/* spinlock already held */
fcfd3332 693static int snd_korg1212_SetupForPlay(struct snd_korg1212 * korg1212)
1da177e4 694{
9fd9156c
TI
695 int rc;
696
697 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay [%s] %d\n",
698 stateName[korg1212->cardState], korg1212->setcnt);
1da177e4
LT
699
700 if (korg1212->setcnt++)
701 return 0;
702
703 snd_korg1212_setCardState(korg1212, K1212_STATE_SETUP);
704 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
705 K1212_MODE_SetupPlay, 0, 0, 0);
9fd9156c
TI
706 if (rc)
707 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay - RC = %d [%s]\n",
708 rc, stateName[korg1212->cardState]);
1da177e4
LT
709 if (rc != K1212_CMDRET_Success) {
710 return 1;
711 }
712 return 0;
713}
714
715/* spinlock already held */
fcfd3332 716static int snd_korg1212_TriggerPlay(struct snd_korg1212 * korg1212)
1da177e4 717{
9fd9156c
TI
718 int rc;
719
720 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay [%s] %d\n",
721 stateName[korg1212->cardState], korg1212->playcnt);
1da177e4
LT
722
723 if (korg1212->playcnt++)
724 return 0;
725
726 snd_korg1212_setCardState(korg1212, K1212_STATE_PLAYING);
727 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_TriggerPlay, 0, 0, 0, 0);
9fd9156c
TI
728 if (rc)
729 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay - RC = %d [%s]\n",
730 rc, stateName[korg1212->cardState]);
1da177e4
LT
731 if (rc != K1212_CMDRET_Success) {
732 return 1;
733 }
734 return 0;
735}
736
737/* spinlock already held */
fcfd3332 738static int snd_korg1212_StopPlay(struct snd_korg1212 * korg1212)
1da177e4 739{
9fd9156c
TI
740 K1212_DEBUG_PRINTK("K1212_DEBUG: StopPlay [%s] %d\n",
741 stateName[korg1212->cardState], korg1212->playcnt);
1da177e4
LT
742
743 if (--(korg1212->playcnt))
744 return 0;
745
746 korg1212->setcnt = 0;
747
748 if (korg1212->cardState != K1212_STATE_ERRORSTOP)
749 snd_korg1212_SendStop(korg1212);
750
751 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
752 return 0;
753}
754
fcfd3332 755static void snd_korg1212_EnableCardInterrupts(struct snd_korg1212 * korg1212)
1da177e4
LT
756{
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);
763}
764
765#if 0 /* not used */
766
fcfd3332
TI
767static int snd_korg1212_SetMonitorMode(struct snd_korg1212 *korg1212,
768 enum MonitorModeSelector mode)
1da177e4 769{
9fd9156c
TI
770 K1212_DEBUG_PRINTK("K1212_DEBUG: SetMonitorMode [%s]\n",
771 stateName[korg1212->cardState]);
1da177e4
LT
772
773 switch (mode) {
9fd9156c
TI
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);
780 }
781 break;
782
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;
793 }
794 break;
1da177e4 795
9fd9156c
TI
796 default:
797 return 0;
1da177e4
LT
798 }
799
800 return 1;
801}
802
803#endif /* not used */
804
fcfd3332 805static inline int snd_korg1212_use_is_exclusive(struct snd_korg1212 *korg1212)
1da177e4 806{
9fd9156c
TI
807 if (korg1212->playback_pid != korg1212->capture_pid &&
808 korg1212->playback_pid >= 0 && korg1212->capture_pid >= 0)
809 return 0;
1da177e4 810
9fd9156c 811 return 1;
1da177e4
LT
812}
813
fcfd3332 814static int snd_korg1212_SetRate(struct snd_korg1212 *korg1212, int rate)
1da177e4 815{
fcfd3332 816 static enum ClockSourceIndex s44[] = {
9fd9156c
TI
817 K1212_CLKIDX_AdatAt44_1K,
818 K1212_CLKIDX_WordAt44_1K,
819 K1212_CLKIDX_LocalAt44_1K
820 };
fcfd3332 821 static enum ClockSourceIndex s48[] = {
9fd9156c
TI
822 K1212_CLKIDX_AdatAt48K,
823 K1212_CLKIDX_WordAt48K,
824 K1212_CLKIDX_LocalAt48K
825 };
826 int parm, rc;
1da177e4 827
9fd9156c
TI
828 if (!snd_korg1212_use_is_exclusive (korg1212))
829 return -EBUSY;
1da177e4 830
fcfd3332 831 switch (rate) {
9fd9156c
TI
832 case 44100:
833 parm = s44[korg1212->clkSource];
834 break;
1da177e4 835
9fd9156c
TI
836 case 48000:
837 parm = s48[korg1212->clkSource];
838 break;
1da177e4 839
9fd9156c
TI
840 default:
841 return -EINVAL;
842 }
1da177e4
LT
843
844 korg1212->clkSrcRate = parm;
845 korg1212->clkRate = rate;
846
847 udelay(INTERCOMMAND_DELAY);
848 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
849 ClockSourceSelector[korg1212->clkSrcRate],
850 0, 0, 0);
9fd9156c
TI
851 if (rc)
852 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
853 rc, stateName[korg1212->cardState]);
1da177e4
LT
854
855 return 0;
856}
857
fcfd3332 858static int snd_korg1212_SetClockSource(struct snd_korg1212 *korg1212, int source)
1da177e4
LT
859{
860
9fd9156c
TI
861 if (source < 0 || source > 2)
862 return -EINVAL;
1da177e4
LT
863
864 korg1212->clkSource = source;
865
866 snd_korg1212_SetRate(korg1212, korg1212->clkRate);
867
868 return 0;
869}
870
fcfd3332 871static void snd_korg1212_DisableCardInterrupts(struct snd_korg1212 *korg1212)
1da177e4
LT
872{
873 writel(0, korg1212->statusRegPtr);
874}
875
fcfd3332 876static int snd_korg1212_WriteADCSensitivity(struct snd_korg1212 *korg1212)
1da177e4 877{
fcfd3332 878 struct SensBits sensVals;
1da177e4
LT
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;
887
9fd9156c
TI
888 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity [%s]\n",
889 stateName[korg1212->cardState]);
1da177e4
LT
890
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
897
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;
906
907 spin_lock_irqsave(&korg1212->lock, flags);
908
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);
915
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;
926
927 case K1212_CLKIDX_WordAt48K:
928 case K1212_CLKIDX_AdatAt48K:
929 case K1212_CLKIDX_LocalAt48K:
930 default:
931 clkIs48K = 1;
932 break;
933 }
934
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;
942
943 // ----------------------------------------------------------------------------
944 // now start shifting the bits in. Start with the left channel then the right.
945 // ----------------------------------------------------------------------------
946 for (channel = 0; channel < 2; channel++) {
947
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);
956
957 for (bitPosition = 15; bitPosition >= 0; bitPosition--) { // for all the bits
9fd9156c
TI
958 if (channel == 0) {
959 if (sensVals.l.leftSensBits & (0x0001 << bitPosition))
fcfd3332 960 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set high
9fd9156c
TI
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
968 }
1da177e4
LT
969
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);
976 }
977
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);
987
988 if (clkIs48K)
989 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
990
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);
999 }
1000
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);
1007
1008 if (monModeSet) {
fcfd3332 1009 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
1da177e4 1010 K1212_MODE_MonitorOn, 0, 0, 0);
9fd9156c
TI
1011 if (rc)
1012 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity - RC = %d [%s]\n",
1013 rc, stateName[korg1212->cardState]);
1da177e4
LT
1014 }
1015
1016 spin_unlock_irqrestore(&korg1212->lock, flags);
1017
1018 return 1;
1019}
1020
fcfd3332 1021static void snd_korg1212_OnDSPDownloadComplete(struct snd_korg1212 *korg1212)
1da177e4 1022{
fcfd3332 1023 int channel, rc;
1da177e4 1024
9fd9156c
TI
1025 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is complete. [%s]\n",
1026 stateName[korg1212->cardState]);
1da177e4
LT
1027
1028 // ----------------------------------------------------
1029 // tell the card to boot
1030 // ----------------------------------------------------
1031 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_BootFromDSPPage4, 0, 0, 0, 0);
1032
9fd9156c
TI
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);
1da177e4
LT
1037
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
1047 0
1048 );
1049
9fd9156c
TI
1050 if (rc)
1051 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Buffer Memory - RC = %d [%s]\n",
1052 rc, stateName[korg1212->cardState]);
1da177e4
LT
1053
1054 udelay(INTERCOMMAND_DELAY);
1055
1056 rc = snd_korg1212_Send1212Command(korg1212,
1057 K1212_DB_ConfigureMiscMemory,
1058 LowerWordSwap(korg1212->VolumeTablePhy),
1059 LowerWordSwap(korg1212->RoutingTablePhy),
1060 LowerWordSwap(korg1212->AdatTimeCodePhy),
1061 0
1062 );
1063
9fd9156c
TI
1064 if (rc)
1065 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Misc Memory - RC = %d [%s]\n",
1066 rc, stateName[korg1212->cardState]);
1da177e4
LT
1067
1068 // --------------------------------------------------------------------------------
1069 // Initialize the routing and volume tables, then update the card's state.
1070 // --------------------------------------------------------------------------------
1071 udelay(INTERCOMMAND_DELAY);
1072
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);
1077 }
1078
1079 snd_korg1212_WriteADCSensitivity(korg1212);
1080
1081 udelay(INTERCOMMAND_DELAY);
1082 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
1083 ClockSourceSelector[korg1212->clkSrcRate],
1084 0, 0, 0);
9fd9156c
TI
1085 if (rc)
1086 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
1087 rc, stateName[korg1212->cardState]);
1da177e4 1088
9fd9156c 1089 rc = snd_korg1212_TurnOnIdleMonitor(korg1212);
1da177e4
LT
1090 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
1091
9fd9156c
TI
1092 if (rc)
1093 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Monitor On - RC = %d [%s]\n",
1094 rc, stateName[korg1212->cardState]);
1da177e4
LT
1095
1096 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE);
1097}
1098
7d12e780 1099static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id)
1da177e4
LT
1100{
1101 u32 doorbellValue;
fcfd3332 1102 struct snd_korg1212 *korg1212 = dev_id;
1da177e4 1103
1da177e4
LT
1104 doorbellValue = readl(korg1212->inDoorbellPtr);
1105
1106 if (!doorbellValue)
1107 return IRQ_NONE;
1108
1109 spin_lock(&korg1212->lock);
1110
1111 writel(doorbellValue, korg1212->inDoorbellPtr);
1112
1113 korg1212->irqcount++;
1114
1115 korg1212->inIRQ++;
1116
1da177e4
LT
1117 switch (doorbellValue) {
1118 case K1212_DB_DSPDownloadDone:
9fd9156c
TI
1119 K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n",
1120 korg1212->irqcount, doorbellValue,
1121 stateName[korg1212->cardState]);
1da177e4
LT
1122 if (korg1212->cardState == K1212_STATE_DSP_IN_PROCESS) {
1123 korg1212->dsp_is_loaded = 1;
1124 wake_up(&korg1212->wait);
1125 }
1126 break;
1127
1128 // ------------------------------------------------------------------------
1129 // an error occurred - stop the card
1130 // ------------------------------------------------------------------------
1131 case K1212_DB_DMAERROR:
9fd9156c
TI
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");
1da177e4
LT
1136 korg1212->errorcnt++;
1137 korg1212->totalerrorcnt++;
1138 korg1212->sharedBufferPtr->cardCommand = 0;
1139 snd_korg1212_setCardState(korg1212, K1212_STATE_ERRORSTOP);
1140 break;
1141
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:
fcfd3332 1147 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ CSTP count - %ld, %x, [%s].\n",
9fd9156c
TI
1148 korg1212->irqcount, doorbellValue,
1149 stateName[korg1212->cardState]);
1da177e4
LT
1150 korg1212->sharedBufferPtr->cardCommand = 0;
1151 break;
1152
1153 default:
9fd9156c 1154 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ DFLT count - %ld, %x, cpos=%d [%s].\n",
fcfd3332
TI
1155 korg1212->irqcount, doorbellValue,
1156 korg1212->currentBuffer, stateName[korg1212->cardState]);
1da177e4
LT
1157 if ((korg1212->cardState > K1212_STATE_SETUP) || korg1212->idleMonitorOn) {
1158 korg1212->currentBuffer++;
1159
1160 if (korg1212->currentBuffer >= kNumBuffers)
1161 korg1212->currentBuffer = 0;
1162
1163 if (!korg1212->running)
1164 break;
1165
1166 if (korg1212->capture_substream) {
1167 spin_unlock(&korg1212->lock);
1168 snd_pcm_period_elapsed(korg1212->capture_substream);
1169 spin_lock(&korg1212->lock);
1170 }
1171
1172 if (korg1212->playback_substream) {
1173 spin_unlock(&korg1212->lock);
1174 snd_pcm_period_elapsed(korg1212->playback_substream);
1175 spin_lock(&korg1212->lock);
1176 }
1177 }
1178 break;
1179 }
1180
1181 korg1212->inIRQ--;
1182
1183 spin_unlock(&korg1212->lock);
1184
1185 return IRQ_HANDLED;
1186}
1187
fcfd3332 1188static int snd_korg1212_downloadDSPCode(struct snd_korg1212 *korg1212)
1da177e4 1189{
fcfd3332 1190 int rc;
1da177e4 1191
9fd9156c
TI
1192 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is starting... [%s]\n",
1193 stateName[korg1212->cardState]);
1da177e4
LT
1194
1195 // ---------------------------------------------------------------
1196 // verify the state of the card before proceeding.
1197 // ---------------------------------------------------------------
9fd9156c 1198 if (korg1212->cardState >= K1212_STATE_DSP_IN_PROCESS)
1da177e4 1199 return 1;
1da177e4
LT
1200
1201 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_IN_PROCESS);
1202
1da177e4
LT
1203 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_StartDSPDownload,
1204 UpperWordSwap(korg1212->dma_dsp.addr),
1205 0, 0, 0);
9fd9156c
TI
1206 if (rc)
1207 K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n",
1208 rc, stateName[korg1212->cardState]);
1da177e4
LT
1209
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 */
1214
1215 snd_korg1212_OnDSPDownloadComplete(korg1212);
1216
1217 return 0;
1218}
1219
5875adc2 1220static const struct snd_pcm_hardware snd_korg1212_playback_info =
1da177e4
LT
1221{
1222 .info = (SNDRV_PCM_INFO_MMAP |
1223 SNDRV_PCM_INFO_MMAP_VALID |
2008f137
TI
1224 SNDRV_PCM_INFO_INTERLEAVED |
1225 SNDRV_PCM_INFO_BATCH),
1da177e4
LT
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,
1239};
1240
5875adc2 1241static const struct snd_pcm_hardware snd_korg1212_capture_info =
1da177e4
LT
1242{
1243 .info = (SNDRV_PCM_INFO_MMAP |
1244 SNDRV_PCM_INFO_MMAP_VALID |
2008f137
TI
1245 SNDRV_PCM_INFO_INTERLEAVED |
1246 SNDRV_PCM_INFO_BATCH),
1da177e4
LT
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,
1260};
1261
fcfd3332 1262static int snd_korg1212_silence(struct snd_korg1212 *korg1212, int pos, int count, int offset, int size)
1da177e4 1263{
fcfd3332 1264 struct KorgAudioFrame * dst = korg1212->playDataBufsPtr[0].bufferData + pos;
1da177e4
LT
1265 int i;
1266
9fd9156c
TI
1267 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_silence pos=%d offset=%d size=%d count=%d\n",
1268 pos, offset, size, count);
da3cec35
TI
1269 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1270 return -EINVAL;
1da177e4
LT
1271
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 ) {
9fd9156c
TI
1276 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_silence KERNEL EFAULT dst=%p iter=%d\n",
1277 dst, i);
1da177e4
LT
1278 return -EFAULT;
1279 }
1280#endif
1281 memset((void*) dst + offset, 0, size);
1282 dst++;
1283 }
1284
1285 return 0;
1286}
1287
6c6ba11f
TI
1288static int snd_korg1212_copy_to(struct snd_pcm_substream *substream,
1289 void __user *dst, int pos, int count,
1290 bool in_kernel)
1da177e4 1291{
6c6ba11f
TI
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;
1296
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);
da3cec35
TI
1303 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1304 return -EINVAL;
1da177e4
LT
1305
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 ) {
9fd9156c 1310 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_to KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1311 return -EFAULT;
1312 }
1313#endif
6c6ba11f 1314 if (in_kernel)
0701492c 1315 memcpy((__force void *)dst, src, size);
6c6ba11f 1316 else if (copy_to_user(dst, src, size))
1da177e4 1317 return -EFAULT;
1da177e4
LT
1318 src++;
1319 dst += size;
1320 }
1321
1322 return 0;
1323}
1324
6c6ba11f
TI
1325static int snd_korg1212_copy_from(struct snd_pcm_substream *substream,
1326 void __user *src, int pos, int count,
1327 bool in_kernel)
1da177e4 1328{
6c6ba11f
TI
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;
1da177e4 1333
6c6ba11f
TI
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;
1338
1339 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_copy_from pos=%d size=%d count=%d\n",
1340 pos, size, count);
1da177e4 1341
da3cec35
TI
1342 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1343 return -EINVAL;
1da177e4
LT
1344
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 ) {
fcfd3332 1349 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_from KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1350 return -EFAULT;
1351 }
1352#endif
6c6ba11f 1353 if (in_kernel)
0701492c 1354 memcpy(dst, (__force void *)src, size);
6c6ba11f 1355 else if (copy_from_user(dst, src, size))
1da177e4 1356 return -EFAULT;
1da177e4
LT
1357 dst++;
1358 src += size;
1359 }
1360
1361 return 0;
1362}
1363
fcfd3332 1364static void snd_korg1212_free_pcm(struct snd_pcm *pcm)
1da177e4 1365{
fcfd3332 1366 struct snd_korg1212 *korg1212 = pcm->private_data;
1da177e4 1367
9fd9156c
TI
1368 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_free_pcm [%s]\n",
1369 stateName[korg1212->cardState]);
1da177e4
LT
1370
1371 korg1212->pcm = NULL;
1372}
1373
fcfd3332 1374static int snd_korg1212_playback_open(struct snd_pcm_substream *substream)
1da177e4
LT
1375{
1376 unsigned long flags;
fcfd3332
TI
1377 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1378 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4 1379
9fd9156c
TI
1380 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_open [%s]\n",
1381 stateName[korg1212->cardState]);
1da177e4 1382
1da177e4
LT
1383 snd_korg1212_OpenCard(korg1212);
1384
1385 runtime->hw = snd_korg1212_playback_info;
1386 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_play);
1387
1388 spin_lock_irqsave(&korg1212->lock, flags);
1389
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;
1395
1396 spin_unlock_irqrestore(&korg1212->lock, flags);
1397
9c9cb687
LPC
1398 snd_pcm_hw_constraint_single(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1399 kPlayBufferFrames);
1400
1da177e4
LT
1401 return 0;
1402}
1403
1404
fcfd3332 1405static int snd_korg1212_capture_open(struct snd_pcm_substream *substream)
1da177e4
LT
1406{
1407 unsigned long flags;
fcfd3332
TI
1408 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1409 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4 1410
9fd9156c
TI
1411 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_open [%s]\n",
1412 stateName[korg1212->cardState]);
1da177e4 1413
1da177e4
LT
1414 snd_korg1212_OpenCard(korg1212);
1415
1416 runtime->hw = snd_korg1212_capture_info;
1417 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_rec);
1418
1419 spin_lock_irqsave(&korg1212->lock, flags);
1420
1421 korg1212->capture_substream = substream;
1422 korg1212->capture_pid = current->pid;
1423 korg1212->periodsize = K1212_PERIODS;
1424 korg1212->channels = K1212_CHANNELS;
1425
1426 spin_unlock_irqrestore(&korg1212->lock, flags);
1427
9c9cb687
LPC
1428 snd_pcm_hw_constraint_single(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1429 kPlayBufferFrames);
1da177e4
LT
1430 return 0;
1431}
1432
fcfd3332 1433static int snd_korg1212_playback_close(struct snd_pcm_substream *substream)
1da177e4
LT
1434{
1435 unsigned long flags;
fcfd3332 1436 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1437
9fd9156c
TI
1438 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_close [%s]\n",
1439 stateName[korg1212->cardState]);
1da177e4
LT
1440
1441 snd_korg1212_silence(korg1212, 0, K1212_MAX_SAMPLES, 0, korg1212->channels * 2);
1442
1443 spin_lock_irqsave(&korg1212->lock, flags);
1444
1445 korg1212->playback_pid = -1;
1446 korg1212->playback_substream = NULL;
1447 korg1212->periodsize = 0;
1448
1449 spin_unlock_irqrestore(&korg1212->lock, flags);
1450
1451 snd_korg1212_CloseCard(korg1212);
1452 return 0;
1453}
1454
fcfd3332 1455static int snd_korg1212_capture_close(struct snd_pcm_substream *substream)
1da177e4
LT
1456{
1457 unsigned long flags;
fcfd3332 1458 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1459
9fd9156c
TI
1460 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_close [%s]\n",
1461 stateName[korg1212->cardState]);
1da177e4
LT
1462
1463 spin_lock_irqsave(&korg1212->lock, flags);
1464
1465 korg1212->capture_pid = -1;
1466 korg1212->capture_substream = NULL;
1467 korg1212->periodsize = 0;
1468
1469 spin_unlock_irqrestore(&korg1212->lock, flags);
1470
1471 snd_korg1212_CloseCard(korg1212);
1472 return 0;
1473}
1474
fcfd3332 1475static int snd_korg1212_ioctl(struct snd_pcm_substream *substream,
1da177e4
LT
1476 unsigned int cmd, void *arg)
1477{
9fd9156c 1478 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_ioctl: cmd=%d\n", cmd);
1da177e4
LT
1479
1480 if (cmd == SNDRV_PCM_IOCTL1_CHANNEL_INFO ) {
fcfd3332 1481 struct snd_pcm_channel_info *info = arg;
1da177e4
LT
1482 info->offset = 0;
1483 info->first = info->channel * 16;
1484 info->step = 256;
1da177e4 1485 K1212_DEBUG_PRINTK("K1212_DEBUG: channel_info %d:, offset=%ld, first=%d, step=%d\n", info->channel, info->offset, info->first, info->step);
1da177e4
LT
1486 return 0;
1487 }
1488
1489 return snd_pcm_lib_ioctl(substream, cmd, arg);
1490}
1491
fcfd3332
TI
1492static int snd_korg1212_hw_params(struct snd_pcm_substream *substream,
1493 struct snd_pcm_hw_params *params)
1da177e4
LT
1494{
1495 unsigned long flags;
fcfd3332 1496 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1497 int err;
1498 pid_t this_pid;
1499 pid_t other_pid;
1500
9fd9156c
TI
1501 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_hw_params [%s]\n",
1502 stateName[korg1212->cardState]);
1da177e4
LT
1503
1504 spin_lock_irqsave(&korg1212->lock, flags);
1505
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;
1512 }
1513
1514 if ((other_pid > 0) && (this_pid != other_pid)) {
1515
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.
1519 */
1520
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;
1525 }
1526
1527 spin_unlock_irqrestore(&korg1212->lock, flags);
1528 return 0;
1529 }
1530
1531 if ((err = snd_korg1212_SetRate(korg1212, params_rate(params))) < 0) {
1532 spin_unlock_irqrestore(&korg1212->lock, flags);
1533 return err;
1534 }
1535
1536 korg1212->channels = params_channels(params);
1537 korg1212->periodsize = K1212_PERIOD_BYTES;
1538
1539 spin_unlock_irqrestore(&korg1212->lock, flags);
1540
1541 return 0;
1542}
1543
fcfd3332 1544static int snd_korg1212_prepare(struct snd_pcm_substream *substream)
1da177e4 1545{
fcfd3332 1546 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1547 int rc;
1548
9fd9156c
TI
1549 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare [%s]\n",
1550 stateName[korg1212->cardState]);
1da177e4
LT
1551
1552 spin_lock_irq(&korg1212->lock);
1553
1554 /* FIXME: we should wait for ack! */
1555 if (korg1212->stop_pending_cnt > 0) {
9fd9156c
TI
1556 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare - Stop is pending... [%s]\n",
1557 stateName[korg1212->cardState]);
1da177e4
LT
1558 spin_unlock_irq(&korg1212->lock);
1559 return -EAGAIN;
1560 /*
1561 korg1212->sharedBufferPtr->cardCommand = 0;
1562 del_timer(&korg1212->timer);
1563 korg1212->stop_pending_cnt = 0;
1564 */
1565 }
1566
1567 rc = snd_korg1212_SetupForPlay(korg1212);
1568
1569 korg1212->currentBuffer = 0;
1570
1571 spin_unlock_irq(&korg1212->lock);
1572
1573 return rc ? -EINVAL : 0;
1574}
1575
fcfd3332 1576static int snd_korg1212_trigger(struct snd_pcm_substream *substream,
1da177e4
LT
1577 int cmd)
1578{
fcfd3332 1579 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1580 int rc;
1581
9fd9156c
TI
1582 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_trigger [%s] cmd=%d\n",
1583 stateName[korg1212->cardState], cmd);
1da177e4
LT
1584
1585 spin_lock(&korg1212->lock);
1586 switch (cmd) {
1587 case SNDRV_PCM_TRIGGER_START:
1588/*
1589 if (korg1212->running) {
9fd9156c 1590 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already running?\n");
1da177e4
LT
1591 break;
1592 }
1593*/
1594 korg1212->running++;
1595 rc = snd_korg1212_TriggerPlay(korg1212);
1596 break;
1597
1598 case SNDRV_PCM_TRIGGER_STOP:
1599/*
1600 if (!korg1212->running) {
9fd9156c 1601 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already stopped?\n");
1da177e4
LT
1602 break;
1603 }
1604*/
1605 korg1212->running--;
1606 rc = snd_korg1212_StopPlay(korg1212);
1607 break;
1608
1609 default:
1610 rc = 1;
1611 break;
1612 }
1613 spin_unlock(&korg1212->lock);
1614 return rc ? -EINVAL : 0;
1615}
1616
fcfd3332 1617static snd_pcm_uframes_t snd_korg1212_playback_pointer(struct snd_pcm_substream *substream)
1da177e4 1618{
fcfd3332 1619 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1620 snd_pcm_uframes_t pos;
1621
1622 pos = korg1212->currentBuffer * kPlayBufferFrames;
1623
9fd9156c
TI
1624 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_playback_pointer [%s] %ld\n",
1625 stateName[korg1212->cardState], pos);
1da177e4
LT
1626
1627 return pos;
1628}
1629
fcfd3332 1630static snd_pcm_uframes_t snd_korg1212_capture_pointer(struct snd_pcm_substream *substream)
1da177e4 1631{
fcfd3332 1632 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1633 snd_pcm_uframes_t pos;
1634
1635 pos = korg1212->currentBuffer * kPlayBufferFrames;
1636
9fd9156c
TI
1637 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_capture_pointer [%s] %ld\n",
1638 stateName[korg1212->cardState], pos);
1da177e4
LT
1639
1640 return pos;
1641}
1642
fcfd3332 1643static int snd_korg1212_playback_copy(struct snd_pcm_substream *substream,
6c6ba11f
TI
1644 int channel, unsigned long pos,
1645 void __user *src, unsigned long count)
1da177e4 1646{
6c6ba11f
TI
1647 return snd_korg1212_copy_from(substream, src, pos, count, false);
1648}
1da177e4 1649
6c6ba11f
TI
1650static int snd_korg1212_playback_copy_kernel(struct snd_pcm_substream *substream,
1651 int channel, unsigned long pos,
1652 void *src, unsigned long count)
1653{
1654 return snd_korg1212_copy_from(substream, (void __user *)src,
1655 pos, count, true);
1da177e4
LT
1656}
1657
fcfd3332 1658static int snd_korg1212_playback_silence(struct snd_pcm_substream *substream,
1da177e4 1659 int channel, /* not used (interleaved data) */
6c6ba11f
TI
1660 unsigned long pos,
1661 unsigned long count)
1da177e4 1662{
6c6ba11f 1663 struct snd_pcm_runtime *runtime = substream->runtime;
fcfd3332 1664 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1665
6c6ba11f
TI
1666 return snd_korg1212_silence(korg1212, bytes_to_frames(runtime, pos),
1667 bytes_to_frames(runtime, count),
1668 0, korg1212->channels * 2);
1da177e4
LT
1669}
1670
fcfd3332 1671static int snd_korg1212_capture_copy(struct snd_pcm_substream *substream,
6c6ba11f
TI
1672 int channel, unsigned long pos,
1673 void __user *dst, unsigned long count)
1da177e4 1674{
6c6ba11f
TI
1675 return snd_korg1212_copy_to(substream, dst, pos, count, false);
1676}
1da177e4 1677
6c6ba11f
TI
1678static int snd_korg1212_capture_copy_kernel(struct snd_pcm_substream *substream,
1679 int channel, unsigned long pos,
1680 void *dst, unsigned long count)
1681{
1682 return snd_korg1212_copy_to(substream, (void __user *)dst,
1683 pos, count, true);
1da177e4
LT
1684}
1685
6769e988 1686static const struct snd_pcm_ops snd_korg1212_playback_ops = {
1da177e4
LT
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,
6c6ba11f
TI
1694 .copy_user = snd_korg1212_playback_copy,
1695 .copy_kernel = snd_korg1212_playback_copy_kernel,
1696 .fill_silence = snd_korg1212_playback_silence,
1da177e4
LT
1697};
1698
6769e988 1699static const struct snd_pcm_ops snd_korg1212_capture_ops = {
1da177e4
LT
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,
6c6ba11f
TI
1707 .copy_user = snd_korg1212_capture_copy,
1708 .copy_kernel = snd_korg1212_capture_copy_kernel,
1da177e4
LT
1709};
1710
1711/*
1712 * Control Interface
1713 */
1714
fcfd3332
TI
1715static int snd_korg1212_control_phase_info(struct snd_kcontrol *kcontrol,
1716 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1717{
1718 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1719 uinfo->count = (kcontrol->private_value >= 8) ? 2 : 1;
1720 return 0;
1721}
1722
fcfd3332
TI
1723static int snd_korg1212_control_phase_get(struct snd_kcontrol *kcontrol,
1724 struct snd_ctl_elem_value *u)
1da177e4 1725{
fcfd3332 1726 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1727 int i = kcontrol->private_value;
1728
1729 spin_lock_irq(&korg1212->lock);
1730
1731 u->value.integer.value[0] = korg1212->volumePhase[i];
1732
1733 if (i >= 8)
1734 u->value.integer.value[1] = korg1212->volumePhase[i+1];
1735
1736 spin_unlock_irq(&korg1212->lock);
1737
1738 return 0;
1739}
1740
fcfd3332
TI
1741static int snd_korg1212_control_phase_put(struct snd_kcontrol *kcontrol,
1742 struct snd_ctl_elem_value *u)
1da177e4 1743{
fcfd3332 1744 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1745 int change = 0;
1746 int i, val;
1747
1748 spin_lock_irq(&korg1212->lock);
1749
1750 i = kcontrol->private_value;
1751
4e98d6a7 1752 korg1212->volumePhase[i] = !!u->value.integer.value[0];
1da177e4
LT
1753
1754 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value];
1755
4e98d6a7 1756 if ((u->value.integer.value[0] != 0) != (val < 0)) {
1da177e4
LT
1757 val = abs(val) * (korg1212->volumePhase[i] > 0 ? -1 : 1);
1758 korg1212->sharedBufferPtr->volumeData[i] = val;
1759 change = 1;
1760 }
1761
1762 if (i >= 8) {
4e98d6a7 1763 korg1212->volumePhase[i+1] = !!u->value.integer.value[1];
1da177e4
LT
1764
1765 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value+1];
1766
4e98d6a7 1767 if ((u->value.integer.value[1] != 0) != (val < 0)) {
1da177e4
LT
1768 val = abs(val) * (korg1212->volumePhase[i+1] > 0 ? -1 : 1);
1769 korg1212->sharedBufferPtr->volumeData[i+1] = val;
1770 change = 1;
1771 }
1772 }
1773
1774 spin_unlock_irq(&korg1212->lock);
1775
1776 return change;
1777}
1778
fcfd3332
TI
1779static int snd_korg1212_control_volume_info(struct snd_kcontrol *kcontrol,
1780 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1781{
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;
1787}
1788
fcfd3332
TI
1789static int snd_korg1212_control_volume_get(struct snd_kcontrol *kcontrol,
1790 struct snd_ctl_elem_value *u)
1da177e4 1791{
fcfd3332 1792 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1793 int i;
1794
1795 spin_lock_irq(&korg1212->lock);
1796
1797 i = kcontrol->private_value;
1798 u->value.integer.value[0] = abs(korg1212->sharedBufferPtr->volumeData[i]);
1799
1800 if (i >= 8)
1801 u->value.integer.value[1] = abs(korg1212->sharedBufferPtr->volumeData[i+1]);
1802
1803 spin_unlock_irq(&korg1212->lock);
1804
1805 return 0;
1806}
1807
fcfd3332
TI
1808static int snd_korg1212_control_volume_put(struct snd_kcontrol *kcontrol,
1809 struct snd_ctl_elem_value *u)
1da177e4 1810{
fcfd3332 1811 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1812 int change = 0;
1813 int i;
1814 int val;
1815
1816 spin_lock_irq(&korg1212->lock);
1817
1818 i = kcontrol->private_value;
1819
4e98d6a7
TI
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])) {
1da177e4
LT
1824 val = korg1212->volumePhase[i] > 0 ? -1 : 1;
1825 val *= u->value.integer.value[0];
1826 korg1212->sharedBufferPtr->volumeData[i] = val;
1827 change = 1;
1828 }
1829
1830 if (i >= 8) {
4e98d6a7
TI
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])) {
1da177e4
LT
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;
1839 }
1840 }
1841
1842 spin_unlock_irq(&korg1212->lock);
1843
1844 return change;
1845}
1846
fcfd3332
TI
1847static int snd_korg1212_control_route_info(struct snd_kcontrol *kcontrol,
1848 struct snd_ctl_elem_info *uinfo)
1da177e4 1849{
f861237c
TI
1850 return snd_ctl_enum_info(uinfo,
1851 (kcontrol->private_value >= 8) ? 2 : 1,
1852 kAudioChannels, channelName);
1da177e4
LT
1853}
1854
fcfd3332
TI
1855static int snd_korg1212_control_route_get(struct snd_kcontrol *kcontrol,
1856 struct snd_ctl_elem_value *u)
1da177e4 1857{
fcfd3332 1858 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1859 int i;
1860
1861 spin_lock_irq(&korg1212->lock);
1862
1863 i = kcontrol->private_value;
1864 u->value.enumerated.item[0] = korg1212->sharedBufferPtr->routeData[i];
1865
1866 if (i >= 8)
1867 u->value.enumerated.item[1] = korg1212->sharedBufferPtr->routeData[i+1];
1868
1869 spin_unlock_irq(&korg1212->lock);
1870
1871 return 0;
1872}
1873
fcfd3332
TI
1874static int snd_korg1212_control_route_put(struct snd_kcontrol *kcontrol,
1875 struct snd_ctl_elem_value *u)
1da177e4 1876{
fcfd3332 1877 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1878 int change = 0, i;
1879
1880 spin_lock_irq(&korg1212->lock);
1881
1882 i = kcontrol->private_value;
1883
4e98d6a7
TI
1884 if (u->value.enumerated.item[0] < kAudioChannels &&
1885 u->value.enumerated.item[0] !=
1886 (unsigned) korg1212->sharedBufferPtr->volumeData[i]) {
1da177e4
LT
1887 korg1212->sharedBufferPtr->routeData[i] = u->value.enumerated.item[0];
1888 change = 1;
1889 }
1890
1891 if (i >= 8) {
4e98d6a7
TI
1892 if (u->value.enumerated.item[1] < kAudioChannels &&
1893 u->value.enumerated.item[1] !=
1894 (unsigned) korg1212->sharedBufferPtr->volumeData[i+1]) {
1da177e4
LT
1895 korg1212->sharedBufferPtr->routeData[i+1] = u->value.enumerated.item[1];
1896 change = 1;
1897 }
1898 }
1899
1900 spin_unlock_irq(&korg1212->lock);
1901
1902 return change;
1903}
1904
fcfd3332
TI
1905static int snd_korg1212_control_info(struct snd_kcontrol *kcontrol,
1906 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1907{
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;
1913}
1914
fcfd3332
TI
1915static int snd_korg1212_control_get(struct snd_kcontrol *kcontrol,
1916 struct snd_ctl_elem_value *u)
1da177e4 1917{
fcfd3332 1918 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1919
1920 spin_lock_irq(&korg1212->lock);
1921
1922 u->value.integer.value[0] = korg1212->leftADCInSens;
1923 u->value.integer.value[1] = korg1212->rightADCInSens;
1924
1925 spin_unlock_irq(&korg1212->lock);
1926
1927 return 0;
1928}
1929
fcfd3332
TI
1930static int snd_korg1212_control_put(struct snd_kcontrol *kcontrol,
1931 struct snd_ctl_elem_value *u)
1da177e4 1932{
fcfd3332 1933 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1934 int change = 0;
1935
1936 spin_lock_irq(&korg1212->lock);
1937
4e98d6a7
TI
1938 if (u->value.integer.value[0] >= k1212MinADCSens &&
1939 u->value.integer.value[0] <= k1212MaxADCSens &&
1940 u->value.integer.value[0] != korg1212->leftADCInSens) {
1da177e4
LT
1941 korg1212->leftADCInSens = u->value.integer.value[0];
1942 change = 1;
1943 }
4e98d6a7
TI
1944 if (u->value.integer.value[1] >= k1212MinADCSens &&
1945 u->value.integer.value[1] <= k1212MaxADCSens &&
1946 u->value.integer.value[1] != korg1212->rightADCInSens) {
1da177e4
LT
1947 korg1212->rightADCInSens = u->value.integer.value[1];
1948 change = 1;
1949 }
1950
1951 spin_unlock_irq(&korg1212->lock);
1952
1953 if (change)
1954 snd_korg1212_WriteADCSensitivity(korg1212);
1955
1956 return change;
1957}
1958
fcfd3332
TI
1959static int snd_korg1212_control_sync_info(struct snd_kcontrol *kcontrol,
1960 struct snd_ctl_elem_info *uinfo)
1da177e4 1961{
f861237c 1962 return snd_ctl_enum_info(uinfo, 1, 3, clockSourceTypeName);
1da177e4
LT
1963}
1964
fcfd3332
TI
1965static int snd_korg1212_control_sync_get(struct snd_kcontrol *kcontrol,
1966 struct snd_ctl_elem_value *ucontrol)
1da177e4 1967{
fcfd3332 1968 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1969
1970 spin_lock_irq(&korg1212->lock);
1971
1972 ucontrol->value.enumerated.item[0] = korg1212->clkSource;
1973
1974 spin_unlock_irq(&korg1212->lock);
1975 return 0;
1976}
1977
fcfd3332
TI
1978static int snd_korg1212_control_sync_put(struct snd_kcontrol *kcontrol,
1979 struct snd_ctl_elem_value *ucontrol)
1da177e4 1980{
fcfd3332 1981 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1982 unsigned int val;
1983 int change;
1984
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;
1991}
1992
1993#define MON_MIXER(ord,c_name) \
1994 { \
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 }, \
2003 { \
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 }, \
2012 { \
2013 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
67ed4161 2014 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1da177e4
LT
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, \
2020 }
2021
fcfd3332 2022static struct snd_kcontrol_new snd_korg1212_controls[] = {
1da177e4
LT
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"),
2027 {
2028 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE,
67ed4161 2029 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1da177e4
LT
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,
2034 },
2035 {
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,
2042 }
2043};
2044
2045/*
2046 * proc interface
2047 */
2048
fcfd3332
TI
2049static void snd_korg1212_proc_read(struct snd_info_entry *entry,
2050 struct snd_info_buffer *buffer)
1da177e4
LT
2051{
2052 int n;
fcfd3332 2053 struct snd_korg1212 *korg1212 = entry->private_data;
1da177e4
LT
2054
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");
5b5e0928 2058 snd_iprintf(buffer, " period size: %zd bytes\n", K1212_PERIOD_BYTES);
1da177e4
LT
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);
2075}
2076
e23e7a14 2077static void snd_korg1212_proc_init(struct snd_korg1212 *korg1212)
1da177e4 2078{
47f2769b
TI
2079 snd_card_ro_proc_new(korg1212->card, "korg1212", korg1212,
2080 snd_korg1212_proc_read);
1da177e4
LT
2081}
2082
2083static int
fcfd3332 2084snd_korg1212_free(struct snd_korg1212 *korg1212)
1da177e4
LT
2085{
2086 snd_korg1212_TurnOffIdleMonitor(korg1212);
2087
2088 if (korg1212->irq >= 0) {
1da177e4 2089 snd_korg1212_DisableCardInterrupts(korg1212);
9fd9156c 2090 free_irq(korg1212->irq, korg1212);
1da177e4
LT
2091 korg1212->irq = -1;
2092 }
2093
2094 if (korg1212->iobase != NULL) {
2095 iounmap(korg1212->iobase);
2096 korg1212->iobase = NULL;
2097 }
2098
2099 pci_release_regions(korg1212->pci);
2100
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;
2107 }
2108
2109#ifndef K1212_LARGEALLOC
2110
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;
2117 }
2118
2119 if (korg1212->dma_rec.area) {
2120 snd_dma_free_pages(&korg1212->dma_rec);
2121 korg1212->dma_rec.area = NULL;
2122 }
2123
2124#endif
2125
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;
2132 }
2133
2134 pci_disable_device(korg1212->pci);
2135 kfree(korg1212);
2136 return 0;
2137}
2138
fcfd3332 2139static int snd_korg1212_dev_free(struct snd_device *device)
1da177e4 2140{
fcfd3332 2141 struct snd_korg1212 *korg1212 = device->device_data;
1da177e4 2142 K1212_DEBUG_PRINTK("K1212_DEBUG: Freeing device\n");
1da177e4
LT
2143 return snd_korg1212_free(korg1212);
2144}
2145
e23e7a14
BP
2146static int snd_korg1212_create(struct snd_card *card, struct pci_dev *pci,
2147 struct snd_korg1212 **rchip)
1da177e4
LT
2148
2149{
9fd9156c 2150 int err, rc;
1da177e4
LT
2151 unsigned int i;
2152 unsigned ioport_size, iomem_size, iomem2_size;
fcfd3332 2153 struct snd_korg1212 * korg1212;
2493a6d1 2154 const struct firmware *dsp_code;
1da177e4 2155
fcfd3332 2156 static struct snd_device_ops ops = {
1da177e4
LT
2157 .dev_free = snd_korg1212_dev_free,
2158 };
2159
2160 * rchip = NULL;
2161 if ((err = pci_enable_device(pci)) < 0)
2162 return err;
2163
e560d8d8 2164 korg1212 = kzalloc(sizeof(*korg1212), GFP_KERNEL);
1da177e4
LT
2165 if (korg1212 == NULL) {
2166 pci_disable_device(pci);
2167 return -ENOMEM;
2168 }
2169
2170 korg1212->card = card;
2171 korg1212->pci = pci;
2172
2173 init_waitqueue_head(&korg1212->wait);
2174 spin_lock_init(&korg1212->lock);
62932df8 2175 mutex_init(&korg1212->open_mutex);
7211ec63 2176 timer_setup(&korg1212->timer, snd_korg1212_timer_func, 0);
1da177e4
LT
2177
2178 korg1212->irq = -1;
2179 korg1212->clkSource = K1212_CLKIDX_Local;
2180 korg1212->clkRate = 44100;
2181 korg1212->inIRQ = 0;
2182 korg1212->running = 0;
2183 korg1212->opencnt = 0;
2184 korg1212->playcnt = 0;
2185 korg1212->setcnt = 0;
2186 korg1212->totalerrorcnt = 0;
2187 korg1212->playback_pid = -1;
2188 korg1212->capture_pid = -1;
2189 snd_korg1212_setCardState(korg1212, K1212_STATE_UNINITIALIZED);
2190 korg1212->idleMonitorOn = 0;
2191 korg1212->clkSrcRate = K1212_CLKIDX_LocalAt44_1K;
2192 korg1212->leftADCInSens = k1212MaxADCSens;
2193 korg1212->rightADCInSens = k1212MaxADCSens;
2194
2195 for (i=0; i<kAudioChannels; i++)
2196 korg1212->volumePhase[i] = 0;
2197
2198 if ((err = pci_request_regions(pci, "korg1212")) < 0) {
2199 kfree(korg1212);
2200 pci_disable_device(pci);
2201 return err;
2202 }
2203
2204 korg1212->iomem = pci_resource_start(korg1212->pci, 0);
2205 korg1212->ioport = pci_resource_start(korg1212->pci, 1);
2206 korg1212->iomem2 = pci_resource_start(korg1212->pci, 2);
2207
2208 iomem_size = pci_resource_len(korg1212->pci, 0);
2209 ioport_size = pci_resource_len(korg1212->pci, 1);
2210 iomem2_size = pci_resource_len(korg1212->pci, 2);
2211
1da177e4
LT
2212 K1212_DEBUG_PRINTK("K1212_DEBUG: resources:\n"
2213 " iomem = 0x%lx (%d)\n"
2214 " ioport = 0x%lx (%d)\n"
2215 " iomem = 0x%lx (%d)\n"
2216 " [%s]\n",
2217 korg1212->iomem, iomem_size,
2218 korg1212->ioport, ioport_size,
2219 korg1212->iomem2, iomem2_size,
2220 stateName[korg1212->cardState]);
1da177e4
LT
2221
2222 if ((korg1212->iobase = ioremap(korg1212->iomem, iomem_size)) == NULL) {
2223 snd_printk(KERN_ERR "korg1212: unable to remap memory region 0x%lx-0x%lx\n", korg1212->iomem,
2224 korg1212->iomem + iomem_size - 1);
2225 snd_korg1212_free(korg1212);
2226 return -EBUSY;
2227 }
2228
2229 err = request_irq(pci->irq, snd_korg1212_interrupt,
437a5a46 2230 IRQF_SHARED,
934c2b6d 2231 KBUILD_MODNAME, korg1212);
1da177e4
LT
2232
2233 if (err) {
2234 snd_printk(KERN_ERR "korg1212: unable to grab IRQ %d\n", pci->irq);
2235 snd_korg1212_free(korg1212);
2236 return -EBUSY;
2237 }
2238
2239 korg1212->irq = pci->irq;
2240
2241 pci_set_master(korg1212->pci);
2242
2243 korg1212->statusRegPtr = (u32 __iomem *) (korg1212->iobase + STATUS_REG_OFFSET);
2244 korg1212->outDoorbellPtr = (u32 __iomem *) (korg1212->iobase + OUT_DOORBELL_OFFSET);
2245 korg1212->inDoorbellPtr = (u32 __iomem *) (korg1212->iobase + IN_DOORBELL_OFFSET);
2246 korg1212->mailbox0Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX0_OFFSET);
2247 korg1212->mailbox1Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX1_OFFSET);
2248 korg1212->mailbox2Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX2_OFFSET);
2249 korg1212->mailbox3Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX3_OFFSET);
2250 korg1212->controlRegPtr = (u32 __iomem *) (korg1212->iobase + PCI_CONTROL_OFFSET);
2251 korg1212->sensRegPtr = (u16 __iomem *) (korg1212->iobase + SENS_CONTROL_OFFSET);
2252 korg1212->idRegPtr = (u32 __iomem *) (korg1212->iobase + DEV_VEND_ID_OFFSET);
2253
1da177e4
LT
2254 K1212_DEBUG_PRINTK("K1212_DEBUG: card registers:\n"
2255 " Status register = 0x%p\n"
2256 " OutDoorbell = 0x%p\n"
2257 " InDoorbell = 0x%p\n"
2258 " Mailbox0 = 0x%p\n"
2259 " Mailbox1 = 0x%p\n"
2260 " Mailbox2 = 0x%p\n"
2261 " Mailbox3 = 0x%p\n"
2262 " ControlReg = 0x%p\n"
2263 " SensReg = 0x%p\n"
2264 " IDReg = 0x%p\n"
2265 " [%s]\n",
2266 korg1212->statusRegPtr,
2267 korg1212->outDoorbellPtr,
2268 korg1212->inDoorbellPtr,
2269 korg1212->mailbox0Ptr,
2270 korg1212->mailbox1Ptr,
2271 korg1212->mailbox2Ptr,
2272 korg1212->mailbox3Ptr,
2273 korg1212->controlRegPtr,
2274 korg1212->sensRegPtr,
2275 korg1212->idRegPtr,
2276 stateName[korg1212->cardState]);
1da177e4 2277
6974f8ad 2278 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
fcfd3332 2279 sizeof(struct KorgSharedBuffer), &korg1212->dma_shared) < 0) {
5b5e0928 2280 snd_printk(KERN_ERR "korg1212: can not allocate shared buffer memory (%zd bytes)\n", sizeof(struct KorgSharedBuffer));
1da177e4
LT
2281 snd_korg1212_free(korg1212);
2282 return -ENOMEM;
2283 }
fcfd3332 2284 korg1212->sharedBufferPtr = (struct KorgSharedBuffer *)korg1212->dma_shared.area;
1da177e4
LT
2285 korg1212->sharedBufferPhy = korg1212->dma_shared.addr;
2286
fcfd3332 2287 K1212_DEBUG_PRINTK("K1212_DEBUG: Shared Buffer Area = 0x%p (0x%08lx), %d bytes\n", korg1212->sharedBufferPtr, korg1212->sharedBufferPhy, sizeof(struct KorgSharedBuffer));
1da177e4
LT
2288
2289#ifndef K1212_LARGEALLOC
2290
fcfd3332 2291 korg1212->DataBufsSize = sizeof(struct KorgAudioBuffer) * kNumBuffers;
1da177e4 2292
6974f8ad 2293 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
1da177e4
LT
2294 korg1212->DataBufsSize, &korg1212->dma_play) < 0) {
2295 snd_printk(KERN_ERR "korg1212: can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2296 snd_korg1212_free(korg1212);
2297 return -ENOMEM;
2298 }
fcfd3332 2299 korg1212->playDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_play.area;
1da177e4
LT
2300 korg1212->PlayDataPhy = korg1212->dma_play.addr;
2301
1da177e4
LT
2302 K1212_DEBUG_PRINTK("K1212_DEBUG: Play Data Area = 0x%p (0x%08x), %d bytes\n",
2303 korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize);
1da177e4 2304
6974f8ad 2305 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
1da177e4
LT
2306 korg1212->DataBufsSize, &korg1212->dma_rec) < 0) {
2307 snd_printk(KERN_ERR "korg1212: can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2308 snd_korg1212_free(korg1212);
2309 return -ENOMEM;
2310 }
fcfd3332 2311 korg1212->recordDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_rec.area;
1da177e4
LT
2312 korg1212->RecDataPhy = korg1212->dma_rec.addr;
2313
1da177e4
LT
2314 K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n",
2315 korg1212->recordDataBufsPtr, korg1212->RecDataPhy, korg1212->DataBufsSize);
1da177e4
LT
2316
2317#else // K1212_LARGEALLOC
2318
2319 korg1212->recordDataBufsPtr = korg1212->sharedBufferPtr->recordDataBufs;
2320 korg1212->playDataBufsPtr = korg1212->sharedBufferPtr->playDataBufs;
fcfd3332
TI
2321 korg1212->PlayDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->playDataBufs;
2322 korg1212->RecDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->recordDataBufs;
1da177e4
LT
2323
2324#endif // K1212_LARGEALLOC
2325
1da177e4 2326 korg1212->VolumeTablePhy = korg1212->sharedBufferPhy +
fcfd3332 2327 offsetof(struct KorgSharedBuffer, volumeData);
1da177e4 2328 korg1212->RoutingTablePhy = korg1212->sharedBufferPhy +
fcfd3332 2329 offsetof(struct KorgSharedBuffer, routeData);
1da177e4 2330 korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy +
fcfd3332 2331 offsetof(struct KorgSharedBuffer, AdatTimeCode);
1da177e4 2332
2493a6d1
CL
2333 err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
2334 if (err < 0) {
2493a6d1
CL
2335 snd_printk(KERN_ERR "firmware not available\n");
2336 snd_korg1212_free(korg1212);
2337 return err;
2493a6d1
CL
2338 }
2339
6974f8ad 2340 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
2493a6d1 2341 dsp_code->size, &korg1212->dma_dsp) < 0) {
9fb62c9f 2342 snd_printk(KERN_ERR "korg1212: cannot allocate dsp code memory (%zd bytes)\n", dsp_code->size);
1da177e4 2343 snd_korg1212_free(korg1212);
b7dd2b34 2344 release_firmware(dsp_code);
1da177e4
LT
2345 return -ENOMEM;
2346 }
2347
1da177e4 2348 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP Code area = 0x%p (0x%08x) %d bytes [%s]\n",
2493a6d1 2349 korg1212->dma_dsp.area, korg1212->dma_dsp.addr, dsp_code->size,
1da177e4 2350 stateName[korg1212->cardState]);
1da177e4 2351
2493a6d1
CL
2352 memcpy(korg1212->dma_dsp.area, dsp_code->data, dsp_code->size);
2353
b7dd2b34 2354 release_firmware(dsp_code);
2493a6d1 2355
1da177e4
LT
2356 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_RebootCard, 0, 0, 0, 0);
2357
9fd9156c
TI
2358 if (rc)
2359 K1212_DEBUG_PRINTK("K1212_DEBUG: Reboot Card - RC = %d [%s]\n", rc, stateName[korg1212->cardState]);
1da177e4
LT
2360
2361 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, korg1212, &ops)) < 0) {
2362 snd_korg1212_free(korg1212);
2363 return err;
2364 }
2365
2366 snd_korg1212_EnableCardInterrupts(korg1212);
2367
2368 mdelay(CARD_BOOT_DELAY_IN_MS);
2369
2370 if (snd_korg1212_downloadDSPCode(korg1212))
2371 return -EBUSY;
2372
fcfd3332 2373 K1212_DEBUG_PRINTK("korg1212: dspMemPhy = %08x U[%08x], "
1da177e4
LT
2374 "PlayDataPhy = %08x L[%08x]\n"
2375 "korg1212: RecDataPhy = %08x L[%08x], "
2376 "VolumeTablePhy = %08x L[%08x]\n"
2377 "korg1212: RoutingTablePhy = %08x L[%08x], "
2378 "AdatTimeCodePhy = %08x L[%08x]\n",
2379 (int)korg1212->dma_dsp.addr, UpperWordSwap(korg1212->dma_dsp.addr),
2380 korg1212->PlayDataPhy, LowerWordSwap(korg1212->PlayDataPhy),
2381 korg1212->RecDataPhy, LowerWordSwap(korg1212->RecDataPhy),
2382 korg1212->VolumeTablePhy, LowerWordSwap(korg1212->VolumeTablePhy),
2383 korg1212->RoutingTablePhy, LowerWordSwap(korg1212->RoutingTablePhy),
2384 korg1212->AdatTimeCodePhy, LowerWordSwap(korg1212->AdatTimeCodePhy));
2385
2386 if ((err = snd_pcm_new(korg1212->card, "korg1212", 0, 1, 1, &korg1212->pcm)) < 0)
2387 return err;
2388
2389 korg1212->pcm->private_data = korg1212;
2390 korg1212->pcm->private_free = snd_korg1212_free_pcm;
2391 strcpy(korg1212->pcm->name, "korg1212");
2392
2393 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_korg1212_playback_ops);
2394
2395 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_korg1212_capture_ops);
2396
2397 korg1212->pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
2398
1da177e4
LT
2399 for (i = 0; i < ARRAY_SIZE(snd_korg1212_controls); i++) {
2400 err = snd_ctl_add(korg1212->card, snd_ctl_new1(&snd_korg1212_controls[i], korg1212));
2401 if (err < 0)
2402 return err;
2403 }
2404
2405 snd_korg1212_proc_init(korg1212);
2406
1da177e4
LT
2407 * rchip = korg1212;
2408 return 0;
2409
2410}
2411
2412/*
2413 * Card initialisation
2414 */
2415
e23e7a14 2416static int
1da177e4
LT
2417snd_korg1212_probe(struct pci_dev *pci,
2418 const struct pci_device_id *pci_id)
2419{
2420 static int dev;
fcfd3332
TI
2421 struct snd_korg1212 *korg1212;
2422 struct snd_card *card;
1da177e4
LT
2423 int err;
2424
2425 if (dev >= SNDRV_CARDS) {
2426 return -ENODEV;
2427 }
2428 if (!enable[dev]) {
2429 dev++;
2430 return -ENOENT;
2431 }
60c5772b
TI
2432 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2433 0, &card);
e58de7ba
TI
2434 if (err < 0)
2435 return err;
1da177e4
LT
2436
2437 if ((err = snd_korg1212_create(card, pci, &korg1212)) < 0) {
2438 snd_card_free(card);
2439 return err;
2440 }
2441
2442 strcpy(card->driver, "korg1212");
2443 strcpy(card->shortname, "korg1212");
2444 sprintf(card->longname, "%s at 0x%lx, irq %d", card->shortname,
2445 korg1212->iomem, korg1212->irq);
2446
1da177e4 2447 K1212_DEBUG_PRINTK("K1212_DEBUG: %s\n", card->longname);
1da177e4
LT
2448
2449 if ((err = snd_card_register(card)) < 0) {
2450 snd_card_free(card);
2451 return err;
2452 }
2453 pci_set_drvdata(pci, card);
2454 dev++;
2455 return 0;
2456}
2457
e23e7a14 2458static void snd_korg1212_remove(struct pci_dev *pci)
1da177e4
LT
2459{
2460 snd_card_free(pci_get_drvdata(pci));
1da177e4
LT
2461}
2462
e9f66d9b 2463static struct pci_driver korg1212_driver = {
3733e424 2464 .name = KBUILD_MODNAME,
1da177e4
LT
2465 .id_table = snd_korg1212_ids,
2466 .probe = snd_korg1212_probe,
e23e7a14 2467 .remove = snd_korg1212_remove,
1da177e4
LT
2468};
2469
e9f66d9b 2470module_pci_driver(korg1212_driver);