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