Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/oss/ad1848.c
10814 views
1
/*
2
* sound/oss/ad1848.c
3
*
4
* The low level driver for the AD1848/CS4248 codec chip which
5
* is used for example in the MS Sound System.
6
*
7
* The CS4231 which is used in the GUS MAX and some other cards is
8
* upwards compatible with AD1848 and this driver is able to drive it.
9
*
10
* CS4231A and AD1845 are upward compatible with CS4231. However
11
* the new features of these chips are different.
12
*
13
* CS4232 is a PnP audio chip which contains a CS4231A (and SB, MPU).
14
* CS4232A is an improved version of CS4232.
15
*
16
*
17
*
18
* Copyright (C) by Hannu Savolainen 1993-1997
19
*
20
* OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
21
* Version 2 (June 1991). See the "COPYING" file distributed with this software
22
* for more info.
23
*
24
*
25
* Thomas Sailer : ioctl code reworked (vmalloc/vfree removed)
26
* general sleep/wakeup clean up.
27
* Alan Cox : reformatted. Fixed SMP bugs. Moved to kernel alloc/free
28
* of irqs. Use dev_id.
29
* Christoph Hellwig : adapted to module_init/module_exit
30
* Aki Laukkanen : added power management support
31
* Arnaldo C. de Melo : added missing restore_flags in ad1848_resume
32
* Miguel Freitas : added ISA PnP support
33
* Alan Cox : Added CS4236->4239 identification
34
* Daniel T. Cobra : Alernate config/mixer for later chips
35
* Alan Cox : Merged chip idents and config code
36
*
37
* TODO
38
* APM save restore assist code on IBM thinkpad
39
*
40
* Status:
41
* Tested. Believed fully functional.
42
*/
43
44
#include <linux/init.h>
45
#include <linux/interrupt.h>
46
#include <linux/module.h>
47
#include <linux/stddef.h>
48
#include <linux/slab.h>
49
#include <linux/isapnp.h>
50
#include <linux/pnp.h>
51
#include <linux/spinlock.h>
52
53
#define DEB(x)
54
#define DEB1(x)
55
#include "sound_config.h"
56
57
#include "ad1848.h"
58
#include "ad1848_mixer.h"
59
60
typedef struct
61
{
62
spinlock_t lock;
63
int base;
64
int irq;
65
int dma1, dma2;
66
int dual_dma; /* 1, when two DMA channels allocated */
67
int subtype;
68
unsigned char MCE_bit;
69
unsigned char saved_regs[64]; /* Includes extended register space */
70
int debug_flag;
71
72
int audio_flags;
73
int record_dev, playback_dev;
74
75
int xfer_count;
76
int audio_mode;
77
int open_mode;
78
int intr_active;
79
char *chip_name, *name;
80
int model;
81
#define MD_1848 1
82
#define MD_4231 2
83
#define MD_4231A 3
84
#define MD_1845 4
85
#define MD_4232 5
86
#define MD_C930 6
87
#define MD_IWAVE 7
88
#define MD_4235 8 /* Crystal Audio CS4235 */
89
#define MD_1845_SSCAPE 9 /* Ensoniq Soundscape PNP*/
90
#define MD_4236 10 /* 4236 and higher */
91
#define MD_42xB 11 /* CS 42xB */
92
#define MD_4239 12 /* CS4239 */
93
94
/* Mixer parameters */
95
int recmask;
96
int supported_devices, orig_devices;
97
int supported_rec_devices, orig_rec_devices;
98
int *levels;
99
short mixer_reroute[32];
100
int dev_no;
101
volatile unsigned long timer_ticks;
102
int timer_running;
103
int irq_ok;
104
mixer_ents *mix_devices;
105
int mixer_output_port;
106
} ad1848_info;
107
108
typedef struct ad1848_port_info
109
{
110
int open_mode;
111
int speed;
112
unsigned char speed_bits;
113
int channels;
114
int audio_format;
115
unsigned char format_bits;
116
}
117
ad1848_port_info;
118
119
static struct address_info cfg;
120
static int nr_ad1848_devs;
121
122
static int deskpro_xl;
123
static int deskpro_m;
124
static int soundpro;
125
126
static volatile signed char irq2dev[17] = {
127
-1, -1, -1, -1, -1, -1, -1, -1,
128
-1, -1, -1, -1, -1, -1, -1, -1, -1
129
};
130
131
#ifndef EXCLUDE_TIMERS
132
static int timer_installed = -1;
133
#endif
134
135
static int loaded;
136
137
static int ad_format_mask[13 /*devc->model */ ] =
138
{
139
0,
140
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW,
141
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
142
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
143
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW, /* AD1845 */
144
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
145
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
146
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
147
AFMT_U8 | AFMT_S16_LE /* CS4235 */,
148
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW /* Ensoniq Soundscape*/,
149
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
150
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
151
AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM
152
};
153
154
static ad1848_info adev_info[MAX_AUDIO_DEV];
155
156
#define io_Index_Addr(d) ((d)->base)
157
#define io_Indexed_Data(d) ((d)->base+1)
158
#define io_Status(d) ((d)->base+2)
159
#define io_Polled_IO(d) ((d)->base+3)
160
161
static struct {
162
unsigned char flags;
163
#define CAP_F_TIMER 0x01
164
} capabilities [10 /*devc->model */ ] = {
165
{0}
166
,{0} /* MD_1848 */
167
,{CAP_F_TIMER} /* MD_4231 */
168
,{CAP_F_TIMER} /* MD_4231A */
169
,{CAP_F_TIMER} /* MD_1845 */
170
,{CAP_F_TIMER} /* MD_4232 */
171
,{0} /* MD_C930 */
172
,{CAP_F_TIMER} /* MD_IWAVE */
173
,{0} /* MD_4235 */
174
,{CAP_F_TIMER} /* MD_1845_SSCAPE */
175
};
176
177
#ifdef CONFIG_PNP
178
static int isapnp = 1;
179
static int isapnpjump;
180
static int reverse;
181
182
static int audio_activated;
183
#else
184
static int isapnp;
185
#endif
186
187
188
189
static int ad1848_open(int dev, int mode);
190
static void ad1848_close(int dev);
191
static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag);
192
static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag);
193
static int ad1848_prepare_for_output(int dev, int bsize, int bcount);
194
static int ad1848_prepare_for_input(int dev, int bsize, int bcount);
195
static void ad1848_halt(int dev);
196
static void ad1848_halt_input(int dev);
197
static void ad1848_halt_output(int dev);
198
static void ad1848_trigger(int dev, int bits);
199
static irqreturn_t adintr(int irq, void *dev_id);
200
201
#ifndef EXCLUDE_TIMERS
202
static int ad1848_tmr_install(int dev);
203
static void ad1848_tmr_reprogram(int dev);
204
#endif
205
206
static int ad_read(ad1848_info * devc, int reg)
207
{
208
int x;
209
int timeout = 900000;
210
211
while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
212
timeout--;
213
214
if(reg < 32)
215
{
216
outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
217
x = inb(io_Indexed_Data(devc));
218
}
219
else
220
{
221
int xreg, xra;
222
223
xreg = (reg & 0xff) - 32;
224
xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
225
outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
226
outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
227
x = inb(io_Indexed_Data(devc));
228
}
229
230
return x;
231
}
232
233
static void ad_write(ad1848_info * devc, int reg, int data)
234
{
235
int timeout = 900000;
236
237
while (timeout > 0 && inb(devc->base) == 0x80) /* Are we initializing */
238
timeout--;
239
240
if(reg < 32)
241
{
242
outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
243
outb(((unsigned char) (data & 0xff)), io_Indexed_Data(devc));
244
}
245
else
246
{
247
int xreg, xra;
248
249
xreg = (reg & 0xff) - 32;
250
xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
251
outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
252
outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
253
outb((unsigned char) (data & 0xff), io_Indexed_Data(devc));
254
}
255
}
256
257
static void wait_for_calibration(ad1848_info * devc)
258
{
259
int timeout = 0;
260
261
/*
262
* Wait until the auto calibration process has finished.
263
*
264
* 1) Wait until the chip becomes ready (reads don't return 0x80).
265
* 2) Wait until the ACI bit of I11 gets on and then off.
266
*/
267
268
timeout = 100000;
269
while (timeout > 0 && inb(devc->base) == 0x80)
270
timeout--;
271
if (inb(devc->base) & 0x80)
272
printk(KERN_WARNING "ad1848: Auto calibration timed out(1).\n");
273
274
timeout = 100;
275
while (timeout > 0 && !(ad_read(devc, 11) & 0x20))
276
timeout--;
277
if (!(ad_read(devc, 11) & 0x20))
278
return;
279
280
timeout = 80000;
281
while (timeout > 0 && (ad_read(devc, 11) & 0x20))
282
timeout--;
283
if (ad_read(devc, 11) & 0x20)
284
if ((devc->model != MD_1845) && (devc->model != MD_1845_SSCAPE))
285
printk(KERN_WARNING "ad1848: Auto calibration timed out(3).\n");
286
}
287
288
static void ad_mute(ad1848_info * devc)
289
{
290
int i;
291
unsigned char prev;
292
293
/*
294
* Save old register settings and mute output channels
295
*/
296
297
for (i = 6; i < 8; i++)
298
{
299
prev = devc->saved_regs[i] = ad_read(devc, i);
300
}
301
302
}
303
304
static void ad_unmute(ad1848_info * devc)
305
{
306
}
307
308
static void ad_enter_MCE(ad1848_info * devc)
309
{
310
int timeout = 1000;
311
unsigned short prev;
312
313
while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
314
timeout--;
315
316
devc->MCE_bit = 0x40;
317
prev = inb(io_Index_Addr(devc));
318
if (prev & 0x40)
319
{
320
return;
321
}
322
outb((devc->MCE_bit), io_Index_Addr(devc));
323
}
324
325
static void ad_leave_MCE(ad1848_info * devc)
326
{
327
unsigned char prev, acal;
328
int timeout = 1000;
329
330
while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
331
timeout--;
332
333
acal = ad_read(devc, 9);
334
335
devc->MCE_bit = 0x00;
336
prev = inb(io_Index_Addr(devc));
337
outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
338
339
if ((prev & 0x40) == 0) /* Not in MCE mode */
340
{
341
return;
342
}
343
outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
344
if (acal & 0x08) /* Auto calibration is enabled */
345
wait_for_calibration(devc);
346
}
347
348
static int ad1848_set_recmask(ad1848_info * devc, int mask)
349
{
350
unsigned char recdev;
351
int i, n;
352
unsigned long flags;
353
354
mask &= devc->supported_rec_devices;
355
356
/* Rename the mixer bits if necessary */
357
for (i = 0; i < 32; i++)
358
{
359
if (devc->mixer_reroute[i] != i)
360
{
361
if (mask & (1 << i))
362
{
363
mask &= ~(1 << i);
364
mask |= (1 << devc->mixer_reroute[i]);
365
}
366
}
367
}
368
369
n = 0;
370
for (i = 0; i < 32; i++) /* Count selected device bits */
371
if (mask & (1 << i))
372
n++;
373
374
spin_lock_irqsave(&devc->lock,flags);
375
if (!soundpro) {
376
if (n == 0)
377
mask = SOUND_MASK_MIC;
378
else if (n != 1) { /* Too many devices selected */
379
mask &= ~devc->recmask; /* Filter out active settings */
380
381
n = 0;
382
for (i = 0; i < 32; i++) /* Count selected device bits */
383
if (mask & (1 << i))
384
n++;
385
386
if (n != 1)
387
mask = SOUND_MASK_MIC;
388
}
389
switch (mask) {
390
case SOUND_MASK_MIC:
391
recdev = 2;
392
break;
393
394
case SOUND_MASK_LINE:
395
case SOUND_MASK_LINE3:
396
recdev = 0;
397
break;
398
399
case SOUND_MASK_CD:
400
case SOUND_MASK_LINE1:
401
recdev = 1;
402
break;
403
404
case SOUND_MASK_IMIX:
405
recdev = 3;
406
break;
407
408
default:
409
mask = SOUND_MASK_MIC;
410
recdev = 2;
411
}
412
413
recdev <<= 6;
414
ad_write(devc, 0, (ad_read(devc, 0) & 0x3f) | recdev);
415
ad_write(devc, 1, (ad_read(devc, 1) & 0x3f) | recdev);
416
} else { /* soundpro */
417
unsigned char val;
418
int set_rec_bit;
419
int j;
420
421
for (i = 0; i < 32; i++) { /* For each bit */
422
if ((devc->supported_rec_devices & (1 << i)) == 0)
423
continue; /* Device not supported */
424
425
for (j = LEFT_CHN; j <= RIGHT_CHN; j++) {
426
if (devc->mix_devices[i][j].nbits == 0) /* Inexistent channel */
427
continue;
428
429
/*
430
* This is tricky:
431
* set_rec_bit becomes 1 if the corresponding bit in mask is set
432
* then it gets flipped if the polarity is inverse
433
*/
434
set_rec_bit = ((mask & (1 << i)) != 0) ^ devc->mix_devices[i][j].recpol;
435
436
val = ad_read(devc, devc->mix_devices[i][j].recreg);
437
val &= ~(1 << devc->mix_devices[i][j].recpos);
438
val |= (set_rec_bit << devc->mix_devices[i][j].recpos);
439
ad_write(devc, devc->mix_devices[i][j].recreg, val);
440
}
441
}
442
}
443
spin_unlock_irqrestore(&devc->lock,flags);
444
445
/* Rename the mixer bits back if necessary */
446
for (i = 0; i < 32; i++)
447
{
448
if (devc->mixer_reroute[i] != i)
449
{
450
if (mask & (1 << devc->mixer_reroute[i]))
451
{
452
mask &= ~(1 << devc->mixer_reroute[i]);
453
mask |= (1 << i);
454
}
455
}
456
}
457
devc->recmask = mask;
458
return mask;
459
}
460
461
static void change_bits(ad1848_info * devc, unsigned char *regval,
462
unsigned char *muteval, int dev, int chn, int newval)
463
{
464
unsigned char mask;
465
int shift;
466
int mute;
467
int mutemask;
468
int set_mute_bit;
469
470
set_mute_bit = (newval == 0) ^ devc->mix_devices[dev][chn].mutepol;
471
472
if (devc->mix_devices[dev][chn].polarity == 1) /* Reverse */
473
newval = 100 - newval;
474
475
mask = (1 << devc->mix_devices[dev][chn].nbits) - 1;
476
shift = devc->mix_devices[dev][chn].bitpos;
477
478
if (devc->mix_devices[dev][chn].mutepos == 8)
479
{ /* if there is no mute bit */
480
mute = 0; /* No mute bit; do nothing special */
481
mutemask = ~0; /* No mute bit; do nothing special */
482
}
483
else
484
{
485
mute = (set_mute_bit << devc->mix_devices[dev][chn].mutepos);
486
mutemask = ~(1 << devc->mix_devices[dev][chn].mutepos);
487
}
488
489
newval = (int) ((newval * mask) + 50) / 100; /* Scale it */
490
*regval &= ~(mask << shift); /* Clear bits */
491
*regval |= (newval & mask) << shift; /* Set new value */
492
493
*muteval &= mutemask;
494
*muteval |= mute;
495
}
496
497
static int ad1848_mixer_get(ad1848_info * devc, int dev)
498
{
499
if (!((1 << dev) & devc->supported_devices))
500
return -EINVAL;
501
502
dev = devc->mixer_reroute[dev];
503
504
return devc->levels[dev];
505
}
506
507
static void ad1848_mixer_set_channel(ad1848_info *devc, int dev, int value, int channel)
508
{
509
int regoffs, muteregoffs;
510
unsigned char val, muteval;
511
unsigned long flags;
512
513
regoffs = devc->mix_devices[dev][channel].regno;
514
muteregoffs = devc->mix_devices[dev][channel].mutereg;
515
val = ad_read(devc, regoffs);
516
517
if (muteregoffs != regoffs) {
518
muteval = ad_read(devc, muteregoffs);
519
change_bits(devc, &val, &muteval, dev, channel, value);
520
}
521
else
522
change_bits(devc, &val, &val, dev, channel, value);
523
524
spin_lock_irqsave(&devc->lock,flags);
525
ad_write(devc, regoffs, val);
526
devc->saved_regs[regoffs] = val;
527
if (muteregoffs != regoffs) {
528
ad_write(devc, muteregoffs, muteval);
529
devc->saved_regs[muteregoffs] = muteval;
530
}
531
spin_unlock_irqrestore(&devc->lock,flags);
532
}
533
534
static int ad1848_mixer_set(ad1848_info * devc, int dev, int value)
535
{
536
int left = value & 0x000000ff;
537
int right = (value & 0x0000ff00) >> 8;
538
int retvol;
539
540
if (dev > 31)
541
return -EINVAL;
542
543
if (!(devc->supported_devices & (1 << dev)))
544
return -EINVAL;
545
546
dev = devc->mixer_reroute[dev];
547
548
if (devc->mix_devices[dev][LEFT_CHN].nbits == 0)
549
return -EINVAL;
550
551
if (left > 100)
552
left = 100;
553
if (right > 100)
554
right = 100;
555
556
if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0) /* Mono control */
557
right = left;
558
559
retvol = left | (right << 8);
560
561
/* Scale volumes */
562
left = mix_cvt[left];
563
right = mix_cvt[right];
564
565
devc->levels[dev] = retvol;
566
567
/*
568
* Set the left channel
569
*/
570
ad1848_mixer_set_channel(devc, dev, left, LEFT_CHN);
571
572
/*
573
* Set the right channel
574
*/
575
if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0)
576
goto out;
577
ad1848_mixer_set_channel(devc, dev, right, RIGHT_CHN);
578
579
out:
580
return retvol;
581
}
582
583
static void ad1848_mixer_reset(ad1848_info * devc)
584
{
585
int i;
586
char name[32];
587
unsigned long flags;
588
589
devc->mix_devices = &(ad1848_mix_devices[0]);
590
591
sprintf(name, "%s_%d", devc->chip_name, nr_ad1848_devs);
592
593
for (i = 0; i < 32; i++)
594
devc->mixer_reroute[i] = i;
595
596
devc->supported_rec_devices = MODE1_REC_DEVICES;
597
598
switch (devc->model)
599
{
600
case MD_4231:
601
case MD_4231A:
602
case MD_1845:
603
case MD_1845_SSCAPE:
604
devc->supported_devices = MODE2_MIXER_DEVICES;
605
break;
606
607
case MD_C930:
608
devc->supported_devices = C930_MIXER_DEVICES;
609
devc->mix_devices = &(c930_mix_devices[0]);
610
break;
611
612
case MD_IWAVE:
613
devc->supported_devices = MODE3_MIXER_DEVICES;
614
devc->mix_devices = &(iwave_mix_devices[0]);
615
break;
616
617
case MD_42xB:
618
case MD_4239:
619
devc->mix_devices = &(cs42xb_mix_devices[0]);
620
devc->supported_devices = MODE3_MIXER_DEVICES;
621
break;
622
case MD_4232:
623
case MD_4235:
624
case MD_4236:
625
devc->supported_devices = MODE3_MIXER_DEVICES;
626
break;
627
628
case MD_1848:
629
if (soundpro) {
630
devc->supported_devices = SPRO_MIXER_DEVICES;
631
devc->supported_rec_devices = SPRO_REC_DEVICES;
632
devc->mix_devices = &(spro_mix_devices[0]);
633
break;
634
}
635
636
default:
637
devc->supported_devices = MODE1_MIXER_DEVICES;
638
}
639
640
devc->orig_devices = devc->supported_devices;
641
devc->orig_rec_devices = devc->supported_rec_devices;
642
643
devc->levels = load_mixer_volumes(name, default_mixer_levels, 1);
644
645
for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
646
{
647
if (devc->supported_devices & (1 << i))
648
ad1848_mixer_set(devc, i, devc->levels[i]);
649
}
650
651
ad1848_set_recmask(devc, SOUND_MASK_MIC);
652
653
devc->mixer_output_port = devc->levels[31] | AUDIO_HEADPHONE | AUDIO_LINE_OUT;
654
655
spin_lock_irqsave(&devc->lock,flags);
656
if (!soundpro) {
657
if (devc->mixer_output_port & AUDIO_SPEAKER)
658
ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
659
else
660
ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
661
} else {
662
/*
663
* From the "wouldn't it be nice if the mixer API had (better)
664
* support for custom stuff" category
665
*/
666
/* Enable surround mode and SB16 mixer */
667
ad_write(devc, 16, 0x60);
668
}
669
spin_unlock_irqrestore(&devc->lock,flags);
670
}
671
672
static int ad1848_mixer_ioctl(int dev, unsigned int cmd, void __user *arg)
673
{
674
ad1848_info *devc = mixer_devs[dev]->devc;
675
int val;
676
677
if (cmd == SOUND_MIXER_PRIVATE1)
678
{
679
if (get_user(val, (int __user *)arg))
680
return -EFAULT;
681
682
if (val != 0xffff)
683
{
684
unsigned long flags;
685
val &= (AUDIO_SPEAKER | AUDIO_HEADPHONE | AUDIO_LINE_OUT);
686
devc->mixer_output_port = val;
687
val |= AUDIO_HEADPHONE | AUDIO_LINE_OUT; /* Always on */
688
devc->mixer_output_port = val;
689
spin_lock_irqsave(&devc->lock,flags);
690
if (val & AUDIO_SPEAKER)
691
ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
692
else
693
ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
694
spin_unlock_irqrestore(&devc->lock,flags);
695
}
696
val = devc->mixer_output_port;
697
return put_user(val, (int __user *)arg);
698
}
699
if (cmd == SOUND_MIXER_PRIVATE2)
700
{
701
if (get_user(val, (int __user *)arg))
702
return -EFAULT;
703
return(ad1848_control(AD1848_MIXER_REROUTE, val));
704
}
705
if (((cmd >> 8) & 0xff) == 'M')
706
{
707
if (_SIOC_DIR(cmd) & _SIOC_WRITE)
708
{
709
switch (cmd & 0xff)
710
{
711
case SOUND_MIXER_RECSRC:
712
if (get_user(val, (int __user *)arg))
713
return -EFAULT;
714
val = ad1848_set_recmask(devc, val);
715
break;
716
717
default:
718
if (get_user(val, (int __user *)arg))
719
return -EFAULT;
720
val = ad1848_mixer_set(devc, cmd & 0xff, val);
721
break;
722
}
723
return put_user(val, (int __user *)arg);
724
}
725
else
726
{
727
switch (cmd & 0xff)
728
{
729
/*
730
* Return parameters
731
*/
732
733
case SOUND_MIXER_RECSRC:
734
val = devc->recmask;
735
break;
736
737
case SOUND_MIXER_DEVMASK:
738
val = devc->supported_devices;
739
break;
740
741
case SOUND_MIXER_STEREODEVS:
742
val = devc->supported_devices;
743
if (devc->model != MD_C930)
744
val &= ~(SOUND_MASK_SPEAKER | SOUND_MASK_IMIX);
745
break;
746
747
case SOUND_MIXER_RECMASK:
748
val = devc->supported_rec_devices;
749
break;
750
751
case SOUND_MIXER_CAPS:
752
val=SOUND_CAP_EXCL_INPUT;
753
break;
754
755
default:
756
val = ad1848_mixer_get(devc, cmd & 0xff);
757
break;
758
}
759
return put_user(val, (int __user *)arg);
760
}
761
}
762
else
763
return -EINVAL;
764
}
765
766
static int ad1848_set_speed(int dev, int arg)
767
{
768
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
769
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
770
771
/*
772
* The sampling speed is encoded in the least significant nibble of I8. The
773
* LSB selects the clock source (0=24.576 MHz, 1=16.9344 MHz) and other
774
* three bits select the divisor (indirectly):
775
*
776
* The available speeds are in the following table. Keep the speeds in
777
* the increasing order.
778
*/
779
typedef struct
780
{
781
int speed;
782
unsigned char bits;
783
}
784
speed_struct;
785
786
static speed_struct speed_table[] =
787
{
788
{5510, (0 << 1) | 1},
789
{5510, (0 << 1) | 1},
790
{6620, (7 << 1) | 1},
791
{8000, (0 << 1) | 0},
792
{9600, (7 << 1) | 0},
793
{11025, (1 << 1) | 1},
794
{16000, (1 << 1) | 0},
795
{18900, (2 << 1) | 1},
796
{22050, (3 << 1) | 1},
797
{27420, (2 << 1) | 0},
798
{32000, (3 << 1) | 0},
799
{33075, (6 << 1) | 1},
800
{37800, (4 << 1) | 1},
801
{44100, (5 << 1) | 1},
802
{48000, (6 << 1) | 0}
803
};
804
805
int i, n, selected = -1;
806
807
n = sizeof(speed_table) / sizeof(speed_struct);
808
809
if (arg <= 0)
810
return portc->speed;
811
812
if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* AD1845 has different timer than others */
813
{
814
if (arg < 4000)
815
arg = 4000;
816
if (arg > 50000)
817
arg = 50000;
818
819
portc->speed = arg;
820
portc->speed_bits = speed_table[3].bits;
821
return portc->speed;
822
}
823
if (arg < speed_table[0].speed)
824
selected = 0;
825
if (arg > speed_table[n - 1].speed)
826
selected = n - 1;
827
828
for (i = 1 /*really */ ; selected == -1 && i < n; i++)
829
{
830
if (speed_table[i].speed == arg)
831
selected = i;
832
else if (speed_table[i].speed > arg)
833
{
834
int diff1, diff2;
835
836
diff1 = arg - speed_table[i - 1].speed;
837
diff2 = speed_table[i].speed - arg;
838
839
if (diff1 < diff2)
840
selected = i - 1;
841
else
842
selected = i;
843
}
844
}
845
if (selected == -1)
846
{
847
printk(KERN_WARNING "ad1848: Can't find speed???\n");
848
selected = 3;
849
}
850
portc->speed = speed_table[selected].speed;
851
portc->speed_bits = speed_table[selected].bits;
852
return portc->speed;
853
}
854
855
static short ad1848_set_channels(int dev, short arg)
856
{
857
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
858
859
if (arg != 1 && arg != 2)
860
return portc->channels;
861
862
portc->channels = arg;
863
return arg;
864
}
865
866
static unsigned int ad1848_set_bits(int dev, unsigned int arg)
867
{
868
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
869
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
870
871
static struct format_tbl
872
{
873
int format;
874
unsigned char bits;
875
}
876
format2bits[] =
877
{
878
{
879
0, 0
880
}
881
,
882
{
883
AFMT_MU_LAW, 1
884
}
885
,
886
{
887
AFMT_A_LAW, 3
888
}
889
,
890
{
891
AFMT_IMA_ADPCM, 5
892
}
893
,
894
{
895
AFMT_U8, 0
896
}
897
,
898
{
899
AFMT_S16_LE, 2
900
}
901
,
902
{
903
AFMT_S16_BE, 6
904
}
905
,
906
{
907
AFMT_S8, 0
908
}
909
,
910
{
911
AFMT_U16_LE, 0
912
}
913
,
914
{
915
AFMT_U16_BE, 0
916
}
917
};
918
int i, n = sizeof(format2bits) / sizeof(struct format_tbl);
919
920
if (arg == 0)
921
return portc->audio_format;
922
923
if (!(arg & ad_format_mask[devc->model]))
924
arg = AFMT_U8;
925
926
portc->audio_format = arg;
927
928
for (i = 0; i < n; i++)
929
if (format2bits[i].format == arg)
930
{
931
if ((portc->format_bits = format2bits[i].bits) == 0)
932
return portc->audio_format = AFMT_U8; /* Was not supported */
933
934
return arg;
935
}
936
/* Still hanging here. Something must be terribly wrong */
937
portc->format_bits = 0;
938
return portc->audio_format = AFMT_U8;
939
}
940
941
static struct audio_driver ad1848_audio_driver =
942
{
943
.owner = THIS_MODULE,
944
.open = ad1848_open,
945
.close = ad1848_close,
946
.output_block = ad1848_output_block,
947
.start_input = ad1848_start_input,
948
.prepare_for_input = ad1848_prepare_for_input,
949
.prepare_for_output = ad1848_prepare_for_output,
950
.halt_io = ad1848_halt,
951
.halt_input = ad1848_halt_input,
952
.halt_output = ad1848_halt_output,
953
.trigger = ad1848_trigger,
954
.set_speed = ad1848_set_speed,
955
.set_bits = ad1848_set_bits,
956
.set_channels = ad1848_set_channels
957
};
958
959
static struct mixer_operations ad1848_mixer_operations =
960
{
961
.owner = THIS_MODULE,
962
.id = "SOUNDPORT",
963
.name = "AD1848/CS4248/CS4231",
964
.ioctl = ad1848_mixer_ioctl
965
};
966
967
static int ad1848_open(int dev, int mode)
968
{
969
ad1848_info *devc;
970
ad1848_port_info *portc;
971
unsigned long flags;
972
973
if (dev < 0 || dev >= num_audiodevs)
974
return -ENXIO;
975
976
devc = (ad1848_info *) audio_devs[dev]->devc;
977
portc = (ad1848_port_info *) audio_devs[dev]->portc;
978
979
/* here we don't have to protect against intr */
980
spin_lock(&devc->lock);
981
if (portc->open_mode || (devc->open_mode & mode))
982
{
983
spin_unlock(&devc->lock);
984
return -EBUSY;
985
}
986
devc->dual_dma = 0;
987
988
if (audio_devs[dev]->flags & DMA_DUPLEX)
989
{
990
devc->dual_dma = 1;
991
}
992
devc->intr_active = 0;
993
devc->audio_mode = 0;
994
devc->open_mode |= mode;
995
portc->open_mode = mode;
996
spin_unlock(&devc->lock);
997
ad1848_trigger(dev, 0);
998
999
if (mode & OPEN_READ)
1000
devc->record_dev = dev;
1001
if (mode & OPEN_WRITE)
1002
devc->playback_dev = dev;
1003
/*
1004
* Mute output until the playback really starts. This decreases clicking (hope so).
1005
*/
1006
spin_lock_irqsave(&devc->lock,flags);
1007
ad_mute(devc);
1008
spin_unlock_irqrestore(&devc->lock,flags);
1009
1010
return 0;
1011
}
1012
1013
static void ad1848_close(int dev)
1014
{
1015
unsigned long flags;
1016
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1017
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1018
1019
DEB(printk("ad1848_close(void)\n"));
1020
1021
devc->intr_active = 0;
1022
ad1848_halt(dev);
1023
1024
spin_lock_irqsave(&devc->lock,flags);
1025
1026
devc->audio_mode = 0;
1027
devc->open_mode &= ~portc->open_mode;
1028
portc->open_mode = 0;
1029
1030
ad_unmute(devc);
1031
spin_unlock_irqrestore(&devc->lock,flags);
1032
}
1033
1034
static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag)
1035
{
1036
unsigned long flags, cnt;
1037
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1038
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1039
1040
cnt = count;
1041
1042
if (portc->audio_format == AFMT_IMA_ADPCM)
1043
{
1044
cnt /= 4;
1045
}
1046
else
1047
{
1048
if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1049
cnt >>= 1;
1050
}
1051
if (portc->channels > 1)
1052
cnt >>= 1;
1053
cnt--;
1054
1055
if ((devc->audio_mode & PCM_ENABLE_OUTPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1056
intrflag &&
1057
cnt == devc->xfer_count)
1058
{
1059
devc->audio_mode |= PCM_ENABLE_OUTPUT;
1060
devc->intr_active = 1;
1061
return; /*
1062
* Auto DMA mode on. No need to react
1063
*/
1064
}
1065
spin_lock_irqsave(&devc->lock,flags);
1066
1067
ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1068
ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1069
1070
devc->xfer_count = cnt;
1071
devc->audio_mode |= PCM_ENABLE_OUTPUT;
1072
devc->intr_active = 1;
1073
spin_unlock_irqrestore(&devc->lock,flags);
1074
}
1075
1076
static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag)
1077
{
1078
unsigned long flags, cnt;
1079
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1080
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1081
1082
cnt = count;
1083
if (portc->audio_format == AFMT_IMA_ADPCM)
1084
{
1085
cnt /= 4;
1086
}
1087
else
1088
{
1089
if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1090
cnt >>= 1;
1091
}
1092
if (portc->channels > 1)
1093
cnt >>= 1;
1094
cnt--;
1095
1096
if ((devc->audio_mode & PCM_ENABLE_INPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1097
intrflag &&
1098
cnt == devc->xfer_count)
1099
{
1100
devc->audio_mode |= PCM_ENABLE_INPUT;
1101
devc->intr_active = 1;
1102
return; /*
1103
* Auto DMA mode on. No need to react
1104
*/
1105
}
1106
spin_lock_irqsave(&devc->lock,flags);
1107
1108
if (devc->model == MD_1848)
1109
{
1110
ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1111
ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1112
}
1113
else
1114
{
1115
ad_write(devc, 31, (unsigned char) (cnt & 0xff));
1116
ad_write(devc, 30, (unsigned char) ((cnt >> 8) & 0xff));
1117
}
1118
1119
ad_unmute(devc);
1120
1121
devc->xfer_count = cnt;
1122
devc->audio_mode |= PCM_ENABLE_INPUT;
1123
devc->intr_active = 1;
1124
spin_unlock_irqrestore(&devc->lock,flags);
1125
}
1126
1127
static int ad1848_prepare_for_output(int dev, int bsize, int bcount)
1128
{
1129
int timeout;
1130
unsigned char fs, old_fs, tmp = 0;
1131
unsigned long flags;
1132
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1133
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1134
1135
ad_mute(devc);
1136
1137
spin_lock_irqsave(&devc->lock,flags);
1138
fs = portc->speed_bits | (portc->format_bits << 5);
1139
1140
if (portc->channels > 1)
1141
fs |= 0x10;
1142
1143
ad_enter_MCE(devc); /* Enables changes to the format select reg */
1144
1145
if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* Use alternate speed select registers */
1146
{
1147
fs &= 0xf0; /* Mask off the rate select bits */
1148
1149
ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1150
ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1151
}
1152
old_fs = ad_read(devc, 8);
1153
1154
if (devc->model == MD_4232 || devc->model >= MD_4236)
1155
{
1156
tmp = ad_read(devc, 16);
1157
ad_write(devc, 16, tmp | 0x30);
1158
}
1159
if (devc->model == MD_IWAVE)
1160
ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1161
1162
ad_write(devc, 8, fs);
1163
1164
/*
1165
* Write to I8 starts resynchronization. Wait until it completes.
1166
*/
1167
1168
timeout = 0;
1169
while (timeout < 100 && inb(devc->base) != 0x80)
1170
timeout++;
1171
timeout = 0;
1172
while (timeout < 10000 && inb(devc->base) == 0x80)
1173
timeout++;
1174
1175
if (devc->model >= MD_4232)
1176
ad_write(devc, 16, tmp & ~0x30);
1177
1178
ad_leave_MCE(devc); /*
1179
* Starts the calibration process.
1180
*/
1181
spin_unlock_irqrestore(&devc->lock,flags);
1182
devc->xfer_count = 0;
1183
1184
#ifndef EXCLUDE_TIMERS
1185
if (dev == timer_installed && devc->timer_running)
1186
if ((fs & 0x01) != (old_fs & 0x01))
1187
{
1188
ad1848_tmr_reprogram(dev);
1189
}
1190
#endif
1191
ad1848_halt_output(dev);
1192
return 0;
1193
}
1194
1195
static int ad1848_prepare_for_input(int dev, int bsize, int bcount)
1196
{
1197
int timeout;
1198
unsigned char fs, old_fs, tmp = 0;
1199
unsigned long flags;
1200
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1201
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1202
1203
if (devc->audio_mode)
1204
return 0;
1205
1206
spin_lock_irqsave(&devc->lock,flags);
1207
fs = portc->speed_bits | (portc->format_bits << 5);
1208
1209
if (portc->channels > 1)
1210
fs |= 0x10;
1211
1212
ad_enter_MCE(devc); /* Enables changes to the format select reg */
1213
1214
if ((devc->model == MD_1845) || (devc->model == MD_1845_SSCAPE)) /* Use alternate speed select registers */
1215
{
1216
fs &= 0xf0; /* Mask off the rate select bits */
1217
1218
ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1219
ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1220
}
1221
if (devc->model == MD_4232)
1222
{
1223
tmp = ad_read(devc, 16);
1224
ad_write(devc, 16, tmp | 0x30);
1225
}
1226
if (devc->model == MD_IWAVE)
1227
ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1228
1229
/*
1230
* If mode >= 2 (CS4231), set I28. It's the capture format register.
1231
*/
1232
1233
if (devc->model != MD_1848)
1234
{
1235
old_fs = ad_read(devc, 28);
1236
ad_write(devc, 28, fs);
1237
1238
/*
1239
* Write to I28 starts resynchronization. Wait until it completes.
1240
*/
1241
1242
timeout = 0;
1243
while (timeout < 100 && inb(devc->base) != 0x80)
1244
timeout++;
1245
1246
timeout = 0;
1247
while (timeout < 10000 && inb(devc->base) == 0x80)
1248
timeout++;
1249
1250
if (devc->model != MD_1848 && devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
1251
{
1252
/*
1253
* CS4231 compatible devices don't have separate sampling rate selection
1254
* register for recording an playback. The I8 register is shared so we have to
1255
* set the speed encoding bits of it too.
1256
*/
1257
unsigned char tmp = portc->speed_bits | (ad_read(devc, 8) & 0xf0);
1258
1259
ad_write(devc, 8, tmp);
1260
/*
1261
* Write to I8 starts resynchronization. Wait until it completes.
1262
*/
1263
timeout = 0;
1264
while (timeout < 100 && inb(devc->base) != 0x80)
1265
timeout++;
1266
1267
timeout = 0;
1268
while (timeout < 10000 && inb(devc->base) == 0x80)
1269
timeout++;
1270
}
1271
}
1272
else
1273
{ /* For AD1848 set I8. */
1274
1275
old_fs = ad_read(devc, 8);
1276
ad_write(devc, 8, fs);
1277
/*
1278
* Write to I8 starts resynchronization. Wait until it completes.
1279
*/
1280
timeout = 0;
1281
while (timeout < 100 && inb(devc->base) != 0x80)
1282
timeout++;
1283
timeout = 0;
1284
while (timeout < 10000 && inb(devc->base) == 0x80)
1285
timeout++;
1286
}
1287
1288
if (devc->model == MD_4232)
1289
ad_write(devc, 16, tmp & ~0x30);
1290
1291
ad_leave_MCE(devc); /*
1292
* Starts the calibration process.
1293
*/
1294
spin_unlock_irqrestore(&devc->lock,flags);
1295
devc->xfer_count = 0;
1296
1297
#ifndef EXCLUDE_TIMERS
1298
if (dev == timer_installed && devc->timer_running)
1299
{
1300
if ((fs & 0x01) != (old_fs & 0x01))
1301
{
1302
ad1848_tmr_reprogram(dev);
1303
}
1304
}
1305
#endif
1306
ad1848_halt_input(dev);
1307
return 0;
1308
}
1309
1310
static void ad1848_halt(int dev)
1311
{
1312
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1313
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1314
1315
unsigned char bits = ad_read(devc, 9);
1316
1317
if (bits & 0x01 && (portc->open_mode & OPEN_WRITE))
1318
ad1848_halt_output(dev);
1319
1320
if (bits & 0x02 && (portc->open_mode & OPEN_READ))
1321
ad1848_halt_input(dev);
1322
devc->audio_mode = 0;
1323
}
1324
1325
static void ad1848_halt_input(int dev)
1326
{
1327
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1328
unsigned long flags;
1329
1330
if (!(ad_read(devc, 9) & 0x02))
1331
return; /* Capture not enabled */
1332
1333
spin_lock_irqsave(&devc->lock,flags);
1334
1335
ad_mute(devc);
1336
1337
{
1338
int tmout;
1339
1340
if(!isa_dma_bridge_buggy)
1341
disable_dma(audio_devs[dev]->dmap_in->dma);
1342
1343
for (tmout = 0; tmout < 100000; tmout++)
1344
if (ad_read(devc, 11) & 0x10)
1345
break;
1346
ad_write(devc, 9, ad_read(devc, 9) & ~0x02); /* Stop capture */
1347
1348
if(!isa_dma_bridge_buggy)
1349
enable_dma(audio_devs[dev]->dmap_in->dma);
1350
devc->audio_mode &= ~PCM_ENABLE_INPUT;
1351
}
1352
1353
outb(0, io_Status(devc)); /* Clear interrupt status */
1354
outb(0, io_Status(devc)); /* Clear interrupt status */
1355
1356
devc->audio_mode &= ~PCM_ENABLE_INPUT;
1357
1358
spin_unlock_irqrestore(&devc->lock,flags);
1359
}
1360
1361
static void ad1848_halt_output(int dev)
1362
{
1363
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1364
unsigned long flags;
1365
1366
if (!(ad_read(devc, 9) & 0x01))
1367
return; /* Playback not enabled */
1368
1369
spin_lock_irqsave(&devc->lock,flags);
1370
1371
ad_mute(devc);
1372
{
1373
int tmout;
1374
1375
if(!isa_dma_bridge_buggy)
1376
disable_dma(audio_devs[dev]->dmap_out->dma);
1377
1378
for (tmout = 0; tmout < 100000; tmout++)
1379
if (ad_read(devc, 11) & 0x10)
1380
break;
1381
ad_write(devc, 9, ad_read(devc, 9) & ~0x01); /* Stop playback */
1382
1383
if(!isa_dma_bridge_buggy)
1384
enable_dma(audio_devs[dev]->dmap_out->dma);
1385
1386
devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1387
}
1388
1389
outb((0), io_Status(devc)); /* Clear interrupt status */
1390
outb((0), io_Status(devc)); /* Clear interrupt status */
1391
1392
devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1393
1394
spin_unlock_irqrestore(&devc->lock,flags);
1395
}
1396
1397
static void ad1848_trigger(int dev, int state)
1398
{
1399
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1400
ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1401
unsigned long flags;
1402
unsigned char tmp, old;
1403
1404
spin_lock_irqsave(&devc->lock,flags);
1405
state &= devc->audio_mode;
1406
1407
tmp = old = ad_read(devc, 9);
1408
1409
if (portc->open_mode & OPEN_READ)
1410
{
1411
if (state & PCM_ENABLE_INPUT)
1412
tmp |= 0x02;
1413
else
1414
tmp &= ~0x02;
1415
}
1416
if (portc->open_mode & OPEN_WRITE)
1417
{
1418
if (state & PCM_ENABLE_OUTPUT)
1419
tmp |= 0x01;
1420
else
1421
tmp &= ~0x01;
1422
}
1423
/* ad_mute(devc); */
1424
if (tmp != old)
1425
{
1426
ad_write(devc, 9, tmp);
1427
ad_unmute(devc);
1428
}
1429
spin_unlock_irqrestore(&devc->lock,flags);
1430
}
1431
1432
static void ad1848_init_hw(ad1848_info * devc)
1433
{
1434
int i;
1435
int *init_values;
1436
1437
/*
1438
* Initial values for the indirect registers of CS4248/AD1848.
1439
*/
1440
static int init_values_a[] =
1441
{
1442
0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1443
0x00, 0x0c, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00,
1444
1445
/* Positions 16 to 31 just for CS4231/2 and ad1845 */
1446
0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1447
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1448
};
1449
1450
static int init_values_b[] =
1451
{
1452
/*
1453
Values for the newer chips
1454
Some of the register initialization values were changed. In
1455
order to get rid of the click that preceded PCM playback,
1456
calibration was disabled on the 10th byte. On that same byte,
1457
dual DMA was enabled; on the 11th byte, ADC dithering was
1458
enabled, since that is theoretically desirable; on the 13th
1459
byte, Mode 3 was selected, to enable access to extended
1460
registers.
1461
*/
1462
0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1463
0x00, 0x00, 0x06, 0x00, 0xe0, 0x01, 0x00, 0x00,
1464
0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1465
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1466
};
1467
1468
/*
1469
* Select initialisation data
1470
*/
1471
1472
init_values = init_values_a;
1473
if(devc->model >= MD_4236)
1474
init_values = init_values_b;
1475
1476
for (i = 0; i < 16; i++)
1477
ad_write(devc, i, init_values[i]);
1478
1479
1480
ad_mute(devc); /* Initialize some variables */
1481
ad_unmute(devc); /* Leave it unmuted now */
1482
1483
if (devc->model > MD_1848)
1484
{
1485
if (devc->model == MD_1845_SSCAPE)
1486
ad_write(devc, 12, ad_read(devc, 12) | 0x50);
1487
else
1488
ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1489
1490
if (devc->model == MD_IWAVE)
1491
ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1492
1493
if (devc->model != MD_1845_SSCAPE)
1494
for (i = 16; i < 32; i++)
1495
ad_write(devc, i, init_values[i]);
1496
1497
if (devc->model == MD_IWAVE)
1498
ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1499
}
1500
if (devc->model > MD_1848)
1501
{
1502
if (devc->audio_flags & DMA_DUPLEX)
1503
ad_write(devc, 9, ad_read(devc, 9) & ~0x04); /* Dual DMA mode */
1504
else
1505
ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1506
1507
if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
1508
ad_write(devc, 27, ad_read(devc, 27) | 0x08); /* Alternate freq select enabled */
1509
1510
if (devc->model == MD_IWAVE)
1511
{ /* Some magic Interwave specific initialization */
1512
ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1513
ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1514
ad_write(devc, 17, 0xc2); /* Alternate feature enable */
1515
}
1516
}
1517
else
1518
{
1519
devc->audio_flags &= ~DMA_DUPLEX;
1520
ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1521
if (soundpro)
1522
ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1523
}
1524
1525
outb((0), io_Status(devc)); /* Clear pending interrupts */
1526
1527
/*
1528
* Toggle the MCE bit. It completes the initialization phase.
1529
*/
1530
1531
ad_enter_MCE(devc); /* In case the bit was off */
1532
ad_leave_MCE(devc);
1533
1534
ad1848_mixer_reset(devc);
1535
}
1536
1537
int ad1848_detect(struct resource *ports, int *ad_flags, int *osp)
1538
{
1539
unsigned char tmp;
1540
ad1848_info *devc = &adev_info[nr_ad1848_devs];
1541
unsigned char tmp1 = 0xff, tmp2 = 0xff;
1542
int optiC930 = 0; /* OPTi 82C930 flag */
1543
int interwave = 0;
1544
int ad1847_flag = 0;
1545
int cs4248_flag = 0;
1546
int sscape_flag = 0;
1547
int io_base = ports->start;
1548
1549
int i;
1550
1551
DDB(printk("ad1848_detect(%x)\n", io_base));
1552
1553
if (ad_flags)
1554
{
1555
if (*ad_flags == 0x12345678)
1556
{
1557
interwave = 1;
1558
*ad_flags = 0;
1559
}
1560
1561
if (*ad_flags == 0x87654321)
1562
{
1563
sscape_flag = 1;
1564
*ad_flags = 0;
1565
}
1566
1567
if (*ad_flags == 0x12345677)
1568
{
1569
cs4248_flag = 1;
1570
*ad_flags = 0;
1571
}
1572
}
1573
if (nr_ad1848_devs >= MAX_AUDIO_DEV)
1574
{
1575
printk(KERN_ERR "ad1848 - Too many audio devices\n");
1576
return 0;
1577
}
1578
spin_lock_init(&devc->lock);
1579
devc->base = io_base;
1580
devc->irq_ok = 0;
1581
devc->timer_running = 0;
1582
devc->MCE_bit = 0x40;
1583
devc->irq = 0;
1584
devc->open_mode = 0;
1585
devc->chip_name = devc->name = "AD1848";
1586
devc->model = MD_1848; /* AD1848 or CS4248 */
1587
devc->levels = NULL;
1588
devc->debug_flag = 0;
1589
1590
/*
1591
* Check that the I/O address is in use.
1592
*
1593
* The bit 0x80 of the base I/O port is known to be 0 after the
1594
* chip has performed its power on initialization. Just assume
1595
* this has happened before the OS is starting.
1596
*
1597
* If the I/O address is unused, it typically returns 0xff.
1598
*/
1599
1600
if (inb(devc->base) == 0xff)
1601
{
1602
DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1603
}
1604
1605
/*
1606
* Wait for the device to stop initialization
1607
*/
1608
1609
DDB(printk("ad1848_detect() - step 0\n"));
1610
1611
for (i = 0; i < 10000000; i++)
1612
{
1613
unsigned char x = inb(devc->base);
1614
1615
if (x == 0xff || !(x & 0x80))
1616
break;
1617
}
1618
1619
DDB(printk("ad1848_detect() - step A\n"));
1620
1621
if (inb(devc->base) == 0x80) /* Not ready. Let's wait */
1622
ad_leave_MCE(devc);
1623
1624
if ((inb(devc->base) & 0x80) != 0x00) /* Not a AD1848 */
1625
{
1626
DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc->base)));
1627
return 0;
1628
}
1629
1630
/*
1631
* Test if it's possible to change contents of the indirect registers.
1632
* Registers 0 and 1 are ADC volume registers. The bit 0x10 is read only
1633
* so try to avoid using it.
1634
*/
1635
1636
DDB(printk("ad1848_detect() - step B\n"));
1637
ad_write(devc, 0, 0xaa);
1638
ad_write(devc, 1, 0x45); /* 0x55 with bit 0x10 clear */
1639
1640
if ((tmp1 = ad_read(devc, 0)) != 0xaa || (tmp2 = ad_read(devc, 1)) != 0x45)
1641
{
1642
if (tmp2 == 0x65) /* AD1847 has couple of bits hardcoded to 1 */
1643
ad1847_flag = 1;
1644
else
1645
{
1646
DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1, tmp2));
1647
return 0;
1648
}
1649
}
1650
DDB(printk("ad1848_detect() - step C\n"));
1651
ad_write(devc, 0, 0x45);
1652
ad_write(devc, 1, 0xaa);
1653
1654
if ((tmp1 = ad_read(devc, 0)) != 0x45 || (tmp2 = ad_read(devc, 1)) != 0xaa)
1655
{
1656
if (tmp2 == 0x8a) /* AD1847 has few bits hardcoded to 1 */
1657
ad1847_flag = 1;
1658
else
1659
{
1660
DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1, tmp2));
1661
return 0;
1662
}
1663
}
1664
1665
/*
1666
* The indirect register I12 has some read only bits. Let's
1667
* try to change them.
1668
*/
1669
1670
DDB(printk("ad1848_detect() - step D\n"));
1671
tmp = ad_read(devc, 12);
1672
ad_write(devc, 12, (~tmp) & 0x0f);
1673
1674
if ((tmp & 0x0f) != ((tmp1 = ad_read(devc, 12)) & 0x0f))
1675
{
1676
DDB(printk("ad1848 detect error - step D (%x)\n", tmp1));
1677
return 0;
1678
}
1679
1680
/*
1681
* NOTE! Last 4 bits of the reg I12 tell the chip revision.
1682
* 0x01=RevB and 0x0A=RevC.
1683
*/
1684
1685
/*
1686
* The original AD1848/CS4248 has just 15 indirect registers. This means
1687
* that I0 and I16 should return the same value (etc.).
1688
* However this doesn't work with CS4248. Actually it seems to be impossible
1689
* to detect if the chip is a CS4231 or CS4248.
1690
* Ensure that the Mode2 enable bit of I12 is 0. Otherwise this test fails
1691
* with CS4231.
1692
*/
1693
1694
/*
1695
* OPTi 82C930 has mode2 control bit in another place. This test will fail
1696
* with it. Accept this situation as a possible indication of this chip.
1697
*/
1698
1699
DDB(printk("ad1848_detect() - step F\n"));
1700
ad_write(devc, 12, 0); /* Mode2=disabled */
1701
1702
for (i = 0; i < 16; i++)
1703
{
1704
if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16)))
1705
{
1706
DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i, tmp1, tmp2));
1707
if (!ad1847_flag)
1708
optiC930 = 1;
1709
break;
1710
}
1711
}
1712
1713
/*
1714
* Try to switch the chip to mode2 (CS4231) by setting the MODE2 bit (0x40).
1715
* The bit 0x80 is always 1 in CS4248 and CS4231.
1716
*/
1717
1718
DDB(printk("ad1848_detect() - step G\n"));
1719
1720
if (ad_flags && *ad_flags == 400)
1721
*ad_flags = 0;
1722
else
1723
ad_write(devc, 12, 0x40); /* Set mode2, clear 0x80 */
1724
1725
1726
if (ad_flags)
1727
*ad_flags = 0;
1728
1729
tmp1 = ad_read(devc, 12);
1730
if (tmp1 & 0x80)
1731
{
1732
if (ad_flags)
1733
*ad_flags |= AD_F_CS4248;
1734
1735
devc->chip_name = "CS4248"; /* Our best knowledge just now */
1736
}
1737
if (optiC930 || (tmp1 & 0xc0) == (0x80 | 0x40))
1738
{
1739
/*
1740
* CS4231 detected - is it?
1741
*
1742
* Verify that setting I0 doesn't change I16.
1743
*/
1744
1745
DDB(printk("ad1848_detect() - step H\n"));
1746
ad_write(devc, 16, 0); /* Set I16 to known value */
1747
1748
ad_write(devc, 0, 0x45);
1749
if ((tmp1 = ad_read(devc, 16)) != 0x45) /* No change -> CS4231? */
1750
{
1751
ad_write(devc, 0, 0xaa);
1752
if ((tmp1 = ad_read(devc, 16)) == 0xaa) /* Rotten bits? */
1753
{
1754
DDB(printk("ad1848 detect error - step H(%x)\n", tmp1));
1755
return 0;
1756
}
1757
1758
/*
1759
* Verify that some bits of I25 are read only.
1760
*/
1761
1762
DDB(printk("ad1848_detect() - step I\n"));
1763
tmp1 = ad_read(devc, 25); /* Original bits */
1764
ad_write(devc, 25, ~tmp1); /* Invert all bits */
1765
if ((ad_read(devc, 25) & 0xe7) == (tmp1 & 0xe7))
1766
{
1767
int id;
1768
1769
/*
1770
* It's at least CS4231
1771
*/
1772
1773
devc->chip_name = "CS4231";
1774
devc->model = MD_4231;
1775
1776
/*
1777
* It could be an AD1845 or CS4231A as well.
1778
* CS4231 and AD1845 report the same revision info in I25
1779
* while the CS4231A reports different.
1780
*/
1781
1782
id = ad_read(devc, 25);
1783
if ((id & 0xe7) == 0x80) /* Device busy??? */
1784
id = ad_read(devc, 25);
1785
if ((id & 0xe7) == 0x80) /* Device still busy??? */
1786
id = ad_read(devc, 25);
1787
DDB(printk("ad1848_detect() - step J (%02x/%02x)\n", id, ad_read(devc, 25)));
1788
1789
if ((id & 0xe7) == 0x80) {
1790
/*
1791
* It must be a CS4231 or AD1845. The register I23 of
1792
* CS4231 is undefined and it appears to be read only.
1793
* AD1845 uses I23 for setting sample rate. Assume
1794
* the chip is AD1845 if I23 is changeable.
1795
*/
1796
1797
unsigned char tmp = ad_read(devc, 23);
1798
ad_write(devc, 23, ~tmp);
1799
1800
if (interwave)
1801
{
1802
devc->model = MD_IWAVE;
1803
devc->chip_name = "IWave";
1804
}
1805
else if (ad_read(devc, 23) != tmp) /* AD1845 ? */
1806
{
1807
devc->chip_name = "AD1845";
1808
devc->model = MD_1845;
1809
}
1810
else if (cs4248_flag)
1811
{
1812
if (ad_flags)
1813
*ad_flags |= AD_F_CS4248;
1814
devc->chip_name = "CS4248";
1815
devc->model = MD_1848;
1816
ad_write(devc, 12, ad_read(devc, 12) & ~0x40); /* Mode2 off */
1817
}
1818
ad_write(devc, 23, tmp); /* Restore */
1819
}
1820
else
1821
{
1822
switch (id & 0x1f) {
1823
case 3: /* CS4236/CS4235/CS42xB/CS4239 */
1824
{
1825
int xid;
1826
ad_write(devc, 12, ad_read(devc, 12) | 0x60); /* switch to mode 3 */
1827
ad_write(devc, 23, 0x9c); /* select extended register 25 */
1828
xid = inb(io_Indexed_Data(devc));
1829
ad_write(devc, 12, ad_read(devc, 12) & ~0x60); /* back to mode 0 */
1830
switch (xid & 0x1f)
1831
{
1832
case 0x00:
1833
devc->chip_name = "CS4237B(B)";
1834
devc->model = MD_42xB;
1835
break;
1836
case 0x08:
1837
/* Seems to be a 4238 ?? */
1838
devc->chip_name = "CS4238";
1839
devc->model = MD_42xB;
1840
break;
1841
case 0x09:
1842
devc->chip_name = "CS4238B";
1843
devc->model = MD_42xB;
1844
break;
1845
case 0x0b:
1846
devc->chip_name = "CS4236B";
1847
devc->model = MD_4236;
1848
break;
1849
case 0x10:
1850
devc->chip_name = "CS4237B";
1851
devc->model = MD_42xB;
1852
break;
1853
case 0x1d:
1854
devc->chip_name = "CS4235";
1855
devc->model = MD_4235;
1856
break;
1857
case 0x1e:
1858
devc->chip_name = "CS4239";
1859
devc->model = MD_4239;
1860
break;
1861
default:
1862
printk("Chip ident is %X.\n", xid&0x1F);
1863
devc->chip_name = "CS42xx";
1864
devc->model = MD_4232;
1865
break;
1866
}
1867
}
1868
break;
1869
1870
case 2: /* CS4232/CS4232A */
1871
devc->chip_name = "CS4232";
1872
devc->model = MD_4232;
1873
break;
1874
1875
case 0:
1876
if ((id & 0xe0) == 0xa0)
1877
{
1878
devc->chip_name = "CS4231A";
1879
devc->model = MD_4231A;
1880
}
1881
else
1882
{
1883
devc->chip_name = "CS4321";
1884
devc->model = MD_4231;
1885
}
1886
break;
1887
1888
default: /* maybe */
1889
DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc, 25), ad_read(devc, 25) & 0xe7));
1890
if (optiC930)
1891
{
1892
devc->chip_name = "82C930";
1893
devc->model = MD_C930;
1894
}
1895
else
1896
{
1897
devc->chip_name = "CS4231";
1898
devc->model = MD_4231;
1899
}
1900
}
1901
}
1902
}
1903
ad_write(devc, 25, tmp1); /* Restore bits */
1904
1905
DDB(printk("ad1848_detect() - step K\n"));
1906
}
1907
} else if (tmp1 == 0x0a) {
1908
/*
1909
* Is it perhaps a SoundPro CMI8330?
1910
* If so, then we should be able to change indirect registers
1911
* greater than I15 after activating MODE2, even though reading
1912
* back I12 does not show it.
1913
*/
1914
1915
/*
1916
* Let's try comparing register values
1917
*/
1918
for (i = 0; i < 16; i++) {
1919
if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16))) {
1920
DDB(printk("ad1848 detect step H(%d/%x/%x) - SoundPro chip?\n", i, tmp1, tmp2));
1921
soundpro = 1;
1922
devc->chip_name = "SoundPro CMI 8330";
1923
break;
1924
}
1925
}
1926
}
1927
1928
DDB(printk("ad1848_detect() - step L\n"));
1929
if (ad_flags)
1930
{
1931
if (devc->model != MD_1848)
1932
*ad_flags |= AD_F_CS4231;
1933
}
1934
DDB(printk("ad1848_detect() - Detected OK\n"));
1935
1936
if (devc->model == MD_1848 && ad1847_flag)
1937
devc->chip_name = "AD1847";
1938
1939
1940
if (sscape_flag == 1)
1941
devc->model = MD_1845_SSCAPE;
1942
1943
return 1;
1944
}
1945
1946
int ad1848_init (char *name, struct resource *ports, int irq, int dma_playback,
1947
int dma_capture, int share_dma, int *osp, struct module *owner)
1948
{
1949
/*
1950
* NOTE! If irq < 0, there is another driver which has allocated the IRQ
1951
* so that this driver doesn't need to allocate/deallocate it.
1952
* The actually used IRQ is ABS(irq).
1953
*/
1954
1955
int my_dev;
1956
char dev_name[100];
1957
int e;
1958
1959
ad1848_info *devc = &adev_info[nr_ad1848_devs];
1960
1961
ad1848_port_info *portc = NULL;
1962
1963
devc->irq = (irq > 0) ? irq : 0;
1964
devc->open_mode = 0;
1965
devc->timer_ticks = 0;
1966
devc->dma1 = dma_playback;
1967
devc->dma2 = dma_capture;
1968
devc->subtype = cfg.card_subtype;
1969
devc->audio_flags = DMA_AUTOMODE;
1970
devc->playback_dev = devc->record_dev = 0;
1971
if (name != NULL)
1972
devc->name = name;
1973
1974
if (name != NULL && name[0] != 0)
1975
sprintf(dev_name,
1976
"%s (%s)", name, devc->chip_name);
1977
else
1978
sprintf(dev_name,
1979
"Generic audio codec (%s)", devc->chip_name);
1980
1981
rename_region(ports, devc->name);
1982
1983
conf_printf2(dev_name, devc->base, devc->irq, dma_playback, dma_capture);
1984
1985
if (devc->model == MD_1848 || devc->model == MD_C930)
1986
devc->audio_flags |= DMA_HARDSTOP;
1987
1988
if (devc->model > MD_1848)
1989
{
1990
if (devc->dma1 == devc->dma2 || devc->dma2 == -1 || devc->dma1 == -1)
1991
devc->audio_flags &= ~DMA_DUPLEX;
1992
else
1993
devc->audio_flags |= DMA_DUPLEX;
1994
}
1995
1996
portc = kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
1997
if(portc==NULL) {
1998
release_region(devc->base, 4);
1999
return -1;
2000
}
2001
2002
if ((my_dev = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
2003
dev_name,
2004
&ad1848_audio_driver,
2005
sizeof(struct audio_driver),
2006
devc->audio_flags,
2007
ad_format_mask[devc->model],
2008
devc,
2009
dma_playback,
2010
dma_capture)) < 0)
2011
{
2012
release_region(devc->base, 4);
2013
kfree(portc);
2014
return -1;
2015
}
2016
2017
audio_devs[my_dev]->portc = portc;
2018
audio_devs[my_dev]->mixer_dev = -1;
2019
if (owner)
2020
audio_devs[my_dev]->d->owner = owner;
2021
memset((char *) portc, 0, sizeof(*portc));
2022
2023
nr_ad1848_devs++;
2024
2025
ad1848_init_hw(devc);
2026
2027
if (irq > 0)
2028
{
2029
devc->dev_no = my_dev;
2030
if (request_irq(devc->irq, adintr, 0, devc->name,
2031
(void *)(long)my_dev) < 0)
2032
{
2033
printk(KERN_WARNING "ad1848: Unable to allocate IRQ\n");
2034
/* Don't free it either then.. */
2035
devc->irq = 0;
2036
}
2037
if (capabilities[devc->model].flags & CAP_F_TIMER)
2038
{
2039
#ifndef CONFIG_SMP
2040
int x;
2041
unsigned char tmp = ad_read(devc, 16);
2042
#endif
2043
2044
devc->timer_ticks = 0;
2045
2046
ad_write(devc, 21, 0x00); /* Timer MSB */
2047
ad_write(devc, 20, 0x10); /* Timer LSB */
2048
#ifndef CONFIG_SMP
2049
ad_write(devc, 16, tmp | 0x40); /* Enable timer */
2050
for (x = 0; x < 100000 && devc->timer_ticks == 0; x++);
2051
ad_write(devc, 16, tmp & ~0x40); /* Disable timer */
2052
2053
if (devc->timer_ticks == 0)
2054
printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
2055
else
2056
{
2057
DDB(printk("Interrupt test OK\n"));
2058
devc->irq_ok = 1;
2059
}
2060
#else
2061
devc->irq_ok = 1;
2062
#endif
2063
}
2064
else
2065
devc->irq_ok = 1; /* Couldn't test. assume it's OK */
2066
} else if (irq < 0)
2067
irq2dev[-irq] = devc->dev_no = my_dev;
2068
2069
#ifndef EXCLUDE_TIMERS
2070
if ((capabilities[devc->model].flags & CAP_F_TIMER) &&
2071
devc->irq_ok)
2072
ad1848_tmr_install(my_dev);
2073
#endif
2074
2075
if (!share_dma)
2076
{
2077
if (sound_alloc_dma(dma_playback, devc->name))
2078
printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_playback);
2079
2080
if (dma_capture != dma_playback)
2081
if (sound_alloc_dma(dma_capture, devc->name))
2082
printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_capture);
2083
}
2084
2085
if ((e = sound_install_mixer(MIXER_DRIVER_VERSION,
2086
dev_name,
2087
&ad1848_mixer_operations,
2088
sizeof(struct mixer_operations),
2089
devc)) >= 0)
2090
{
2091
audio_devs[my_dev]->mixer_dev = e;
2092
if (owner)
2093
mixer_devs[e]->owner = owner;
2094
}
2095
return my_dev;
2096
}
2097
2098
int ad1848_control(int cmd, int arg)
2099
{
2100
ad1848_info *devc;
2101
unsigned long flags;
2102
2103
if (nr_ad1848_devs < 1)
2104
return -ENODEV;
2105
2106
devc = &adev_info[nr_ad1848_devs - 1];
2107
2108
switch (cmd)
2109
{
2110
case AD1848_SET_XTAL: /* Change clock frequency of AD1845 (only ) */
2111
if (devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
2112
return -EINVAL;
2113
spin_lock_irqsave(&devc->lock,flags);
2114
ad_enter_MCE(devc);
2115
ad_write(devc, 29, (ad_read(devc, 29) & 0x1f) | (arg << 5));
2116
ad_leave_MCE(devc);
2117
spin_unlock_irqrestore(&devc->lock,flags);
2118
break;
2119
2120
case AD1848_MIXER_REROUTE:
2121
{
2122
int o = (arg >> 8) & 0xff;
2123
int n = arg & 0xff;
2124
2125
if (o < 0 || o >= SOUND_MIXER_NRDEVICES)
2126
return -EINVAL;
2127
2128
if (!(devc->supported_devices & (1 << o)) &&
2129
!(devc->supported_rec_devices & (1 << o)))
2130
return -EINVAL;
2131
2132
if (n == SOUND_MIXER_NONE)
2133
{ /* Just hide this control */
2134
ad1848_mixer_set(devc, o, 0); /* Shut up it */
2135
devc->supported_devices &= ~(1 << o);
2136
devc->supported_rec_devices &= ~(1 << o);
2137
break;
2138
}
2139
2140
/* Make the mixer control identified by o to appear as n */
2141
if (n < 0 || n >= SOUND_MIXER_NRDEVICES)
2142
return -EINVAL;
2143
2144
devc->mixer_reroute[n] = o; /* Rename the control */
2145
if (devc->supported_devices & (1 << o))
2146
devc->supported_devices |= (1 << n);
2147
if (devc->supported_rec_devices & (1 << o))
2148
devc->supported_rec_devices |= (1 << n);
2149
2150
devc->supported_devices &= ~(1 << o);
2151
devc->supported_rec_devices &= ~(1 << o);
2152
}
2153
break;
2154
}
2155
return 0;
2156
}
2157
2158
void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int share_dma)
2159
{
2160
int i, mixer, dev = 0;
2161
ad1848_info *devc = NULL;
2162
2163
for (i = 0; devc == NULL && i < nr_ad1848_devs; i++)
2164
{
2165
if (adev_info[i].base == io_base)
2166
{
2167
devc = &adev_info[i];
2168
dev = devc->dev_no;
2169
}
2170
}
2171
2172
if (devc != NULL)
2173
{
2174
kfree(audio_devs[dev]->portc);
2175
release_region(devc->base, 4);
2176
2177
if (!share_dma)
2178
{
2179
if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */
2180
free_irq(devc->irq, (void *)(long)devc->dev_no);
2181
2182
sound_free_dma(dma_playback);
2183
2184
if (dma_playback != dma_capture)
2185
sound_free_dma(dma_capture);
2186
2187
}
2188
mixer = audio_devs[devc->dev_no]->mixer_dev;
2189
if(mixer>=0)
2190
sound_unload_mixerdev(mixer);
2191
2192
nr_ad1848_devs--;
2193
for ( ; i < nr_ad1848_devs ; i++)
2194
adev_info[i] = adev_info[i+1];
2195
}
2196
else
2197
printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
2198
}
2199
2200
static irqreturn_t adintr(int irq, void *dev_id)
2201
{
2202
unsigned char status;
2203
ad1848_info *devc;
2204
int dev;
2205
int alt_stat = 0xff;
2206
unsigned char c930_stat = 0;
2207
int cnt = 0;
2208
2209
dev = (long)dev_id;
2210
devc = (ad1848_info *) audio_devs[dev]->devc;
2211
2212
interrupt_again: /* Jump back here if int status doesn't reset */
2213
2214
status = inb(io_Status(devc));
2215
2216
if (status == 0x80)
2217
printk(KERN_DEBUG "adintr: Why?\n");
2218
if (devc->model == MD_1848)
2219
outb((0), io_Status(devc)); /* Clear interrupt status */
2220
2221
if (status & 0x01)
2222
{
2223
if (devc->model == MD_C930)
2224
{ /* 82C930 has interrupt status register in MAD16 register MC11 */
2225
2226
spin_lock(&devc->lock);
2227
2228
/* 0xe0e is C930 address port
2229
* 0xe0f is C930 data port
2230
*/
2231
outb(11, 0xe0e);
2232
c930_stat = inb(0xe0f);
2233
outb((~c930_stat), 0xe0f);
2234
2235
spin_unlock(&devc->lock);
2236
2237
alt_stat = (c930_stat << 2) & 0x30;
2238
}
2239
else if (devc->model != MD_1848)
2240
{
2241
spin_lock(&devc->lock);
2242
alt_stat = ad_read(devc, 24);
2243
ad_write(devc, 24, ad_read(devc, 24) & ~alt_stat); /* Selective ack */
2244
spin_unlock(&devc->lock);
2245
}
2246
2247
if ((devc->open_mode & OPEN_READ) && (devc->audio_mode & PCM_ENABLE_INPUT) && (alt_stat & 0x20))
2248
{
2249
DMAbuf_inputintr(devc->record_dev);
2250
}
2251
if ((devc->open_mode & OPEN_WRITE) && (devc->audio_mode & PCM_ENABLE_OUTPUT) &&
2252
(alt_stat & 0x10))
2253
{
2254
DMAbuf_outputintr(devc->playback_dev, 1);
2255
}
2256
if (devc->model != MD_1848 && (alt_stat & 0x40)) /* Timer interrupt */
2257
{
2258
devc->timer_ticks++;
2259
#ifndef EXCLUDE_TIMERS
2260
if (timer_installed == dev && devc->timer_running)
2261
sound_timer_interrupt();
2262
#endif
2263
}
2264
}
2265
/*
2266
* Sometimes playback or capture interrupts occur while a timer interrupt
2267
* is being handled. The interrupt will not be retriggered if we don't
2268
* handle it now. Check if an interrupt is still pending and restart
2269
* the handler in this case.
2270
*/
2271
if (inb(io_Status(devc)) & 0x01 && cnt++ < 4)
2272
{
2273
goto interrupt_again;
2274
}
2275
return IRQ_HANDLED;
2276
}
2277
2278
/*
2279
* Experimental initialization sequence for the integrated sound system
2280
* of the Compaq Deskpro M.
2281
*/
2282
2283
static int init_deskpro_m(struct address_info *hw_config)
2284
{
2285
unsigned char tmp;
2286
2287
if ((tmp = inb(0xc44)) == 0xff)
2288
{
2289
DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2290
return 0;
2291
}
2292
2293
outb(0x10, 0xc44);
2294
outb(0x40, 0xc45);
2295
outb(0x00, 0xc46);
2296
outb(0xe8, 0xc47);
2297
outb(0x14, 0xc44);
2298
outb(0x40, 0xc45);
2299
outb(0x00, 0xc46);
2300
outb(0xe8, 0xc47);
2301
outb(0x10, 0xc44);
2302
2303
return 1;
2304
}
2305
2306
/*
2307
* Experimental initialization sequence for the integrated sound system
2308
* of Compaq Deskpro XL.
2309
*/
2310
2311
static int init_deskpro(struct address_info *hw_config)
2312
{
2313
unsigned char tmp;
2314
2315
if ((tmp = inb(0xc44)) == 0xff)
2316
{
2317
DDB(printk("init_deskpro: Dead port 0xc44\n"));
2318
return 0;
2319
}
2320
outb((tmp | 0x04), 0xc44); /* Select bank 1 */
2321
if (inb(0xc44) != 0x04)
2322
{
2323
DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2324
return 0;
2325
}
2326
/*
2327
* OK. It looks like a Deskpro so let's proceed.
2328
*/
2329
2330
/*
2331
* I/O port 0xc44 Audio configuration register.
2332
*
2333
* bits 0xc0: Audio revision bits
2334
* 0x00 = Compaq Business Audio
2335
* 0x40 = MS Sound System Compatible (reset default)
2336
* 0x80 = Reserved
2337
* 0xc0 = Reserved
2338
* bit 0x20: No Wait State Enable
2339
* 0x00 = Disabled (reset default, DMA mode)
2340
* 0x20 = Enabled (programmed I/O mode)
2341
* bit 0x10: MS Sound System Decode Enable
2342
* 0x00 = Decoding disabled (reset default)
2343
* 0x10 = Decoding enabled
2344
* bit 0x08: FM Synthesis Decode Enable
2345
* 0x00 = Decoding Disabled (reset default)
2346
* 0x08 = Decoding enabled
2347
* bit 0x04 Bank select
2348
* 0x00 = Bank 0
2349
* 0x04 = Bank 1
2350
* bits 0x03 MSS Base address
2351
* 0x00 = 0x530 (reset default)
2352
* 0x01 = 0x604
2353
* 0x02 = 0xf40
2354
* 0x03 = 0xe80
2355
*/
2356
2357
#ifdef DEBUGXL
2358
/* Debug printing */
2359
printk("Port 0xc44 (before): ");
2360
outb((tmp & ~0x04), 0xc44);
2361
printk("%02x ", inb(0xc44));
2362
outb((tmp | 0x04), 0xc44);
2363
printk("%02x\n", inb(0xc44));
2364
#endif
2365
2366
/* Set bank 1 of the register */
2367
tmp = 0x58; /* MSS Mode, MSS&FM decode enabled */
2368
2369
switch (hw_config->io_base)
2370
{
2371
case 0x530:
2372
tmp |= 0x00;
2373
break;
2374
case 0x604:
2375
tmp |= 0x01;
2376
break;
2377
case 0xf40:
2378
tmp |= 0x02;
2379
break;
2380
case 0xe80:
2381
tmp |= 0x03;
2382
break;
2383
default:
2384
DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config->io_base));
2385
return 0;
2386
}
2387
outb((tmp & ~0x04), 0xc44); /* Write to bank=0 */
2388
2389
#ifdef DEBUGXL
2390
/* Debug printing */
2391
printk("Port 0xc44 (after): ");
2392
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2393
printk("%02x ", inb(0xc44));
2394
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2395
printk("%02x\n", inb(0xc44));
2396
#endif
2397
2398
/*
2399
* I/O port 0xc45 FM Address Decode/MSS ID Register.
2400
*
2401
* bank=0, bits 0xfe: FM synthesis Decode Compare bits 7:1 (default=0x88)
2402
* bank=0, bit 0x01: SBIC Power Control Bit
2403
* 0x00 = Powered up
2404
* 0x01 = Powered down
2405
* bank=1, bits 0xfc: MSS ID (default=0x40)
2406
*/
2407
2408
#ifdef DEBUGXL
2409
/* Debug printing */
2410
printk("Port 0xc45 (before): ");
2411
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2412
printk("%02x ", inb(0xc45));
2413
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2414
printk("%02x\n", inb(0xc45));
2415
#endif
2416
2417
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2418
outb((0x88), 0xc45); /* FM base 7:0 = 0x88 */
2419
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2420
outb((0x10), 0xc45); /* MSS ID = 0x10 (MSS port returns 0x04) */
2421
2422
#ifdef DEBUGXL
2423
/* Debug printing */
2424
printk("Port 0xc45 (after): ");
2425
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2426
printk("%02x ", inb(0xc45));
2427
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2428
printk("%02x\n", inb(0xc45));
2429
#endif
2430
2431
2432
/*
2433
* I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2434
*
2435
* bank=0, bits 0xff: FM synthesis Decode Compare bits 15:8 (default=0x03)
2436
* bank=1, bits 0xff: Audio addressing ASIC id
2437
*/
2438
2439
#ifdef DEBUGXL
2440
/* Debug printing */
2441
printk("Port 0xc46 (before): ");
2442
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2443
printk("%02x ", inb(0xc46));
2444
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2445
printk("%02x\n", inb(0xc46));
2446
#endif
2447
2448
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2449
outb((0x03), 0xc46); /* FM base 15:8 = 0x03 */
2450
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2451
outb((0x11), 0xc46); /* ASIC ID = 0x11 */
2452
2453
#ifdef DEBUGXL
2454
/* Debug printing */
2455
printk("Port 0xc46 (after): ");
2456
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2457
printk("%02x ", inb(0xc46));
2458
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2459
printk("%02x\n", inb(0xc46));
2460
#endif
2461
2462
/*
2463
* I/O port 0xc47 FM Address Decode Register.
2464
*
2465
* bank=0, bits 0xff: Decode enable selection for various FM address bits
2466
* bank=1, bits 0xff: Reserved
2467
*/
2468
2469
#ifdef DEBUGXL
2470
/* Debug printing */
2471
printk("Port 0xc47 (before): ");
2472
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2473
printk("%02x ", inb(0xc47));
2474
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2475
printk("%02x\n", inb(0xc47));
2476
#endif
2477
2478
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2479
outb((0x7c), 0xc47); /* FM decode enable bits = 0x7c */
2480
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2481
outb((0x00), 0xc47); /* Reserved bank1 = 0x00 */
2482
2483
#ifdef DEBUGXL
2484
/* Debug printing */
2485
printk("Port 0xc47 (after): ");
2486
outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2487
printk("%02x ", inb(0xc47));
2488
outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2489
printk("%02x\n", inb(0xc47));
2490
#endif
2491
2492
/*
2493
* I/O port 0xc6f = Audio Disable Function Register
2494
*/
2495
2496
#ifdef DEBUGXL
2497
printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2498
#endif
2499
2500
outb((0x80), 0xc6f);
2501
2502
#ifdef DEBUGXL
2503
printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2504
#endif
2505
2506
return 1;
2507
}
2508
2509
int probe_ms_sound(struct address_info *hw_config, struct resource *ports)
2510
{
2511
unsigned char tmp;
2512
2513
DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config->io_base, hw_config->card_subtype));
2514
2515
if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2516
{
2517
/* check_opl3(0x388, hw_config); */
2518
return ad1848_detect(ports, NULL, hw_config->osp);
2519
}
2520
2521
if (deskpro_xl && hw_config->card_subtype == 2) /* Compaq Deskpro XL */
2522
{
2523
if (!init_deskpro(hw_config))
2524
return 0;
2525
}
2526
2527
if (deskpro_m) /* Compaq Deskpro M */
2528
{
2529
if (!init_deskpro_m(hw_config))
2530
return 0;
2531
}
2532
2533
/*
2534
* Check if the IO port returns valid signature. The original MS Sound
2535
* system returns 0x04 while some cards (AudioTrix Pro for example)
2536
* return 0x00 or 0x0f.
2537
*/
2538
2539
if ((tmp = inb(hw_config->io_base + 3)) == 0xff) /* Bus float */
2540
{
2541
int ret;
2542
2543
DDB(printk("I/O address is inactive (%x)\n", tmp));
2544
if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2545
return 0;
2546
return 1;
2547
}
2548
DDB(printk("MSS signature = %x\n", tmp & 0x3f));
2549
if ((tmp & 0x3f) != 0x04 &&
2550
(tmp & 0x3f) != 0x0f &&
2551
(tmp & 0x3f) != 0x00)
2552
{
2553
int ret;
2554
2555
MDB(printk(KERN_ERR "No MSS signature detected on port 0x%x (0x%x)\n", hw_config->io_base, (int) inb(hw_config->io_base + 3)));
2556
DDB(printk("Trying to detect codec anyway but IRQ/DMA may not work\n"));
2557
if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2558
return 0;
2559
2560
hw_config->card_subtype = 1;
2561
return 1;
2562
}
2563
if ((hw_config->irq != 5) &&
2564
(hw_config->irq != 7) &&
2565
(hw_config->irq != 9) &&
2566
(hw_config->irq != 10) &&
2567
(hw_config->irq != 11) &&
2568
(hw_config->irq != 12))
2569
{
2570
printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2571
return 0;
2572
}
2573
if (hw_config->dma != 0 && hw_config->dma != 1 && hw_config->dma != 3)
2574
{
2575
printk(KERN_ERR "MSS: Bad DMA %d\n", hw_config->dma);
2576
return 0;
2577
}
2578
/*
2579
* Check that DMA0 is not in use with a 8 bit board.
2580
*/
2581
2582
if (hw_config->dma == 0 && inb(hw_config->io_base + 3) & 0x80)
2583
{
2584
printk(KERN_ERR "MSS: Can't use DMA0 with a 8 bit card/slot\n");
2585
return 0;
2586
}
2587
if (hw_config->irq > 7 && hw_config->irq != 9 && inb(hw_config->io_base + 3) & 0x80)
2588
{
2589
printk(KERN_ERR "MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config->irq);
2590
return 0;
2591
}
2592
return ad1848_detect(ports, NULL, hw_config->osp);
2593
}
2594
2595
void attach_ms_sound(struct address_info *hw_config, struct resource *ports, struct module *owner)
2596
{
2597
static signed char interrupt_bits[12] =
2598
{
2599
-1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2600
};
2601
signed char bits;
2602
char dma2_bit = 0;
2603
2604
static char dma_bits[4] =
2605
{
2606
1, 2, 0, 3
2607
};
2608
2609
int config_port = hw_config->io_base + 0;
2610
int version_port = hw_config->io_base + 3;
2611
int dma = hw_config->dma;
2612
int dma2 = hw_config->dma2;
2613
2614
if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2615
{
2616
hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2617
hw_config->irq,
2618
hw_config->dma,
2619
hw_config->dma2, 0,
2620
hw_config->osp,
2621
owner);
2622
return;
2623
}
2624
/*
2625
* Set the IRQ and DMA addresses.
2626
*/
2627
2628
bits = interrupt_bits[hw_config->irq];
2629
if (bits == -1)
2630
{
2631
printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2632
release_region(ports->start, 4);
2633
release_region(ports->start - 4, 4);
2634
return;
2635
}
2636
outb((bits | 0x40), config_port);
2637
if ((inb(version_port) & 0x40) == 0)
2638
printk(KERN_ERR "[MSS: IRQ Conflict?]\n");
2639
2640
/*
2641
* Handle the capture DMA channel
2642
*/
2643
2644
if (dma2 != -1 && dma2 != dma)
2645
{
2646
if (!((dma == 0 && dma2 == 1) ||
2647
(dma == 1 && dma2 == 0) ||
2648
(dma == 3 && dma2 == 0)))
2649
{ /* Unsupported combination. Try to swap channels */
2650
int tmp = dma;
2651
2652
dma = dma2;
2653
dma2 = tmp;
2654
}
2655
if ((dma == 0 && dma2 == 1) ||
2656
(dma == 1 && dma2 == 0) ||
2657
(dma == 3 && dma2 == 0))
2658
{
2659
dma2_bit = 0x04; /* Enable capture DMA */
2660
}
2661
else
2662
{
2663
printk(KERN_WARNING "MSS: Invalid capture DMA\n");
2664
dma2 = dma;
2665
}
2666
}
2667
else
2668
{
2669
dma2 = dma;
2670
}
2671
2672
hw_config->dma = dma;
2673
hw_config->dma2 = dma2;
2674
2675
outb((bits | dma_bits[dma] | dma2_bit), config_port); /* Write IRQ+DMA setup */
2676
2677
hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2678
hw_config->irq,
2679
dma, dma2, 0,
2680
hw_config->osp,
2681
THIS_MODULE);
2682
}
2683
2684
void unload_ms_sound(struct address_info *hw_config)
2685
{
2686
ad1848_unload(hw_config->io_base + 4,
2687
hw_config->irq,
2688
hw_config->dma,
2689
hw_config->dma2, 0);
2690
sound_unload_audiodev(hw_config->slots[0]);
2691
release_region(hw_config->io_base, 4);
2692
}
2693
2694
#ifndef EXCLUDE_TIMERS
2695
2696
/*
2697
* Timer stuff (for /dev/music).
2698
*/
2699
2700
static unsigned int current_interval;
2701
2702
static unsigned int ad1848_tmr_start(int dev, unsigned int usecs)
2703
{
2704
unsigned long flags;
2705
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2706
unsigned long xtal_nsecs; /* nanoseconds per xtal oscillator tick */
2707
unsigned long divider;
2708
2709
spin_lock_irqsave(&devc->lock,flags);
2710
2711
/*
2712
* Length of the timer interval (in nanoseconds) depends on the
2713
* selected crystal oscillator. Check this from bit 0x01 of I8.
2714
*
2715
* AD1845 has just one oscillator which has cycle time of 10.050 us
2716
* (when a 24.576 MHz xtal oscillator is used).
2717
*
2718
* Convert requested interval to nanoseconds before computing
2719
* the timer divider.
2720
*/
2721
2722
if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
2723
xtal_nsecs = 10050;
2724
else if (ad_read(devc, 8) & 0x01)
2725
xtal_nsecs = 9920;
2726
else
2727
xtal_nsecs = 9969;
2728
2729
divider = (usecs * 1000 + xtal_nsecs / 2) / xtal_nsecs;
2730
2731
if (divider < 100) /* Don't allow shorter intervals than about 1ms */
2732
divider = 100;
2733
2734
if (divider > 65535) /* Overflow check */
2735
divider = 65535;
2736
2737
ad_write(devc, 21, (divider >> 8) & 0xff); /* Set upper bits */
2738
ad_write(devc, 20, divider & 0xff); /* Set lower bits */
2739
ad_write(devc, 16, ad_read(devc, 16) | 0x40); /* Start the timer */
2740
devc->timer_running = 1;
2741
spin_unlock_irqrestore(&devc->lock,flags);
2742
2743
return current_interval = (divider * xtal_nsecs + 500) / 1000;
2744
}
2745
2746
static void ad1848_tmr_reprogram(int dev)
2747
{
2748
/*
2749
* Audio driver has changed sampling rate so that a different xtal
2750
* oscillator was selected. We have to reprogram the timer rate.
2751
*/
2752
2753
ad1848_tmr_start(dev, current_interval);
2754
sound_timer_syncinterval(current_interval);
2755
}
2756
2757
static void ad1848_tmr_disable(int dev)
2758
{
2759
unsigned long flags;
2760
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2761
2762
spin_lock_irqsave(&devc->lock,flags);
2763
ad_write(devc, 16, ad_read(devc, 16) & ~0x40);
2764
devc->timer_running = 0;
2765
spin_unlock_irqrestore(&devc->lock,flags);
2766
}
2767
2768
static void ad1848_tmr_restart(int dev)
2769
{
2770
unsigned long flags;
2771
ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2772
2773
if (current_interval == 0)
2774
return;
2775
2776
spin_lock_irqsave(&devc->lock,flags);
2777
ad_write(devc, 16, ad_read(devc, 16) | 0x40);
2778
devc->timer_running = 1;
2779
spin_unlock_irqrestore(&devc->lock,flags);
2780
}
2781
2782
static struct sound_lowlev_timer ad1848_tmr =
2783
{
2784
0,
2785
2,
2786
ad1848_tmr_start,
2787
ad1848_tmr_disable,
2788
ad1848_tmr_restart
2789
};
2790
2791
static int ad1848_tmr_install(int dev)
2792
{
2793
if (timer_installed != -1)
2794
return 0; /* Don't install another timer */
2795
2796
timer_installed = ad1848_tmr.dev = dev;
2797
sound_timer_init(&ad1848_tmr, audio_devs[dev]->name);
2798
2799
return 1;
2800
}
2801
#endif /* EXCLUDE_TIMERS */
2802
2803
EXPORT_SYMBOL(ad1848_detect);
2804
EXPORT_SYMBOL(ad1848_init);
2805
EXPORT_SYMBOL(ad1848_unload);
2806
EXPORT_SYMBOL(ad1848_control);
2807
EXPORT_SYMBOL(probe_ms_sound);
2808
EXPORT_SYMBOL(attach_ms_sound);
2809
EXPORT_SYMBOL(unload_ms_sound);
2810
2811
static int __initdata io = -1;
2812
static int __initdata irq = -1;
2813
static int __initdata dma = -1;
2814
static int __initdata dma2 = -1;
2815
static int __initdata type = 0;
2816
2817
module_param(io, int, 0); /* I/O for a raw AD1848 card */
2818
module_param(irq, int, 0); /* IRQ to use */
2819
module_param(dma, int, 0); /* First DMA channel */
2820
module_param(dma2, int, 0); /* Second DMA channel */
2821
module_param(type, int, 0); /* Card type */
2822
module_param(deskpro_xl, bool, 0); /* Special magic for Deskpro XL boxen */
2823
module_param(deskpro_m, bool, 0); /* Special magic for Deskpro M box */
2824
module_param(soundpro, bool, 0); /* More special magic for SoundPro chips */
2825
2826
#ifdef CONFIG_PNP
2827
module_param(isapnp, int, 0);
2828
module_param(isapnpjump, int, 0);
2829
module_param(reverse, bool, 0);
2830
MODULE_PARM_DESC(isapnp, "When set to 0, Plug & Play support will be disabled");
2831
MODULE_PARM_DESC(isapnpjump, "Jumps to a specific slot in the driver's PnP table. Use the source, Luke.");
2832
MODULE_PARM_DESC(reverse, "When set to 1, will reverse ISAPnP search order");
2833
2834
static struct pnp_dev *ad1848_dev = NULL;
2835
2836
/* Please add new entries at the end of the table */
2837
static struct {
2838
char *name;
2839
unsigned short card_vendor, card_device,
2840
vendor, function;
2841
short mss_io, irq, dma, dma2; /* index into isapnp table */
2842
int type;
2843
} ad1848_isapnp_list[] __initdata = {
2844
{"CMI 8330 SoundPRO",
2845
ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2846
ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2847
0, 0, 0,-1, 0},
2848
{"CS4232 based card",
2849
ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2850
ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2851
0, 0, 0, 1, 0},
2852
{"CS4232 based card",
2853
ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2854
ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2855
0, 0, 0, 1, 0},
2856
{"OPL3-SA2 WSS mode",
2857
ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2858
ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2859
1, 0, 0, 1, 1},
2860
{"Advanced Gravis InterWave Audio",
2861
ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2862
ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000),
2863
0, 0, 0, 1, 0},
2864
{NULL}
2865
};
2866
2867
static struct isapnp_device_id id_table[] __devinitdata = {
2868
{ ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2869
ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001), 0 },
2870
{ ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2871
ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000), 0 },
2872
{ ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2873
ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100), 0 },
2874
/* The main driver for this card is opl3sa2
2875
{ ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2876
ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021), 0 },
2877
*/
2878
{ ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2879
ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000), 0 },
2880
{0}
2881
};
2882
2883
MODULE_DEVICE_TABLE(isapnp, id_table);
2884
2885
static struct pnp_dev *activate_dev(char *devname, char *resname, struct pnp_dev *dev)
2886
{
2887
int err;
2888
2889
err = pnp_device_attach(dev);
2890
if (err < 0)
2891
return(NULL);
2892
2893
if((err = pnp_activate_dev(dev)) < 0) {
2894
printk(KERN_ERR "ad1848: %s %s config failed (out of resources?)[%d]\n", devname, resname, err);
2895
2896
pnp_device_detach(dev);
2897
2898
return(NULL);
2899
}
2900
audio_activated = 1;
2901
return(dev);
2902
}
2903
2904
static struct pnp_dev __init *ad1848_init_generic(struct pnp_card *bus,
2905
struct address_info *hw_config, int slot)
2906
{
2907
2908
/* Configure Audio device */
2909
if((ad1848_dev = pnp_find_dev(bus, ad1848_isapnp_list[slot].vendor, ad1848_isapnp_list[slot].function, NULL)))
2910
{
2911
if((ad1848_dev = activate_dev(ad1848_isapnp_list[slot].name, "ad1848", ad1848_dev)))
2912
{
2913
hw_config->io_base = pnp_port_start(ad1848_dev, ad1848_isapnp_list[slot].mss_io);
2914
hw_config->irq = pnp_irq(ad1848_dev, ad1848_isapnp_list[slot].irq);
2915
hw_config->dma = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma);
2916
if(ad1848_isapnp_list[slot].dma2 != -1)
2917
hw_config->dma2 = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma2);
2918
else
2919
hw_config->dma2 = -1;
2920
hw_config->card_subtype = ad1848_isapnp_list[slot].type;
2921
} else
2922
return(NULL);
2923
} else
2924
return(NULL);
2925
2926
return(ad1848_dev);
2927
}
2928
2929
static int __init ad1848_isapnp_init(struct address_info *hw_config, struct pnp_card *bus, int slot)
2930
{
2931
char *busname = bus->name[0] ? bus->name : ad1848_isapnp_list[slot].name;
2932
2933
/* Initialize this baby. */
2934
2935
if(ad1848_init_generic(bus, hw_config, slot)) {
2936
/* We got it. */
2937
2938
printk(KERN_NOTICE "ad1848: PnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
2939
busname,
2940
hw_config->io_base, hw_config->irq, hw_config->dma,
2941
hw_config->dma2);
2942
return 1;
2943
}
2944
return 0;
2945
}
2946
2947
static int __init ad1848_isapnp_probe(struct address_info *hw_config)
2948
{
2949
static int first = 1;
2950
int i;
2951
2952
/* Count entries in sb_isapnp_list */
2953
for (i = 0; ad1848_isapnp_list[i].card_vendor != 0; i++);
2954
i--;
2955
2956
/* Check and adjust isapnpjump */
2957
if( isapnpjump < 0 || isapnpjump > i) {
2958
isapnpjump = reverse ? i : 0;
2959
printk(KERN_ERR "ad1848: Valid range for isapnpjump is 0-%d. Adjusted to %d.\n", i, isapnpjump);
2960
}
2961
2962
if(!first || !reverse)
2963
i = isapnpjump;
2964
first = 0;
2965
while(ad1848_isapnp_list[i].card_vendor != 0) {
2966
static struct pnp_card *bus = NULL;
2967
2968
while ((bus = pnp_find_card(
2969
ad1848_isapnp_list[i].card_vendor,
2970
ad1848_isapnp_list[i].card_device,
2971
bus))) {
2972
2973
if(ad1848_isapnp_init(hw_config, bus, i)) {
2974
isapnpjump = i; /* start next search from here */
2975
return 0;
2976
}
2977
}
2978
i += reverse ? -1 : 1;
2979
}
2980
2981
return -ENODEV;
2982
}
2983
#endif
2984
2985
2986
static int __init init_ad1848(void)
2987
{
2988
printk(KERN_INFO "ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
2989
2990
#ifdef CONFIG_PNP
2991
if(isapnp && (ad1848_isapnp_probe(&cfg) < 0) ) {
2992
printk(KERN_NOTICE "ad1848: No ISAPnP cards found, trying standard ones...\n");
2993
isapnp = 0;
2994
}
2995
#endif
2996
2997
if(io != -1) {
2998
struct resource *ports;
2999
if( isapnp == 0 )
3000
{
3001
if(irq == -1 || dma == -1) {
3002
printk(KERN_WARNING "ad1848: must give I/O , IRQ and DMA.\n");
3003
return -EINVAL;
3004
}
3005
3006
cfg.irq = irq;
3007
cfg.io_base = io;
3008
cfg.dma = dma;
3009
cfg.dma2 = dma2;
3010
cfg.card_subtype = type;
3011
}
3012
3013
ports = request_region(io + 4, 4, "ad1848");
3014
3015
if (!ports)
3016
return -EBUSY;
3017
3018
if (!request_region(io, 4, "WSS config")) {
3019
release_region(io + 4, 4);
3020
return -EBUSY;
3021
}
3022
3023
if (!probe_ms_sound(&cfg, ports)) {
3024
release_region(io + 4, 4);
3025
release_region(io, 4);
3026
return -ENODEV;
3027
}
3028
attach_ms_sound(&cfg, ports, THIS_MODULE);
3029
loaded = 1;
3030
}
3031
return 0;
3032
}
3033
3034
static void __exit cleanup_ad1848(void)
3035
{
3036
if(loaded)
3037
unload_ms_sound(&cfg);
3038
3039
#ifdef CONFIG_PNP
3040
if(ad1848_dev){
3041
if(audio_activated)
3042
pnp_device_detach(ad1848_dev);
3043
}
3044
#endif
3045
}
3046
3047
module_init(init_ad1848);
3048
module_exit(cleanup_ad1848);
3049
3050
#ifndef MODULE
3051
static int __init setup_ad1848(char *str)
3052
{
3053
/* io, irq, dma, dma2, type */
3054
int ints[6];
3055
3056
str = get_options(str, ARRAY_SIZE(ints), ints);
3057
3058
io = ints[1];
3059
irq = ints[2];
3060
dma = ints[3];
3061
dma2 = ints[4];
3062
type = ints[5];
3063
3064
return 1;
3065
}
3066
3067
__setup("ad1848=", setup_ad1848);
3068
#endif
3069
MODULE_LICENSE("GPL");
3070
3071