4 * The low level driver for the AD1848/CS4248 codec chip which
5 * is used for example in the MS Sound System.
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.
10 * CS4231A and AD1845 are upward compatible with CS4231. However
11 * the new features of these chips are different.
13 * CS4232 is a PnP audio chip which contains a CS4231A (and SB, MPU).
14 * CS4232A is an improved version of CS4232.
18 * Copyright (C) by Hannu Savolainen 1993-1997
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
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
38 * APM save restore assist code on IBM thinkpad
41 * Tested. Believed fully functional.
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>
54 #include "sound_config.h"
57 #include "ad1848_mixer.h"
65 int dual_dma
; /* 1, when two DMA channels allocated */
67 unsigned char MCE_bit
;
68 unsigned char saved_regs
[64]; /* Includes extended register space */
72 int record_dev
, playback_dev
;
78 char *chip_name
, *name
;
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 */
93 /* Mixer parameters */
95 int supported_devices
, orig_devices
;
96 int supported_rec_devices
, orig_rec_devices
;
98 short mixer_reroute
[32];
100 volatile unsigned long timer_ticks
;
103 mixer_ents
*mix_devices
;
104 int mixer_output_port
;
107 typedef struct ad1848_port_info
111 unsigned char speed_bits
;
114 unsigned char format_bits
;
118 static struct address_info cfg
;
119 static int nr_ad1848_devs
;
121 static int deskpro_xl
;
122 static int deskpro_m
;
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
130 #ifndef EXCLUDE_TIMERS
131 static int timer_installed
= -1;
136 static int ad_format_mask
[13 /*devc->model */ ] =
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
153 static ad1848_info adev_info
[MAX_AUDIO_DEV
];
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)
162 #define CAP_F_TIMER 0x01
163 } capabilities
[10 /*devc->model */ ] = {
166 ,{CAP_F_TIMER
} /* MD_4231 */
167 ,{CAP_F_TIMER
} /* MD_4231A */
168 ,{CAP_F_TIMER
} /* MD_1845 */
169 ,{CAP_F_TIMER
} /* MD_4232 */
171 ,{CAP_F_TIMER
} /* MD_IWAVE */
173 ,{CAP_F_TIMER
} /* MD_1845_SSCAPE */
177 static int isapnp
= 1;
178 static int isapnpjump
;
181 static int audio_activated
;
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
);
200 #ifndef EXCLUDE_TIMERS
201 static int ad1848_tmr_install(int dev
);
202 static void ad1848_tmr_reprogram(int dev
);
205 static int ad_read(ad1848_info
* devc
, int reg
)
208 int timeout
= 900000;
210 while (timeout
> 0 && inb(devc
->base
) == 0x80) /*Are we initializing */
215 outb(((unsigned char) (reg
& 0xff) | devc
->MCE_bit
), io_Index_Addr(devc
));
216 x
= inb(io_Indexed_Data(devc
));
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
));
232 static void ad_write(ad1848_info
* devc
, int reg
, int data
)
234 int timeout
= 900000;
236 while (timeout
> 0 && inb(devc
->base
) == 0x80) /* Are we initializing */
241 outb(((unsigned char) (reg
& 0xff) | devc
->MCE_bit
), io_Index_Addr(devc
));
242 outb(((unsigned char) (data
& 0xff)), io_Indexed_Data(devc
));
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
));
256 static void wait_for_calibration(ad1848_info
* devc
)
261 * Wait until the auto calibration process has finished.
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.
268 while (timeout
> 0 && inb(devc
->base
) == 0x80)
270 if (inb(devc
->base
) & 0x80)
271 printk(KERN_WARNING
"ad1848: Auto calibration timed out(1).\n");
274 while (timeout
> 0 && !(ad_read(devc
, 11) & 0x20))
276 if (!(ad_read(devc
, 11) & 0x20))
280 while (timeout
> 0 && (ad_read(devc
, 11) & 0x20))
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");
287 static void ad_mute(ad1848_info
* devc
)
293 * Save old register settings and mute output channels
296 for (i
= 6; i
< 8; i
++)
298 prev
= devc
->saved_regs
[i
] = ad_read(devc
, i
);
303 static void ad_unmute(ad1848_info
* devc
)
307 static void ad_enter_MCE(ad1848_info
* devc
)
312 while (timeout
> 0 && inb(devc
->base
) == 0x80) /*Are we initializing */
315 devc
->MCE_bit
= 0x40;
316 prev
= inb(io_Index_Addr(devc
));
321 outb((devc
->MCE_bit
), io_Index_Addr(devc
));
324 static void ad_leave_MCE(ad1848_info
* devc
)
326 unsigned char prev
, acal
;
329 while (timeout
> 0 && inb(devc
->base
) == 0x80) /*Are we initializing */
332 acal
= ad_read(devc
, 9);
334 devc
->MCE_bit
= 0x00;
335 prev
= inb(io_Index_Addr(devc
));
336 outb((0x00), io_Index_Addr(devc
)); /* Clear the MCE bit */
338 if ((prev
& 0x40) == 0) /* Not in MCE mode */
342 outb((0x00), io_Index_Addr(devc
)); /* Clear the MCE bit */
343 if (acal
& 0x08) /* Auto calibration is enabled */
344 wait_for_calibration(devc
);
347 static int ad1848_set_recmask(ad1848_info
* devc
, int mask
)
349 unsigned char recdev
;
353 mask
&= devc
->supported_rec_devices
;
355 /* Rename the mixer bits if necessary */
356 for (i
= 0; i
< 32; i
++)
358 if (devc
->mixer_reroute
[i
] != i
)
363 mask
|= (1 << devc
->mixer_reroute
[i
]);
369 for (i
= 0; i
< 32; i
++) /* Count selected device bits */
373 spin_lock_irqsave(&devc
->lock
,flags
);
376 mask
= SOUND_MASK_MIC
;
377 else if (n
!= 1) { /* Too many devices selected */
378 mask
&= ~devc
->recmask
; /* Filter out active settings */
381 for (i
= 0; i
< 32; i
++) /* Count selected device bits */
386 mask
= SOUND_MASK_MIC
;
393 case SOUND_MASK_LINE
:
394 case SOUND_MASK_LINE3
:
399 case SOUND_MASK_LINE1
:
403 case SOUND_MASK_IMIX
:
408 mask
= SOUND_MASK_MIC
;
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 */
420 for (i
= 0; i
< 32; i
++) { /* For each bit */
421 if ((devc
->supported_rec_devices
& (1 << i
)) == 0)
422 continue; /* Device not supported */
424 for (j
= LEFT_CHN
; j
<= RIGHT_CHN
; j
++) {
425 if (devc
->mix_devices
[i
][j
].nbits
== 0) /* Inexistent channel */
430 * set_rec_bit becomes 1 if the corresponding bit in mask is set
431 * then it gets flipped if the polarity is inverse
433 set_rec_bit
= ((mask
& (1 << i
)) != 0) ^ devc
->mix_devices
[i
][j
].recpol
;
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
);
442 spin_unlock_irqrestore(&devc
->lock
,flags
);
444 /* Rename the mixer bits back if necessary */
445 for (i
= 0; i
< 32; i
++)
447 if (devc
->mixer_reroute
[i
] != i
)
449 if (mask
& (1 << devc
->mixer_reroute
[i
]))
451 mask
&= ~(1 << devc
->mixer_reroute
[i
]);
456 devc
->recmask
= mask
;
460 static void change_bits(ad1848_info
* devc
, unsigned char *regval
,
461 unsigned char *muteval
, int dev
, int chn
, int newval
)
469 set_mute_bit
= (newval
== 0) ^ devc
->mix_devices
[dev
][chn
].mutepol
;
471 if (devc
->mix_devices
[dev
][chn
].polarity
== 1) /* Reverse */
472 newval
= 100 - newval
;
474 mask
= (1 << devc
->mix_devices
[dev
][chn
].nbits
) - 1;
475 shift
= devc
->mix_devices
[dev
][chn
].bitpos
;
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 */
484 mute
= (set_mute_bit
<< devc
->mix_devices
[dev
][chn
].mutepos
);
485 mutemask
= ~(1 << devc
->mix_devices
[dev
][chn
].mutepos
);
488 newval
= (int) ((newval
* mask
) + 50) / 100; /* Scale it */
489 *regval
&= ~(mask
<< shift
); /* Clear bits */
490 *regval
|= (newval
& mask
) << shift
; /* Set new value */
492 *muteval
&= mutemask
;
496 static int ad1848_mixer_get(ad1848_info
* devc
, int dev
)
498 if (!((1 << dev
) & devc
->supported_devices
))
501 dev
= devc
->mixer_reroute
[dev
];
503 return devc
->levels
[dev
];
506 static void ad1848_mixer_set_channel(ad1848_info
*devc
, int dev
, int value
, int channel
)
508 int regoffs
, muteregoffs
;
509 unsigned char val
, muteval
;
512 regoffs
= devc
->mix_devices
[dev
][channel
].regno
;
513 muteregoffs
= devc
->mix_devices
[dev
][channel
].mutereg
;
514 val
= ad_read(devc
, regoffs
);
516 if (muteregoffs
!= regoffs
) {
517 muteval
= ad_read(devc
, muteregoffs
);
518 change_bits(devc
, &val
, &muteval
, dev
, channel
, value
);
521 change_bits(devc
, &val
, &val
, dev
, channel
, value
);
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
;
530 spin_unlock_irqrestore(&devc
->lock
,flags
);
533 static int ad1848_mixer_set(ad1848_info
* devc
, int dev
, int value
)
535 int left
= value
& 0x000000ff;
536 int right
= (value
& 0x0000ff00) >> 8;
542 if (!(devc
->supported_devices
& (1 << dev
)))
545 dev
= devc
->mixer_reroute
[dev
];
547 if (devc
->mix_devices
[dev
][LEFT_CHN
].nbits
== 0)
555 if (devc
->mix_devices
[dev
][RIGHT_CHN
].nbits
== 0) /* Mono control */
558 retvol
= left
| (right
<< 8);
561 left
= mix_cvt
[left
];
562 right
= mix_cvt
[right
];
564 devc
->levels
[dev
] = retvol
;
567 * Set the left channel
569 ad1848_mixer_set_channel(devc
, dev
, left
, LEFT_CHN
);
572 * Set the right channel
574 if (devc
->mix_devices
[dev
][RIGHT_CHN
].nbits
== 0)
576 ad1848_mixer_set_channel(devc
, dev
, right
, RIGHT_CHN
);
582 static void ad1848_mixer_reset(ad1848_info
* devc
)
588 devc
->mix_devices
= &(ad1848_mix_devices
[0]);
590 sprintf(name
, "%s_%d", devc
->chip_name
, nr_ad1848_devs
);
592 for (i
= 0; i
< 32; i
++)
593 devc
->mixer_reroute
[i
] = i
;
595 devc
->supported_rec_devices
= MODE1_REC_DEVICES
;
603 devc
->supported_devices
= MODE2_MIXER_DEVICES
;
607 devc
->supported_devices
= C930_MIXER_DEVICES
;
608 devc
->mix_devices
= &(c930_mix_devices
[0]);
612 devc
->supported_devices
= MODE3_MIXER_DEVICES
;
613 devc
->mix_devices
= &(iwave_mix_devices
[0]);
618 devc
->mix_devices
= &(cs42xb_mix_devices
[0]);
619 devc
->supported_devices
= MODE3_MIXER_DEVICES
;
624 devc
->supported_devices
= MODE3_MIXER_DEVICES
;
629 devc
->supported_devices
= SPRO_MIXER_DEVICES
;
630 devc
->supported_rec_devices
= SPRO_REC_DEVICES
;
631 devc
->mix_devices
= &(spro_mix_devices
[0]);
636 devc
->supported_devices
= MODE1_MIXER_DEVICES
;
639 devc
->orig_devices
= devc
->supported_devices
;
640 devc
->orig_rec_devices
= devc
->supported_rec_devices
;
642 devc
->levels
= load_mixer_volumes(name
, default_mixer_levels
, 1);
644 for (i
= 0; i
< SOUND_MIXER_NRDEVICES
; i
++)
646 if (devc
->supported_devices
& (1 << i
))
647 ad1848_mixer_set(devc
, i
, devc
->levels
[i
]);
650 ad1848_set_recmask(devc
, SOUND_MASK_MIC
);
652 devc
->mixer_output_port
= devc
->levels
[31] | AUDIO_HEADPHONE
| AUDIO_LINE_OUT
;
654 spin_lock_irqsave(&devc
->lock
,flags
);
656 if (devc
->mixer_output_port
& AUDIO_SPEAKER
)
657 ad_write(devc
, 26, ad_read(devc
, 26) & ~0x40); /* Unmute mono out */
659 ad_write(devc
, 26, ad_read(devc
, 26) | 0x40); /* Mute mono out */
662 * From the "wouldn't it be nice if the mixer API had (better)
663 * support for custom stuff" category
665 /* Enable surround mode and SB16 mixer */
666 ad_write(devc
, 16, 0x60);
668 spin_unlock_irqrestore(&devc
->lock
,flags
);
671 static int ad1848_mixer_ioctl(int dev
, unsigned int cmd
, void __user
*arg
)
673 ad1848_info
*devc
= mixer_devs
[dev
]->devc
;
676 if (cmd
== SOUND_MIXER_PRIVATE1
)
678 if (get_user(val
, (int __user
*)arg
))
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 */
692 ad_write(devc
, 26, ad_read(devc
, 26) | 0x40); /* Mute mono out */
693 spin_unlock_irqrestore(&devc
->lock
,flags
);
695 val
= devc
->mixer_output_port
;
696 return put_user(val
, (int __user
*)arg
);
698 if (cmd
== SOUND_MIXER_PRIVATE2
)
700 if (get_user(val
, (int __user
*)arg
))
702 return(ad1848_control(AD1848_MIXER_REROUTE
, val
));
704 if (((cmd
>> 8) & 0xff) == 'M')
706 if (_SIOC_DIR(cmd
) & _SIOC_WRITE
)
710 case SOUND_MIXER_RECSRC
:
711 if (get_user(val
, (int __user
*)arg
))
713 val
= ad1848_set_recmask(devc
, val
);
717 if (get_user(val
, (int __user
*)arg
))
719 val
= ad1848_mixer_set(devc
, cmd
& 0xff, val
);
722 return put_user(val
, (int __user
*)arg
);
732 case SOUND_MIXER_RECSRC
:
736 case SOUND_MIXER_DEVMASK
:
737 val
= devc
->supported_devices
;
740 case SOUND_MIXER_STEREODEVS
:
741 val
= devc
->supported_devices
;
742 if (devc
->model
!= MD_C930
)
743 val
&= ~(SOUND_MASK_SPEAKER
| SOUND_MASK_IMIX
);
746 case SOUND_MIXER_RECMASK
:
747 val
= devc
->supported_rec_devices
;
750 case SOUND_MIXER_CAPS
:
751 val
=SOUND_CAP_EXCL_INPUT
;
755 val
= ad1848_mixer_get(devc
, cmd
& 0xff);
758 return put_user(val
, (int __user
*)arg
);
765 static int ad1848_set_speed(int dev
, int arg
)
767 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
768 ad1848_port_info
*portc
= (ad1848_port_info
*) audio_devs
[dev
]->portc
;
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):
775 * The available speeds are in the following table. Keep the speeds in
776 * the increasing order.
785 static speed_struct speed_table
[] =
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}
804 int i
, n
, selected
= -1;
806 n
= sizeof(speed_table
) / sizeof(speed_struct
);
811 if (devc
->model
== MD_1845
|| devc
->model
== MD_1845_SSCAPE
) /* AD1845 has different timer than others */
819 portc
->speed_bits
= speed_table
[3].bits
;
822 if (arg
< speed_table
[0].speed
)
824 if (arg
> speed_table
[n
- 1].speed
)
827 for (i
= 1 /*really */ ; selected
== -1 && i
< n
; i
++)
829 if (speed_table
[i
].speed
== arg
)
831 else if (speed_table
[i
].speed
> arg
)
835 diff1
= arg
- speed_table
[i
- 1].speed
;
836 diff2
= speed_table
[i
].speed
- arg
;
846 printk(KERN_WARNING
"ad1848: Can't find speed???\n");
849 portc
->speed
= speed_table
[selected
].speed
;
850 portc
->speed_bits
= speed_table
[selected
].bits
;
854 static short ad1848_set_channels(int dev
, short arg
)
856 ad1848_port_info
*portc
= (ad1848_port_info
*) audio_devs
[dev
]->portc
;
858 if (arg
!= 1 && arg
!= 2)
859 return portc
->channels
;
861 portc
->channels
= arg
;
865 static unsigned int ad1848_set_bits(int dev
, unsigned int arg
)
867 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
868 ad1848_port_info
*portc
= (ad1848_port_info
*) audio_devs
[dev
]->portc
;
870 static struct format_tbl
917 int i
, n
= sizeof(format2bits
) / sizeof(struct format_tbl
);
920 return portc
->audio_format
;
922 if (!(arg
& ad_format_mask
[devc
->model
]))
925 portc
->audio_format
= arg
;
927 for (i
= 0; i
< n
; i
++)
928 if (format2bits
[i
].format
== arg
)
930 if ((portc
->format_bits
= format2bits
[i
].bits
) == 0)
931 return portc
->audio_format
= AFMT_U8
; /* Was not supported */
935 /* Still hanging here. Something must be terribly wrong */
936 portc
->format_bits
= 0;
937 return portc
->audio_format
= AFMT_U8
;
940 static struct audio_driver ad1848_audio_driver
=
942 .owner
= THIS_MODULE
,
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
958 static struct mixer_operations ad1848_mixer_operations
=
960 .owner
= THIS_MODULE
,
962 .name
= "AD1848/CS4248/CS4231",
963 .ioctl
= ad1848_mixer_ioctl
966 static int ad1848_open(int dev
, int mode
)
969 ad1848_port_info
*portc
;
972 if (dev
< 0 || dev
>= num_audiodevs
)
975 devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
976 portc
= (ad1848_port_info
*) audio_devs
[dev
]->portc
;
978 /* here we don't have to protect against intr */
979 spin_lock(&devc
->lock
);
980 if (portc
->open_mode
|| (devc
->open_mode
& mode
))
982 spin_unlock(&devc
->lock
);
987 if (audio_devs
[dev
]->flags
& DMA_DUPLEX
)
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);
998 if (mode
& OPEN_READ
)
999 devc
->record_dev
= dev
;
1000 if (mode
& OPEN_WRITE
)
1001 devc
->playback_dev
= dev
;
1003 * Mute output until the playback really starts. This decreases clicking (hope so).
1005 spin_lock_irqsave(&devc
->lock
,flags
);
1007 spin_unlock_irqrestore(&devc
->lock
,flags
);
1012 static void ad1848_close(int dev
)
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
;
1018 DEB(printk("ad1848_close(void)\n"));
1020 devc
->intr_active
= 0;
1023 spin_lock_irqsave(&devc
->lock
,flags
);
1025 devc
->audio_mode
= 0;
1026 devc
->open_mode
&= ~portc
->open_mode
;
1027 portc
->open_mode
= 0;
1030 spin_unlock_irqrestore(&devc
->lock
,flags
);
1033 static void ad1848_output_block(int dev
, unsigned long buf
, int count
, int intrflag
)
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
;
1041 if (portc
->audio_format
== AFMT_IMA_ADPCM
)
1047 if (portc
->audio_format
& (AFMT_S16_LE
| AFMT_S16_BE
)) /* 16 bit data */
1050 if (portc
->channels
> 1)
1054 if ((devc
->audio_mode
& PCM_ENABLE_OUTPUT
) && (audio_devs
[dev
]->flags
& DMA_AUTOMODE
) &&
1056 cnt
== devc
->xfer_count
)
1058 devc
->audio_mode
|= PCM_ENABLE_OUTPUT
;
1059 devc
->intr_active
= 1;
1061 * Auto DMA mode on. No need to react
1064 spin_lock_irqsave(&devc
->lock
,flags
);
1066 ad_write(devc
, 15, (unsigned char) (cnt
& 0xff));
1067 ad_write(devc
, 14, (unsigned char) ((cnt
>> 8) & 0xff));
1069 devc
->xfer_count
= cnt
;
1070 devc
->audio_mode
|= PCM_ENABLE_OUTPUT
;
1071 devc
->intr_active
= 1;
1072 spin_unlock_irqrestore(&devc
->lock
,flags
);
1075 static void ad1848_start_input(int dev
, unsigned long buf
, int count
, int intrflag
)
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
;
1082 if (portc
->audio_format
== AFMT_IMA_ADPCM
)
1088 if (portc
->audio_format
& (AFMT_S16_LE
| AFMT_S16_BE
)) /* 16 bit data */
1091 if (portc
->channels
> 1)
1095 if ((devc
->audio_mode
& PCM_ENABLE_INPUT
) && (audio_devs
[dev
]->flags
& DMA_AUTOMODE
) &&
1097 cnt
== devc
->xfer_count
)
1099 devc
->audio_mode
|= PCM_ENABLE_INPUT
;
1100 devc
->intr_active
= 1;
1102 * Auto DMA mode on. No need to react
1105 spin_lock_irqsave(&devc
->lock
,flags
);
1107 if (devc
->model
== MD_1848
)
1109 ad_write(devc
, 15, (unsigned char) (cnt
& 0xff));
1110 ad_write(devc
, 14, (unsigned char) ((cnt
>> 8) & 0xff));
1114 ad_write(devc
, 31, (unsigned char) (cnt
& 0xff));
1115 ad_write(devc
, 30, (unsigned char) ((cnt
>> 8) & 0xff));
1120 devc
->xfer_count
= cnt
;
1121 devc
->audio_mode
|= PCM_ENABLE_INPUT
;
1122 devc
->intr_active
= 1;
1123 spin_unlock_irqrestore(&devc
->lock
,flags
);
1126 static int ad1848_prepare_for_output(int dev
, int bsize
, int bcount
)
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
;
1136 spin_lock_irqsave(&devc
->lock
,flags
);
1137 fs
= portc
->speed_bits
| (portc
->format_bits
<< 5);
1139 if (portc
->channels
> 1)
1142 ad_enter_MCE(devc
); /* Enables changes to the format select reg */
1144 if (devc
->model
== MD_1845
|| devc
->model
== MD_1845_SSCAPE
) /* Use alternate speed select registers */
1146 fs
&= 0xf0; /* Mask off the rate select bits */
1148 ad_write(devc
, 22, (portc
->speed
>> 8) & 0xff); /* Speed MSB */
1149 ad_write(devc
, 23, portc
->speed
& 0xff); /* Speed LSB */
1151 old_fs
= ad_read(devc
, 8);
1153 if (devc
->model
== MD_4232
|| devc
->model
>= MD_4236
)
1155 tmp
= ad_read(devc
, 16);
1156 ad_write(devc
, 16, tmp
| 0x30);
1158 if (devc
->model
== MD_IWAVE
)
1159 ad_write(devc
, 17, 0xc2); /* Disable variable frequency select */
1161 ad_write(devc
, 8, fs
);
1164 * Write to I8 starts resynchronization. Wait until it completes.
1168 while (timeout
< 100 && inb(devc
->base
) != 0x80)
1171 while (timeout
< 10000 && inb(devc
->base
) == 0x80)
1174 if (devc
->model
>= MD_4232
)
1175 ad_write(devc
, 16, tmp
& ~0x30);
1177 ad_leave_MCE(devc
); /*
1178 * Starts the calibration process.
1180 spin_unlock_irqrestore(&devc
->lock
,flags
);
1181 devc
->xfer_count
= 0;
1183 #ifndef EXCLUDE_TIMERS
1184 if (dev
== timer_installed
&& devc
->timer_running
)
1185 if ((fs
& 0x01) != (old_fs
& 0x01))
1187 ad1848_tmr_reprogram(dev
);
1190 ad1848_halt_output(dev
);
1194 static int ad1848_prepare_for_input(int dev
, int bsize
, int bcount
)
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
;
1202 if (devc
->audio_mode
)
1205 spin_lock_irqsave(&devc
->lock
,flags
);
1206 fs
= portc
->speed_bits
| (portc
->format_bits
<< 5);
1208 if (portc
->channels
> 1)
1211 ad_enter_MCE(devc
); /* Enables changes to the format select reg */
1213 if ((devc
->model
== MD_1845
) || (devc
->model
== MD_1845_SSCAPE
)) /* Use alternate speed select registers */
1215 fs
&= 0xf0; /* Mask off the rate select bits */
1217 ad_write(devc
, 22, (portc
->speed
>> 8) & 0xff); /* Speed MSB */
1218 ad_write(devc
, 23, portc
->speed
& 0xff); /* Speed LSB */
1220 if (devc
->model
== MD_4232
)
1222 tmp
= ad_read(devc
, 16);
1223 ad_write(devc
, 16, tmp
| 0x30);
1225 if (devc
->model
== MD_IWAVE
)
1226 ad_write(devc
, 17, 0xc2); /* Disable variable frequency select */
1229 * If mode >= 2 (CS4231), set I28. It's the capture format register.
1232 if (devc
->model
!= MD_1848
)
1234 old_fs
= ad_read(devc
, 28);
1235 ad_write(devc
, 28, fs
);
1238 * Write to I28 starts resynchronization. Wait until it completes.
1242 while (timeout
< 100 && inb(devc
->base
) != 0x80)
1246 while (timeout
< 10000 && inb(devc
->base
) == 0x80)
1249 if (devc
->model
!= MD_1848
&& devc
->model
!= MD_1845
&& devc
->model
!= MD_1845_SSCAPE
)
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.
1256 unsigned char tmp
= portc
->speed_bits
| (ad_read(devc
, 8) & 0xf0);
1258 ad_write(devc
, 8, tmp
);
1260 * Write to I8 starts resynchronization. Wait until it completes.
1263 while (timeout
< 100 && inb(devc
->base
) != 0x80)
1267 while (timeout
< 10000 && inb(devc
->base
) == 0x80)
1272 { /* For AD1848 set I8. */
1274 old_fs
= ad_read(devc
, 8);
1275 ad_write(devc
, 8, fs
);
1277 * Write to I8 starts resynchronization. Wait until it completes.
1280 while (timeout
< 100 && inb(devc
->base
) != 0x80)
1283 while (timeout
< 10000 && inb(devc
->base
) == 0x80)
1287 if (devc
->model
== MD_4232
)
1288 ad_write(devc
, 16, tmp
& ~0x30);
1290 ad_leave_MCE(devc
); /*
1291 * Starts the calibration process.
1293 spin_unlock_irqrestore(&devc
->lock
,flags
);
1294 devc
->xfer_count
= 0;
1296 #ifndef EXCLUDE_TIMERS
1297 if (dev
== timer_installed
&& devc
->timer_running
)
1299 if ((fs
& 0x01) != (old_fs
& 0x01))
1301 ad1848_tmr_reprogram(dev
);
1305 ad1848_halt_input(dev
);
1309 static void ad1848_halt(int dev
)
1311 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
1312 ad1848_port_info
*portc
= (ad1848_port_info
*) audio_devs
[dev
]->portc
;
1314 unsigned char bits
= ad_read(devc
, 9);
1316 if (bits
& 0x01 && (portc
->open_mode
& OPEN_WRITE
))
1317 ad1848_halt_output(dev
);
1319 if (bits
& 0x02 && (portc
->open_mode
& OPEN_READ
))
1320 ad1848_halt_input(dev
);
1321 devc
->audio_mode
= 0;
1324 static void ad1848_halt_input(int dev
)
1326 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
1327 unsigned long flags
;
1329 if (!(ad_read(devc
, 9) & 0x02))
1330 return; /* Capture not enabled */
1332 spin_lock_irqsave(&devc
->lock
,flags
);
1339 if(!isa_dma_bridge_buggy
)
1340 disable_dma(audio_devs
[dev
]->dmap_in
->dma
);
1342 for (tmout
= 0; tmout
< 100000; tmout
++)
1343 if (ad_read(devc
, 11) & 0x10)
1345 ad_write(devc
, 9, ad_read(devc
, 9) & ~0x02); /* Stop capture */
1347 if(!isa_dma_bridge_buggy
)
1348 enable_dma(audio_devs
[dev
]->dmap_in
->dma
);
1349 devc
->audio_mode
&= ~PCM_ENABLE_INPUT
;
1352 outb(0, io_Status(devc
)); /* Clear interrupt status */
1353 outb(0, io_Status(devc
)); /* Clear interrupt status */
1355 devc
->audio_mode
&= ~PCM_ENABLE_INPUT
;
1357 spin_unlock_irqrestore(&devc
->lock
,flags
);
1360 static void ad1848_halt_output(int dev
)
1362 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
1363 unsigned long flags
;
1365 if (!(ad_read(devc
, 9) & 0x01))
1366 return; /* Playback not enabled */
1368 spin_lock_irqsave(&devc
->lock
,flags
);
1374 if(!isa_dma_bridge_buggy
)
1375 disable_dma(audio_devs
[dev
]->dmap_out
->dma
);
1377 for (tmout
= 0; tmout
< 100000; tmout
++)
1378 if (ad_read(devc
, 11) & 0x10)
1380 ad_write(devc
, 9, ad_read(devc
, 9) & ~0x01); /* Stop playback */
1382 if(!isa_dma_bridge_buggy
)
1383 enable_dma(audio_devs
[dev
]->dmap_out
->dma
);
1385 devc
->audio_mode
&= ~PCM_ENABLE_OUTPUT
;
1388 outb((0), io_Status(devc
)); /* Clear interrupt status */
1389 outb((0), io_Status(devc
)); /* Clear interrupt status */
1391 devc
->audio_mode
&= ~PCM_ENABLE_OUTPUT
;
1393 spin_unlock_irqrestore(&devc
->lock
,flags
);
1396 static void ad1848_trigger(int dev
, int state
)
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
;
1403 spin_lock_irqsave(&devc
->lock
,flags
);
1404 state
&= devc
->audio_mode
;
1406 tmp
= old
= ad_read(devc
, 9);
1408 if (portc
->open_mode
& OPEN_READ
)
1410 if (state
& PCM_ENABLE_INPUT
)
1415 if (portc
->open_mode
& OPEN_WRITE
)
1417 if (state
& PCM_ENABLE_OUTPUT
)
1422 /* ad_mute(devc); */
1425 ad_write(devc
, 9, tmp
);
1428 spin_unlock_irqrestore(&devc
->lock
,flags
);
1431 static void ad1848_init_hw(ad1848_info
* devc
)
1437 * Initial values for the indirect registers of CS4248/AD1848.
1439 static int init_values_a
[] =
1441 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1442 0x00, 0x0c, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00,
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
1449 static int init_values_b
[] =
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
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
1468 * Select initialisation data
1471 init_values
= init_values_a
;
1472 if(devc
->model
>= MD_4236
)
1473 init_values
= init_values_b
;
1475 for (i
= 0; i
< 16; i
++)
1476 ad_write(devc
, i
, init_values
[i
]);
1479 ad_mute(devc
); /* Initialize some variables */
1480 ad_unmute(devc
); /* Leave it unmuted now */
1482 if (devc
->model
> MD_1848
)
1484 if (devc
->model
== MD_1845_SSCAPE
)
1485 ad_write(devc
, 12, ad_read(devc
, 12) | 0x50);
1487 ad_write(devc
, 12, ad_read(devc
, 12) | 0x40); /* Mode2 = enabled */
1489 if (devc
->model
== MD_IWAVE
)
1490 ad_write(devc
, 12, 0x6c); /* Select codec mode 3 */
1492 if (devc
->model
!= MD_1845_SSCAPE
)
1493 for (i
= 16; i
< 32; i
++)
1494 ad_write(devc
, i
, init_values
[i
]);
1496 if (devc
->model
== MD_IWAVE
)
1497 ad_write(devc
, 16, 0x30); /* Playback and capture counters enabled */
1499 if (devc
->model
> MD_1848
)
1501 if (devc
->audio_flags
& DMA_DUPLEX
)
1502 ad_write(devc
, 9, ad_read(devc
, 9) & ~0x04); /* Dual DMA mode */
1504 ad_write(devc
, 9, ad_read(devc
, 9) | 0x04); /* Single DMA mode */
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 */
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 */
1518 devc
->audio_flags
&= ~DMA_DUPLEX
;
1519 ad_write(devc
, 9, ad_read(devc
, 9) | 0x04); /* Single DMA mode */
1521 ad_write(devc
, 12, ad_read(devc
, 12) | 0x40); /* Mode2 = enabled */
1524 outb((0), io_Status(devc
)); /* Clear pending interrupts */
1527 * Toggle the MCE bit. It completes the initialization phase.
1530 ad_enter_MCE(devc
); /* In case the bit was off */
1533 ad1848_mixer_reset(devc
);
1536 int ad1848_detect(struct resource
*ports
, int *ad_flags
, int *osp
)
1539 ad1848_info
*devc
= &adev_info
[nr_ad1848_devs
];
1540 unsigned char tmp1
= 0xff, tmp2
= 0xff;
1541 int optiC930
= 0; /* OPTi 82C930 flag */
1543 int ad1847_flag
= 0;
1544 int cs4248_flag
= 0;
1545 int sscape_flag
= 0;
1546 int io_base
= ports
->start
;
1550 DDB(printk("ad1848_detect(%x)\n", io_base
));
1554 if (*ad_flags
== 0x12345678)
1560 if (*ad_flags
== 0x87654321)
1566 if (*ad_flags
== 0x12345677)
1572 if (nr_ad1848_devs
>= MAX_AUDIO_DEV
)
1574 printk(KERN_ERR
"ad1848 - Too many audio devices\n");
1577 spin_lock_init(&devc
->lock
);
1578 devc
->base
= io_base
;
1580 devc
->timer_running
= 0;
1581 devc
->MCE_bit
= 0x40;
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;
1590 * Check that the I/O address is in use.
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.
1596 * If the I/O address is unused, it typically returns 0xff.
1599 if (inb(devc
->base
) == 0xff)
1601 DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1605 * Wait for the device to stop initialization
1608 DDB(printk("ad1848_detect() - step 0\n"));
1610 for (i
= 0; i
< 10000000; i
++)
1612 unsigned char x
= inb(devc
->base
);
1614 if (x
== 0xff || !(x
& 0x80))
1618 DDB(printk("ad1848_detect() - step A\n"));
1620 if (inb(devc
->base
) == 0x80) /* Not ready. Let's wait */
1623 if ((inb(devc
->base
) & 0x80) != 0x00) /* Not a AD1848 */
1625 DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc
->base
)));
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.
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 */
1639 if ((tmp1
= ad_read(devc
, 0)) != 0xaa || (tmp2
= ad_read(devc
, 1)) != 0x45)
1641 if (tmp2
== 0x65) /* AD1847 has couple of bits hardcoded to 1 */
1645 DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1
, tmp2
));
1649 DDB(printk("ad1848_detect() - step C\n"));
1650 ad_write(devc
, 0, 0x45);
1651 ad_write(devc
, 1, 0xaa);
1653 if ((tmp1
= ad_read(devc
, 0)) != 0x45 || (tmp2
= ad_read(devc
, 1)) != 0xaa)
1655 if (tmp2
== 0x8a) /* AD1847 has few bits hardcoded to 1 */
1659 DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1
, tmp2
));
1665 * The indirect register I12 has some read only bits. Let's
1666 * try to change them.
1669 DDB(printk("ad1848_detect() - step D\n"));
1670 tmp
= ad_read(devc
, 12);
1671 ad_write(devc
, 12, (~tmp
) & 0x0f);
1673 if ((tmp
& 0x0f) != ((tmp1
= ad_read(devc
, 12)) & 0x0f))
1675 DDB(printk("ad1848 detect error - step D (%x)\n", tmp1
));
1680 * NOTE! Last 4 bits of the reg I12 tell the chip revision.
1681 * 0x01=RevB and 0x0A=RevC.
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
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.
1698 DDB(printk("ad1848_detect() - step F\n"));
1699 ad_write(devc
, 12, 0); /* Mode2=disabled */
1701 for (i
= 0; i
< 16; i
++)
1703 if ((tmp1
= ad_read(devc
, i
)) != (tmp2
= ad_read(devc
, i
+ 16)))
1705 DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i
, tmp1
, tmp2
));
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.
1717 DDB(printk("ad1848_detect() - step G\n"));
1719 if (ad_flags
&& *ad_flags
== 400)
1722 ad_write(devc
, 12, 0x40); /* Set mode2, clear 0x80 */
1728 tmp1
= ad_read(devc
, 12);
1732 *ad_flags
|= AD_F_CS4248
;
1734 devc
->chip_name
= "CS4248"; /* Our best knowledge just now */
1736 if (optiC930
|| (tmp1
& 0xc0) == (0x80 | 0x40))
1739 * CS4231 detected - is it?
1741 * Verify that setting I0 doesn't change I16.
1744 DDB(printk("ad1848_detect() - step H\n"));
1745 ad_write(devc
, 16, 0); /* Set I16 to known value */
1747 ad_write(devc
, 0, 0x45);
1748 if ((tmp1
= ad_read(devc
, 16)) != 0x45) /* No change -> CS4231? */
1750 ad_write(devc
, 0, 0xaa);
1751 if ((tmp1
= ad_read(devc
, 16)) == 0xaa) /* Rotten bits? */
1753 DDB(printk("ad1848 detect error - step H(%x)\n", tmp1
));
1758 * Verify that some bits of I25 are read only.
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))
1769 * It's at least CS4231
1772 devc
->chip_name
= "CS4231";
1773 devc
->model
= MD_4231
;
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.
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)));
1788 if ((id
& 0xe7) == 0x80) {
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.
1796 unsigned char tmp
= ad_read(devc
, 23);
1797 ad_write(devc
, 23, ~tmp
);
1801 devc
->model
= MD_IWAVE
;
1802 devc
->chip_name
= "IWave";
1804 else if (ad_read(devc
, 23) != tmp
) /* AD1845 ? */
1806 devc
->chip_name
= "AD1845";
1807 devc
->model
= MD_1845
;
1809 else if (cs4248_flag
)
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 */
1817 ad_write(devc
, 23, tmp
); /* Restore */
1821 switch (id
& 0x1f) {
1822 case 3: /* CS4236/CS4235/CS42xB/CS4239 */
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 */
1832 devc
->chip_name
= "CS4237B(B)";
1833 devc
->model
= MD_42xB
;
1836 /* Seems to be a 4238 ?? */
1837 devc
->chip_name
= "CS4238";
1838 devc
->model
= MD_42xB
;
1841 devc
->chip_name
= "CS4238B";
1842 devc
->model
= MD_42xB
;
1845 devc
->chip_name
= "CS4236B";
1846 devc
->model
= MD_4236
;
1849 devc
->chip_name
= "CS4237B";
1850 devc
->model
= MD_42xB
;
1853 devc
->chip_name
= "CS4235";
1854 devc
->model
= MD_4235
;
1857 devc
->chip_name
= "CS4239";
1858 devc
->model
= MD_4239
;
1861 printk("Chip ident is %X.\n", xid
&0x1F);
1862 devc
->chip_name
= "CS42xx";
1863 devc
->model
= MD_4232
;
1869 case 2: /* CS4232/CS4232A */
1870 devc
->chip_name
= "CS4232";
1871 devc
->model
= MD_4232
;
1875 if ((id
& 0xe0) == 0xa0)
1877 devc
->chip_name
= "CS4231A";
1878 devc
->model
= MD_4231A
;
1882 devc
->chip_name
= "CS4321";
1883 devc
->model
= MD_4231
;
1887 default: /* maybe */
1888 DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc
, 25), ad_read(devc
, 25) & 0xe7));
1891 devc
->chip_name
= "82C930";
1892 devc
->model
= MD_C930
;
1896 devc
->chip_name
= "CS4231";
1897 devc
->model
= MD_4231
;
1902 ad_write(devc
, 25, tmp1
); /* Restore bits */
1904 DDB(printk("ad1848_detect() - step K\n"));
1906 } else if (tmp1
== 0x0a) {
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.
1915 * Let's try comparing register values
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
));
1921 devc
->chip_name
= "SoundPro CMI 8330";
1927 DDB(printk("ad1848_detect() - step L\n"));
1930 if (devc
->model
!= MD_1848
)
1931 *ad_flags
|= AD_F_CS4231
;
1933 DDB(printk("ad1848_detect() - Detected OK\n"));
1935 if (devc
->model
== MD_1848
&& ad1847_flag
)
1936 devc
->chip_name
= "AD1847";
1939 if (sscape_flag
== 1)
1940 devc
->model
= MD_1845_SSCAPE
;
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
)
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).
1958 ad1848_info
*devc
= &adev_info
[nr_ad1848_devs
];
1960 ad1848_port_info
*portc
= NULL
;
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;
1973 if (name
!= NULL
&& name
[0] != 0)
1975 "%s (%s)", name
, devc
->chip_name
);
1978 "Generic audio codec (%s)", devc
->chip_name
);
1980 rename_region(ports
, devc
->name
);
1982 conf_printf2(dev_name
, devc
->base
, devc
->irq
, dma_playback
, dma_capture
);
1984 if (devc
->model
== MD_1848
|| devc
->model
== MD_C930
)
1985 devc
->audio_flags
|= DMA_HARDSTOP
;
1987 if (devc
->model
> MD_1848
)
1989 if (devc
->dma1
== devc
->dma2
|| devc
->dma2
== -1 || devc
->dma1
== -1)
1990 devc
->audio_flags
&= ~DMA_DUPLEX
;
1992 devc
->audio_flags
|= DMA_DUPLEX
;
1995 portc
= kmalloc(sizeof(ad1848_port_info
), GFP_KERNEL
);
1997 release_region(devc
->base
, 4);
2001 if ((my_dev
= sound_install_audiodrv(AUDIO_DRIVER_VERSION
,
2003 &ad1848_audio_driver
,
2004 sizeof(struct audio_driver
),
2006 ad_format_mask
[devc
->model
],
2011 release_region(devc
->base
, 4);
2016 audio_devs
[my_dev
]->portc
= portc
;
2017 audio_devs
[my_dev
]->mixer_dev
= -1;
2019 audio_devs
[my_dev
]->d
->owner
= owner
;
2020 memset((char *) portc
, 0, sizeof(*portc
));
2024 ad1848_init_hw(devc
);
2028 devc
->dev_no
= my_dev
;
2029 if (request_irq(devc
->irq
, adintr
, 0, devc
->name
,
2030 (void *)(long)my_dev
) < 0)
2032 printk(KERN_WARNING
"ad1848: Unable to allocate IRQ\n");
2033 /* Don't free it either then.. */
2036 if (capabilities
[devc
->model
].flags
& CAP_F_TIMER
)
2040 unsigned char tmp
= ad_read(devc
, 16);
2043 devc
->timer_ticks
= 0;
2045 ad_write(devc
, 21, 0x00); /* Timer MSB */
2046 ad_write(devc
, 20, 0x10); /* Timer LSB */
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 */
2052 if (devc
->timer_ticks
== 0)
2053 printk(KERN_WARNING
"ad1848: Interrupt test failed (IRQ%d)\n", irq
);
2056 DDB(printk("Interrupt test OK\n"));
2064 devc
->irq_ok
= 1; /* Couldn't test. assume it's OK */
2066 irq2dev
[-irq
] = devc
->dev_no
= my_dev
;
2068 #ifndef EXCLUDE_TIMERS
2069 if ((capabilities
[devc
->model
].flags
& CAP_F_TIMER
) &&
2071 ad1848_tmr_install(my_dev
);
2076 if (sound_alloc_dma(dma_playback
, devc
->name
))
2077 printk(KERN_WARNING
"ad1848.c: Can't allocate DMA%d\n", dma_playback
);
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
);
2084 if ((e
= sound_install_mixer(MIXER_DRIVER_VERSION
,
2086 &ad1848_mixer_operations
,
2087 sizeof(struct mixer_operations
),
2090 audio_devs
[my_dev
]->mixer_dev
= e
;
2092 mixer_devs
[e
]->owner
= owner
;
2097 int ad1848_control(int cmd
, int arg
)
2100 unsigned long flags
;
2102 if (nr_ad1848_devs
< 1)
2105 devc
= &adev_info
[nr_ad1848_devs
- 1];
2109 case AD1848_SET_XTAL
: /* Change clock frequency of AD1845 (only ) */
2110 if (devc
->model
!= MD_1845
|| devc
->model
!= MD_1845_SSCAPE
)
2112 spin_lock_irqsave(&devc
->lock
,flags
);
2114 ad_write(devc
, 29, (ad_read(devc
, 29) & 0x1f) | (arg
<< 5));
2116 spin_unlock_irqrestore(&devc
->lock
,flags
);
2119 case AD1848_MIXER_REROUTE
:
2121 int o
= (arg
>> 8) & 0xff;
2124 if (o
< 0 || o
>= SOUND_MIXER_NRDEVICES
)
2127 if (!(devc
->supported_devices
& (1 << o
)) &&
2128 !(devc
->supported_rec_devices
& (1 << o
)))
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
);
2139 /* Make the mixer control identified by o to appear as n */
2140 if (n
< 0 || n
>= SOUND_MIXER_NRDEVICES
)
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
);
2149 devc
->supported_devices
&= ~(1 << o
);
2150 devc
->supported_rec_devices
&= ~(1 << o
);
2157 void ad1848_unload(int io_base
, int irq
, int dma_playback
, int dma_capture
, int share_dma
)
2159 int i
, mixer
, dev
= 0;
2160 ad1848_info
*devc
= NULL
;
2162 for (i
= 0; devc
== NULL
&& i
< nr_ad1848_devs
; i
++)
2164 if (adev_info
[i
].base
== io_base
)
2166 devc
= &adev_info
[i
];
2173 kfree(audio_devs
[dev
]->portc
);
2174 release_region(devc
->base
, 4);
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
);
2181 sound_free_dma(dma_playback
);
2183 if (dma_playback
!= dma_capture
)
2184 sound_free_dma(dma_capture
);
2187 mixer
= audio_devs
[devc
->dev_no
]->mixer_dev
;
2189 sound_unload_mixerdev(mixer
);
2192 for ( ; i
< nr_ad1848_devs
; i
++)
2193 adev_info
[i
] = adev_info
[i
+1];
2196 printk(KERN_ERR
"ad1848: Can't find device to be unloaded. Base=%x\n", io_base
);
2199 static irqreturn_t
adintr(int irq
, void *dev_id
)
2201 unsigned char status
;
2204 int alt_stat
= 0xff;
2205 unsigned char c930_stat
= 0;
2209 devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
2211 interrupt_again
: /* Jump back here if int status doesn't reset */
2213 status
= inb(io_Status(devc
));
2216 printk(KERN_DEBUG
"adintr: Why?\n");
2217 if (devc
->model
== MD_1848
)
2218 outb((0), io_Status(devc
)); /* Clear interrupt status */
2222 if (devc
->model
== MD_C930
)
2223 { /* 82C930 has interrupt status register in MAD16 register MC11 */
2225 spin_lock(&devc
->lock
);
2227 /* 0xe0e is C930 address port
2228 * 0xe0f is C930 data port
2231 c930_stat
= inb(0xe0f);
2232 outb((~c930_stat
), 0xe0f);
2234 spin_unlock(&devc
->lock
);
2236 alt_stat
= (c930_stat
<< 2) & 0x30;
2238 else if (devc
->model
!= MD_1848
)
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
);
2246 if ((devc
->open_mode
& OPEN_READ
) && (devc
->audio_mode
& PCM_ENABLE_INPUT
) && (alt_stat
& 0x20))
2248 DMAbuf_inputintr(devc
->record_dev
);
2250 if ((devc
->open_mode
& OPEN_WRITE
) && (devc
->audio_mode
& PCM_ENABLE_OUTPUT
) &&
2253 DMAbuf_outputintr(devc
->playback_dev
, 1);
2255 if (devc
->model
!= MD_1848
&& (alt_stat
& 0x40)) /* Timer interrupt */
2257 devc
->timer_ticks
++;
2258 #ifndef EXCLUDE_TIMERS
2259 if (timer_installed
== dev
&& devc
->timer_running
)
2260 sound_timer_interrupt();
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.
2270 if (inb(io_Status(devc
)) & 0x01 && cnt
++ < 4)
2272 goto interrupt_again
;
2278 * Experimental initialization sequence for the integrated sound system
2279 * of the Compaq Deskpro M.
2282 static int init_deskpro_m(struct address_info
*hw_config
)
2286 if ((tmp
= inb(0xc44)) == 0xff)
2288 DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2306 * Experimental initialization sequence for the integrated sound system
2307 * of Compaq Deskpro XL.
2310 static int init_deskpro(struct address_info
*hw_config
)
2314 if ((tmp
= inb(0xc44)) == 0xff)
2316 DDB(printk("init_deskpro: Dead port 0xc44\n"));
2319 outb((tmp
| 0x04), 0xc44); /* Select bank 1 */
2320 if (inb(0xc44) != 0x04)
2322 DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2326 * OK. It looks like a Deskpro so let's proceed.
2330 * I/O port 0xc44 Audio configuration register.
2332 * bits 0xc0: Audio revision bits
2333 * 0x00 = Compaq Business Audio
2334 * 0x40 = MS Sound System Compatible (reset default)
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
2349 * bits 0x03 MSS Base address
2350 * 0x00 = 0x530 (reset default)
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));
2365 /* Set bank 1 of the register */
2366 tmp
= 0x58; /* MSS Mode, MSS&FM decode enabled */
2368 switch (hw_config
->io_base
)
2383 DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config
->io_base
));
2386 outb((tmp
& ~0x04), 0xc44); /* Write to bank=0 */
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));
2398 * I/O port 0xc45 FM Address Decode/MSS ID Register.
2400 * bank=0, bits 0xfe: FM synthesis Decode Compare bits 7:1 (default=0x88)
2401 * bank=0, bit 0x01: SBIC Power Control Bit
2403 * 0x01 = Powered down
2404 * bank=1, bits 0xfc: MSS ID (default=0x40)
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));
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) */
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));
2432 * I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2434 * bank=0, bits 0xff: FM synthesis Decode Compare bits 15:8 (default=0x03)
2435 * bank=1, bits 0xff: Audio addressing ASIC id
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));
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 */
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));
2462 * I/O port 0xc47 FM Address Decode Register.
2464 * bank=0, bits 0xff: Decode enable selection for various FM address bits
2465 * bank=1, bits 0xff: Reserved
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));
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 */
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));
2492 * I/O port 0xc6f = Audio Disable Function Register
2496 printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2499 outb((0x80), 0xc6f);
2502 printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2508 int probe_ms_sound(struct address_info
*hw_config
, struct resource
*ports
)
2512 DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config
->io_base
, hw_config
->card_subtype
));
2514 if (hw_config
->card_subtype
== 1) /* Has no IRQ/DMA registers */
2516 /* check_opl3(0x388, hw_config); */
2517 return ad1848_detect(ports
, NULL
, hw_config
->osp
);
2520 if (deskpro_xl
&& hw_config
->card_subtype
== 2) /* Compaq Deskpro XL */
2522 if (!init_deskpro(hw_config
))
2526 if (deskpro_m
) /* Compaq Deskpro M */
2528 if (!init_deskpro_m(hw_config
))
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.
2538 if ((tmp
= inb(hw_config
->io_base
+ 3)) == 0xff) /* Bus float */
2542 DDB(printk("I/O address is inactive (%x)\n", tmp
));
2543 if (!(ret
= ad1848_detect(ports
, NULL
, hw_config
->osp
)))
2547 DDB(printk("MSS signature = %x\n", tmp
& 0x3f));
2548 if ((tmp
& 0x3f) != 0x04 &&
2549 (tmp
& 0x3f) != 0x0f &&
2550 (tmp
& 0x3f) != 0x00)
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
)))
2559 hw_config
->card_subtype
= 1;
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))
2569 printk(KERN_ERR
"MSS: Bad IRQ %d\n", hw_config
->irq
);
2572 if (hw_config
->dma
!= 0 && hw_config
->dma
!= 1 && hw_config
->dma
!= 3)
2574 printk(KERN_ERR
"MSS: Bad DMA %d\n", hw_config
->dma
);
2578 * Check that DMA0 is not in use with a 8 bit board.
2581 if (hw_config
->dma
== 0 && inb(hw_config
->io_base
+ 3) & 0x80)
2583 printk(KERN_ERR
"MSS: Can't use DMA0 with a 8 bit card/slot\n");
2586 if (hw_config
->irq
> 7 && hw_config
->irq
!= 9 && inb(hw_config
->io_base
+ 3) & 0x80)
2588 printk(KERN_ERR
"MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config
->irq
);
2591 return ad1848_detect(ports
, NULL
, hw_config
->osp
);
2594 void attach_ms_sound(struct address_info
*hw_config
, struct resource
*ports
, struct module
*owner
)
2596 static signed char interrupt_bits
[12] =
2598 -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2603 static char dma_bits
[4] =
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
;
2613 if (hw_config
->card_subtype
== 1) /* Has no IRQ/DMA registers */
2615 hw_config
->slots
[0] = ad1848_init("MS Sound System", ports
,
2624 * Set the IRQ and DMA addresses.
2627 bits
= interrupt_bits
[hw_config
->irq
];
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);
2635 outb((bits
| 0x40), config_port
);
2636 if ((inb(version_port
) & 0x40) == 0)
2637 printk(KERN_ERR
"[MSS: IRQ Conflict?]\n");
2640 * Handle the capture DMA channel
2643 if (dma2
!= -1 && dma2
!= dma
)
2645 if (!((dma
== 0 && dma2
== 1) ||
2646 (dma
== 1 && dma2
== 0) ||
2647 (dma
== 3 && dma2
== 0)))
2648 { /* Unsupported combination. Try to swap channels */
2654 if ((dma
== 0 && dma2
== 1) ||
2655 (dma
== 1 && dma2
== 0) ||
2656 (dma
== 3 && dma2
== 0))
2658 dma2_bit
= 0x04; /* Enable capture DMA */
2662 printk(KERN_WARNING
"MSS: Invalid capture DMA\n");
2671 hw_config
->dma
= dma
;
2672 hw_config
->dma2
= dma2
;
2674 outb((bits
| dma_bits
[dma
] | dma2_bit
), config_port
); /* Write IRQ+DMA setup */
2676 hw_config
->slots
[0] = ad1848_init("MS Sound System", ports
,
2683 void unload_ms_sound(struct address_info
*hw_config
)
2685 ad1848_unload(hw_config
->io_base
+ 4,
2688 hw_config
->dma2
, 0);
2689 sound_unload_audiodev(hw_config
->slots
[0]);
2690 release_region(hw_config
->io_base
, 4);
2693 #ifndef EXCLUDE_TIMERS
2696 * Timer stuff (for /dev/music).
2699 static unsigned int current_interval
;
2701 static unsigned int ad1848_tmr_start(int dev
, unsigned int usecs
)
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
;
2708 spin_lock_irqsave(&devc
->lock
,flags
);
2711 * Length of the timer interval (in nanoseconds) depends on the
2712 * selected crystal oscillator. Check this from bit 0x01 of I8.
2714 * AD1845 has just one oscillator which has cycle time of 10.050 us
2715 * (when a 24.576 MHz xtal oscillator is used).
2717 * Convert requested interval to nanoseconds before computing
2718 * the timer divider.
2721 if (devc
->model
== MD_1845
|| devc
->model
== MD_1845_SSCAPE
)
2723 else if (ad_read(devc
, 8) & 0x01)
2728 divider
= (usecs
* 1000 + xtal_nsecs
/ 2) / xtal_nsecs
;
2730 if (divider
< 100) /* Don't allow shorter intervals than about 1ms */
2733 if (divider
> 65535) /* Overflow check */
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
);
2742 return current_interval
= (divider
* xtal_nsecs
+ 500) / 1000;
2745 static void ad1848_tmr_reprogram(int dev
)
2748 * Audio driver has changed sampling rate so that a different xtal
2749 * oscillator was selected. We have to reprogram the timer rate.
2752 ad1848_tmr_start(dev
, current_interval
);
2753 sound_timer_syncinterval(current_interval
);
2756 static void ad1848_tmr_disable(int dev
)
2758 unsigned long flags
;
2759 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
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
);
2767 static void ad1848_tmr_restart(int dev
)
2769 unsigned long flags
;
2770 ad1848_info
*devc
= (ad1848_info
*) audio_devs
[dev
]->devc
;
2772 if (current_interval
== 0)
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
);
2781 static struct sound_lowlev_timer ad1848_tmr
=
2790 static int ad1848_tmr_install(int dev
)
2792 if (timer_installed
!= -1)
2793 return 0; /* Don't install another timer */
2795 timer_installed
= ad1848_tmr
.dev
= dev
;
2796 sound_timer_init(&ad1848_tmr
, audio_devs
[dev
]->name
);
2800 #endif /* EXCLUDE_TIMERS */
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
);
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;
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 */
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");
2833 static struct pnp_dev
*ad1848_dev
= NULL
;
2835 /* Please add new entries at the end of the table */
2838 unsigned short card_vendor
, card_device
,
2840 short mss_io
, irq
, dma
, dma2
; /* index into isapnp table */
2842 } ad1848_isapnp_list
[] __initdata
= {
2843 {"CMI 8330 SoundPRO",
2844 ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2845 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2847 {"CS4232 based card",
2848 ISAPNP_ANY_ID
, ISAPNP_ANY_ID
,
2849 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2851 {"CS4232 based card",
2852 ISAPNP_ANY_ID
, ISAPNP_ANY_ID
,
2853 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2855 {"OPL3-SA2 WSS mode",
2856 ISAPNP_ANY_ID
, ISAPNP_ANY_ID
,
2857 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2859 {"Advanced Gravis InterWave Audio",
2860 ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2861 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000),
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 },
2877 { ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2878 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000), 0 },
2882 MODULE_DEVICE_TABLE(isapnp
, id_table
);
2884 static struct pnp_dev
*activate_dev(char *devname
, char *resname
, struct pnp_dev
*dev
)
2888 err
= pnp_device_attach(dev
);
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
);
2895 pnp_device_detach(dev
);
2899 audio_activated
= 1;
2903 static struct pnp_dev __init
*ad1848_init_generic(struct pnp_card
*bus
,
2904 struct address_info
*hw_config
, int slot
)
2907 /* Configure Audio device */
2908 if((ad1848_dev
= pnp_find_dev(bus
, ad1848_isapnp_list
[slot
].vendor
, ad1848_isapnp_list
[slot
].function
, NULL
)))
2910 if((ad1848_dev
= activate_dev(ad1848_isapnp_list
[slot
].name
, "ad1848", ad1848_dev
)))
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
);
2918 hw_config
->dma2
= -1;
2919 hw_config
->card_subtype
= ad1848_isapnp_list
[slot
].type
;
2928 static int __init
ad1848_isapnp_init(struct address_info
*hw_config
, struct pnp_card
*bus
, int slot
)
2930 char *busname
= bus
->name
[0] ? bus
->name
: ad1848_isapnp_list
[slot
].name
;
2932 /* Initialize this baby. */
2934 if(ad1848_init_generic(bus
, hw_config
, slot
)) {
2937 printk(KERN_NOTICE
"ad1848: PnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
2939 hw_config
->io_base
, hw_config
->irq
, hw_config
->dma
,
2946 static int __init
ad1848_isapnp_probe(struct address_info
*hw_config
)
2948 static int first
= 1;
2951 /* Count entries in sb_isapnp_list */
2952 for (i
= 0; ad1848_isapnp_list
[i
].card_vendor
!= 0; i
++);
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
);
2961 if(!first
|| !reverse
)
2964 while(ad1848_isapnp_list
[i
].card_vendor
!= 0) {
2965 static struct pnp_card
*bus
= NULL
;
2967 while ((bus
= pnp_find_card(
2968 ad1848_isapnp_list
[i
].card_vendor
,
2969 ad1848_isapnp_list
[i
].card_device
,
2972 if(ad1848_isapnp_init(hw_config
, bus
, i
)) {
2973 isapnpjump
= i
; /* start next search from here */
2977 i
+= reverse
? -1 : 1;
2985 static int __init
init_ad1848(void)
2987 printk(KERN_INFO
"ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
2990 if(isapnp
&& (ad1848_isapnp_probe(&cfg
) < 0) ) {
2991 printk(KERN_NOTICE
"ad1848: No ISAPnP cards found, trying standard ones...\n");
2997 struct resource
*ports
;
3000 if(irq
== -1 || dma
== -1) {
3001 printk(KERN_WARNING
"ad1848: must give I/O , IRQ and DMA.\n");
3009 cfg
.card_subtype
= type
;
3012 ports
= request_region(io
+ 4, 4, "ad1848");
3017 if (!request_region(io
, 4, "WSS config")) {
3018 release_region(io
+ 4, 4);
3022 if (!probe_ms_sound(&cfg
, ports
)) {
3023 release_region(io
+ 4, 4);
3024 release_region(io
, 4);
3027 attach_ms_sound(&cfg
, ports
, THIS_MODULE
);
3033 static void __exit
cleanup_ad1848(void)
3036 unload_ms_sound(&cfg
);
3041 pnp_device_detach(ad1848_dev
);
3046 module_init(init_ad1848
);
3047 module_exit(cleanup_ad1848
);
3050 static int __init
setup_ad1848(char *str
)
3052 /* io, irq, dma, dma2, type */
3055 str
= get_options(str
, ARRAY_SIZE(ints
), ints
);
3066 __setup("ad1848=", setup_ad1848
);
3068 MODULE_LICENSE("GPL");