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