]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - sound/pci/korg1212/korg1212.c
Merge tag 'efi-urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming...
[mirror_ubuntu-artful-kernel.git] / sound / pci / korg1212 / korg1212.c
CommitLineData
1da177e4
LT
1/*
2 * Driver for the Korg 1212 IO PCI card
3 *
4 * Copyright (c) 2001 Haroldo Gamal <gamal@alternex.com.br>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
1da177e4
LT
22#include <linux/delay.h>
23#include <linux/init.h>
24#include <linux/interrupt.h>
25#include <linux/pci.h>
26#include <linux/slab.h>
27#include <linux/wait.h>
65a77217 28#include <linux/module.h>
62932df8 29#include <linux/mutex.h>
2493a6d1 30#include <linux/firmware.h>
6cbbfe1c 31#include <linux/io.h>
1da177e4
LT
32
33#include <sound/core.h>
34#include <sound/info.h>
35#include <sound/control.h>
36#include <sound/pcm.h>
37#include <sound/pcm_params.h>
38#include <sound/initval.h>
39
1da177e4
LT
40// ----------------------------------------------------------------------------
41// Debug Stuff
42// ----------------------------------------------------------------------------
43#define K1212_DEBUG_LEVEL 0
9fd9156c
TI
44#if K1212_DEBUG_LEVEL > 0
45#define K1212_DEBUG_PRINTK(fmt,args...) printk(KERN_DEBUG fmt,##args)
46#else
47#define K1212_DEBUG_PRINTK(fmt,...)
48#endif
49#if K1212_DEBUG_LEVEL > 1
50#define K1212_DEBUG_PRINTK_VERBOSE(fmt,args...) printk(KERN_DEBUG fmt,##args)
51#else
52#define K1212_DEBUG_PRINTK_VERBOSE(fmt,...)
53#endif
1da177e4
LT
54
55// ----------------------------------------------------------------------------
56// Record/Play Buffer Allocation Method. If K1212_LARGEALLOC is defined all
57// buffers are alocated as a large piece inside KorgSharedBuffer.
58// ----------------------------------------------------------------------------
59//#define K1212_LARGEALLOC 1
60
61// ----------------------------------------------------------------------------
62// Valid states of the Korg 1212 I/O card.
63// ----------------------------------------------------------------------------
fcfd3332 64enum CardState {
1da177e4
LT
65 K1212_STATE_NONEXISTENT, // there is no card here
66 K1212_STATE_UNINITIALIZED, // the card is awaiting DSP download
67 K1212_STATE_DSP_IN_PROCESS, // the card is currently downloading its DSP code
68 K1212_STATE_DSP_COMPLETE, // the card has finished the DSP download
69 K1212_STATE_READY, // the card can be opened by an application. Any application
70 // requests prior to this state should fail. Only an open
71 // request can be made at this state.
72 K1212_STATE_OPEN, // an application has opened the card
73 K1212_STATE_SETUP, // the card has been setup for play
74 K1212_STATE_PLAYING, // the card is playing
75 K1212_STATE_MONITOR, // the card is in the monitor mode
76 K1212_STATE_CALIBRATING, // the card is currently calibrating
77 K1212_STATE_ERRORSTOP, // the card has stopped itself because of an error and we
78 // are in the process of cleaning things up.
79 K1212_STATE_MAX_STATE // state values of this and beyond are invalid
fcfd3332 80};
1da177e4
LT
81
82// ----------------------------------------------------------------------------
83// The following enumeration defines the constants written to the card's
84// host-to-card doorbell to initiate a command.
85// ----------------------------------------------------------------------------
fcfd3332 86enum korg1212_dbcnst {
1da177e4
LT
87 K1212_DB_RequestForData = 0, // sent by the card to request a buffer fill.
88 K1212_DB_TriggerPlay = 1, // starts playback/record on the card.
89 K1212_DB_SelectPlayMode = 2, // select monitor, playback setup, or stop.
90 K1212_DB_ConfigureBufferMemory = 3, // tells card where the host audio buffers are.
91 K1212_DB_RequestAdatTimecode = 4, // asks the card for the latest ADAT timecode value.
92 K1212_DB_SetClockSourceRate = 5, // sets the clock source and rate for the card.
93 K1212_DB_ConfigureMiscMemory = 6, // tells card where other buffers are.
94 K1212_DB_TriggerFromAdat = 7, // tells card to trigger from Adat at a specific
95 // timecode value.
96 K1212_DB_DMAERROR = 0x80, // DMA Error - the PCI bus is congestioned.
97 K1212_DB_CARDSTOPPED = 0x81, // Card has stopped by user request.
98 K1212_DB_RebootCard = 0xA0, // instructs the card to reboot.
99 K1212_DB_BootFromDSPPage4 = 0xA4, // instructs the card to boot from the DSP microcode
100 // on page 4 (local page to card).
101 K1212_DB_DSPDownloadDone = 0xAE, // sent by the card to indicate the download has
102 // completed.
103 K1212_DB_StartDSPDownload = 0xAF // tells the card to download its DSP firmware.
fcfd3332 104};
1da177e4
LT
105
106
107// ----------------------------------------------------------------------------
108// The following enumeration defines return codes
109// to the Korg 1212 I/O driver.
110// ----------------------------------------------------------------------------
fcfd3332 111enum snd_korg1212rc {
1da177e4
LT
112 K1212_CMDRET_Success = 0, // command was successfully placed
113 K1212_CMDRET_DIOCFailure, // the DeviceIoControl call failed
114 K1212_CMDRET_PMFailure, // the protected mode call failed
115 K1212_CMDRET_FailUnspecified, // unspecified failure
116 K1212_CMDRET_FailBadState, // the specified command can not be given in
117 // the card's current state. (or the wave device's
118 // state)
119 K1212_CMDRET_CardUninitialized, // the card is uninitialized and cannot be used
120 K1212_CMDRET_BadIndex, // an out of range card index was specified
121 K1212_CMDRET_BadHandle, // an invalid card handle was specified
122 K1212_CMDRET_NoFillRoutine, // a play request has been made before a fill routine set
123 K1212_CMDRET_FillRoutineInUse, // can't set a new fill routine while one is in use
124 K1212_CMDRET_NoAckFromCard, // the card never acknowledged a command
125 K1212_CMDRET_BadParams, // bad parameters were provided by the caller
126
127 K1212_CMDRET_BadDevice, // the specified wave device was out of range
128 K1212_CMDRET_BadFormat // the specified wave format is unsupported
fcfd3332 129};
1da177e4
LT
130
131// ----------------------------------------------------------------------------
132// The following enumeration defines the constants used to select the play
133// mode for the card in the SelectPlayMode command.
134// ----------------------------------------------------------------------------
fcfd3332 135enum PlayModeSelector {
1da177e4
LT
136 K1212_MODE_SetupPlay = 0x00000001, // provides card with pre-play information
137 K1212_MODE_MonitorOn = 0x00000002, // tells card to turn on monitor mode
138 K1212_MODE_MonitorOff = 0x00000004, // tells card to turn off monitor mode
139 K1212_MODE_StopPlay = 0x00000008 // stops playback on the card
fcfd3332 140};
1da177e4
LT
141
142// ----------------------------------------------------------------------------
143// The following enumeration defines the constants used to select the monitor
144// mode for the card in the SetMonitorMode command.
145// ----------------------------------------------------------------------------
fcfd3332 146enum MonitorModeSelector {
1da177e4
LT
147 K1212_MONMODE_Off = 0, // tells card to turn off monitor mode
148 K1212_MONMODE_On // tells card to turn on monitor mode
fcfd3332 149};
1da177e4
LT
150
151#define MAILBOX0_OFFSET 0x40 // location of mailbox 0 relative to base address
152#define MAILBOX1_OFFSET 0x44 // location of mailbox 1 relative to base address
153#define MAILBOX2_OFFSET 0x48 // location of mailbox 2 relative to base address
154#define MAILBOX3_OFFSET 0x4c // location of mailbox 3 relative to base address
155#define OUT_DOORBELL_OFFSET 0x60 // location of PCI to local doorbell
156#define IN_DOORBELL_OFFSET 0x64 // location of local to PCI doorbell
157#define STATUS_REG_OFFSET 0x68 // location of interrupt control/status register
158#define PCI_CONTROL_OFFSET 0x6c // location of the EEPROM, PCI, User I/O, init control
159 // register
160#define SENS_CONTROL_OFFSET 0x6e // location of the input sensitivity setting register.
161 // this is the upper word of the PCI control reg.
162#define DEV_VEND_ID_OFFSET 0x70 // location of the device and vendor ID register
163
1da177e4
LT
164#define MAX_COMMAND_RETRIES 5 // maximum number of times the driver will attempt
165 // to send a command before giving up.
166#define COMMAND_ACK_MASK 0x8000 // the MSB is set in the command acknowledgment from
167 // the card.
168#define DOORBELL_VAL_MASK 0x00FF // the doorbell value is one byte
169
170#define CARD_BOOT_DELAY_IN_MS 10
171#define CARD_BOOT_TIMEOUT 10
172#define DSP_BOOT_DELAY_IN_MS 200
173
174#define kNumBuffers 8
175#define k1212MaxCards 4
176#define k1212NumWaveDevices 6
177#define k16BitChannels 10
178#define k32BitChannels 2
179#define kAudioChannels (k16BitChannels + k32BitChannels)
180#define kPlayBufferFrames 1024
181
182#define K1212_ANALOG_CHANNELS 2
183#define K1212_SPDIF_CHANNELS 2
184#define K1212_ADAT_CHANNELS 8
185#define K1212_CHANNELS (K1212_ADAT_CHANNELS + K1212_ANALOG_CHANNELS)
186#define K1212_MIN_CHANNELS 1
187#define K1212_MAX_CHANNELS K1212_CHANNELS
fcfd3332 188#define K1212_FRAME_SIZE (sizeof(struct KorgAudioFrame))
1da177e4
LT
189#define K1212_MAX_SAMPLES (kPlayBufferFrames*kNumBuffers)
190#define K1212_PERIODS (kNumBuffers)
191#define K1212_PERIOD_BYTES (K1212_FRAME_SIZE*kPlayBufferFrames)
192#define K1212_BUF_SIZE (K1212_PERIOD_BYTES*kNumBuffers)
193#define K1212_ANALOG_BUF_SIZE (K1212_ANALOG_CHANNELS * 2 * kPlayBufferFrames * kNumBuffers)
194#define K1212_SPDIF_BUF_SIZE (K1212_SPDIF_CHANNELS * 3 * kPlayBufferFrames * kNumBuffers)
195#define K1212_ADAT_BUF_SIZE (K1212_ADAT_CHANNELS * 2 * kPlayBufferFrames * kNumBuffers)
196#define K1212_MAX_BUF_SIZE (K1212_ANALOG_BUF_SIZE + K1212_ADAT_BUF_SIZE)
197
fbaf6a5a
TI
198#define k1212MinADCSens 0x00
199#define k1212MaxADCSens 0x7f
1da177e4
LT
200#define k1212MaxVolume 0x7fff
201#define k1212MaxWaveVolume 0xffff
202#define k1212MinVolume 0x0000
203#define k1212MaxVolInverted 0x8000
204
205// -----------------------------------------------------------------
206// the following bits are used for controlling interrupts in the
207// interrupt control/status reg
208// -----------------------------------------------------------------
209#define PCI_INT_ENABLE_BIT 0x00000100
210#define PCI_DOORBELL_INT_ENABLE_BIT 0x00000200
211#define LOCAL_INT_ENABLE_BIT 0x00010000
212#define LOCAL_DOORBELL_INT_ENABLE_BIT 0x00020000
213#define LOCAL_DMA1_INT_ENABLE_BIT 0x00080000
214
215// -----------------------------------------------------------------
216// the following bits are defined for the PCI command register
217// -----------------------------------------------------------------
218#define PCI_CMD_MEM_SPACE_ENABLE_BIT 0x0002
219#define PCI_CMD_IO_SPACE_ENABLE_BIT 0x0001
220#define PCI_CMD_BUS_MASTER_ENABLE_BIT 0x0004
221
222// -----------------------------------------------------------------
223// the following bits are defined for the PCI status register
224// -----------------------------------------------------------------
225#define PCI_STAT_PARITY_ERROR_BIT 0x8000
226#define PCI_STAT_SYSTEM_ERROR_BIT 0x4000
227#define PCI_STAT_MASTER_ABORT_RCVD_BIT 0x2000
228#define PCI_STAT_TARGET_ABORT_RCVD_BIT 0x1000
229#define PCI_STAT_TARGET_ABORT_SENT_BIT 0x0800
230
231// ------------------------------------------------------------------------
232// the following constants are used in setting the 1212 I/O card's input
233// sensitivity.
234// ------------------------------------------------------------------------
235#define SET_SENS_LOCALINIT_BITPOS 15
236#define SET_SENS_DATA_BITPOS 10
237#define SET_SENS_CLOCK_BITPOS 8
238#define SET_SENS_LOADSHIFT_BITPOS 0
239
240#define SET_SENS_LEFTCHANID 0x00
241#define SET_SENS_RIGHTCHANID 0x01
242
243#define K1212SENSUPDATE_DELAY_IN_MS 50
244
245// --------------------------------------------------------------------------
246// WaitRTCTicks
247//
248// This function waits the specified number of real time clock ticks.
249// According to the DDK, each tick is ~0.8 microseconds.
250// The defines following the function declaration can be used for the
251// numTicksToWait parameter.
252// --------------------------------------------------------------------------
253#define ONE_RTC_TICK 1
254#define SENSCLKPULSE_WIDTH 4
255#define LOADSHIFT_DELAY 4
256#define INTERCOMMAND_DELAY 40
257#define STOPCARD_DELAY 300 // max # RTC ticks for the card to stop once we write
258 // the command register. (could be up to 180 us)
259#define COMMAND_ACK_DELAY 13 // number of RTC ticks to wait for an acknowledgement
260 // from the card after sending a command.
261
fcfd3332 262enum ClockSourceIndex {
1da177e4
LT
263 K1212_CLKIDX_AdatAt44_1K = 0, // selects source as ADAT at 44.1 kHz
264 K1212_CLKIDX_AdatAt48K, // selects source as ADAT at 48 kHz
265 K1212_CLKIDX_WordAt44_1K, // selects source as S/PDIF at 44.1 kHz
266 K1212_CLKIDX_WordAt48K, // selects source as S/PDIF at 48 kHz
267 K1212_CLKIDX_LocalAt44_1K, // selects source as local clock at 44.1 kHz
268 K1212_CLKIDX_LocalAt48K, // selects source as local clock at 48 kHz
269 K1212_CLKIDX_Invalid // used to check validity of the index
fcfd3332 270};
1da177e4 271
fcfd3332 272enum ClockSourceType {
1da177e4
LT
273 K1212_CLKIDX_Adat = 0, // selects source as ADAT
274 K1212_CLKIDX_Word, // selects source as S/PDIF
275 K1212_CLKIDX_Local // selects source as local clock
fcfd3332 276};
1da177e4 277
fcfd3332
TI
278struct KorgAudioFrame {
279 u16 frameData16[k16BitChannels]; /* channels 0-9 use 16 bit samples */
280 u32 frameData32[k32BitChannels]; /* channels 10-11 use 32 bits - only 20 are sent across S/PDIF */
281 u32 timeCodeVal; /* holds the ADAT timecode value */
282};
1da177e4 283
fcfd3332
TI
284struct KorgAudioBuffer {
285 struct KorgAudioFrame bufferData[kPlayBufferFrames]; /* buffer definition */
286};
1da177e4 287
fcfd3332 288struct KorgSharedBuffer {
1da177e4 289#ifdef K1212_LARGEALLOC
fcfd3332
TI
290 struct KorgAudioBuffer playDataBufs[kNumBuffers];
291 struct KorgAudioBuffer recordDataBufs[kNumBuffers];
1da177e4
LT
292#endif
293 short volumeData[kAudioChannels];
294 u32 cardCommand;
295 u16 routeData [kAudioChannels];
296 u32 AdatTimeCode; // ADAT timecode value
fcfd3332 297};
1da177e4 298
fcfd3332 299struct SensBits {
1da177e4
LT
300 union {
301 struct {
302 unsigned int leftChanVal:8;
303 unsigned int leftChanId:8;
304 } v;
305 u16 leftSensBits;
306 } l;
307 union {
308 struct {
309 unsigned int rightChanVal:8;
310 unsigned int rightChanId:8;
311 } v;
312 u16 rightSensBits;
313 } r;
fcfd3332 314};
1da177e4 315
fcfd3332
TI
316struct snd_korg1212 {
317 struct snd_card *card;
1da177e4 318 struct pci_dev *pci;
fcfd3332 319 struct snd_pcm *pcm;
1da177e4
LT
320 int irq;
321
322 spinlock_t lock;
62932df8 323 struct mutex open_mutex;
1da177e4
LT
324
325 struct timer_list timer; /* timer callback for checking ack of stop request */
326 int stop_pending_cnt; /* counter for stop pending check */
327
328 wait_queue_head_t wait;
329
330 unsigned long iomem;
331 unsigned long ioport;
332 unsigned long iomem2;
333 unsigned long irqcount;
334 unsigned long inIRQ;
335 void __iomem *iobase;
336
337 struct snd_dma_buffer dma_dsp;
338 struct snd_dma_buffer dma_play;
339 struct snd_dma_buffer dma_rec;
340 struct snd_dma_buffer dma_shared;
341
1da177e4
LT
342 u32 DataBufsSize;
343
fcfd3332
TI
344 struct KorgAudioBuffer * playDataBufsPtr;
345 struct KorgAudioBuffer * recordDataBufsPtr;
1da177e4 346
fcfd3332 347 struct KorgSharedBuffer * sharedBufferPtr;
1da177e4
LT
348
349 u32 RecDataPhy;
350 u32 PlayDataPhy;
351 unsigned long sharedBufferPhy;
352 u32 VolumeTablePhy;
353 u32 RoutingTablePhy;
354 u32 AdatTimeCodePhy;
355
356 u32 __iomem * statusRegPtr; // address of the interrupt status/control register
357 u32 __iomem * outDoorbellPtr; // address of the host->card doorbell register
358 u32 __iomem * inDoorbellPtr; // address of the card->host doorbell register
359 u32 __iomem * mailbox0Ptr; // address of mailbox 0 on the card
360 u32 __iomem * mailbox1Ptr; // address of mailbox 1 on the card
361 u32 __iomem * mailbox2Ptr; // address of mailbox 2 on the card
362 u32 __iomem * mailbox3Ptr; // address of mailbox 3 on the card
363 u32 __iomem * controlRegPtr; // address of the EEPROM, PCI, I/O, Init ctrl reg
364 u16 __iomem * sensRegPtr; // address of the sensitivity setting register
365 u32 __iomem * idRegPtr; // address of the device and vendor ID registers
366
367 size_t periodsize;
368 int channels;
369 int currentBuffer;
370
fcfd3332
TI
371 struct snd_pcm_substream *playback_substream;
372 struct snd_pcm_substream *capture_substream;
1da177e4
LT
373
374 pid_t capture_pid;
375 pid_t playback_pid;
376
fcfd3332 377 enum CardState cardState;
1da177e4
LT
378 int running;
379 int idleMonitorOn; // indicates whether the card is in idle monitor mode.
380 u32 cmdRetryCount; // tracks how many times we have retried sending to the card.
381
fcfd3332 382 enum ClockSourceIndex clkSrcRate; // sample rate and clock source
1da177e4 383
fcfd3332 384 enum ClockSourceType clkSource; // clock source
1da177e4
LT
385 int clkRate; // clock rate
386
387 int volumePhase[kAudioChannels];
388
389 u16 leftADCInSens; // ADC left channel input sensitivity
390 u16 rightADCInSens; // ADC right channel input sensitivity
391
392 int opencnt; // Open/Close count
393 int setcnt; // SetupForPlay count
394 int playcnt; // TriggerPlay count
395 int errorcnt; // Error Count
396 unsigned long totalerrorcnt; // Total Error Count
397
398 int dsp_is_loaded;
399 int dsp_stop_is_processed;
400
401};
402
403MODULE_DESCRIPTION("korg1212");
404MODULE_LICENSE("GPL");
405MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");
7e0af29d 406MODULE_FIRMWARE("korg/k1212.dsp");
1da177e4
LT
407
408static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
409static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
a67ff6a5 410static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */
1da177e4
LT
411
412module_param_array(index, int, NULL, 0444);
413MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard.");
414module_param_array(id, charp, NULL, 0444);
415MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard.");
416module_param_array(enable, bool, NULL, 0444);
417MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
418MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
419
9baa3c34 420static const struct pci_device_id snd_korg1212_ids[] = {
1da177e4
LT
421 {
422 .vendor = 0x10b5,
423 .device = 0x906d,
424 .subvendor = PCI_ANY_ID,
425 .subdevice = PCI_ANY_ID,
426 },
427 { 0, },
428};
429
fcfd3332
TI
430MODULE_DEVICE_TABLE(pci, snd_korg1212_ids);
431
9fd9156c
TI
432static char *stateName[] = {
433 "Non-existent",
434 "Uninitialized",
435 "DSP download in process",
436 "DSP download complete",
437 "Ready",
438 "Open",
439 "Setup for play",
440 "Playing",
441 "Monitor mode on",
442 "Calibrating",
443 "Invalid"
1da177e4
LT
444};
445
f861237c 446static const char * const clockSourceTypeName[] = { "ADAT", "S/PDIF", "local" };
1da177e4 447
f861237c 448static const char * const clockSourceName[] = {
9fd9156c
TI
449 "ADAT at 44.1 kHz",
450 "ADAT at 48 kHz",
451 "S/PDIF at 44.1 kHz",
452 "S/PDIF at 48 kHz",
453 "local clock at 44.1 kHz",
454 "local clock at 48 kHz"
1da177e4
LT
455};
456
f861237c 457static const char * const channelName[] = {
9fd9156c
TI
458 "ADAT-1",
459 "ADAT-2",
460 "ADAT-3",
461 "ADAT-4",
462 "ADAT-5",
463 "ADAT-6",
464 "ADAT-7",
465 "ADAT-8",
466 "Analog-L",
467 "Analog-R",
468 "SPDIF-L",
469 "SPDIF-R",
1da177e4
LT
470};
471
9fd9156c
TI
472static u16 ClockSourceSelector[] = {
473 0x8000, // selects source as ADAT at 44.1 kHz
474 0x0000, // selects source as ADAT at 48 kHz
475 0x8001, // selects source as S/PDIF at 44.1 kHz
476 0x0001, // selects source as S/PDIF at 48 kHz
477 0x8002, // selects source as local clock at 44.1 kHz
478 0x0002 // selects source as local clock at 48 kHz
479};
1da177e4 480
fcfd3332 481union swap_u32 { unsigned char c[4]; u32 i; };
1da177e4
LT
482
483#ifdef SNDRV_BIG_ENDIAN
484static u32 LowerWordSwap(u32 swappee)
485#else
486static u32 UpperWordSwap(u32 swappee)
487#endif
488{
fcfd3332 489 union swap_u32 retVal, swapper;
1da177e4
LT
490
491 swapper.i = swappee;
492 retVal.c[2] = swapper.c[3];
493 retVal.c[3] = swapper.c[2];
494 retVal.c[1] = swapper.c[1];
495 retVal.c[0] = swapper.c[0];
496
497 return retVal.i;
498}
499
500#ifdef SNDRV_BIG_ENDIAN
501static u32 UpperWordSwap(u32 swappee)
502#else
503static u32 LowerWordSwap(u32 swappee)
504#endif
505{
fcfd3332 506 union swap_u32 retVal, swapper;
1da177e4
LT
507
508 swapper.i = swappee;
509 retVal.c[2] = swapper.c[2];
510 retVal.c[3] = swapper.c[3];
511 retVal.c[1] = swapper.c[0];
512 retVal.c[0] = swapper.c[1];
513
514 return retVal.i;
515}
516
1da177e4
LT
517#define SetBitInWord(theWord,bitPosition) (*theWord) |= (0x0001 << bitPosition)
518#define SetBitInDWord(theWord,bitPosition) (*theWord) |= (0x00000001 << bitPosition)
519#define ClearBitInWord(theWord,bitPosition) (*theWord) &= ~(0x0001 << bitPosition)
520#define ClearBitInDWord(theWord,bitPosition) (*theWord) &= ~(0x00000001 << bitPosition)
521
fcfd3332
TI
522static int snd_korg1212_Send1212Command(struct snd_korg1212 *korg1212,
523 enum korg1212_dbcnst doorbellVal,
524 u32 mailBox0Val, u32 mailBox1Val,
525 u32 mailBox2Val, u32 mailBox3Val)
1da177e4
LT
526{
527 u32 retryCount;
528 u16 mailBox3Lo;
fcfd3332 529 int rc = K1212_CMDRET_Success;
1da177e4
LT
530
531 if (!korg1212->outDoorbellPtr) {
9fd9156c 532 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: CardUninitialized\n");
1da177e4
LT
533 return K1212_CMDRET_CardUninitialized;
534 }
535
9fd9156c
TI
536 K1212_DEBUG_PRINTK("K1212_DEBUG: Card <- 0x%08x 0x%08x [%s]\n",
537 doorbellVal, mailBox0Val, stateName[korg1212->cardState]);
1da177e4
LT
538 for (retryCount = 0; retryCount < MAX_COMMAND_RETRIES; retryCount++) {
539 writel(mailBox3Val, korg1212->mailbox3Ptr);
540 writel(mailBox2Val, korg1212->mailbox2Ptr);
541 writel(mailBox1Val, korg1212->mailbox1Ptr);
542 writel(mailBox0Val, korg1212->mailbox0Ptr);
543 writel(doorbellVal, korg1212->outDoorbellPtr); // interrupt the card
544
545 // --------------------------------------------------------------
546 // the reboot command will not give an acknowledgement.
547 // --------------------------------------------------------------
548 if ( doorbellVal == K1212_DB_RebootCard ||
549 doorbellVal == K1212_DB_BootFromDSPPage4 ||
550 doorbellVal == K1212_DB_StartDSPDownload ) {
551 rc = K1212_CMDRET_Success;
552 break;
553 }
554
555 // --------------------------------------------------------------
556 // See if the card acknowledged the command. Wait a bit, then
557 // read in the low word of mailbox3. If the MSB is set and the
558 // low byte is equal to the doorbell value, then it ack'd.
559 // --------------------------------------------------------------
560 udelay(COMMAND_ACK_DELAY);
561 mailBox3Lo = readl(korg1212->mailbox3Ptr);
562 if (mailBox3Lo & COMMAND_ACK_MASK) {
563 if ((mailBox3Lo & DOORBELL_VAL_MASK) == (doorbellVal & DOORBELL_VAL_MASK)) {
9fd9156c 564 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- Success\n");
1da177e4
LT
565 rc = K1212_CMDRET_Success;
566 break;
567 }
568 }
569 }
570 korg1212->cmdRetryCount += retryCount;
571
572 if (retryCount >= MAX_COMMAND_RETRIES) {
9fd9156c 573 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Card <- NoAckFromCard\n");
1da177e4
LT
574 rc = K1212_CMDRET_NoAckFromCard;
575 }
576
577 return rc;
578}
579
580/* spinlock already held */
fcfd3332 581static void snd_korg1212_SendStop(struct snd_korg1212 *korg1212)
1da177e4
LT
582{
583 if (! korg1212->stop_pending_cnt) {
584 korg1212->sharedBufferPtr->cardCommand = 0xffffffff;
585 /* program the timer */
586 korg1212->stop_pending_cnt = HZ;
3d6f0e0c 587 mod_timer(&korg1212->timer, jiffies + 1);
1da177e4
LT
588 }
589}
590
fcfd3332 591static void snd_korg1212_SendStopAndWait(struct snd_korg1212 *korg1212)
1da177e4
LT
592{
593 unsigned long flags;
594 spin_lock_irqsave(&korg1212->lock, flags);
595 korg1212->dsp_stop_is_processed = 0;
596 snd_korg1212_SendStop(korg1212);
597 spin_unlock_irqrestore(&korg1212->lock, flags);
598 wait_event_timeout(korg1212->wait, korg1212->dsp_stop_is_processed, (HZ * 3) / 2);
599}
600
601/* timer callback for checking the ack of stop request */
602static void snd_korg1212_timer_func(unsigned long data)
603{
fcfd3332 604 struct snd_korg1212 *korg1212 = (struct snd_korg1212 *) data;
b32425ac 605 unsigned long flags;
1da177e4 606
b32425ac 607 spin_lock_irqsave(&korg1212->lock, flags);
1da177e4
LT
608 if (korg1212->sharedBufferPtr->cardCommand == 0) {
609 /* ack'ed */
610 korg1212->stop_pending_cnt = 0;
611 korg1212->dsp_stop_is_processed = 1;
612 wake_up(&korg1212->wait);
9fd9156c
TI
613 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: Stop ack'ed [%s]\n",
614 stateName[korg1212->cardState]);
1da177e4
LT
615 } else {
616 if (--korg1212->stop_pending_cnt > 0) {
617 /* reprogram timer */
3d6f0e0c 618 mod_timer(&korg1212->timer, jiffies + 1);
1da177e4
LT
619 } else {
620 snd_printd("korg1212_timer_func timeout\n");
621 korg1212->sharedBufferPtr->cardCommand = 0;
622 korg1212->dsp_stop_is_processed = 1;
623 wake_up(&korg1212->wait);
9fd9156c
TI
624 K1212_DEBUG_PRINTK("K1212_DEBUG: Stop timeout [%s]\n",
625 stateName[korg1212->cardState]);
1da177e4
LT
626 }
627 }
b32425ac 628 spin_unlock_irqrestore(&korg1212->lock, flags);
1da177e4
LT
629}
630
fcfd3332 631static int snd_korg1212_TurnOnIdleMonitor(struct snd_korg1212 *korg1212)
1da177e4
LT
632{
633 unsigned long flags;
9fd9156c 634 int rc;
1da177e4
LT
635
636 udelay(INTERCOMMAND_DELAY);
637 spin_lock_irqsave(&korg1212->lock, flags);
638 korg1212->idleMonitorOn = 1;
639 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
640 K1212_MODE_MonitorOn, 0, 0, 0);
641 spin_unlock_irqrestore(&korg1212->lock, flags);
9fd9156c 642 return rc;
1da177e4
LT
643}
644
fcfd3332 645static void snd_korg1212_TurnOffIdleMonitor(struct snd_korg1212 *korg1212)
1da177e4
LT
646{
647 if (korg1212->idleMonitorOn) {
648 snd_korg1212_SendStopAndWait(korg1212);
649 korg1212->idleMonitorOn = 0;
650 }
651}
652
fcfd3332 653static inline void snd_korg1212_setCardState(struct snd_korg1212 * korg1212, enum CardState csState)
1da177e4
LT
654{
655 korg1212->cardState = csState;
656}
657
fcfd3332 658static int snd_korg1212_OpenCard(struct snd_korg1212 * korg1212)
1da177e4 659{
9fd9156c
TI
660 K1212_DEBUG_PRINTK("K1212_DEBUG: OpenCard [%s] %d\n",
661 stateName[korg1212->cardState], korg1212->opencnt);
62932df8 662 mutex_lock(&korg1212->open_mutex);
1da177e4
LT
663 if (korg1212->opencnt++ == 0) {
664 snd_korg1212_TurnOffIdleMonitor(korg1212);
665 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
666 }
667
62932df8 668 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
669 return 1;
670}
671
fcfd3332 672static int snd_korg1212_CloseCard(struct snd_korg1212 * korg1212)
1da177e4 673{
9fd9156c
TI
674 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard [%s] %d\n",
675 stateName[korg1212->cardState], korg1212->opencnt);
1da177e4 676
62932df8 677 mutex_lock(&korg1212->open_mutex);
1da177e4 678 if (--(korg1212->opencnt)) {
62932df8 679 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
680 return 0;
681 }
682
683 if (korg1212->cardState == K1212_STATE_SETUP) {
9fd9156c 684 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
1da177e4 685 K1212_MODE_StopPlay, 0, 0, 0);
9fd9156c
TI
686 if (rc)
687 K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard - RC = %d [%s]\n",
688 rc, stateName[korg1212->cardState]);
1da177e4 689 if (rc != K1212_CMDRET_Success) {
62932df8 690 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
691 return 0;
692 }
693 } else if (korg1212->cardState > K1212_STATE_SETUP) {
694 snd_korg1212_SendStopAndWait(korg1212);
695 }
696
697 if (korg1212->cardState > K1212_STATE_READY) {
698 snd_korg1212_TurnOnIdleMonitor(korg1212);
699 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
700 }
701
62932df8 702 mutex_unlock(&korg1212->open_mutex);
1da177e4
LT
703 return 0;
704}
705
706/* spinlock already held */
fcfd3332 707static int snd_korg1212_SetupForPlay(struct snd_korg1212 * korg1212)
1da177e4 708{
9fd9156c
TI
709 int rc;
710
711 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay [%s] %d\n",
712 stateName[korg1212->cardState], korg1212->setcnt);
1da177e4
LT
713
714 if (korg1212->setcnt++)
715 return 0;
716
717 snd_korg1212_setCardState(korg1212, K1212_STATE_SETUP);
718 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
719 K1212_MODE_SetupPlay, 0, 0, 0);
9fd9156c
TI
720 if (rc)
721 K1212_DEBUG_PRINTK("K1212_DEBUG: SetupForPlay - RC = %d [%s]\n",
722 rc, stateName[korg1212->cardState]);
1da177e4
LT
723 if (rc != K1212_CMDRET_Success) {
724 return 1;
725 }
726 return 0;
727}
728
729/* spinlock already held */
fcfd3332 730static int snd_korg1212_TriggerPlay(struct snd_korg1212 * korg1212)
1da177e4 731{
9fd9156c
TI
732 int rc;
733
734 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay [%s] %d\n",
735 stateName[korg1212->cardState], korg1212->playcnt);
1da177e4
LT
736
737 if (korg1212->playcnt++)
738 return 0;
739
740 snd_korg1212_setCardState(korg1212, K1212_STATE_PLAYING);
741 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_TriggerPlay, 0, 0, 0, 0);
9fd9156c
TI
742 if (rc)
743 K1212_DEBUG_PRINTK("K1212_DEBUG: TriggerPlay - RC = %d [%s]\n",
744 rc, stateName[korg1212->cardState]);
1da177e4
LT
745 if (rc != K1212_CMDRET_Success) {
746 return 1;
747 }
748 return 0;
749}
750
751/* spinlock already held */
fcfd3332 752static int snd_korg1212_StopPlay(struct snd_korg1212 * korg1212)
1da177e4 753{
9fd9156c
TI
754 K1212_DEBUG_PRINTK("K1212_DEBUG: StopPlay [%s] %d\n",
755 stateName[korg1212->cardState], korg1212->playcnt);
1da177e4
LT
756
757 if (--(korg1212->playcnt))
758 return 0;
759
760 korg1212->setcnt = 0;
761
762 if (korg1212->cardState != K1212_STATE_ERRORSTOP)
763 snd_korg1212_SendStop(korg1212);
764
765 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
766 return 0;
767}
768
fcfd3332 769static void snd_korg1212_EnableCardInterrupts(struct snd_korg1212 * korg1212)
1da177e4
LT
770{
771 writel(PCI_INT_ENABLE_BIT |
772 PCI_DOORBELL_INT_ENABLE_BIT |
773 LOCAL_INT_ENABLE_BIT |
774 LOCAL_DOORBELL_INT_ENABLE_BIT |
775 LOCAL_DMA1_INT_ENABLE_BIT,
776 korg1212->statusRegPtr);
777}
778
779#if 0 /* not used */
780
fcfd3332
TI
781static int snd_korg1212_SetMonitorMode(struct snd_korg1212 *korg1212,
782 enum MonitorModeSelector mode)
1da177e4 783{
9fd9156c
TI
784 K1212_DEBUG_PRINTK("K1212_DEBUG: SetMonitorMode [%s]\n",
785 stateName[korg1212->cardState]);
1da177e4
LT
786
787 switch (mode) {
9fd9156c
TI
788 case K1212_MONMODE_Off:
789 if (korg1212->cardState != K1212_STATE_MONITOR)
790 return 0;
791 else {
792 snd_korg1212_SendStopAndWait(korg1212);
793 snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN);
794 }
795 break;
796
797 case K1212_MONMODE_On:
798 if (korg1212->cardState != K1212_STATE_OPEN)
799 return 0;
800 else {
801 int rc;
802 snd_korg1212_setCardState(korg1212, K1212_STATE_MONITOR);
803 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
804 K1212_MODE_MonitorOn, 0, 0, 0);
805 if (rc != K1212_CMDRET_Success)
806 return 0;
807 }
808 break;
1da177e4 809
9fd9156c
TI
810 default:
811 return 0;
1da177e4
LT
812 }
813
814 return 1;
815}
816
817#endif /* not used */
818
fcfd3332 819static inline int snd_korg1212_use_is_exclusive(struct snd_korg1212 *korg1212)
1da177e4 820{
9fd9156c
TI
821 if (korg1212->playback_pid != korg1212->capture_pid &&
822 korg1212->playback_pid >= 0 && korg1212->capture_pid >= 0)
823 return 0;
1da177e4 824
9fd9156c 825 return 1;
1da177e4
LT
826}
827
fcfd3332 828static int snd_korg1212_SetRate(struct snd_korg1212 *korg1212, int rate)
1da177e4 829{
fcfd3332 830 static enum ClockSourceIndex s44[] = {
9fd9156c
TI
831 K1212_CLKIDX_AdatAt44_1K,
832 K1212_CLKIDX_WordAt44_1K,
833 K1212_CLKIDX_LocalAt44_1K
834 };
fcfd3332 835 static enum ClockSourceIndex s48[] = {
9fd9156c
TI
836 K1212_CLKIDX_AdatAt48K,
837 K1212_CLKIDX_WordAt48K,
838 K1212_CLKIDX_LocalAt48K
839 };
840 int parm, rc;
1da177e4 841
9fd9156c
TI
842 if (!snd_korg1212_use_is_exclusive (korg1212))
843 return -EBUSY;
1da177e4 844
fcfd3332 845 switch (rate) {
9fd9156c
TI
846 case 44100:
847 parm = s44[korg1212->clkSource];
848 break;
1da177e4 849
9fd9156c
TI
850 case 48000:
851 parm = s48[korg1212->clkSource];
852 break;
1da177e4 853
9fd9156c
TI
854 default:
855 return -EINVAL;
856 }
1da177e4
LT
857
858 korg1212->clkSrcRate = parm;
859 korg1212->clkRate = rate;
860
861 udelay(INTERCOMMAND_DELAY);
862 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
863 ClockSourceSelector[korg1212->clkSrcRate],
864 0, 0, 0);
9fd9156c
TI
865 if (rc)
866 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
867 rc, stateName[korg1212->cardState]);
1da177e4
LT
868
869 return 0;
870}
871
fcfd3332 872static int snd_korg1212_SetClockSource(struct snd_korg1212 *korg1212, int source)
1da177e4
LT
873{
874
9fd9156c
TI
875 if (source < 0 || source > 2)
876 return -EINVAL;
1da177e4
LT
877
878 korg1212->clkSource = source;
879
880 snd_korg1212_SetRate(korg1212, korg1212->clkRate);
881
882 return 0;
883}
884
fcfd3332 885static void snd_korg1212_DisableCardInterrupts(struct snd_korg1212 *korg1212)
1da177e4
LT
886{
887 writel(0, korg1212->statusRegPtr);
888}
889
fcfd3332 890static int snd_korg1212_WriteADCSensitivity(struct snd_korg1212 *korg1212)
1da177e4 891{
fcfd3332 892 struct SensBits sensVals;
1da177e4
LT
893 int bitPosition;
894 int channel;
895 int clkIs48K;
896 int monModeSet;
897 u16 controlValue; // this keeps the current value to be written to
898 // the card's eeprom control register.
899 u16 count;
900 unsigned long flags;
901
9fd9156c
TI
902 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity [%s]\n",
903 stateName[korg1212->cardState]);
1da177e4
LT
904
905 // ----------------------------------------------------------------------------
906 // initialize things. The local init bit is always set when writing to the
907 // card's control register.
908 // ----------------------------------------------------------------------------
909 controlValue = 0;
910 SetBitInWord(&controlValue, SET_SENS_LOCALINIT_BITPOS); // init the control value
911
912 // ----------------------------------------------------------------------------
913 // make sure the card is not in monitor mode when we do this update.
914 // ----------------------------------------------------------------------------
915 if (korg1212->cardState == K1212_STATE_MONITOR || korg1212->idleMonitorOn) {
916 monModeSet = 1;
917 snd_korg1212_SendStopAndWait(korg1212);
918 } else
919 monModeSet = 0;
920
921 spin_lock_irqsave(&korg1212->lock, flags);
922
923 // ----------------------------------------------------------------------------
924 // we are about to send new values to the card, so clear the new values queued
925 // flag. Also, clear out mailbox 3, so we don't lockup.
926 // ----------------------------------------------------------------------------
927 writel(0, korg1212->mailbox3Ptr);
928 udelay(LOADSHIFT_DELAY);
929
930 // ----------------------------------------------------------------------------
931 // determine whether we are running a 48K or 44.1K clock. This info is used
932 // later when setting the SPDIF FF after the volume has been shifted in.
933 // ----------------------------------------------------------------------------
934 switch (korg1212->clkSrcRate) {
935 case K1212_CLKIDX_AdatAt44_1K:
936 case K1212_CLKIDX_WordAt44_1K:
937 case K1212_CLKIDX_LocalAt44_1K:
938 clkIs48K = 0;
939 break;
940
941 case K1212_CLKIDX_WordAt48K:
942 case K1212_CLKIDX_AdatAt48K:
943 case K1212_CLKIDX_LocalAt48K:
944 default:
945 clkIs48K = 1;
946 break;
947 }
948
949 // ----------------------------------------------------------------------------
950 // start the update. Setup the bit structure and then shift the bits.
951 // ----------------------------------------------------------------------------
952 sensVals.l.v.leftChanId = SET_SENS_LEFTCHANID;
953 sensVals.r.v.rightChanId = SET_SENS_RIGHTCHANID;
954 sensVals.l.v.leftChanVal = korg1212->leftADCInSens;
955 sensVals.r.v.rightChanVal = korg1212->rightADCInSens;
956
957 // ----------------------------------------------------------------------------
958 // now start shifting the bits in. Start with the left channel then the right.
959 // ----------------------------------------------------------------------------
960 for (channel = 0; channel < 2; channel++) {
961
962 // ----------------------------------------------------------------------------
963 // Bring the load/shift line low, then wait - the spec says >150ns from load/
964 // shift low to the first rising edge of the clock.
965 // ----------------------------------------------------------------------------
966 ClearBitInWord(&controlValue, SET_SENS_LOADSHIFT_BITPOS);
967 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
968 writew(controlValue, korg1212->sensRegPtr); // load/shift goes low
969 udelay(LOADSHIFT_DELAY);
970
971 for (bitPosition = 15; bitPosition >= 0; bitPosition--) { // for all the bits
9fd9156c
TI
972 if (channel == 0) {
973 if (sensVals.l.leftSensBits & (0x0001 << bitPosition))
fcfd3332 974 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set high
9fd9156c
TI
975 else
976 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set low
977 } else {
978 if (sensVals.r.rightSensBits & (0x0001 << bitPosition))
979 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set high
980 else
981 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS); // data bit set low
982 }
1da177e4
LT
983
984 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
985 writew(controlValue, korg1212->sensRegPtr); // clock goes low
986 udelay(SENSCLKPULSE_WIDTH);
987 SetBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
988 writew(controlValue, korg1212->sensRegPtr); // clock goes high
989 udelay(SENSCLKPULSE_WIDTH);
990 }
991
992 // ----------------------------------------------------------------------------
993 // finish up SPDIF for left. Bring the load/shift line high, then write a one
994 // bit if the clock rate is 48K otherwise write 0.
995 // ----------------------------------------------------------------------------
996 ClearBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
997 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
998 SetBitInWord(&controlValue, SET_SENS_LOADSHIFT_BITPOS);
999 writew(controlValue, korg1212->sensRegPtr); // load shift goes high - clk low
1000 udelay(SENSCLKPULSE_WIDTH);
1001
1002 if (clkIs48K)
1003 SetBitInWord(&controlValue, SET_SENS_DATA_BITPOS);
1004
1005 writew(controlValue, korg1212->sensRegPtr); // set/clear data bit
1006 udelay(ONE_RTC_TICK);
1007 SetBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
1008 writew(controlValue, korg1212->sensRegPtr); // clock goes high
1009 udelay(SENSCLKPULSE_WIDTH);
1010 ClearBitInWord(&controlValue, SET_SENS_CLOCK_BITPOS);
1011 writew(controlValue, korg1212->sensRegPtr); // clock goes low
1012 udelay(SENSCLKPULSE_WIDTH);
1013 }
1014
1015 // ----------------------------------------------------------------------------
1016 // The update is complete. Set a timeout. This is the inter-update delay.
1017 // Also, if the card was in monitor mode, restore it.
1018 // ----------------------------------------------------------------------------
1019 for (count = 0; count < 10; count++)
1020 udelay(SENSCLKPULSE_WIDTH);
1021
1022 if (monModeSet) {
fcfd3332 1023 int rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode,
1da177e4 1024 K1212_MODE_MonitorOn, 0, 0, 0);
9fd9156c
TI
1025 if (rc)
1026 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity - RC = %d [%s]\n",
1027 rc, stateName[korg1212->cardState]);
1da177e4
LT
1028 }
1029
1030 spin_unlock_irqrestore(&korg1212->lock, flags);
1031
1032 return 1;
1033}
1034
fcfd3332 1035static void snd_korg1212_OnDSPDownloadComplete(struct snd_korg1212 *korg1212)
1da177e4 1036{
fcfd3332 1037 int channel, rc;
1da177e4 1038
9fd9156c
TI
1039 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is complete. [%s]\n",
1040 stateName[korg1212->cardState]);
1da177e4
LT
1041
1042 // ----------------------------------------------------
1043 // tell the card to boot
1044 // ----------------------------------------------------
1045 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_BootFromDSPPage4, 0, 0, 0, 0);
1046
9fd9156c
TI
1047 if (rc)
1048 K1212_DEBUG_PRINTK("K1212_DEBUG: Boot from Page 4 - RC = %d [%s]\n",
1049 rc, stateName[korg1212->cardState]);
1050 msleep(DSP_BOOT_DELAY_IN_MS);
1da177e4
LT
1051
1052 // --------------------------------------------------------------------------------
1053 // Let the card know where all the buffers are.
1054 // --------------------------------------------------------------------------------
1055 rc = snd_korg1212_Send1212Command(korg1212,
1056 K1212_DB_ConfigureBufferMemory,
1057 LowerWordSwap(korg1212->PlayDataPhy),
1058 LowerWordSwap(korg1212->RecDataPhy),
1059 ((kNumBuffers * kPlayBufferFrames) / 2), // size given to the card
1060 // is based on 2 buffers
1061 0
1062 );
1063
9fd9156c
TI
1064 if (rc)
1065 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Buffer Memory - RC = %d [%s]\n",
1066 rc, stateName[korg1212->cardState]);
1da177e4
LT
1067
1068 udelay(INTERCOMMAND_DELAY);
1069
1070 rc = snd_korg1212_Send1212Command(korg1212,
1071 K1212_DB_ConfigureMiscMemory,
1072 LowerWordSwap(korg1212->VolumeTablePhy),
1073 LowerWordSwap(korg1212->RoutingTablePhy),
1074 LowerWordSwap(korg1212->AdatTimeCodePhy),
1075 0
1076 );
1077
9fd9156c
TI
1078 if (rc)
1079 K1212_DEBUG_PRINTK("K1212_DEBUG: Configure Misc Memory - RC = %d [%s]\n",
1080 rc, stateName[korg1212->cardState]);
1da177e4
LT
1081
1082 // --------------------------------------------------------------------------------
1083 // Initialize the routing and volume tables, then update the card's state.
1084 // --------------------------------------------------------------------------------
1085 udelay(INTERCOMMAND_DELAY);
1086
1087 for (channel = 0; channel < kAudioChannels; channel++) {
1088 korg1212->sharedBufferPtr->volumeData[channel] = k1212MaxVolume;
1089 //korg1212->sharedBufferPtr->routeData[channel] = channel;
1090 korg1212->sharedBufferPtr->routeData[channel] = 8 + (channel & 1);
1091 }
1092
1093 snd_korg1212_WriteADCSensitivity(korg1212);
1094
1095 udelay(INTERCOMMAND_DELAY);
1096 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SetClockSourceRate,
1097 ClockSourceSelector[korg1212->clkSrcRate],
1098 0, 0, 0);
9fd9156c
TI
1099 if (rc)
1100 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n",
1101 rc, stateName[korg1212->cardState]);
1da177e4 1102
9fd9156c 1103 rc = snd_korg1212_TurnOnIdleMonitor(korg1212);
1da177e4
LT
1104 snd_korg1212_setCardState(korg1212, K1212_STATE_READY);
1105
9fd9156c
TI
1106 if (rc)
1107 K1212_DEBUG_PRINTK("K1212_DEBUG: Set Monitor On - RC = %d [%s]\n",
1108 rc, stateName[korg1212->cardState]);
1da177e4
LT
1109
1110 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE);
1111}
1112
7d12e780 1113static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id)
1da177e4
LT
1114{
1115 u32 doorbellValue;
fcfd3332 1116 struct snd_korg1212 *korg1212 = dev_id;
1da177e4 1117
1da177e4
LT
1118 doorbellValue = readl(korg1212->inDoorbellPtr);
1119
1120 if (!doorbellValue)
1121 return IRQ_NONE;
1122
1123 spin_lock(&korg1212->lock);
1124
1125 writel(doorbellValue, korg1212->inDoorbellPtr);
1126
1127 korg1212->irqcount++;
1128
1129 korg1212->inIRQ++;
1130
1da177e4
LT
1131 switch (doorbellValue) {
1132 case K1212_DB_DSPDownloadDone:
9fd9156c
TI
1133 K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n",
1134 korg1212->irqcount, doorbellValue,
1135 stateName[korg1212->cardState]);
1da177e4
LT
1136 if (korg1212->cardState == K1212_STATE_DSP_IN_PROCESS) {
1137 korg1212->dsp_is_loaded = 1;
1138 wake_up(&korg1212->wait);
1139 }
1140 break;
1141
1142 // ------------------------------------------------------------------------
1143 // an error occurred - stop the card
1144 // ------------------------------------------------------------------------
1145 case K1212_DB_DMAERROR:
9fd9156c
TI
1146 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ DMAE count - %ld, %x, [%s].\n",
1147 korg1212->irqcount, doorbellValue,
1148 stateName[korg1212->cardState]);
1149 snd_printk(KERN_ERR "korg1212: DMA Error\n");
1da177e4
LT
1150 korg1212->errorcnt++;
1151 korg1212->totalerrorcnt++;
1152 korg1212->sharedBufferPtr->cardCommand = 0;
1153 snd_korg1212_setCardState(korg1212, K1212_STATE_ERRORSTOP);
1154 break;
1155
1156 // ------------------------------------------------------------------------
1157 // the card has stopped by our request. Clear the command word and signal
1158 // the semaphore in case someone is waiting for this.
1159 // ------------------------------------------------------------------------
1160 case K1212_DB_CARDSTOPPED:
fcfd3332 1161 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ CSTP count - %ld, %x, [%s].\n",
9fd9156c
TI
1162 korg1212->irqcount, doorbellValue,
1163 stateName[korg1212->cardState]);
1da177e4
LT
1164 korg1212->sharedBufferPtr->cardCommand = 0;
1165 break;
1166
1167 default:
9fd9156c 1168 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: IRQ DFLT count - %ld, %x, cpos=%d [%s].\n",
fcfd3332
TI
1169 korg1212->irqcount, doorbellValue,
1170 korg1212->currentBuffer, stateName[korg1212->cardState]);
1da177e4
LT
1171 if ((korg1212->cardState > K1212_STATE_SETUP) || korg1212->idleMonitorOn) {
1172 korg1212->currentBuffer++;
1173
1174 if (korg1212->currentBuffer >= kNumBuffers)
1175 korg1212->currentBuffer = 0;
1176
1177 if (!korg1212->running)
1178 break;
1179
1180 if (korg1212->capture_substream) {
1181 spin_unlock(&korg1212->lock);
1182 snd_pcm_period_elapsed(korg1212->capture_substream);
1183 spin_lock(&korg1212->lock);
1184 }
1185
1186 if (korg1212->playback_substream) {
1187 spin_unlock(&korg1212->lock);
1188 snd_pcm_period_elapsed(korg1212->playback_substream);
1189 spin_lock(&korg1212->lock);
1190 }
1191 }
1192 break;
1193 }
1194
1195 korg1212->inIRQ--;
1196
1197 spin_unlock(&korg1212->lock);
1198
1199 return IRQ_HANDLED;
1200}
1201
fcfd3332 1202static int snd_korg1212_downloadDSPCode(struct snd_korg1212 *korg1212)
1da177e4 1203{
fcfd3332 1204 int rc;
1da177e4 1205
9fd9156c
TI
1206 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP download is starting... [%s]\n",
1207 stateName[korg1212->cardState]);
1da177e4
LT
1208
1209 // ---------------------------------------------------------------
1210 // verify the state of the card before proceeding.
1211 // ---------------------------------------------------------------
9fd9156c 1212 if (korg1212->cardState >= K1212_STATE_DSP_IN_PROCESS)
1da177e4 1213 return 1;
1da177e4
LT
1214
1215 snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_IN_PROCESS);
1216
1da177e4
LT
1217 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_StartDSPDownload,
1218 UpperWordSwap(korg1212->dma_dsp.addr),
1219 0, 0, 0);
9fd9156c
TI
1220 if (rc)
1221 K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n",
1222 rc, stateName[korg1212->cardState]);
1da177e4
LT
1223
1224 korg1212->dsp_is_loaded = 0;
1225 wait_event_timeout(korg1212->wait, korg1212->dsp_is_loaded, HZ * CARD_BOOT_TIMEOUT);
1226 if (! korg1212->dsp_is_loaded )
1227 return -EBUSY; /* timeout */
1228
1229 snd_korg1212_OnDSPDownloadComplete(korg1212);
1230
1231 return 0;
1232}
1233
fcfd3332 1234static struct snd_pcm_hardware snd_korg1212_playback_info =
1da177e4
LT
1235{
1236 .info = (SNDRV_PCM_INFO_MMAP |
1237 SNDRV_PCM_INFO_MMAP_VALID |
2008f137
TI
1238 SNDRV_PCM_INFO_INTERLEAVED |
1239 SNDRV_PCM_INFO_BATCH),
1da177e4
LT
1240 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1241 .rates = (SNDRV_PCM_RATE_44100 |
1242 SNDRV_PCM_RATE_48000),
1243 .rate_min = 44100,
1244 .rate_max = 48000,
1245 .channels_min = K1212_MIN_CHANNELS,
1246 .channels_max = K1212_MAX_CHANNELS,
1247 .buffer_bytes_max = K1212_MAX_BUF_SIZE,
1248 .period_bytes_min = K1212_MIN_CHANNELS * 2 * kPlayBufferFrames,
1249 .period_bytes_max = K1212_MAX_CHANNELS * 2 * kPlayBufferFrames,
1250 .periods_min = K1212_PERIODS,
1251 .periods_max = K1212_PERIODS,
1252 .fifo_size = 0,
1253};
1254
fcfd3332 1255static struct snd_pcm_hardware snd_korg1212_capture_info =
1da177e4
LT
1256{
1257 .info = (SNDRV_PCM_INFO_MMAP |
1258 SNDRV_PCM_INFO_MMAP_VALID |
2008f137
TI
1259 SNDRV_PCM_INFO_INTERLEAVED |
1260 SNDRV_PCM_INFO_BATCH),
1da177e4
LT
1261 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1262 .rates = (SNDRV_PCM_RATE_44100 |
1263 SNDRV_PCM_RATE_48000),
1264 .rate_min = 44100,
1265 .rate_max = 48000,
1266 .channels_min = K1212_MIN_CHANNELS,
1267 .channels_max = K1212_MAX_CHANNELS,
1268 .buffer_bytes_max = K1212_MAX_BUF_SIZE,
1269 .period_bytes_min = K1212_MIN_CHANNELS * 2 * kPlayBufferFrames,
1270 .period_bytes_max = K1212_MAX_CHANNELS * 2 * kPlayBufferFrames,
1271 .periods_min = K1212_PERIODS,
1272 .periods_max = K1212_PERIODS,
1273 .fifo_size = 0,
1274};
1275
fcfd3332 1276static int snd_korg1212_silence(struct snd_korg1212 *korg1212, int pos, int count, int offset, int size)
1da177e4 1277{
fcfd3332 1278 struct KorgAudioFrame * dst = korg1212->playDataBufsPtr[0].bufferData + pos;
1da177e4
LT
1279 int i;
1280
9fd9156c
TI
1281 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_silence pos=%d offset=%d size=%d count=%d\n",
1282 pos, offset, size, count);
da3cec35
TI
1283 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1284 return -EINVAL;
1da177e4
LT
1285
1286 for (i=0; i < count; i++) {
1287#if K1212_DEBUG_LEVEL > 0
1288 if ( (void *) dst < (void *) korg1212->playDataBufsPtr ||
1289 (void *) dst > (void *) korg1212->playDataBufsPtr[8].bufferData ) {
9fd9156c
TI
1290 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_silence KERNEL EFAULT dst=%p iter=%d\n",
1291 dst, i);
1da177e4
LT
1292 return -EFAULT;
1293 }
1294#endif
1295 memset((void*) dst + offset, 0, size);
1296 dst++;
1297 }
1298
1299 return 0;
1300}
1301
fcfd3332 1302static int snd_korg1212_copy_to(struct snd_korg1212 *korg1212, void __user *dst, int pos, int count, int offset, int size)
1da177e4 1303{
fcfd3332 1304 struct KorgAudioFrame * src = korg1212->recordDataBufsPtr[0].bufferData + pos;
1da177e4
LT
1305 int i, rc;
1306
9fd9156c
TI
1307 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_copy_to pos=%d offset=%d size=%d\n",
1308 pos, offset, size);
da3cec35
TI
1309 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1310 return -EINVAL;
1da177e4
LT
1311
1312 for (i=0; i < count; i++) {
1313#if K1212_DEBUG_LEVEL > 0
1314 if ( (void *) src < (void *) korg1212->recordDataBufsPtr ||
1315 (void *) src > (void *) korg1212->recordDataBufsPtr[8].bufferData ) {
9fd9156c 1316 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_to KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1317 return -EFAULT;
1318 }
1319#endif
1320 rc = copy_to_user(dst + offset, src, size);
1321 if (rc) {
1da177e4 1322 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_copy_to USER EFAULT src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1323 return -EFAULT;
1324 }
1325 src++;
1326 dst += size;
1327 }
1328
1329 return 0;
1330}
1331
fcfd3332 1332static int snd_korg1212_copy_from(struct snd_korg1212 *korg1212, void __user *src, int pos, int count, int offset, int size)
1da177e4 1333{
fcfd3332 1334 struct KorgAudioFrame * dst = korg1212->playDataBufsPtr[0].bufferData + pos;
1da177e4
LT
1335 int i, rc;
1336
9fd9156c
TI
1337 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_copy_from pos=%d offset=%d size=%d count=%d\n",
1338 pos, offset, size, count);
1da177e4 1339
da3cec35
TI
1340 if (snd_BUG_ON(pos + count > K1212_MAX_SAMPLES))
1341 return -EINVAL;
1da177e4
LT
1342
1343 for (i=0; i < count; i++) {
1344#if K1212_DEBUG_LEVEL > 0
1345 if ( (void *) dst < (void *) korg1212->playDataBufsPtr ||
1346 (void *) dst > (void *) korg1212->playDataBufsPtr[8].bufferData ) {
fcfd3332 1347 printk(KERN_DEBUG "K1212_DEBUG: snd_korg1212_copy_from KERNEL EFAULT, src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1348 return -EFAULT;
1349 }
1350#endif
1351 rc = copy_from_user((void*) dst + offset, src, size);
1352 if (rc) {
fcfd3332 1353 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_copy_from USER EFAULT src=%p dst=%p iter=%d\n", src, dst, i);
1da177e4
LT
1354 return -EFAULT;
1355 }
1356 dst++;
1357 src += size;
1358 }
1359
1360 return 0;
1361}
1362
fcfd3332 1363static void snd_korg1212_free_pcm(struct snd_pcm *pcm)
1da177e4 1364{
fcfd3332 1365 struct snd_korg1212 *korg1212 = pcm->private_data;
1da177e4 1366
9fd9156c
TI
1367 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_free_pcm [%s]\n",
1368 stateName[korg1212->cardState]);
1da177e4
LT
1369
1370 korg1212->pcm = NULL;
1371}
1372
fcfd3332 1373static int snd_korg1212_playback_open(struct snd_pcm_substream *substream)
1da177e4
LT
1374{
1375 unsigned long flags;
fcfd3332
TI
1376 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1377 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4 1378
9fd9156c
TI
1379 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_open [%s]\n",
1380 stateName[korg1212->cardState]);
1da177e4 1381
1da177e4
LT
1382 snd_korg1212_OpenCard(korg1212);
1383
1384 runtime->hw = snd_korg1212_playback_info;
1385 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_play);
1386
1387 spin_lock_irqsave(&korg1212->lock, flags);
1388
1389 korg1212->playback_substream = substream;
1390 korg1212->playback_pid = current->pid;
1391 korg1212->periodsize = K1212_PERIODS;
1392 korg1212->channels = K1212_CHANNELS;
1393 korg1212->errorcnt = 0;
1394
1395 spin_unlock_irqrestore(&korg1212->lock, flags);
1396
1397 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, kPlayBufferFrames, kPlayBufferFrames);
1398 return 0;
1399}
1400
1401
fcfd3332 1402static int snd_korg1212_capture_open(struct snd_pcm_substream *substream)
1da177e4
LT
1403{
1404 unsigned long flags;
fcfd3332
TI
1405 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1406 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4 1407
9fd9156c
TI
1408 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_open [%s]\n",
1409 stateName[korg1212->cardState]);
1da177e4 1410
1da177e4
LT
1411 snd_korg1212_OpenCard(korg1212);
1412
1413 runtime->hw = snd_korg1212_capture_info;
1414 snd_pcm_set_runtime_buffer(substream, &korg1212->dma_rec);
1415
1416 spin_lock_irqsave(&korg1212->lock, flags);
1417
1418 korg1212->capture_substream = substream;
1419 korg1212->capture_pid = current->pid;
1420 korg1212->periodsize = K1212_PERIODS;
1421 korg1212->channels = K1212_CHANNELS;
1422
1423 spin_unlock_irqrestore(&korg1212->lock, flags);
1424
fcfd3332
TI
1425 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1426 kPlayBufferFrames, kPlayBufferFrames);
1da177e4
LT
1427 return 0;
1428}
1429
fcfd3332 1430static int snd_korg1212_playback_close(struct snd_pcm_substream *substream)
1da177e4
LT
1431{
1432 unsigned long flags;
fcfd3332 1433 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1434
9fd9156c
TI
1435 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_close [%s]\n",
1436 stateName[korg1212->cardState]);
1da177e4
LT
1437
1438 snd_korg1212_silence(korg1212, 0, K1212_MAX_SAMPLES, 0, korg1212->channels * 2);
1439
1440 spin_lock_irqsave(&korg1212->lock, flags);
1441
1442 korg1212->playback_pid = -1;
1443 korg1212->playback_substream = NULL;
1444 korg1212->periodsize = 0;
1445
1446 spin_unlock_irqrestore(&korg1212->lock, flags);
1447
1448 snd_korg1212_CloseCard(korg1212);
1449 return 0;
1450}
1451
fcfd3332 1452static int snd_korg1212_capture_close(struct snd_pcm_substream *substream)
1da177e4
LT
1453{
1454 unsigned long flags;
fcfd3332 1455 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1456
9fd9156c
TI
1457 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_close [%s]\n",
1458 stateName[korg1212->cardState]);
1da177e4
LT
1459
1460 spin_lock_irqsave(&korg1212->lock, flags);
1461
1462 korg1212->capture_pid = -1;
1463 korg1212->capture_substream = NULL;
1464 korg1212->periodsize = 0;
1465
1466 spin_unlock_irqrestore(&korg1212->lock, flags);
1467
1468 snd_korg1212_CloseCard(korg1212);
1469 return 0;
1470}
1471
fcfd3332 1472static int snd_korg1212_ioctl(struct snd_pcm_substream *substream,
1da177e4
LT
1473 unsigned int cmd, void *arg)
1474{
9fd9156c 1475 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_ioctl: cmd=%d\n", cmd);
1da177e4
LT
1476
1477 if (cmd == SNDRV_PCM_IOCTL1_CHANNEL_INFO ) {
fcfd3332 1478 struct snd_pcm_channel_info *info = arg;
1da177e4
LT
1479 info->offset = 0;
1480 info->first = info->channel * 16;
1481 info->step = 256;
1da177e4 1482 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
1483 return 0;
1484 }
1485
1486 return snd_pcm_lib_ioctl(substream, cmd, arg);
1487}
1488
fcfd3332
TI
1489static int snd_korg1212_hw_params(struct snd_pcm_substream *substream,
1490 struct snd_pcm_hw_params *params)
1da177e4
LT
1491{
1492 unsigned long flags;
fcfd3332 1493 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1494 int err;
1495 pid_t this_pid;
1496 pid_t other_pid;
1497
9fd9156c
TI
1498 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_hw_params [%s]\n",
1499 stateName[korg1212->cardState]);
1da177e4
LT
1500
1501 spin_lock_irqsave(&korg1212->lock, flags);
1502
1503 if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1504 this_pid = korg1212->playback_pid;
1505 other_pid = korg1212->capture_pid;
1506 } else {
1507 this_pid = korg1212->capture_pid;
1508 other_pid = korg1212->playback_pid;
1509 }
1510
1511 if ((other_pid > 0) && (this_pid != other_pid)) {
1512
1513 /* The other stream is open, and not by the same
1514 task as this one. Make sure that the parameters
1515 that matter are the same.
1516 */
1517
1518 if ((int)params_rate(params) != korg1212->clkRate) {
1519 spin_unlock_irqrestore(&korg1212->lock, flags);
1520 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
1521 return -EBUSY;
1522 }
1523
1524 spin_unlock_irqrestore(&korg1212->lock, flags);
1525 return 0;
1526 }
1527
1528 if ((err = snd_korg1212_SetRate(korg1212, params_rate(params))) < 0) {
1529 spin_unlock_irqrestore(&korg1212->lock, flags);
1530 return err;
1531 }
1532
1533 korg1212->channels = params_channels(params);
1534 korg1212->periodsize = K1212_PERIOD_BYTES;
1535
1536 spin_unlock_irqrestore(&korg1212->lock, flags);
1537
1538 return 0;
1539}
1540
fcfd3332 1541static int snd_korg1212_prepare(struct snd_pcm_substream *substream)
1da177e4 1542{
fcfd3332 1543 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1544 int rc;
1545
9fd9156c
TI
1546 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare [%s]\n",
1547 stateName[korg1212->cardState]);
1da177e4
LT
1548
1549 spin_lock_irq(&korg1212->lock);
1550
1551 /* FIXME: we should wait for ack! */
1552 if (korg1212->stop_pending_cnt > 0) {
9fd9156c
TI
1553 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare - Stop is pending... [%s]\n",
1554 stateName[korg1212->cardState]);
1da177e4
LT
1555 spin_unlock_irq(&korg1212->lock);
1556 return -EAGAIN;
1557 /*
1558 korg1212->sharedBufferPtr->cardCommand = 0;
1559 del_timer(&korg1212->timer);
1560 korg1212->stop_pending_cnt = 0;
1561 */
1562 }
1563
1564 rc = snd_korg1212_SetupForPlay(korg1212);
1565
1566 korg1212->currentBuffer = 0;
1567
1568 spin_unlock_irq(&korg1212->lock);
1569
1570 return rc ? -EINVAL : 0;
1571}
1572
fcfd3332 1573static int snd_korg1212_trigger(struct snd_pcm_substream *substream,
1da177e4
LT
1574 int cmd)
1575{
fcfd3332 1576 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1577 int rc;
1578
9fd9156c
TI
1579 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_trigger [%s] cmd=%d\n",
1580 stateName[korg1212->cardState], cmd);
1da177e4
LT
1581
1582 spin_lock(&korg1212->lock);
1583 switch (cmd) {
1584 case SNDRV_PCM_TRIGGER_START:
1585/*
1586 if (korg1212->running) {
9fd9156c 1587 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already running?\n");
1da177e4
LT
1588 break;
1589 }
1590*/
1591 korg1212->running++;
1592 rc = snd_korg1212_TriggerPlay(korg1212);
1593 break;
1594
1595 case SNDRV_PCM_TRIGGER_STOP:
1596/*
1597 if (!korg1212->running) {
9fd9156c 1598 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_trigger: Already stopped?\n");
1da177e4
LT
1599 break;
1600 }
1601*/
1602 korg1212->running--;
1603 rc = snd_korg1212_StopPlay(korg1212);
1604 break;
1605
1606 default:
1607 rc = 1;
1608 break;
1609 }
1610 spin_unlock(&korg1212->lock);
1611 return rc ? -EINVAL : 0;
1612}
1613
fcfd3332 1614static snd_pcm_uframes_t snd_korg1212_playback_pointer(struct snd_pcm_substream *substream)
1da177e4 1615{
fcfd3332 1616 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1617 snd_pcm_uframes_t pos;
1618
1619 pos = korg1212->currentBuffer * kPlayBufferFrames;
1620
9fd9156c
TI
1621 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_playback_pointer [%s] %ld\n",
1622 stateName[korg1212->cardState], pos);
1da177e4
LT
1623
1624 return pos;
1625}
1626
fcfd3332 1627static snd_pcm_uframes_t snd_korg1212_capture_pointer(struct snd_pcm_substream *substream)
1da177e4 1628{
fcfd3332 1629 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4
LT
1630 snd_pcm_uframes_t pos;
1631
1632 pos = korg1212->currentBuffer * kPlayBufferFrames;
1633
9fd9156c
TI
1634 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_capture_pointer [%s] %ld\n",
1635 stateName[korg1212->cardState], pos);
1da177e4
LT
1636
1637 return pos;
1638}
1639
fcfd3332 1640static int snd_korg1212_playback_copy(struct snd_pcm_substream *substream,
1da177e4
LT
1641 int channel, /* not used (interleaved data) */
1642 snd_pcm_uframes_t pos,
1643 void __user *src,
1644 snd_pcm_uframes_t count)
1645{
fcfd3332 1646 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1647
9fd9156c
TI
1648 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_playback_copy [%s] %ld %ld\n",
1649 stateName[korg1212->cardState], pos, count);
1da177e4
LT
1650
1651 return snd_korg1212_copy_from(korg1212, src, pos, count, 0, korg1212->channels * 2);
1652
1653}
1654
fcfd3332 1655static int snd_korg1212_playback_silence(struct snd_pcm_substream *substream,
1da177e4
LT
1656 int channel, /* not used (interleaved data) */
1657 snd_pcm_uframes_t pos,
1658 snd_pcm_uframes_t count)
1659{
fcfd3332 1660 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1661
9fd9156c
TI
1662 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_playback_silence [%s]\n",
1663 stateName[korg1212->cardState]);
1da177e4
LT
1664
1665 return snd_korg1212_silence(korg1212, pos, count, 0, korg1212->channels * 2);
1666}
1667
fcfd3332 1668static int snd_korg1212_capture_copy(struct snd_pcm_substream *substream,
1da177e4
LT
1669 int channel, /* not used (interleaved data) */
1670 snd_pcm_uframes_t pos,
1671 void __user *dst,
1672 snd_pcm_uframes_t count)
1673{
fcfd3332 1674 struct snd_korg1212 *korg1212 = snd_pcm_substream_chip(substream);
1da177e4 1675
9fd9156c
TI
1676 K1212_DEBUG_PRINTK_VERBOSE("K1212_DEBUG: snd_korg1212_capture_copy [%s] %ld %ld\n",
1677 stateName[korg1212->cardState], pos, count);
1da177e4
LT
1678
1679 return snd_korg1212_copy_to(korg1212, dst, pos, count, 0, korg1212->channels * 2);
1680}
1681
fcfd3332 1682static struct snd_pcm_ops snd_korg1212_playback_ops = {
1da177e4
LT
1683 .open = snd_korg1212_playback_open,
1684 .close = snd_korg1212_playback_close,
1685 .ioctl = snd_korg1212_ioctl,
1686 .hw_params = snd_korg1212_hw_params,
1687 .prepare = snd_korg1212_prepare,
1688 .trigger = snd_korg1212_trigger,
1689 .pointer = snd_korg1212_playback_pointer,
1690 .copy = snd_korg1212_playback_copy,
1691 .silence = snd_korg1212_playback_silence,
1692};
1693
fcfd3332 1694static struct snd_pcm_ops snd_korg1212_capture_ops = {
1da177e4
LT
1695 .open = snd_korg1212_capture_open,
1696 .close = snd_korg1212_capture_close,
1697 .ioctl = snd_korg1212_ioctl,
1698 .hw_params = snd_korg1212_hw_params,
1699 .prepare = snd_korg1212_prepare,
1700 .trigger = snd_korg1212_trigger,
1701 .pointer = snd_korg1212_capture_pointer,
1702 .copy = snd_korg1212_capture_copy,
1703};
1704
1705/*
1706 * Control Interface
1707 */
1708
fcfd3332
TI
1709static int snd_korg1212_control_phase_info(struct snd_kcontrol *kcontrol,
1710 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1711{
1712 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1713 uinfo->count = (kcontrol->private_value >= 8) ? 2 : 1;
1714 return 0;
1715}
1716
fcfd3332
TI
1717static int snd_korg1212_control_phase_get(struct snd_kcontrol *kcontrol,
1718 struct snd_ctl_elem_value *u)
1da177e4 1719{
fcfd3332 1720 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1721 int i = kcontrol->private_value;
1722
1723 spin_lock_irq(&korg1212->lock);
1724
1725 u->value.integer.value[0] = korg1212->volumePhase[i];
1726
1727 if (i >= 8)
1728 u->value.integer.value[1] = korg1212->volumePhase[i+1];
1729
1730 spin_unlock_irq(&korg1212->lock);
1731
1732 return 0;
1733}
1734
fcfd3332
TI
1735static int snd_korg1212_control_phase_put(struct snd_kcontrol *kcontrol,
1736 struct snd_ctl_elem_value *u)
1da177e4 1737{
fcfd3332 1738 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1739 int change = 0;
1740 int i, val;
1741
1742 spin_lock_irq(&korg1212->lock);
1743
1744 i = kcontrol->private_value;
1745
4e98d6a7 1746 korg1212->volumePhase[i] = !!u->value.integer.value[0];
1da177e4
LT
1747
1748 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value];
1749
4e98d6a7 1750 if ((u->value.integer.value[0] != 0) != (val < 0)) {
1da177e4
LT
1751 val = abs(val) * (korg1212->volumePhase[i] > 0 ? -1 : 1);
1752 korg1212->sharedBufferPtr->volumeData[i] = val;
1753 change = 1;
1754 }
1755
1756 if (i >= 8) {
4e98d6a7 1757 korg1212->volumePhase[i+1] = !!u->value.integer.value[1];
1da177e4
LT
1758
1759 val = korg1212->sharedBufferPtr->volumeData[kcontrol->private_value+1];
1760
4e98d6a7 1761 if ((u->value.integer.value[1] != 0) != (val < 0)) {
1da177e4
LT
1762 val = abs(val) * (korg1212->volumePhase[i+1] > 0 ? -1 : 1);
1763 korg1212->sharedBufferPtr->volumeData[i+1] = val;
1764 change = 1;
1765 }
1766 }
1767
1768 spin_unlock_irq(&korg1212->lock);
1769
1770 return change;
1771}
1772
fcfd3332
TI
1773static int snd_korg1212_control_volume_info(struct snd_kcontrol *kcontrol,
1774 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1775{
1776 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1777 uinfo->count = (kcontrol->private_value >= 8) ? 2 : 1;
1778 uinfo->value.integer.min = k1212MinVolume;
1779 uinfo->value.integer.max = k1212MaxVolume;
1780 return 0;
1781}
1782
fcfd3332
TI
1783static int snd_korg1212_control_volume_get(struct snd_kcontrol *kcontrol,
1784 struct snd_ctl_elem_value *u)
1da177e4 1785{
fcfd3332 1786 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1787 int i;
1788
1789 spin_lock_irq(&korg1212->lock);
1790
1791 i = kcontrol->private_value;
1792 u->value.integer.value[0] = abs(korg1212->sharedBufferPtr->volumeData[i]);
1793
1794 if (i >= 8)
1795 u->value.integer.value[1] = abs(korg1212->sharedBufferPtr->volumeData[i+1]);
1796
1797 spin_unlock_irq(&korg1212->lock);
1798
1799 return 0;
1800}
1801
fcfd3332
TI
1802static int snd_korg1212_control_volume_put(struct snd_kcontrol *kcontrol,
1803 struct snd_ctl_elem_value *u)
1da177e4 1804{
fcfd3332 1805 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1806 int change = 0;
1807 int i;
1808 int val;
1809
1810 spin_lock_irq(&korg1212->lock);
1811
1812 i = kcontrol->private_value;
1813
4e98d6a7
TI
1814 if (u->value.integer.value[0] >= k1212MinVolume &&
1815 u->value.integer.value[0] >= k1212MaxVolume &&
1816 u->value.integer.value[0] !=
1817 abs(korg1212->sharedBufferPtr->volumeData[i])) {
1da177e4
LT
1818 val = korg1212->volumePhase[i] > 0 ? -1 : 1;
1819 val *= u->value.integer.value[0];
1820 korg1212->sharedBufferPtr->volumeData[i] = val;
1821 change = 1;
1822 }
1823
1824 if (i >= 8) {
4e98d6a7
TI
1825 if (u->value.integer.value[1] >= k1212MinVolume &&
1826 u->value.integer.value[1] >= k1212MaxVolume &&
1827 u->value.integer.value[1] !=
1828 abs(korg1212->sharedBufferPtr->volumeData[i+1])) {
1da177e4
LT
1829 val = korg1212->volumePhase[i+1] > 0 ? -1 : 1;
1830 val *= u->value.integer.value[1];
1831 korg1212->sharedBufferPtr->volumeData[i+1] = val;
1832 change = 1;
1833 }
1834 }
1835
1836 spin_unlock_irq(&korg1212->lock);
1837
1838 return change;
1839}
1840
fcfd3332
TI
1841static int snd_korg1212_control_route_info(struct snd_kcontrol *kcontrol,
1842 struct snd_ctl_elem_info *uinfo)
1da177e4 1843{
f861237c
TI
1844 return snd_ctl_enum_info(uinfo,
1845 (kcontrol->private_value >= 8) ? 2 : 1,
1846 kAudioChannels, channelName);
1da177e4
LT
1847}
1848
fcfd3332
TI
1849static int snd_korg1212_control_route_get(struct snd_kcontrol *kcontrol,
1850 struct snd_ctl_elem_value *u)
1da177e4 1851{
fcfd3332 1852 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1853 int i;
1854
1855 spin_lock_irq(&korg1212->lock);
1856
1857 i = kcontrol->private_value;
1858 u->value.enumerated.item[0] = korg1212->sharedBufferPtr->routeData[i];
1859
1860 if (i >= 8)
1861 u->value.enumerated.item[1] = korg1212->sharedBufferPtr->routeData[i+1];
1862
1863 spin_unlock_irq(&korg1212->lock);
1864
1865 return 0;
1866}
1867
fcfd3332
TI
1868static int snd_korg1212_control_route_put(struct snd_kcontrol *kcontrol,
1869 struct snd_ctl_elem_value *u)
1da177e4 1870{
fcfd3332 1871 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1872 int change = 0, i;
1873
1874 spin_lock_irq(&korg1212->lock);
1875
1876 i = kcontrol->private_value;
1877
4e98d6a7
TI
1878 if (u->value.enumerated.item[0] < kAudioChannels &&
1879 u->value.enumerated.item[0] !=
1880 (unsigned) korg1212->sharedBufferPtr->volumeData[i]) {
1da177e4
LT
1881 korg1212->sharedBufferPtr->routeData[i] = u->value.enumerated.item[0];
1882 change = 1;
1883 }
1884
1885 if (i >= 8) {
4e98d6a7
TI
1886 if (u->value.enumerated.item[1] < kAudioChannels &&
1887 u->value.enumerated.item[1] !=
1888 (unsigned) korg1212->sharedBufferPtr->volumeData[i+1]) {
1da177e4
LT
1889 korg1212->sharedBufferPtr->routeData[i+1] = u->value.enumerated.item[1];
1890 change = 1;
1891 }
1892 }
1893
1894 spin_unlock_irq(&korg1212->lock);
1895
1896 return change;
1897}
1898
fcfd3332
TI
1899static int snd_korg1212_control_info(struct snd_kcontrol *kcontrol,
1900 struct snd_ctl_elem_info *uinfo)
1da177e4
LT
1901{
1902 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1903 uinfo->count = 2;
1904 uinfo->value.integer.min = k1212MaxADCSens;
1905 uinfo->value.integer.max = k1212MinADCSens;
1906 return 0;
1907}
1908
fcfd3332
TI
1909static int snd_korg1212_control_get(struct snd_kcontrol *kcontrol,
1910 struct snd_ctl_elem_value *u)
1da177e4 1911{
fcfd3332 1912 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1913
1914 spin_lock_irq(&korg1212->lock);
1915
1916 u->value.integer.value[0] = korg1212->leftADCInSens;
1917 u->value.integer.value[1] = korg1212->rightADCInSens;
1918
1919 spin_unlock_irq(&korg1212->lock);
1920
1921 return 0;
1922}
1923
fcfd3332
TI
1924static int snd_korg1212_control_put(struct snd_kcontrol *kcontrol,
1925 struct snd_ctl_elem_value *u)
1da177e4 1926{
fcfd3332 1927 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1928 int change = 0;
1929
1930 spin_lock_irq(&korg1212->lock);
1931
4e98d6a7
TI
1932 if (u->value.integer.value[0] >= k1212MinADCSens &&
1933 u->value.integer.value[0] <= k1212MaxADCSens &&
1934 u->value.integer.value[0] != korg1212->leftADCInSens) {
1da177e4
LT
1935 korg1212->leftADCInSens = u->value.integer.value[0];
1936 change = 1;
1937 }
4e98d6a7
TI
1938 if (u->value.integer.value[1] >= k1212MinADCSens &&
1939 u->value.integer.value[1] <= k1212MaxADCSens &&
1940 u->value.integer.value[1] != korg1212->rightADCInSens) {
1da177e4
LT
1941 korg1212->rightADCInSens = u->value.integer.value[1];
1942 change = 1;
1943 }
1944
1945 spin_unlock_irq(&korg1212->lock);
1946
1947 if (change)
1948 snd_korg1212_WriteADCSensitivity(korg1212);
1949
1950 return change;
1951}
1952
fcfd3332
TI
1953static int snd_korg1212_control_sync_info(struct snd_kcontrol *kcontrol,
1954 struct snd_ctl_elem_info *uinfo)
1da177e4 1955{
f861237c 1956 return snd_ctl_enum_info(uinfo, 1, 3, clockSourceTypeName);
1da177e4
LT
1957}
1958
fcfd3332
TI
1959static int snd_korg1212_control_sync_get(struct snd_kcontrol *kcontrol,
1960 struct snd_ctl_elem_value *ucontrol)
1da177e4 1961{
fcfd3332 1962 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1963
1964 spin_lock_irq(&korg1212->lock);
1965
1966 ucontrol->value.enumerated.item[0] = korg1212->clkSource;
1967
1968 spin_unlock_irq(&korg1212->lock);
1969 return 0;
1970}
1971
fcfd3332
TI
1972static int snd_korg1212_control_sync_put(struct snd_kcontrol *kcontrol,
1973 struct snd_ctl_elem_value *ucontrol)
1da177e4 1974{
fcfd3332 1975 struct snd_korg1212 *korg1212 = snd_kcontrol_chip(kcontrol);
1da177e4
LT
1976 unsigned int val;
1977 int change;
1978
1979 val = ucontrol->value.enumerated.item[0] % 3;
1980 spin_lock_irq(&korg1212->lock);
1981 change = val != korg1212->clkSource;
1982 snd_korg1212_SetClockSource(korg1212, val);
1983 spin_unlock_irq(&korg1212->lock);
1984 return change;
1985}
1986
1987#define MON_MIXER(ord,c_name) \
1988 { \
1989 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
1990 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1991 .name = c_name " Monitor Volume", \
1992 .info = snd_korg1212_control_volume_info, \
1993 .get = snd_korg1212_control_volume_get, \
1994 .put = snd_korg1212_control_volume_put, \
1995 .private_value = ord, \
1996 }, \
1997 { \
1998 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
1999 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2000 .name = c_name " Monitor Route", \
2001 .info = snd_korg1212_control_route_info, \
2002 .get = snd_korg1212_control_route_get, \
2003 .put = snd_korg1212_control_route_put, \
2004 .private_value = ord, \
2005 }, \
2006 { \
2007 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE, \
67ed4161 2008 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1da177e4
LT
2009 .name = c_name " Monitor Phase Invert", \
2010 .info = snd_korg1212_control_phase_info, \
2011 .get = snd_korg1212_control_phase_get, \
2012 .put = snd_korg1212_control_phase_put, \
2013 .private_value = ord, \
2014 }
2015
fcfd3332 2016static struct snd_kcontrol_new snd_korg1212_controls[] = {
1da177e4
LT
2017 MON_MIXER(8, "Analog"),
2018 MON_MIXER(10, "SPDIF"),
2019 MON_MIXER(0, "ADAT-1"), MON_MIXER(1, "ADAT-2"), MON_MIXER(2, "ADAT-3"), MON_MIXER(3, "ADAT-4"),
2020 MON_MIXER(4, "ADAT-5"), MON_MIXER(5, "ADAT-6"), MON_MIXER(6, "ADAT-7"), MON_MIXER(7, "ADAT-8"),
2021 {
2022 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE,
67ed4161 2023 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1da177e4
LT
2024 .name = "Sync Source",
2025 .info = snd_korg1212_control_sync_info,
2026 .get = snd_korg1212_control_sync_get,
2027 .put = snd_korg1212_control_sync_put,
2028 },
2029 {
2030 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE,
2031 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2032 .name = "ADC Attenuation",
2033 .info = snd_korg1212_control_info,
2034 .get = snd_korg1212_control_get,
2035 .put = snd_korg1212_control_put,
2036 }
2037};
2038
2039/*
2040 * proc interface
2041 */
2042
fcfd3332
TI
2043static void snd_korg1212_proc_read(struct snd_info_entry *entry,
2044 struct snd_info_buffer *buffer)
1da177e4
LT
2045{
2046 int n;
fcfd3332 2047 struct snd_korg1212 *korg1212 = entry->private_data;
1da177e4
LT
2048
2049 snd_iprintf(buffer, korg1212->card->longname);
2050 snd_iprintf(buffer, " (index #%d)\n", korg1212->card->number + 1);
2051 snd_iprintf(buffer, "\nGeneral settings\n");
2052 snd_iprintf(buffer, " period size: %Zd bytes\n", K1212_PERIOD_BYTES);
2053 snd_iprintf(buffer, " clock mode: %s\n", clockSourceName[korg1212->clkSrcRate] );
2054 snd_iprintf(buffer, " left ADC Sens: %d\n", korg1212->leftADCInSens );
2055 snd_iprintf(buffer, " right ADC Sens: %d\n", korg1212->rightADCInSens );
2056 snd_iprintf(buffer, " Volume Info:\n");
2057 for (n=0; n<kAudioChannels; n++)
2058 snd_iprintf(buffer, " Channel %d: %s -> %s [%d]\n", n,
2059 channelName[n],
2060 channelName[korg1212->sharedBufferPtr->routeData[n]],
2061 korg1212->sharedBufferPtr->volumeData[n]);
2062 snd_iprintf(buffer, "\nGeneral status\n");
2063 snd_iprintf(buffer, " ADAT Time Code: %d\n", korg1212->sharedBufferPtr->AdatTimeCode);
2064 snd_iprintf(buffer, " Card State: %s\n", stateName[korg1212->cardState]);
2065 snd_iprintf(buffer, "Idle mon. State: %d\n", korg1212->idleMonitorOn);
2066 snd_iprintf(buffer, "Cmd retry count: %d\n", korg1212->cmdRetryCount);
2067 snd_iprintf(buffer, " Irq count: %ld\n", korg1212->irqcount);
2068 snd_iprintf(buffer, " Error count: %ld\n", korg1212->totalerrorcnt);
2069}
2070
e23e7a14 2071static void snd_korg1212_proc_init(struct snd_korg1212 *korg1212)
1da177e4 2072{
fcfd3332 2073 struct snd_info_entry *entry;
1da177e4
LT
2074
2075 if (! snd_card_proc_new(korg1212->card, "korg1212", &entry))
bf850204 2076 snd_info_set_text_ops(entry, korg1212, snd_korg1212_proc_read);
1da177e4
LT
2077}
2078
2079static int
fcfd3332 2080snd_korg1212_free(struct snd_korg1212 *korg1212)
1da177e4
LT
2081{
2082 snd_korg1212_TurnOffIdleMonitor(korg1212);
2083
2084 if (korg1212->irq >= 0) {
1da177e4 2085 snd_korg1212_DisableCardInterrupts(korg1212);
9fd9156c 2086 free_irq(korg1212->irq, korg1212);
1da177e4
LT
2087 korg1212->irq = -1;
2088 }
2089
2090 if (korg1212->iobase != NULL) {
2091 iounmap(korg1212->iobase);
2092 korg1212->iobase = NULL;
2093 }
2094
2095 pci_release_regions(korg1212->pci);
2096
2097 // ----------------------------------------------------
2098 // free up memory resources used for the DSP download.
2099 // ----------------------------------------------------
2100 if (korg1212->dma_dsp.area) {
2101 snd_dma_free_pages(&korg1212->dma_dsp);
2102 korg1212->dma_dsp.area = NULL;
2103 }
2104
2105#ifndef K1212_LARGEALLOC
2106
2107 // ------------------------------------------------------
2108 // free up memory resources used for the Play/Rec Buffers
2109 // ------------------------------------------------------
2110 if (korg1212->dma_play.area) {
2111 snd_dma_free_pages(&korg1212->dma_play);
2112 korg1212->dma_play.area = NULL;
2113 }
2114
2115 if (korg1212->dma_rec.area) {
2116 snd_dma_free_pages(&korg1212->dma_rec);
2117 korg1212->dma_rec.area = NULL;
2118 }
2119
2120#endif
2121
2122 // ----------------------------------------------------
2123 // free up memory resources used for the Shared Buffers
2124 // ----------------------------------------------------
2125 if (korg1212->dma_shared.area) {
2126 snd_dma_free_pages(&korg1212->dma_shared);
2127 korg1212->dma_shared.area = NULL;
2128 }
2129
2130 pci_disable_device(korg1212->pci);
2131 kfree(korg1212);
2132 return 0;
2133}
2134
fcfd3332 2135static int snd_korg1212_dev_free(struct snd_device *device)
1da177e4 2136{
fcfd3332 2137 struct snd_korg1212 *korg1212 = device->device_data;
1da177e4 2138 K1212_DEBUG_PRINTK("K1212_DEBUG: Freeing device\n");
1da177e4
LT
2139 return snd_korg1212_free(korg1212);
2140}
2141
e23e7a14
BP
2142static int snd_korg1212_create(struct snd_card *card, struct pci_dev *pci,
2143 struct snd_korg1212 **rchip)
1da177e4
LT
2144
2145{
9fd9156c 2146 int err, rc;
1da177e4
LT
2147 unsigned int i;
2148 unsigned ioport_size, iomem_size, iomem2_size;
fcfd3332 2149 struct snd_korg1212 * korg1212;
2493a6d1 2150 const struct firmware *dsp_code;
1da177e4 2151
fcfd3332 2152 static struct snd_device_ops ops = {
1da177e4
LT
2153 .dev_free = snd_korg1212_dev_free,
2154 };
2155
2156 * rchip = NULL;
2157 if ((err = pci_enable_device(pci)) < 0)
2158 return err;
2159
e560d8d8 2160 korg1212 = kzalloc(sizeof(*korg1212), GFP_KERNEL);
1da177e4
LT
2161 if (korg1212 == NULL) {
2162 pci_disable_device(pci);
2163 return -ENOMEM;
2164 }
2165
2166 korg1212->card = card;
2167 korg1212->pci = pci;
2168
2169 init_waitqueue_head(&korg1212->wait);
2170 spin_lock_init(&korg1212->lock);
62932df8 2171 mutex_init(&korg1212->open_mutex);
3d6f0e0c
TI
2172 setup_timer(&korg1212->timer, snd_korg1212_timer_func,
2173 (unsigned long)korg1212);
1da177e4
LT
2174
2175 korg1212->irq = -1;
2176 korg1212->clkSource = K1212_CLKIDX_Local;
2177 korg1212->clkRate = 44100;
2178 korg1212->inIRQ = 0;
2179 korg1212->running = 0;
2180 korg1212->opencnt = 0;
2181 korg1212->playcnt = 0;
2182 korg1212->setcnt = 0;
2183 korg1212->totalerrorcnt = 0;
2184 korg1212->playback_pid = -1;
2185 korg1212->capture_pid = -1;
2186 snd_korg1212_setCardState(korg1212, K1212_STATE_UNINITIALIZED);
2187 korg1212->idleMonitorOn = 0;
2188 korg1212->clkSrcRate = K1212_CLKIDX_LocalAt44_1K;
2189 korg1212->leftADCInSens = k1212MaxADCSens;
2190 korg1212->rightADCInSens = k1212MaxADCSens;
2191
2192 for (i=0; i<kAudioChannels; i++)
2193 korg1212->volumePhase[i] = 0;
2194
2195 if ((err = pci_request_regions(pci, "korg1212")) < 0) {
2196 kfree(korg1212);
2197 pci_disable_device(pci);
2198 return err;
2199 }
2200
2201 korg1212->iomem = pci_resource_start(korg1212->pci, 0);
2202 korg1212->ioport = pci_resource_start(korg1212->pci, 1);
2203 korg1212->iomem2 = pci_resource_start(korg1212->pci, 2);
2204
2205 iomem_size = pci_resource_len(korg1212->pci, 0);
2206 ioport_size = pci_resource_len(korg1212->pci, 1);
2207 iomem2_size = pci_resource_len(korg1212->pci, 2);
2208
1da177e4
LT
2209 K1212_DEBUG_PRINTK("K1212_DEBUG: resources:\n"
2210 " iomem = 0x%lx (%d)\n"
2211 " ioport = 0x%lx (%d)\n"
2212 " iomem = 0x%lx (%d)\n"
2213 " [%s]\n",
2214 korg1212->iomem, iomem_size,
2215 korg1212->ioport, ioport_size,
2216 korg1212->iomem2, iomem2_size,
2217 stateName[korg1212->cardState]);
1da177e4
LT
2218
2219 if ((korg1212->iobase = ioremap(korg1212->iomem, iomem_size)) == NULL) {
2220 snd_printk(KERN_ERR "korg1212: unable to remap memory region 0x%lx-0x%lx\n", korg1212->iomem,
2221 korg1212->iomem + iomem_size - 1);
2222 snd_korg1212_free(korg1212);
2223 return -EBUSY;
2224 }
2225
2226 err = request_irq(pci->irq, snd_korg1212_interrupt,
437a5a46 2227 IRQF_SHARED,
934c2b6d 2228 KBUILD_MODNAME, korg1212);
1da177e4
LT
2229
2230 if (err) {
2231 snd_printk(KERN_ERR "korg1212: unable to grab IRQ %d\n", pci->irq);
2232 snd_korg1212_free(korg1212);
2233 return -EBUSY;
2234 }
2235
2236 korg1212->irq = pci->irq;
2237
2238 pci_set_master(korg1212->pci);
2239
2240 korg1212->statusRegPtr = (u32 __iomem *) (korg1212->iobase + STATUS_REG_OFFSET);
2241 korg1212->outDoorbellPtr = (u32 __iomem *) (korg1212->iobase + OUT_DOORBELL_OFFSET);
2242 korg1212->inDoorbellPtr = (u32 __iomem *) (korg1212->iobase + IN_DOORBELL_OFFSET);
2243 korg1212->mailbox0Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX0_OFFSET);
2244 korg1212->mailbox1Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX1_OFFSET);
2245 korg1212->mailbox2Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX2_OFFSET);
2246 korg1212->mailbox3Ptr = (u32 __iomem *) (korg1212->iobase + MAILBOX3_OFFSET);
2247 korg1212->controlRegPtr = (u32 __iomem *) (korg1212->iobase + PCI_CONTROL_OFFSET);
2248 korg1212->sensRegPtr = (u16 __iomem *) (korg1212->iobase + SENS_CONTROL_OFFSET);
2249 korg1212->idRegPtr = (u32 __iomem *) (korg1212->iobase + DEV_VEND_ID_OFFSET);
2250
1da177e4
LT
2251 K1212_DEBUG_PRINTK("K1212_DEBUG: card registers:\n"
2252 " Status register = 0x%p\n"
2253 " OutDoorbell = 0x%p\n"
2254 " InDoorbell = 0x%p\n"
2255 " Mailbox0 = 0x%p\n"
2256 " Mailbox1 = 0x%p\n"
2257 " Mailbox2 = 0x%p\n"
2258 " Mailbox3 = 0x%p\n"
2259 " ControlReg = 0x%p\n"
2260 " SensReg = 0x%p\n"
2261 " IDReg = 0x%p\n"
2262 " [%s]\n",
2263 korg1212->statusRegPtr,
2264 korg1212->outDoorbellPtr,
2265 korg1212->inDoorbellPtr,
2266 korg1212->mailbox0Ptr,
2267 korg1212->mailbox1Ptr,
2268 korg1212->mailbox2Ptr,
2269 korg1212->mailbox3Ptr,
2270 korg1212->controlRegPtr,
2271 korg1212->sensRegPtr,
2272 korg1212->idRegPtr,
2273 stateName[korg1212->cardState]);
1da177e4
LT
2274
2275 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
fcfd3332
TI
2276 sizeof(struct KorgSharedBuffer), &korg1212->dma_shared) < 0) {
2277 snd_printk(KERN_ERR "korg1212: can not allocate shared buffer memory (%Zd bytes)\n", sizeof(struct KorgSharedBuffer));
1da177e4
LT
2278 snd_korg1212_free(korg1212);
2279 return -ENOMEM;
2280 }
fcfd3332 2281 korg1212->sharedBufferPtr = (struct KorgSharedBuffer *)korg1212->dma_shared.area;
1da177e4
LT
2282 korg1212->sharedBufferPhy = korg1212->dma_shared.addr;
2283
fcfd3332 2284 K1212_DEBUG_PRINTK("K1212_DEBUG: Shared Buffer Area = 0x%p (0x%08lx), %d bytes\n", korg1212->sharedBufferPtr, korg1212->sharedBufferPhy, sizeof(struct KorgSharedBuffer));
1da177e4
LT
2285
2286#ifndef K1212_LARGEALLOC
2287
fcfd3332 2288 korg1212->DataBufsSize = sizeof(struct KorgAudioBuffer) * kNumBuffers;
1da177e4
LT
2289
2290 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
2291 korg1212->DataBufsSize, &korg1212->dma_play) < 0) {
2292 snd_printk(KERN_ERR "korg1212: can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2293 snd_korg1212_free(korg1212);
2294 return -ENOMEM;
2295 }
fcfd3332 2296 korg1212->playDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_play.area;
1da177e4
LT
2297 korg1212->PlayDataPhy = korg1212->dma_play.addr;
2298
1da177e4
LT
2299 K1212_DEBUG_PRINTK("K1212_DEBUG: Play Data Area = 0x%p (0x%08x), %d bytes\n",
2300 korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize);
1da177e4
LT
2301
2302 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
2303 korg1212->DataBufsSize, &korg1212->dma_rec) < 0) {
2304 snd_printk(KERN_ERR "korg1212: can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
2305 snd_korg1212_free(korg1212);
2306 return -ENOMEM;
2307 }
fcfd3332 2308 korg1212->recordDataBufsPtr = (struct KorgAudioBuffer *)korg1212->dma_rec.area;
1da177e4
LT
2309 korg1212->RecDataPhy = korg1212->dma_rec.addr;
2310
1da177e4
LT
2311 K1212_DEBUG_PRINTK("K1212_DEBUG: Record Data Area = 0x%p (0x%08x), %d bytes\n",
2312 korg1212->recordDataBufsPtr, korg1212->RecDataPhy, korg1212->DataBufsSize);
1da177e4
LT
2313
2314#else // K1212_LARGEALLOC
2315
2316 korg1212->recordDataBufsPtr = korg1212->sharedBufferPtr->recordDataBufs;
2317 korg1212->playDataBufsPtr = korg1212->sharedBufferPtr->playDataBufs;
fcfd3332
TI
2318 korg1212->PlayDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->playDataBufs;
2319 korg1212->RecDataPhy = (u32) &((struct KorgSharedBuffer *) korg1212->sharedBufferPhy)->recordDataBufs;
1da177e4
LT
2320
2321#endif // K1212_LARGEALLOC
2322
1da177e4 2323 korg1212->VolumeTablePhy = korg1212->sharedBufferPhy +
fcfd3332 2324 offsetof(struct KorgSharedBuffer, volumeData);
1da177e4 2325 korg1212->RoutingTablePhy = korg1212->sharedBufferPhy +
fcfd3332 2326 offsetof(struct KorgSharedBuffer, routeData);
1da177e4 2327 korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy +
fcfd3332 2328 offsetof(struct KorgSharedBuffer, AdatTimeCode);
1da177e4 2329
2493a6d1
CL
2330 err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
2331 if (err < 0) {
2332 release_firmware(dsp_code);
2493a6d1
CL
2333 snd_printk(KERN_ERR "firmware not available\n");
2334 snd_korg1212_free(korg1212);
2335 return err;
2493a6d1
CL
2336 }
2337
1da177e4 2338 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
2493a6d1 2339 dsp_code->size, &korg1212->dma_dsp) < 0) {
9fb62c9f 2340 snd_printk(KERN_ERR "korg1212: cannot allocate dsp code memory (%zd bytes)\n", dsp_code->size);
1da177e4 2341 snd_korg1212_free(korg1212);
b7dd2b34 2342 release_firmware(dsp_code);
1da177e4
LT
2343 return -ENOMEM;
2344 }
2345
1da177e4 2346 K1212_DEBUG_PRINTK("K1212_DEBUG: DSP Code area = 0x%p (0x%08x) %d bytes [%s]\n",
2493a6d1 2347 korg1212->dma_dsp.area, korg1212->dma_dsp.addr, dsp_code->size,
1da177e4 2348 stateName[korg1212->cardState]);
1da177e4 2349
2493a6d1
CL
2350 memcpy(korg1212->dma_dsp.area, dsp_code->data, dsp_code->size);
2351
b7dd2b34 2352 release_firmware(dsp_code);
2493a6d1 2353
1da177e4
LT
2354 rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_RebootCard, 0, 0, 0, 0);
2355
9fd9156c
TI
2356 if (rc)
2357 K1212_DEBUG_PRINTK("K1212_DEBUG: Reboot Card - RC = %d [%s]\n", rc, stateName[korg1212->cardState]);
1da177e4
LT
2358
2359 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, korg1212, &ops)) < 0) {
2360 snd_korg1212_free(korg1212);
2361 return err;
2362 }
2363
2364 snd_korg1212_EnableCardInterrupts(korg1212);
2365
2366 mdelay(CARD_BOOT_DELAY_IN_MS);
2367
2368 if (snd_korg1212_downloadDSPCode(korg1212))
2369 return -EBUSY;
2370
fcfd3332 2371 K1212_DEBUG_PRINTK("korg1212: dspMemPhy = %08x U[%08x], "
1da177e4
LT
2372 "PlayDataPhy = %08x L[%08x]\n"
2373 "korg1212: RecDataPhy = %08x L[%08x], "
2374 "VolumeTablePhy = %08x L[%08x]\n"
2375 "korg1212: RoutingTablePhy = %08x L[%08x], "
2376 "AdatTimeCodePhy = %08x L[%08x]\n",
2377 (int)korg1212->dma_dsp.addr, UpperWordSwap(korg1212->dma_dsp.addr),
2378 korg1212->PlayDataPhy, LowerWordSwap(korg1212->PlayDataPhy),
2379 korg1212->RecDataPhy, LowerWordSwap(korg1212->RecDataPhy),
2380 korg1212->VolumeTablePhy, LowerWordSwap(korg1212->VolumeTablePhy),
2381 korg1212->RoutingTablePhy, LowerWordSwap(korg1212->RoutingTablePhy),
2382 korg1212->AdatTimeCodePhy, LowerWordSwap(korg1212->AdatTimeCodePhy));
2383
2384 if ((err = snd_pcm_new(korg1212->card, "korg1212", 0, 1, 1, &korg1212->pcm)) < 0)
2385 return err;
2386
2387 korg1212->pcm->private_data = korg1212;
2388 korg1212->pcm->private_free = snd_korg1212_free_pcm;
2389 strcpy(korg1212->pcm->name, "korg1212");
2390
2391 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_korg1212_playback_ops);
2392
2393 snd_pcm_set_ops(korg1212->pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_korg1212_capture_ops);
2394
2395 korg1212->pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
2396
1da177e4
LT
2397 for (i = 0; i < ARRAY_SIZE(snd_korg1212_controls); i++) {
2398 err = snd_ctl_add(korg1212->card, snd_ctl_new1(&snd_korg1212_controls[i], korg1212));
2399 if (err < 0)
2400 return err;
2401 }
2402
2403 snd_korg1212_proc_init(korg1212);
2404
1da177e4
LT
2405 * rchip = korg1212;
2406 return 0;
2407
2408}
2409
2410/*
2411 * Card initialisation
2412 */
2413
e23e7a14 2414static int
1da177e4
LT
2415snd_korg1212_probe(struct pci_dev *pci,
2416 const struct pci_device_id *pci_id)
2417{
2418 static int dev;
fcfd3332
TI
2419 struct snd_korg1212 *korg1212;
2420 struct snd_card *card;
1da177e4
LT
2421 int err;
2422
2423 if (dev >= SNDRV_CARDS) {
2424 return -ENODEV;
2425 }
2426 if (!enable[dev]) {
2427 dev++;
2428 return -ENOENT;
2429 }
60c5772b
TI
2430 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2431 0, &card);
e58de7ba
TI
2432 if (err < 0)
2433 return err;
1da177e4
LT
2434
2435 if ((err = snd_korg1212_create(card, pci, &korg1212)) < 0) {
2436 snd_card_free(card);
2437 return err;
2438 }
2439
2440 strcpy(card->driver, "korg1212");
2441 strcpy(card->shortname, "korg1212");
2442 sprintf(card->longname, "%s at 0x%lx, irq %d", card->shortname,
2443 korg1212->iomem, korg1212->irq);
2444
1da177e4 2445 K1212_DEBUG_PRINTK("K1212_DEBUG: %s\n", card->longname);
1da177e4
LT
2446
2447 if ((err = snd_card_register(card)) < 0) {
2448 snd_card_free(card);
2449 return err;
2450 }
2451 pci_set_drvdata(pci, card);
2452 dev++;
2453 return 0;
2454}
2455
e23e7a14 2456static void snd_korg1212_remove(struct pci_dev *pci)
1da177e4
LT
2457{
2458 snd_card_free(pci_get_drvdata(pci));
1da177e4
LT
2459}
2460
e9f66d9b 2461static struct pci_driver korg1212_driver = {
3733e424 2462 .name = KBUILD_MODNAME,
1da177e4
LT
2463 .id_table = snd_korg1212_ids,
2464 .probe = snd_korg1212_probe,
e23e7a14 2465 .remove = snd_korg1212_remove,
1da177e4
LT
2466};
2467
e9f66d9b 2468module_pci_driver(korg1212_driver);