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