Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/isa/sscape.c
29265 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* Low-level ALSA driver for the ENSONIQ SoundScape
4
* Copyright (c) by Chris Rankin
5
*
6
* This driver was written in part using information obtained from
7
* the OSS/Free SoundScape driver, written by Hannu Savolainen.
8
*/
9
10
#include <linux/init.h>
11
#include <linux/err.h>
12
#include <linux/io.h>
13
#include <linux/isa.h>
14
#include <linux/delay.h>
15
#include <linux/firmware.h>
16
#include <linux/pnp.h>
17
#include <linux/spinlock.h>
18
#include <linux/module.h>
19
#include <asm/dma.h>
20
#include <sound/core.h>
21
#include <sound/wss.h>
22
#include <sound/mpu401.h>
23
#include <sound/initval.h>
24
25
26
MODULE_AUTHOR("Chris Rankin");
27
MODULE_DESCRIPTION("ENSONIQ SoundScape driver");
28
MODULE_LICENSE("GPL");
29
MODULE_FIRMWARE("sndscape.co0");
30
MODULE_FIRMWARE("sndscape.co1");
31
MODULE_FIRMWARE("sndscape.co2");
32
MODULE_FIRMWARE("sndscape.co3");
33
MODULE_FIRMWARE("sndscape.co4");
34
MODULE_FIRMWARE("scope.cod");
35
36
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
37
static char* id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
38
static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
39
static long wss_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
40
static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
41
static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
42
static int dma[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
43
static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
44
static bool joystick[SNDRV_CARDS];
45
46
module_param_array(index, int, NULL, 0444);
47
MODULE_PARM_DESC(index, "Index number for SoundScape soundcard");
48
49
module_param_array(id, charp, NULL, 0444);
50
MODULE_PARM_DESC(id, "Description for SoundScape card");
51
52
module_param_hw_array(port, long, ioport, NULL, 0444);
53
MODULE_PARM_DESC(port, "Port # for SoundScape driver.");
54
55
module_param_hw_array(wss_port, long, ioport, NULL, 0444);
56
MODULE_PARM_DESC(wss_port, "WSS Port # for SoundScape driver.");
57
58
module_param_hw_array(irq, int, irq, NULL, 0444);
59
MODULE_PARM_DESC(irq, "IRQ # for SoundScape driver.");
60
61
module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
62
MODULE_PARM_DESC(mpu_irq, "MPU401 IRQ # for SoundScape driver.");
63
64
module_param_hw_array(dma, int, dma, NULL, 0444);
65
MODULE_PARM_DESC(dma, "DMA # for SoundScape driver.");
66
67
module_param_hw_array(dma2, int, dma, NULL, 0444);
68
MODULE_PARM_DESC(dma2, "DMA2 # for SoundScape driver.");
69
70
module_param_array(joystick, bool, NULL, 0444);
71
MODULE_PARM_DESC(joystick, "Enable gameport.");
72
73
#ifdef CONFIG_PNP
74
static int isa_registered;
75
static int pnp_registered;
76
77
static const struct pnp_card_device_id sscape_pnpids[] = {
78
{ .id = "ENS3081", .devs = { { "ENS0000" } } }, /* Soundscape PnP */
79
{ .id = "ENS4081", .devs = { { "ENS1011" } } }, /* VIVO90 */
80
{ .id = "" } /* end */
81
};
82
83
MODULE_DEVICE_TABLE(pnp_card, sscape_pnpids);
84
#endif
85
86
87
#define HOST_CTRL_IO(i) ((i) + 2)
88
#define HOST_DATA_IO(i) ((i) + 3)
89
#define ODIE_ADDR_IO(i) ((i) + 4)
90
#define ODIE_DATA_IO(i) ((i) + 5)
91
#define CODEC_IO(i) ((i) + 8)
92
93
#define IC_ODIE 1
94
#define IC_OPUS 2
95
96
#define RX_READY 0x01
97
#define TX_READY 0x02
98
99
#define CMD_ACK 0x80
100
#define CMD_SET_MIDI_VOL 0x84
101
#define CMD_GET_MIDI_VOL 0x85
102
#define CMD_XXX_MIDI_VOL 0x86
103
#define CMD_SET_EXTMIDI 0x8a
104
#define CMD_GET_EXTMIDI 0x8b
105
#define CMD_SET_MT32 0x8c
106
#define CMD_GET_MT32 0x8d
107
108
enum GA_REG {
109
GA_INTSTAT_REG = 0,
110
GA_INTENA_REG,
111
GA_DMAA_REG,
112
GA_DMAB_REG,
113
GA_INTCFG_REG,
114
GA_DMACFG_REG,
115
GA_CDCFG_REG,
116
GA_SMCFGA_REG,
117
GA_SMCFGB_REG,
118
GA_HMCTL_REG
119
};
120
121
#define DMA_8BIT 0x80
122
123
124
enum card_type {
125
MEDIA_FX, /* Sequoia S-1000 */
126
SSCAPE, /* Sequoia S-2000 */
127
SSCAPE_PNP,
128
SSCAPE_VIVO,
129
};
130
131
struct soundscape {
132
spinlock_t lock;
133
unsigned io_base;
134
int ic_type;
135
enum card_type type;
136
struct resource *io_res;
137
struct resource *wss_res;
138
struct snd_wss *chip;
139
140
unsigned char midi_vol;
141
struct device *dev;
142
};
143
144
#define INVALID_IRQ ((unsigned)-1)
145
146
147
static inline struct soundscape *get_card_soundscape(struct snd_card *c)
148
{
149
return (struct soundscape *) (c->private_data);
150
}
151
152
/*
153
* Allocates some kernel memory that we can use for DMA.
154
* I think this means that the memory has to map to
155
* contiguous pages of physical memory.
156
*/
157
static struct snd_dma_buffer *get_dmabuf(struct soundscape *s,
158
struct snd_dma_buffer *buf,
159
unsigned long size)
160
{
161
if (buf) {
162
if (snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
163
s->chip->card->dev,
164
size, buf) < 0) {
165
dev_err(s->dev,
166
"sscape: Failed to allocate %lu bytes for DMA\n",
167
size);
168
return NULL;
169
}
170
}
171
172
return buf;
173
}
174
175
/*
176
* Release the DMA-able kernel memory ...
177
*/
178
static void free_dmabuf(struct snd_dma_buffer *buf)
179
{
180
if (buf && buf->area)
181
snd_dma_free_pages(buf);
182
}
183
184
/*
185
* This function writes to the SoundScape's control registers,
186
* but doesn't do any locking. It's up to the caller to do that.
187
* This is why this function is "unsafe" ...
188
*/
189
static inline void sscape_write_unsafe(unsigned io_base, enum GA_REG reg,
190
unsigned char val)
191
{
192
outb(reg, ODIE_ADDR_IO(io_base));
193
outb(val, ODIE_DATA_IO(io_base));
194
}
195
196
/*
197
* Write to the SoundScape's control registers, and do the
198
* necessary locking ...
199
*/
200
static void sscape_write(struct soundscape *s, enum GA_REG reg,
201
unsigned char val)
202
{
203
guard(spinlock_irqsave)(&s->lock);
204
sscape_write_unsafe(s->io_base, reg, val);
205
}
206
207
/*
208
* Read from the SoundScape's control registers, but leave any
209
* locking to the caller. This is why the function is "unsafe" ...
210
*/
211
static inline unsigned char sscape_read_unsafe(unsigned io_base,
212
enum GA_REG reg)
213
{
214
outb(reg, ODIE_ADDR_IO(io_base));
215
return inb(ODIE_DATA_IO(io_base));
216
}
217
218
/*
219
* Puts the SoundScape into "host" mode, as compared to "MIDI" mode
220
*/
221
static inline void set_host_mode_unsafe(unsigned io_base)
222
{
223
outb(0x0, HOST_CTRL_IO(io_base));
224
}
225
226
/*
227
* Puts the SoundScape into "MIDI" mode, as compared to "host" mode
228
*/
229
static inline void set_midi_mode_unsafe(unsigned io_base)
230
{
231
outb(0x3, HOST_CTRL_IO(io_base));
232
}
233
234
/*
235
* Read the SoundScape's host-mode control register, but leave
236
* any locking issues to the caller ...
237
*/
238
static inline int host_read_unsafe(unsigned io_base)
239
{
240
int data = -1;
241
if ((inb(HOST_CTRL_IO(io_base)) & RX_READY) != 0)
242
data = inb(HOST_DATA_IO(io_base));
243
244
return data;
245
}
246
247
/*
248
* Read the SoundScape's host-mode control register, performing
249
* a limited amount of busy-waiting if the register isn't ready.
250
* Also leaves all locking-issues to the caller ...
251
*/
252
static int host_read_ctrl_unsafe(unsigned io_base, unsigned timeout)
253
{
254
int data;
255
256
while (((data = host_read_unsafe(io_base)) < 0) && (timeout != 0)) {
257
udelay(100);
258
--timeout;
259
} /* while */
260
261
return data;
262
}
263
264
/*
265
* Write to the SoundScape's host-mode control registers, but
266
* leave any locking issues to the caller ...
267
*/
268
static inline int host_write_unsafe(unsigned io_base, unsigned char data)
269
{
270
if ((inb(HOST_CTRL_IO(io_base)) & TX_READY) != 0) {
271
outb(data, HOST_DATA_IO(io_base));
272
return 1;
273
}
274
275
return 0;
276
}
277
278
/*
279
* Write to the SoundScape's host-mode control registers, performing
280
* a limited amount of busy-waiting if the register isn't ready.
281
* Also leaves all locking-issues to the caller ...
282
*/
283
static int host_write_ctrl_unsafe(unsigned io_base, unsigned char data,
284
unsigned timeout)
285
{
286
int err;
287
288
while (!(err = host_write_unsafe(io_base, data)) && (timeout != 0)) {
289
udelay(100);
290
--timeout;
291
} /* while */
292
293
return err;
294
}
295
296
297
/*
298
* Check that the MIDI subsystem is operational. If it isn't,
299
* then we will hang the computer if we try to use it ...
300
*
301
* NOTE: This check is based upon observation, not documentation.
302
*/
303
static inline int verify_mpu401(const struct snd_mpu401 *mpu)
304
{
305
return ((inb(MPU401C(mpu)) & 0xc0) == 0x80);
306
}
307
308
/*
309
* This is apparently the standard way to initialise an MPU-401
310
*/
311
static inline void initialise_mpu401(const struct snd_mpu401 *mpu)
312
{
313
outb(0, MPU401D(mpu));
314
}
315
316
/*
317
* Tell the SoundScape to activate the AD1845 chip (I think).
318
* The AD1845 detection fails if we *don't* do this, so I
319
* think that this is a good idea ...
320
*/
321
static void activate_ad1845_unsafe(unsigned io_base)
322
{
323
unsigned char val = sscape_read_unsafe(io_base, GA_HMCTL_REG);
324
sscape_write_unsafe(io_base, GA_HMCTL_REG, (val & 0xcf) | 0x10);
325
sscape_write_unsafe(io_base, GA_CDCFG_REG, 0x80);
326
}
327
328
/*
329
* Tell the SoundScape to begin a DMA transfer using the given channel.
330
* All locking issues are left to the caller.
331
*/
332
static void sscape_start_dma_unsafe(unsigned io_base, enum GA_REG reg)
333
{
334
sscape_write_unsafe(io_base, reg,
335
sscape_read_unsafe(io_base, reg) | 0x01);
336
sscape_write_unsafe(io_base, reg,
337
sscape_read_unsafe(io_base, reg) & 0xfe);
338
}
339
340
/*
341
* Wait for a DMA transfer to complete. This is a "limited busy-wait",
342
* and all locking issues are left to the caller.
343
*/
344
static int sscape_wait_dma_unsafe(unsigned io_base, enum GA_REG reg,
345
unsigned timeout)
346
{
347
while (!(sscape_read_unsafe(io_base, reg) & 0x01) && (timeout != 0)) {
348
udelay(100);
349
--timeout;
350
} /* while */
351
352
return sscape_read_unsafe(io_base, reg) & 0x01;
353
}
354
355
/*
356
* Wait for the On-Board Processor to return its start-up
357
* acknowledgement sequence. This wait is too long for
358
* us to perform "busy-waiting", and so we must sleep.
359
* This in turn means that we must not be holding any
360
* spinlocks when we call this function.
361
*/
362
static int obp_startup_ack(struct soundscape *s, unsigned timeout)
363
{
364
unsigned long end_time = jiffies + msecs_to_jiffies(timeout);
365
366
do {
367
int x;
368
369
scoped_guard(spinlock_irqsave, &s->lock) {
370
x = host_read_unsafe(s->io_base);
371
}
372
if (x == 0xfe || x == 0xff)
373
return 1;
374
375
msleep(10);
376
} while (time_before(jiffies, end_time));
377
378
return 0;
379
}
380
381
/*
382
* Wait for the host to return its start-up acknowledgement
383
* sequence. This wait is too long for us to perform
384
* "busy-waiting", and so we must sleep. This in turn means
385
* that we must not be holding any spinlocks when we call
386
* this function.
387
*/
388
static int host_startup_ack(struct soundscape *s, unsigned timeout)
389
{
390
unsigned long end_time = jiffies + msecs_to_jiffies(timeout);
391
392
do {
393
int x;
394
395
scoped_guard(spinlock_irqsave, &s->lock) {
396
x = host_read_unsafe(s->io_base);
397
}
398
if (x == 0xfe)
399
return 1;
400
401
msleep(10);
402
} while (time_before(jiffies, end_time));
403
404
return 0;
405
}
406
407
/*
408
* Upload a byte-stream into the SoundScape using DMA channel A.
409
*/
410
static int upload_dma_data(struct soundscape *s, const unsigned char *data,
411
size_t size)
412
{
413
struct snd_dma_buffer dma;
414
int ret;
415
unsigned char val;
416
417
if (!get_dmabuf(s, &dma, PAGE_ALIGN(32 * 1024)))
418
return -ENOMEM;
419
420
scoped_guard(spinlock_irqsave, &s->lock) {
421
422
/*
423
* Reset the board ...
424
*/
425
val = sscape_read_unsafe(s->io_base, GA_HMCTL_REG);
426
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, val & 0x3f);
427
428
/*
429
* Enable the DMA channels and configure them ...
430
*/
431
val = (s->chip->dma1 << 4) | DMA_8BIT;
432
sscape_write_unsafe(s->io_base, GA_DMAA_REG, val);
433
sscape_write_unsafe(s->io_base, GA_DMAB_REG, 0x20);
434
435
/*
436
* Take the board out of reset ...
437
*/
438
val = sscape_read_unsafe(s->io_base, GA_HMCTL_REG);
439
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, val | 0x80);
440
441
/*
442
* Upload the firmware to the SoundScape
443
* board through the DMA channel ...
444
*/
445
while (size != 0) {
446
unsigned long len;
447
448
len = min(size, dma.bytes);
449
memcpy(dma.area, data, len);
450
data += len;
451
size -= len;
452
453
snd_dma_program(s->chip->dma1, dma.addr, len, DMA_MODE_WRITE);
454
sscape_start_dma_unsafe(s->io_base, GA_DMAA_REG);
455
if (!sscape_wait_dma_unsafe(s->io_base, GA_DMAA_REG, 5000)) {
456
dev_err(s->dev, "sscape: DMA upload has timed out\n");
457
ret = -EAGAIN;
458
goto _release_dma;
459
}
460
} /* while */
461
462
set_host_mode_unsafe(s->io_base);
463
outb(0x0, s->io_base);
464
465
/*
466
* Boot the board ... (I think)
467
*/
468
val = sscape_read_unsafe(s->io_base, GA_HMCTL_REG);
469
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, val | 0x40);
470
}
471
472
/*
473
* If all has gone well, then the board should acknowledge
474
* the new upload and tell us that it has rebooted OK. We
475
* give it 5 seconds (max) ...
476
*/
477
ret = 0;
478
if (!obp_startup_ack(s, 5000)) {
479
dev_err(s->dev,
480
"sscape: No response from on-board processor after upload\n");
481
ret = -EAGAIN;
482
} else if (!host_startup_ack(s, 5000)) {
483
dev_err(s->dev, "sscape: SoundScape failed to initialise\n");
484
ret = -EAGAIN;
485
}
486
487
_release_dma:
488
/*
489
* NOTE!!! We are NOT holding any spinlocks at this point !!!
490
*/
491
sscape_write(s, GA_DMAA_REG, (s->ic_type == IC_OPUS ? 0x40 : 0x70));
492
free_dmabuf(&dma);
493
494
return ret;
495
}
496
497
/*
498
* Upload the bootblock(?) into the SoundScape. The only
499
* purpose of this block of code seems to be to tell
500
* us which version of the microcode we should be using.
501
*/
502
static int sscape_upload_bootblock(struct snd_card *card)
503
{
504
struct soundscape *sscape = get_card_soundscape(card);
505
const struct firmware *init_fw = NULL;
506
int data = 0;
507
int ret;
508
509
ret = request_firmware(&init_fw, "scope.cod", card->dev);
510
if (ret < 0) {
511
dev_err(card->dev, "sscape: Error loading scope.cod");
512
return ret;
513
}
514
ret = upload_dma_data(sscape, init_fw->data, init_fw->size);
515
516
release_firmware(init_fw);
517
518
guard(spinlock_irqsave)(&sscape->lock);
519
if (ret == 0)
520
data = host_read_ctrl_unsafe(sscape->io_base, 100);
521
522
if (data & 0x10)
523
sscape_write_unsafe(sscape->io_base, GA_SMCFGA_REG, 0x2f);
524
525
data &= 0xf;
526
if (ret == 0 && data > 7) {
527
dev_err(card->dev,
528
"sscape: timeout reading firmware version\n");
529
ret = -EAGAIN;
530
}
531
532
return (ret == 0) ? data : ret;
533
}
534
535
/*
536
* Upload the microcode into the SoundScape.
537
*/
538
static int sscape_upload_microcode(struct snd_card *card, int version)
539
{
540
struct soundscape *sscape = get_card_soundscape(card);
541
const struct firmware *init_fw = NULL;
542
char name[14];
543
int err;
544
545
scnprintf(name, sizeof(name), "sndscape.co%d", version);
546
547
err = request_firmware(&init_fw, name, card->dev);
548
if (err < 0) {
549
dev_err(card->dev, "sscape: Error loading sndscape.co%d",
550
version);
551
return err;
552
}
553
err = upload_dma_data(sscape, init_fw->data, init_fw->size);
554
if (err == 0)
555
dev_info(card->dev, "sscape: MIDI firmware loaded %zu KBs\n",
556
init_fw->size >> 10);
557
558
release_firmware(init_fw);
559
560
return err;
561
}
562
563
/*
564
* Mixer control for the SoundScape's MIDI device.
565
*/
566
static int sscape_midi_info(struct snd_kcontrol *ctl,
567
struct snd_ctl_elem_info *uinfo)
568
{
569
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
570
uinfo->count = 1;
571
uinfo->value.integer.min = 0;
572
uinfo->value.integer.max = 127;
573
return 0;
574
}
575
576
static int sscape_midi_get(struct snd_kcontrol *kctl,
577
struct snd_ctl_elem_value *uctl)
578
{
579
struct snd_wss *chip = snd_kcontrol_chip(kctl);
580
struct snd_card *card = chip->card;
581
register struct soundscape *s = get_card_soundscape(card);
582
583
guard(spinlock_irqsave)(&s->lock);
584
uctl->value.integer.value[0] = s->midi_vol;
585
return 0;
586
}
587
588
static int sscape_midi_put(struct snd_kcontrol *kctl,
589
struct snd_ctl_elem_value *uctl)
590
{
591
struct snd_wss *chip = snd_kcontrol_chip(kctl);
592
struct snd_card *card = chip->card;
593
struct soundscape *s = get_card_soundscape(card);
594
int change;
595
unsigned char new_val;
596
597
guard(spinlock_irqsave)(&s->lock);
598
599
new_val = uctl->value.integer.value[0] & 127;
600
/*
601
* We need to put the board into HOST mode before we
602
* can send any volume-changing HOST commands ...
603
*/
604
set_host_mode_unsafe(s->io_base);
605
606
/*
607
* To successfully change the MIDI volume setting, you seem to
608
* have to write a volume command, write the new volume value,
609
* and then perform another volume-related command. Perhaps the
610
* first command is an "open" and the second command is a "close"?
611
*/
612
if (s->midi_vol == new_val) {
613
change = 0;
614
goto __skip_change;
615
}
616
change = host_write_ctrl_unsafe(s->io_base, CMD_SET_MIDI_VOL, 100)
617
&& host_write_ctrl_unsafe(s->io_base, new_val, 100)
618
&& host_write_ctrl_unsafe(s->io_base, CMD_XXX_MIDI_VOL, 100)
619
&& host_write_ctrl_unsafe(s->io_base, new_val, 100);
620
s->midi_vol = new_val;
621
__skip_change:
622
623
/*
624
* Take the board out of HOST mode and back into MIDI mode ...
625
*/
626
set_midi_mode_unsafe(s->io_base);
627
628
return change;
629
}
630
631
static const struct snd_kcontrol_new midi_mixer_ctl = {
632
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
633
.name = "MIDI",
634
.info = sscape_midi_info,
635
.get = sscape_midi_get,
636
.put = sscape_midi_put
637
};
638
639
/*
640
* The SoundScape can use two IRQs from a possible set of four.
641
* These IRQs are encoded as bit patterns so that they can be
642
* written to the control registers.
643
*/
644
static unsigned get_irq_config(int sscape_type, int irq)
645
{
646
static const int valid_irq[] = { 9, 5, 7, 10 };
647
static const int old_irq[] = { 9, 7, 5, 15 };
648
unsigned cfg;
649
650
if (sscape_type == MEDIA_FX) {
651
for (cfg = 0; cfg < ARRAY_SIZE(old_irq); ++cfg)
652
if (irq == old_irq[cfg])
653
return cfg;
654
} else {
655
for (cfg = 0; cfg < ARRAY_SIZE(valid_irq); ++cfg)
656
if (irq == valid_irq[cfg])
657
return cfg;
658
}
659
660
return INVALID_IRQ;
661
}
662
663
/*
664
* Perform certain arcane port-checks to see whether there
665
* is a SoundScape board lurking behind the given ports.
666
*/
667
static int detect_sscape(struct soundscape *s, long wss_io)
668
{
669
unsigned long flags;
670
unsigned d;
671
int retval = 0;
672
673
spin_lock_irqsave(&s->lock, flags);
674
675
/*
676
* The following code is lifted from the original OSS driver,
677
* and as I don't have a datasheet I cannot really comment
678
* on what it is doing...
679
*/
680
if ((inb(HOST_CTRL_IO(s->io_base)) & 0x78) != 0)
681
goto _done;
682
683
d = inb(ODIE_ADDR_IO(s->io_base)) & 0xf0;
684
if ((d & 0x80) != 0)
685
goto _done;
686
687
if (d == 0)
688
s->ic_type = IC_ODIE;
689
else if ((d & 0x60) != 0)
690
s->ic_type = IC_OPUS;
691
else
692
goto _done;
693
694
outb(0xfa, ODIE_ADDR_IO(s->io_base));
695
if ((inb(ODIE_ADDR_IO(s->io_base)) & 0x9f) != 0x0a)
696
goto _done;
697
698
outb(0xfe, ODIE_ADDR_IO(s->io_base));
699
if ((inb(ODIE_ADDR_IO(s->io_base)) & 0x9f) != 0x0e)
700
goto _done;
701
702
outb(0xfe, ODIE_ADDR_IO(s->io_base));
703
d = inb(ODIE_DATA_IO(s->io_base));
704
if (s->type != SSCAPE_VIVO && (d & 0x9f) != 0x0e)
705
goto _done;
706
707
if (s->ic_type == IC_OPUS)
708
activate_ad1845_unsafe(s->io_base);
709
710
if (s->type == SSCAPE_VIVO)
711
wss_io += 4;
712
713
d = sscape_read_unsafe(s->io_base, GA_HMCTL_REG);
714
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, d | 0xc0);
715
716
/* wait for WSS codec */
717
for (d = 0; d < 500; d++) {
718
if ((inb(wss_io) & 0x80) == 0)
719
break;
720
spin_unlock_irqrestore(&s->lock, flags);
721
msleep(1);
722
spin_lock_irqsave(&s->lock, flags);
723
}
724
725
if ((inb(wss_io) & 0x80) != 0)
726
goto _done;
727
728
if (inb(wss_io + 2) == 0xff)
729
goto _done;
730
731
d = sscape_read_unsafe(s->io_base, GA_HMCTL_REG) & 0x3f;
732
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, d);
733
734
if ((inb(wss_io) & 0x80) != 0)
735
s->type = MEDIA_FX;
736
737
d = sscape_read_unsafe(s->io_base, GA_HMCTL_REG);
738
sscape_write_unsafe(s->io_base, GA_HMCTL_REG, d | 0xc0);
739
/* wait for WSS codec */
740
for (d = 0; d < 500; d++) {
741
if ((inb(wss_io) & 0x80) == 0)
742
break;
743
spin_unlock_irqrestore(&s->lock, flags);
744
msleep(1);
745
spin_lock_irqsave(&s->lock, flags);
746
}
747
748
/*
749
* SoundScape successfully detected!
750
*/
751
retval = 1;
752
753
_done:
754
spin_unlock_irqrestore(&s->lock, flags);
755
return retval;
756
}
757
758
/*
759
* ALSA callback function, called when attempting to open the MIDI device.
760
* Check that the MIDI firmware has been loaded, because we don't want
761
* to crash the machine. Also check that someone isn't using the hardware
762
* IOCTL device.
763
*/
764
static int mpu401_open(struct snd_mpu401 *mpu)
765
{
766
if (!verify_mpu401(mpu)) {
767
dev_err(mpu->rmidi->card->dev,
768
"sscape: MIDI disabled, please load firmware\n");
769
return -ENODEV;
770
}
771
772
return 0;
773
}
774
775
/*
776
* Initialise an MPU-401 subdevice for MIDI support on the SoundScape.
777
*/
778
static int create_mpu401(struct snd_card *card, int devnum,
779
unsigned long port, int irq)
780
{
781
struct soundscape *sscape = get_card_soundscape(card);
782
struct snd_rawmidi *rawmidi;
783
int err;
784
785
err = snd_mpu401_uart_new(card, devnum, MPU401_HW_MPU401, port,
786
MPU401_INFO_INTEGRATED, irq, &rawmidi);
787
if (err == 0) {
788
struct snd_mpu401 *mpu = rawmidi->private_data;
789
mpu->open_input = mpu401_open;
790
mpu->open_output = mpu401_open;
791
mpu->private_data = sscape;
792
793
initialise_mpu401(mpu);
794
}
795
796
return err;
797
}
798
799
800
/*
801
* Create an AD1845 PCM subdevice on the SoundScape. The AD1845
802
* is very much like a CS4231, with a few extra bits. We will
803
* try to support at least some of the extra bits by overriding
804
* some of the CS4231 callback.
805
*/
806
static int create_ad1845(struct snd_card *card, unsigned port,
807
int irq, int dma1, int dma2)
808
{
809
register struct soundscape *sscape = get_card_soundscape(card);
810
struct snd_wss *chip;
811
int err;
812
int codec_type = WSS_HW_DETECT;
813
814
switch (sscape->type) {
815
case MEDIA_FX:
816
case SSCAPE:
817
/*
818
* There are some freak examples of early Soundscape cards
819
* with CS4231 instead of AD1848/CS4248. Unfortunately, the
820
* CS4231 works only in CS4248 compatibility mode on
821
* these cards so force it.
822
*/
823
if (sscape->ic_type != IC_OPUS)
824
codec_type = WSS_HW_AD1848;
825
break;
826
827
case SSCAPE_VIVO:
828
port += 4;
829
break;
830
default:
831
break;
832
}
833
834
err = snd_wss_create(card, port, -1, irq, dma1, dma2,
835
codec_type, WSS_HWSHARE_DMA1, &chip);
836
if (!err) {
837
if (sscape->type != SSCAPE_VIVO) {
838
/*
839
* The input clock frequency on the SoundScape must
840
* be 14.31818 MHz, because we must set this register
841
* to get the playback to sound correct ...
842
*/
843
snd_wss_mce_up(chip);
844
scoped_guard(spinlock_irqsave, &chip->reg_lock) {
845
snd_wss_out(chip, AD1845_CLOCK, 0x20);
846
}
847
snd_wss_mce_down(chip);
848
849
}
850
851
err = snd_wss_pcm(chip, 0);
852
if (err < 0) {
853
dev_err(card->dev,
854
"sscape: No PCM device for AD1845 chip\n");
855
goto _error;
856
}
857
858
err = snd_wss_mixer(chip);
859
if (err < 0) {
860
dev_err(card->dev,
861
"sscape: No mixer device for AD1845 chip\n");
862
goto _error;
863
}
864
if (chip->hardware != WSS_HW_AD1848) {
865
err = snd_wss_timer(chip, 0);
866
if (err < 0) {
867
dev_err(card->dev,
868
"sscape: No timer device for AD1845 chip\n");
869
goto _error;
870
}
871
}
872
873
if (sscape->type != SSCAPE_VIVO) {
874
err = snd_ctl_add(card,
875
snd_ctl_new1(&midi_mixer_ctl, chip));
876
if (err < 0) {
877
dev_err(card->dev,
878
"sscape: Could not create MIDI mixer control\n");
879
goto _error;
880
}
881
}
882
883
sscape->chip = chip;
884
}
885
886
_error:
887
return err;
888
}
889
890
891
/*
892
* Create an ALSA soundcard entry for the SoundScape, using
893
* the given list of port, IRQ and DMA resources.
894
*/
895
static int create_sscape(int dev, struct snd_card *card)
896
{
897
struct soundscape *sscape = get_card_soundscape(card);
898
unsigned dma_cfg;
899
unsigned irq_cfg;
900
unsigned mpu_irq_cfg;
901
struct resource *io_res;
902
struct resource *wss_res;
903
int err;
904
int val;
905
const char *name;
906
907
/*
908
* Grab IO ports that we will need to probe so that we
909
* can detect and control this hardware ...
910
*/
911
io_res = devm_request_region(card->dev, port[dev], 8, "SoundScape");
912
if (!io_res) {
913
dev_err(card->dev,
914
"sscape: can't grab port 0x%lx\n", port[dev]);
915
return -EBUSY;
916
}
917
wss_res = NULL;
918
if (sscape->type == SSCAPE_VIVO) {
919
wss_res = devm_request_region(card->dev, wss_port[dev], 4,
920
"SoundScape");
921
if (!wss_res) {
922
dev_err(card->dev, "sscape: can't grab port 0x%lx\n",
923
wss_port[dev]);
924
return -EBUSY;
925
}
926
}
927
928
/*
929
* Grab one DMA channel ...
930
*/
931
err = snd_devm_request_dma(card->dev, dma[dev], "SoundScape");
932
if (err < 0) {
933
dev_err(card->dev, "sscape: can't grab DMA %d\n", dma[dev]);
934
return err;
935
}
936
937
spin_lock_init(&sscape->lock);
938
sscape->io_res = io_res;
939
sscape->wss_res = wss_res;
940
sscape->io_base = port[dev];
941
942
if (!detect_sscape(sscape, wss_port[dev])) {
943
dev_err(card->dev, "sscape: hardware not detected at 0x%x\n",
944
sscape->io_base);
945
return -ENODEV;
946
}
947
948
switch (sscape->type) {
949
case MEDIA_FX:
950
name = "MediaFX/SoundFX";
951
break;
952
case SSCAPE:
953
name = "Soundscape";
954
break;
955
case SSCAPE_PNP:
956
name = "Soundscape PnP";
957
break;
958
case SSCAPE_VIVO:
959
name = "Soundscape VIVO";
960
break;
961
default:
962
name = "unknown Soundscape";
963
break;
964
}
965
966
dev_info(card->dev, "sscape: %s card detected at 0x%x, using IRQ %d, DMA %d\n",
967
name, sscape->io_base, irq[dev], dma[dev]);
968
969
/*
970
* Check that the user didn't pass us garbage data ...
971
*/
972
irq_cfg = get_irq_config(sscape->type, irq[dev]);
973
if (irq_cfg == INVALID_IRQ) {
974
dev_err(card->dev, "sscape: Invalid IRQ %d\n", irq[dev]);
975
return -ENXIO;
976
}
977
978
mpu_irq_cfg = get_irq_config(sscape->type, mpu_irq[dev]);
979
if (mpu_irq_cfg == INVALID_IRQ) {
980
dev_err(card->dev, "sscape: Invalid IRQ %d\n", mpu_irq[dev]);
981
return -ENXIO;
982
}
983
984
/*
985
* Tell the on-board devices where their resources are (I think -
986
* I can't be sure without a datasheet ... So many magic values!)
987
*/
988
scoped_guard(spinlock_irqsave, &sscape->lock) {
989
990
sscape_write_unsafe(sscape->io_base, GA_SMCFGA_REG, 0x2e);
991
sscape_write_unsafe(sscape->io_base, GA_SMCFGB_REG, 0x00);
992
993
/*
994
* Enable and configure the DMA channels ...
995
*/
996
sscape_write_unsafe(sscape->io_base, GA_DMACFG_REG, 0x50);
997
dma_cfg = (sscape->ic_type == IC_OPUS ? 0x40 : 0x70);
998
sscape_write_unsafe(sscape->io_base, GA_DMAA_REG, dma_cfg);
999
sscape_write_unsafe(sscape->io_base, GA_DMAB_REG, 0x20);
1000
1001
mpu_irq_cfg |= mpu_irq_cfg << 2;
1002
val = sscape_read_unsafe(sscape->io_base, GA_HMCTL_REG) & 0xF7;
1003
if (joystick[dev])
1004
val |= 8;
1005
sscape_write_unsafe(sscape->io_base, GA_HMCTL_REG, val | 0x10);
1006
sscape_write_unsafe(sscape->io_base, GA_INTCFG_REG, 0xf0 | mpu_irq_cfg);
1007
sscape_write_unsafe(sscape->io_base,
1008
GA_CDCFG_REG, 0x09 | DMA_8BIT
1009
| (dma[dev] << 4) | (irq_cfg << 1));
1010
/*
1011
* Enable the master IRQ ...
1012
*/
1013
sscape_write_unsafe(sscape->io_base, GA_INTENA_REG, 0x80);
1014
1015
}
1016
1017
/*
1018
* We have now enabled the codec chip, and so we should
1019
* detect the AD1845 device ...
1020
*/
1021
err = create_ad1845(card, wss_port[dev], irq[dev],
1022
dma[dev], dma2[dev]);
1023
if (err < 0) {
1024
dev_err(card->dev,
1025
"sscape: No AD1845 device at 0x%lx, IRQ %d\n",
1026
wss_port[dev], irq[dev]);
1027
return err;
1028
}
1029
strscpy(card->driver, "SoundScape");
1030
strscpy(card->shortname, name);
1031
snprintf(card->longname, sizeof(card->longname),
1032
"%s at 0x%lx, IRQ %d, DMA1 %d, DMA2 %d\n",
1033
name, sscape->chip->port, sscape->chip->irq,
1034
sscape->chip->dma1, sscape->chip->dma2);
1035
1036
#define MIDI_DEVNUM 0
1037
if (sscape->type != SSCAPE_VIVO) {
1038
err = sscape_upload_bootblock(card);
1039
if (err >= 0)
1040
err = sscape_upload_microcode(card, err);
1041
1042
if (err == 0) {
1043
err = create_mpu401(card, MIDI_DEVNUM, port[dev],
1044
mpu_irq[dev]);
1045
if (err < 0) {
1046
dev_err(card->dev,
1047
"sscape: Failed to create MPU-401 device at 0x%lx\n",
1048
port[dev]);
1049
return err;
1050
}
1051
1052
/*
1053
* Initialize mixer
1054
*/
1055
guard(spinlock_irqsave)(&sscape->lock);
1056
sscape->midi_vol = 0;
1057
host_write_ctrl_unsafe(sscape->io_base,
1058
CMD_SET_MIDI_VOL, 100);
1059
host_write_ctrl_unsafe(sscape->io_base,
1060
sscape->midi_vol, 100);
1061
host_write_ctrl_unsafe(sscape->io_base,
1062
CMD_XXX_MIDI_VOL, 100);
1063
host_write_ctrl_unsafe(sscape->io_base,
1064
sscape->midi_vol, 100);
1065
host_write_ctrl_unsafe(sscape->io_base,
1066
CMD_SET_EXTMIDI, 100);
1067
host_write_ctrl_unsafe(sscape->io_base,
1068
0, 100);
1069
host_write_ctrl_unsafe(sscape->io_base, CMD_ACK, 100);
1070
1071
set_midi_mode_unsafe(sscape->io_base);
1072
}
1073
}
1074
1075
return 0;
1076
}
1077
1078
1079
static int snd_sscape_match(struct device *pdev, unsigned int i)
1080
{
1081
/*
1082
* Make sure we were given ALL of the other parameters.
1083
*/
1084
if (port[i] == SNDRV_AUTO_PORT)
1085
return 0;
1086
1087
if (irq[i] == SNDRV_AUTO_IRQ ||
1088
mpu_irq[i] == SNDRV_AUTO_IRQ ||
1089
dma[i] == SNDRV_AUTO_DMA) {
1090
dev_info(pdev,
1091
"sscape: insufficient parameters, need IO, IRQ, MPU-IRQ and DMA\n");
1092
return 0;
1093
}
1094
1095
return 1;
1096
}
1097
1098
static int snd_sscape_probe(struct device *pdev, unsigned int dev)
1099
{
1100
struct snd_card *card;
1101
struct soundscape *sscape;
1102
int ret;
1103
1104
ret = snd_devm_card_new(pdev, index[dev], id[dev], THIS_MODULE,
1105
sizeof(struct soundscape), &card);
1106
if (ret < 0)
1107
return ret;
1108
1109
sscape = get_card_soundscape(card);
1110
sscape->dev = pdev;
1111
sscape->type = SSCAPE;
1112
1113
dma[dev] &= 0x03;
1114
1115
ret = create_sscape(dev, card);
1116
if (ret < 0)
1117
return ret;
1118
1119
ret = snd_card_register(card);
1120
if (ret < 0) {
1121
dev_err(pdev, "sscape: Failed to register sound card\n");
1122
return ret;
1123
}
1124
dev_set_drvdata(pdev, card);
1125
return 0;
1126
}
1127
1128
#define DEV_NAME "sscape"
1129
1130
static struct isa_driver snd_sscape_driver = {
1131
.match = snd_sscape_match,
1132
.probe = snd_sscape_probe,
1133
/* FIXME: suspend/resume */
1134
.driver = {
1135
.name = DEV_NAME
1136
},
1137
};
1138
1139
#ifdef CONFIG_PNP
1140
static inline int get_next_autoindex(int i)
1141
{
1142
while (i < SNDRV_CARDS && port[i] != SNDRV_AUTO_PORT)
1143
++i;
1144
return i;
1145
}
1146
1147
1148
static int sscape_pnp_detect(struct pnp_card_link *pcard,
1149
const struct pnp_card_device_id *pid)
1150
{
1151
static int idx = 0;
1152
struct pnp_dev *dev;
1153
struct snd_card *card;
1154
struct soundscape *sscape;
1155
int ret;
1156
1157
/*
1158
* Allow this function to fail *quietly* if all the ISA PnP
1159
* devices were configured using module parameters instead.
1160
*/
1161
idx = get_next_autoindex(idx);
1162
if (idx >= SNDRV_CARDS)
1163
return -ENOSPC;
1164
1165
/*
1166
* Check that we still have room for another sound card ...
1167
*/
1168
dev = pnp_request_card_device(pcard, pid->devs[0].id, NULL);
1169
if (!dev)
1170
return -ENODEV;
1171
1172
if (!pnp_is_active(dev)) {
1173
if (pnp_activate_dev(dev) < 0) {
1174
dev_info(&dev->dev, "sscape: device is inactive\n");
1175
return -EBUSY;
1176
}
1177
}
1178
1179
/*
1180
* Create a new ALSA sound card entry, in anticipation
1181
* of detecting our hardware ...
1182
*/
1183
ret = snd_devm_card_new(&pcard->card->dev,
1184
index[idx], id[idx], THIS_MODULE,
1185
sizeof(struct soundscape), &card);
1186
if (ret < 0)
1187
return ret;
1188
1189
sscape = get_card_soundscape(card);
1190
sscape->dev = card->dev;
1191
1192
/*
1193
* Identify card model ...
1194
*/
1195
if (!strncmp("ENS4081", pid->id, 7))
1196
sscape->type = SSCAPE_VIVO;
1197
else
1198
sscape->type = SSCAPE_PNP;
1199
1200
/*
1201
* Read the correct parameters off the ISA PnP bus ...
1202
*/
1203
port[idx] = pnp_port_start(dev, 0);
1204
irq[idx] = pnp_irq(dev, 0);
1205
mpu_irq[idx] = pnp_irq(dev, 1);
1206
dma[idx] = pnp_dma(dev, 0) & 0x03;
1207
if (sscape->type == SSCAPE_PNP) {
1208
dma2[idx] = dma[idx];
1209
wss_port[idx] = CODEC_IO(port[idx]);
1210
} else {
1211
wss_port[idx] = pnp_port_start(dev, 1);
1212
dma2[idx] = pnp_dma(dev, 1);
1213
}
1214
1215
ret = create_sscape(idx, card);
1216
if (ret < 0)
1217
return ret;
1218
1219
ret = snd_card_register(card);
1220
if (ret < 0) {
1221
dev_err(card->dev, "sscape: Failed to register sound card\n");
1222
return ret;
1223
}
1224
1225
pnp_set_card_drvdata(pcard, card);
1226
++idx;
1227
return 0;
1228
}
1229
1230
static struct pnp_card_driver sscape_pnpc_driver = {
1231
.flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
1232
.name = "sscape",
1233
.id_table = sscape_pnpids,
1234
.probe = sscape_pnp_detect,
1235
};
1236
1237
#endif /* CONFIG_PNP */
1238
1239
static int __init sscape_init(void)
1240
{
1241
int err;
1242
1243
err = isa_register_driver(&snd_sscape_driver, SNDRV_CARDS);
1244
#ifdef CONFIG_PNP
1245
if (!err)
1246
isa_registered = 1;
1247
1248
err = pnp_register_card_driver(&sscape_pnpc_driver);
1249
if (!err)
1250
pnp_registered = 1;
1251
1252
if (isa_registered)
1253
err = 0;
1254
#endif
1255
return err;
1256
}
1257
1258
static void __exit sscape_exit(void)
1259
{
1260
#ifdef CONFIG_PNP
1261
if (pnp_registered)
1262
pnp_unregister_card_driver(&sscape_pnpc_driver);
1263
if (isa_registered)
1264
#endif
1265
isa_unregister_driver(&snd_sscape_driver);
1266
}
1267
1268
module_init(sscape_init);
1269
module_exit(sscape_exit);
1270
1271