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
36 * Zwane Mwaikambo : Fix ISA PnP scan
39 * APM save restore assist code on IBM thinkpad
42 * Tested. Believed fully functional.
45 #include <linux/config.h>
46 #include <linux/init.h>
47 #include <linux/module.h>
48 #include <linux/stddef.h>
50 #include <linux/isapnp.h>
54 #include "sound_config.h"
57 #include "ad1848_mixer.h"
64 int dual_dma; /* 1, when two DMA channels allocated */
66 unsigned char MCE_bit;
67 unsigned char saved_regs[64]; /* Includes extended register space */
71 int record_dev, playback_dev;
77 char *chip_name, *name;
86 #define MD_4235 8 /* Crystal Audio CS4235 */
87 #define MD_1845_SSCAPE 9 /* Ensoniq Soundscape PNP*/
88 #define MD_4236 10 /* 4236 and higher */
89 #define MD_42xB 11 /* CS 42xB */
90 #define MD_4239 12 /* CS4239 */
92 /* Mixer parameters */
94 int supported_devices, orig_devices;
95 int supported_rec_devices, orig_rec_devices;
97 short mixer_reroute[32];
99 volatile unsigned long timer_ticks;
102 mixer_ents *mix_devices;
103 int mixer_output_port;
105 /* Power management */
106 struct pm_dev *pmdev;
109 typedef struct ad1848_port_info
113 unsigned char speed_bits;
116 unsigned char format_bits;
120 static struct address_info cfg;
121 static int nr_ad1848_devs;
127 static volatile signed char irq2dev[17] = {
128 -1, -1, -1, -1, -1, -1, -1, -1,
129 -1, -1, -1, -1, -1, -1, -1, -1, -1
132 #ifndef EXCLUDE_TIMERS
133 static int timer_installed = -1;
138 static int ad_format_mask[13 /*devc->model */ ] =
141 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW,
142 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
143 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
144 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW, /* AD1845 */
145 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
146 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
147 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
148 AFMT_U8 | AFMT_S16_LE /* CS4235 */,
149 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW /* Ensoniq Soundscape*/,
150 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
151 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
152 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM
155 static ad1848_info adev_info[MAX_AUDIO_DEV];
157 #define io_Index_Addr(d) ((d)->base)
158 #define io_Indexed_Data(d) ((d)->base+1)
159 #define io_Status(d) ((d)->base+2)
160 #define io_Polled_IO(d) ((d)->base+3)
164 #define CAP_F_TIMER 0x01
165 } capabilities [10 /*devc->model */ ] = {
168 ,{CAP_F_TIMER} /* MD_4231 */
169 ,{CAP_F_TIMER} /* MD_4231A */
170 ,{CAP_F_TIMER} /* MD_1845 */
171 ,{CAP_F_TIMER} /* MD_4232 */
173 ,{CAP_F_TIMER} /* MD_IWAVE */
175 ,{CAP_F_TIMER} /* MD_1845_SSCAPE */
178 #if defined CONFIG_ISAPNP || defined CONFIG_ISAPNP_MODULE
179 static int isapnp = 1;
180 static int isapnpjump = 0;
181 static int reverse = 0;
183 static int audio_activated = 0;
185 static int isapnp = 0;
190 static int ad1848_open(int dev, int mode);
191 static void ad1848_close(int dev);
192 static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag);
193 static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag);
194 static int ad1848_prepare_for_output(int dev, int bsize, int bcount);
195 static int ad1848_prepare_for_input(int dev, int bsize, int bcount);
196 static void ad1848_halt(int dev);
197 static void ad1848_halt_input(int dev);
198 static void ad1848_halt_output(int dev);
199 static void ad1848_trigger(int dev, int bits);
200 static int ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data);
202 #ifndef EXCLUDE_TIMERS
203 static int ad1848_tmr_install(int dev);
204 static void ad1848_tmr_reprogram(int dev);
207 static int ad_read(ad1848_info * devc, int reg)
211 int timeout = 900000;
213 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
221 outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
222 x = inb(io_Indexed_Data(devc));
228 xreg = (reg & 0xff) - 32;
229 xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
230 outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
231 outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
232 x = inb(io_Indexed_Data(devc));
234 restore_flags(flags);
239 static void ad_write(ad1848_info * devc, int reg, int data)
242 int timeout = 900000;
244 while (timeout > 0 && inb(devc->base) == 0x80) /* Are we initializing */
252 outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
253 outb(((unsigned char) (data & 0xff)), io_Indexed_Data(devc));
259 xreg = (reg & 0xff) - 32;
260 xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
261 outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
262 outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
263 outb((unsigned char) (data & 0xff), io_Indexed_Data(devc));
265 restore_flags(flags);
268 static void wait_for_calibration(ad1848_info * devc)
273 * Wait until the auto calibration process has finished.
275 * 1) Wait until the chip becomes ready (reads don't return 0x80).
276 * 2) Wait until the ACI bit of I11 gets on and then off.
280 while (timeout > 0 && inb(devc->base) == 0x80)
282 if (inb(devc->base) & 0x80)
283 printk(KERN_WARNING "ad1848: Auto calibration timed out(1).\n");
286 while (timeout > 0 && !(ad_read(devc, 11) & 0x20))
288 if (!(ad_read(devc, 11) & 0x20))
292 while (timeout > 0 && (ad_read(devc, 11) & 0x20))
294 if (ad_read(devc, 11) & 0x20)
295 if ( (devc->model != MD_1845) || (devc->model != MD_1845_SSCAPE))
296 printk(KERN_WARNING "ad1848: Auto calibration timed out(3).\n");
299 static void ad_mute(ad1848_info * devc)
305 * Save old register settings and mute output channels
308 for (i = 6; i < 8; i++)
310 prev = devc->saved_regs[i] = ad_read(devc, i);
315 static void ad_unmute(ad1848_info * devc)
319 static void ad_enter_MCE(ad1848_info * devc)
325 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
331 devc->MCE_bit = 0x40;
332 prev = inb(io_Index_Addr(devc));
335 restore_flags(flags);
338 outb((devc->MCE_bit), io_Index_Addr(devc));
339 restore_flags(flags);
342 static void ad_leave_MCE(ad1848_info * devc)
345 unsigned char prev, acal;
348 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
354 acal = ad_read(devc, 9);
356 devc->MCE_bit = 0x00;
357 prev = inb(io_Index_Addr(devc));
358 outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
360 if ((prev & 0x40) == 0) /* Not in MCE mode */
362 restore_flags(flags);
365 outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
366 if (acal & 0x08) /* Auto calibration is enabled */
367 wait_for_calibration(devc);
368 restore_flags(flags);
371 static int ad1848_set_recmask(ad1848_info * devc, int mask)
373 unsigned char recdev;
376 mask &= devc->supported_rec_devices;
378 /* Rename the mixer bits if necessary */
379 for (i = 0; i < 32; i++)
381 if (devc->mixer_reroute[i] != i)
386 mask |= (1 << devc->mixer_reroute[i]);
392 for (i = 0; i < 32; i++) /* Count selected device bits */
398 mask = SOUND_MASK_MIC;
399 else if (n != 1) { /* Too many devices selected */
400 mask &= ~devc->recmask; /* Filter out active settings */
403 for (i = 0; i < 32; i++) /* Count selected device bits */
408 mask = SOUND_MASK_MIC;
415 case SOUND_MASK_LINE:
416 case SOUND_MASK_LINE3:
421 case SOUND_MASK_LINE1:
425 case SOUND_MASK_IMIX:
430 mask = SOUND_MASK_MIC;
435 ad_write(devc, 0, (ad_read(devc, 0) & 0x3f) | recdev);
436 ad_write(devc, 1, (ad_read(devc, 1) & 0x3f) | recdev);
437 } else { /* soundpro */
442 for (i = 0; i < 32; i++) { /* For each bit */
443 if ((devc->supported_rec_devices & (1 << i)) == 0)
444 continue; /* Device not supported */
446 for (j = LEFT_CHN; j <= RIGHT_CHN; j++) {
447 if (devc->mix_devices[i][j].nbits == 0) /* Inexistent channel */
452 * set_rec_bit becomes 1 if the corresponding bit in mask is set
453 * then it gets flipped if the polarity is inverse
455 set_rec_bit = ((mask & (1 << i)) != 0) ^ devc->mix_devices[i][j].recpol;
457 val = ad_read(devc, devc->mix_devices[i][j].recreg);
458 val &= ~(1 << devc->mix_devices[i][j].recpos);
459 val |= (set_rec_bit << devc->mix_devices[i][j].recpos);
460 ad_write(devc, devc->mix_devices[i][j].recreg, val);
465 /* Rename the mixer bits back if necessary */
466 for (i = 0; i < 32; i++)
468 if (devc->mixer_reroute[i] != i)
470 if (mask & (1 << devc->mixer_reroute[i]))
472 mask &= ~(1 << devc->mixer_reroute[i]);
477 devc->recmask = mask;
481 static void change_bits(ad1848_info * devc, unsigned char *regval,
482 unsigned char *muteval, int dev, int chn, int newval)
490 set_mute_bit = (newval == 0) ^ devc->mix_devices[dev][chn].mutepol;
492 if (devc->mix_devices[dev][chn].polarity == 1) /* Reverse */
493 newval = 100 - newval;
495 mask = (1 << devc->mix_devices[dev][chn].nbits) - 1;
496 shift = devc->mix_devices[dev][chn].bitpos;
498 if (devc->mix_devices[dev][chn].mutepos == 8)
499 { /* if there is no mute bit */
500 mute = 0; /* No mute bit; do nothing special */
501 mutemask = ~0; /* No mute bit; do nothing special */
505 mute = (set_mute_bit << devc->mix_devices[dev][chn].mutepos);
506 mutemask = ~(1 << devc->mix_devices[dev][chn].mutepos);
509 newval = (int) ((newval * mask) + 50) / 100; /* Scale it */
510 *regval &= ~(mask << shift); /* Clear bits */
511 *regval |= (newval & mask) << shift; /* Set new value */
513 *muteval &= mutemask;
517 static int ad1848_mixer_get(ad1848_info * devc, int dev)
519 if (!((1 << dev) & devc->supported_devices))
522 dev = devc->mixer_reroute[dev];
524 return devc->levels[dev];
527 static void ad1848_mixer_set_channel(ad1848_info *devc, int dev, int value, int channel)
529 int regoffs, muteregoffs;
530 unsigned char val, muteval;
532 regoffs = devc->mix_devices[dev][channel].regno;
533 muteregoffs = devc->mix_devices[dev][channel].mutereg;
534 val = ad_read(devc, regoffs);
536 if (muteregoffs != regoffs) {
537 muteval = ad_read(devc, muteregoffs);
538 change_bits(devc, &val, &muteval, dev, channel, value);
541 change_bits(devc, &val, &val, dev, channel, value);
543 ad_write(devc, regoffs, val);
544 devc->saved_regs[regoffs] = val;
545 if (muteregoffs != regoffs) {
546 ad_write(devc, muteregoffs, muteval);
547 devc->saved_regs[muteregoffs] = muteval;
551 static int ad1848_mixer_set(ad1848_info * devc, int dev, int value)
553 int left = value & 0x000000ff;
554 int right = (value & 0x0000ff00) >> 8;
560 if (!(devc->supported_devices & (1 << dev)))
563 dev = devc->mixer_reroute[dev];
565 if (devc->mix_devices[dev][LEFT_CHN].nbits == 0)
573 if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0) /* Mono control */
576 retvol = left | (right << 8);
579 left = mix_cvt[left];
580 right = mix_cvt[right];
582 devc->levels[dev] = retvol;
585 * Set the left channel
587 ad1848_mixer_set_channel(devc, dev, left, LEFT_CHN);
590 * Set the right channel
592 if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0)
594 ad1848_mixer_set_channel(devc, dev, right, RIGHT_CHN);
600 static void ad1848_mixer_reset(ad1848_info * devc)
605 devc->mix_devices = &(ad1848_mix_devices[0]);
607 sprintf(name, "%s_%d", devc->chip_name, nr_ad1848_devs);
609 for (i = 0; i < 32; i++)
610 devc->mixer_reroute[i] = i;
612 devc->supported_rec_devices = MODE1_REC_DEVICES;
620 devc->supported_devices = MODE2_MIXER_DEVICES;
624 devc->supported_devices = C930_MIXER_DEVICES;
625 devc->mix_devices = &(c930_mix_devices[0]);
629 devc->supported_devices = MODE3_MIXER_DEVICES;
630 devc->mix_devices = &(iwave_mix_devices[0]);
635 devc->mix_devices = &(cs42xb_mix_devices[0]);
636 devc->supported_devices = MODE3_MIXER_DEVICES;
640 devc->supported_devices = MODE3_MIXER_DEVICES;
645 devc->supported_devices = SPRO_MIXER_DEVICES;
646 devc->supported_rec_devices = SPRO_REC_DEVICES;
647 devc->mix_devices = &(spro_mix_devices[0]);
652 devc->supported_devices = MODE1_MIXER_DEVICES;
655 devc->orig_devices = devc->supported_devices;
656 devc->orig_rec_devices = devc->supported_rec_devices;
658 devc->levels = load_mixer_volumes(name, default_mixer_levels, 1);
660 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
662 if (devc->supported_devices & (1 << i))
663 ad1848_mixer_set(devc, i, devc->levels[i]);
666 ad1848_set_recmask(devc, SOUND_MASK_MIC);
668 devc->mixer_output_port = devc->levels[31] | AUDIO_HEADPHONE | AUDIO_LINE_OUT;
671 if (devc->mixer_output_port & AUDIO_SPEAKER)
672 ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
674 ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
677 * From the "wouldn't it be nice if the mixer API had (better)
678 * support for custom stuff" category
680 /* Enable surround mode and SB16 mixer */
681 ad_write(devc, 16, 0x60);
685 static int ad1848_mixer_ioctl(int dev, unsigned int cmd, caddr_t arg)
687 ad1848_info *devc = mixer_devs[dev]->devc;
690 if (cmd == SOUND_MIXER_PRIVATE1)
692 if (get_user(val, (int *)arg))
697 val &= (AUDIO_SPEAKER | AUDIO_HEADPHONE | AUDIO_LINE_OUT);
698 devc->mixer_output_port = val;
699 val |= AUDIO_HEADPHONE | AUDIO_LINE_OUT; /* Always on */
700 devc->mixer_output_port = val;
701 if (val & AUDIO_SPEAKER)
702 ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
704 ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
706 val = devc->mixer_output_port;
707 return put_user(val, (int *)arg);
709 if (cmd == SOUND_MIXER_PRIVATE2)
711 if (get_user(val, (int *)arg))
713 return(ad1848_control(AD1848_MIXER_REROUTE, val));
715 if (((cmd >> 8) & 0xff) == 'M')
717 if (_SIOC_DIR(cmd) & _SIOC_WRITE)
721 case SOUND_MIXER_RECSRC:
722 if (get_user(val, (int *)arg))
724 val = ad1848_set_recmask(devc, val);
728 if (get_user(val, (int *)arg))
730 val = ad1848_mixer_set(devc, cmd & 0xff, val);
733 return put_user(val, (int *)arg);
743 case SOUND_MIXER_RECSRC:
747 case SOUND_MIXER_DEVMASK:
748 val = devc->supported_devices;
751 case SOUND_MIXER_STEREODEVS:
752 val = devc->supported_devices;
753 if (devc->model != MD_C930)
754 val &= ~(SOUND_MASK_SPEAKER | SOUND_MASK_IMIX);
757 case SOUND_MIXER_RECMASK:
758 val = devc->supported_rec_devices;
761 case SOUND_MIXER_CAPS:
762 val=SOUND_CAP_EXCL_INPUT;
766 val = ad1848_mixer_get(devc, cmd & 0xff);
769 return put_user(val, (int *)arg);
776 static int ad1848_set_speed(int dev, int arg)
778 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
779 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
782 * The sampling speed is encoded in the least significant nibble of I8. The
783 * LSB selects the clock source (0=24.576 MHz, 1=16.9344 MHz) and other
784 * three bits select the divisor (indirectly):
786 * The available speeds are in the following table. Keep the speeds in
787 * the increasing order.
796 static speed_struct speed_table[] =
798 {5510, (0 << 1) | 1},
799 {5510, (0 << 1) | 1},
800 {6620, (7 << 1) | 1},
801 {8000, (0 << 1) | 0},
802 {9600, (7 << 1) | 0},
803 {11025, (1 << 1) | 1},
804 {16000, (1 << 1) | 0},
805 {18900, (2 << 1) | 1},
806 {22050, (3 << 1) | 1},
807 {27420, (2 << 1) | 0},
808 {32000, (3 << 1) | 0},
809 {33075, (6 << 1) | 1},
810 {37800, (4 << 1) | 1},
811 {44100, (5 << 1) | 1},
812 {48000, (6 << 1) | 0}
815 int i, n, selected = -1;
817 n = sizeof(speed_table) / sizeof(speed_struct);
822 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* AD1845 has different timer than others */
830 portc->speed_bits = speed_table[3].bits;
833 if (arg < speed_table[0].speed)
835 if (arg > speed_table[n - 1].speed)
838 for (i = 1 /*really */ ; selected == -1 && i < n; i++)
840 if (speed_table[i].speed == arg)
842 else if (speed_table[i].speed > arg)
846 diff1 = arg - speed_table[i - 1].speed;
847 diff2 = speed_table[i].speed - arg;
857 printk(KERN_WARNING "ad1848: Can't find speed???\n");
860 portc->speed = speed_table[selected].speed;
861 portc->speed_bits = speed_table[selected].bits;
865 static short ad1848_set_channels(int dev, short arg)
867 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
869 if (arg != 1 && arg != 2)
870 return portc->channels;
872 portc->channels = arg;
876 static unsigned int ad1848_set_bits(int dev, unsigned int arg)
878 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
879 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
881 static struct format_tbl
928 int i, n = sizeof(format2bits) / sizeof(struct format_tbl);
931 return portc->audio_format;
933 if (!(arg & ad_format_mask[devc->model]))
936 portc->audio_format = arg;
938 for (i = 0; i < n; i++)
939 if (format2bits[i].format == arg)
941 if ((portc->format_bits = format2bits[i].bits) == 0)
942 return portc->audio_format = AFMT_U8; /* Was not supported */
946 /* Still hanging here. Something must be terribly wrong */
947 portc->format_bits = 0;
948 return portc->audio_format = AFMT_U8;
951 static struct audio_driver ad1848_audio_driver =
956 output_block: ad1848_output_block,
957 start_input: ad1848_start_input,
958 prepare_for_input: ad1848_prepare_for_input,
959 prepare_for_output: ad1848_prepare_for_output,
960 halt_io: ad1848_halt,
961 halt_input: ad1848_halt_input,
962 halt_output: ad1848_halt_output,
963 trigger: ad1848_trigger,
964 set_speed: ad1848_set_speed,
965 set_bits: ad1848_set_bits,
966 set_channels: ad1848_set_channels
969 static struct mixer_operations ad1848_mixer_operations =
973 name: "AD1848/CS4248/CS4231",
974 ioctl: ad1848_mixer_ioctl
977 static int ad1848_open(int dev, int mode)
979 ad1848_info *devc = NULL;
980 ad1848_port_info *portc;
983 if (dev < 0 || dev >= num_audiodevs)
986 devc = (ad1848_info *) audio_devs[dev]->devc;
987 portc = (ad1848_port_info *) audio_devs[dev]->portc;
991 if (portc->open_mode || (devc->open_mode & mode))
993 restore_flags(flags);
998 if (audio_devs[dev]->flags & DMA_DUPLEX)
1002 devc->intr_active = 0;
1003 devc->audio_mode = 0;
1004 devc->open_mode |= mode;
1005 portc->open_mode = mode;
1006 ad1848_trigger(dev, 0);
1008 if (mode & OPEN_READ)
1009 devc->record_dev = dev;
1010 if (mode & OPEN_WRITE)
1011 devc->playback_dev = dev;
1012 restore_flags(flags);
1014 * Mute output until the playback really starts. This decreases clicking (hope so).
1021 static void ad1848_close(int dev)
1023 unsigned long flags;
1024 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1025 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1027 DEB(printk("ad1848_close(void)\n"));
1032 devc->intr_active = 0;
1035 devc->audio_mode = 0;
1036 devc->open_mode &= ~portc->open_mode;
1037 portc->open_mode = 0;
1040 restore_flags(flags);
1043 static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag)
1045 unsigned long flags, cnt;
1046 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1047 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1051 if (portc->audio_format == AFMT_IMA_ADPCM)
1057 if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1060 if (portc->channels > 1)
1064 if ((devc->audio_mode & PCM_ENABLE_OUTPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1066 cnt == devc->xfer_count)
1068 devc->audio_mode |= PCM_ENABLE_OUTPUT;
1069 devc->intr_active = 1;
1071 * Auto DMA mode on. No need to react
1077 ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1078 ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1080 devc->xfer_count = cnt;
1081 devc->audio_mode |= PCM_ENABLE_OUTPUT;
1082 devc->intr_active = 1;
1083 restore_flags(flags);
1086 static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag)
1088 unsigned long flags, cnt;
1089 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1090 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1093 if (portc->audio_format == AFMT_IMA_ADPCM)
1099 if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1102 if (portc->channels > 1)
1106 if ((devc->audio_mode & PCM_ENABLE_INPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1108 cnt == devc->xfer_count)
1110 devc->audio_mode |= PCM_ENABLE_INPUT;
1111 devc->intr_active = 1;
1113 * Auto DMA mode on. No need to react
1119 if (devc->model == MD_1848)
1121 ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1122 ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1126 ad_write(devc, 31, (unsigned char) (cnt & 0xff));
1127 ad_write(devc, 30, (unsigned char) ((cnt >> 8) & 0xff));
1132 devc->xfer_count = cnt;
1133 devc->audio_mode |= PCM_ENABLE_INPUT;
1134 devc->intr_active = 1;
1135 restore_flags(flags);
1138 static int ad1848_prepare_for_output(int dev, int bsize, int bcount)
1141 unsigned char fs, old_fs, tmp = 0;
1142 unsigned long flags;
1143 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1144 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1150 fs = portc->speed_bits | (portc->format_bits << 5);
1152 if (portc->channels > 1)
1155 ad_enter_MCE(devc); /* Enables changes to the format select reg */
1157 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* Use alternate speed select registers */
1159 fs &= 0xf0; /* Mask off the rate select bits */
1161 ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1162 ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1164 old_fs = ad_read(devc, 8);
1166 if (devc->model == MD_4232 || devc->model >= MD_4236)
1168 tmp = ad_read(devc, 16);
1169 ad_write(devc, 16, tmp | 0x30);
1171 if (devc->model == MD_IWAVE)
1172 ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1174 ad_write(devc, 8, fs);
1177 * Write to I8 starts resynchronization. Wait until it completes.
1181 while (timeout < 100 && inb(devc->base) != 0x80)
1184 while (timeout < 10000 && inb(devc->base) == 0x80)
1187 if (devc->model >= MD_4232)
1188 ad_write(devc, 16, tmp & ~0x30);
1190 ad_leave_MCE(devc); /*
1191 * Starts the calibration process.
1193 restore_flags(flags);
1194 devc->xfer_count = 0;
1196 #ifndef EXCLUDE_TIMERS
1197 if (dev == timer_installed && devc->timer_running)
1198 if ((fs & 0x01) != (old_fs & 0x01))
1200 ad1848_tmr_reprogram(dev);
1203 ad1848_halt_output(dev);
1207 static int ad1848_prepare_for_input(int dev, int bsize, int bcount)
1210 unsigned char fs, old_fs, tmp = 0;
1211 unsigned long flags;
1212 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1213 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1215 if (devc->audio_mode)
1220 fs = portc->speed_bits | (portc->format_bits << 5);
1222 if (portc->channels > 1)
1225 ad_enter_MCE(devc); /* Enables changes to the format select reg */
1227 if ((devc->model == MD_1845) || (devc->model == MD_1845_SSCAPE)) /* Use alternate speed select registers */
1229 fs &= 0xf0; /* Mask off the rate select bits */
1231 ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1232 ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1234 if (devc->model == MD_4232)
1236 tmp = ad_read(devc, 16);
1237 ad_write(devc, 16, tmp | 0x30);
1239 if (devc->model == MD_IWAVE)
1240 ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1243 * If mode >= 2 (CS4231), set I28. It's the capture format register.
1246 if (devc->model != MD_1848)
1248 old_fs = ad_read(devc, 28);
1249 ad_write(devc, 28, fs);
1252 * Write to I28 starts resynchronization. Wait until it completes.
1256 while (timeout < 100 && inb(devc->base) != 0x80)
1260 while (timeout < 10000 && inb(devc->base) == 0x80)
1263 if (devc->model != MD_1848 && devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
1266 * CS4231 compatible devices don't have separate sampling rate selection
1267 * register for recording an playback. The I8 register is shared so we have to
1268 * set the speed encoding bits of it too.
1270 unsigned char tmp = portc->speed_bits | (ad_read(devc, 8) & 0xf0);
1272 ad_write(devc, 8, tmp);
1274 * Write to I8 starts resynchronization. Wait until it completes.
1277 while (timeout < 100 && inb(devc->base) != 0x80)
1281 while (timeout < 10000 && inb(devc->base) == 0x80)
1286 { /* For AD1848 set I8. */
1288 old_fs = ad_read(devc, 8);
1289 ad_write(devc, 8, fs);
1291 * Write to I8 starts resynchronization. Wait until it completes.
1294 while (timeout < 100 && inb(devc->base) != 0x80)
1297 while (timeout < 10000 && inb(devc->base) == 0x80)
1301 if (devc->model == MD_4232)
1302 ad_write(devc, 16, tmp & ~0x30);
1304 ad_leave_MCE(devc); /*
1305 * Starts the calibration process.
1307 restore_flags(flags);
1308 devc->xfer_count = 0;
1310 #ifndef EXCLUDE_TIMERS
1311 if (dev == timer_installed && devc->timer_running)
1313 if ((fs & 0x01) != (old_fs & 0x01))
1315 ad1848_tmr_reprogram(dev);
1319 ad1848_halt_input(dev);
1323 static void ad1848_halt(int dev)
1325 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1326 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1328 unsigned char bits = ad_read(devc, 9);
1330 if (bits & 0x01 && (portc->open_mode & OPEN_WRITE))
1331 ad1848_halt_output(dev);
1333 if (bits & 0x02 && (portc->open_mode & OPEN_READ))
1334 ad1848_halt_input(dev);
1335 devc->audio_mode = 0;
1338 static void ad1848_halt_input(int dev)
1340 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1341 unsigned long flags;
1343 if (!(ad_read(devc, 9) & 0x02))
1344 return; /* Capture not enabled */
1354 if(!isa_dma_bridge_buggy)
1355 disable_dma(audio_devs[dev]->dmap_in->dma);
1357 for (tmout = 0; tmout < 100000; tmout++)
1358 if (ad_read(devc, 11) & 0x10)
1360 ad_write(devc, 9, ad_read(devc, 9) & ~0x02); /* Stop capture */
1362 if(!isa_dma_bridge_buggy)
1363 enable_dma(audio_devs[dev]->dmap_in->dma);
1364 devc->audio_mode &= ~PCM_ENABLE_INPUT;
1367 outb(0, io_Status(devc)); /* Clear interrupt status */
1368 outb(0, io_Status(devc)); /* Clear interrupt status */
1370 devc->audio_mode &= ~PCM_ENABLE_INPUT;
1372 restore_flags(flags);
1375 static void ad1848_halt_output(int dev)
1377 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1378 unsigned long flags;
1380 if (!(ad_read(devc, 9) & 0x01))
1381 return; /* Playback not enabled */
1390 if(!isa_dma_bridge_buggy)
1391 disable_dma(audio_devs[dev]->dmap_out->dma);
1393 for (tmout = 0; tmout < 100000; tmout++)
1394 if (ad_read(devc, 11) & 0x10)
1396 ad_write(devc, 9, ad_read(devc, 9) & ~0x01); /* Stop playback */
1398 if(!isa_dma_bridge_buggy)
1399 enable_dma(audio_devs[dev]->dmap_out->dma);
1401 devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1404 outb((0), io_Status(devc)); /* Clear interrupt status */
1405 outb((0), io_Status(devc)); /* Clear interrupt status */
1407 devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1409 restore_flags(flags);
1412 static void ad1848_trigger(int dev, int state)
1414 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1415 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1416 unsigned long flags;
1417 unsigned char tmp, old;
1421 state &= devc->audio_mode;
1423 tmp = old = ad_read(devc, 9);
1425 if (portc->open_mode & OPEN_READ)
1427 if (state & PCM_ENABLE_INPUT)
1432 if (portc->open_mode & OPEN_WRITE)
1434 if (state & PCM_ENABLE_OUTPUT)
1439 /* ad_mute(devc); */
1442 ad_write(devc, 9, tmp);
1445 restore_flags(flags);
1448 static void ad1848_init_hw(ad1848_info * devc)
1454 * Initial values for the indirect registers of CS4248/AD1848.
1456 static int init_values_a[] =
1458 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1459 0x00, 0x0c, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00,
1461 /* Positions 16 to 31 just for CS4231/2 and ad1845 */
1462 0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1463 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1466 static int init_values_b[] =
1469 Values for the newer chips
1470 Some of the register initialization values were changed. In
1471 order to get rid of the click that preceded PCM playback,
1472 calibration was disabled on the 10th byte. On that same byte,
1473 dual DMA was enabled; on the 11th byte, ADC dithering was
1474 enabled, since that is theoretically desirable; on the 13th
1475 byte, Mode 3 was selected, to enable access to extended
1478 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1479 0x00, 0x00, 0x06, 0x00, 0xe0, 0x01, 0x00, 0x00,
1480 0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1485 * Select initialisation data
1488 init_values = init_values_a;
1489 if(devc->model >= MD_4236)
1490 init_values = init_values_b;
1492 for (i = 0; i < 16; i++)
1493 ad_write(devc, i, init_values[i]);
1496 ad_mute(devc); /* Initialize some variables */
1497 ad_unmute(devc); /* Leave it unmuted now */
1499 if (devc->model > MD_1848)
1501 if (devc->model == MD_1845_SSCAPE)
1502 ad_write(devc, 12, ad_read(devc, 12) | 0x50);
1504 ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1506 if (devc->model == MD_IWAVE)
1507 ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1509 if (devc->model != MD_1845_SSCAPE)
1510 for (i = 16; i < 32; i++)
1511 ad_write(devc, i, init_values[i]);
1513 if (devc->model == MD_IWAVE)
1514 ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1516 if (devc->model > MD_1848)
1518 if (devc->audio_flags & DMA_DUPLEX)
1519 ad_write(devc, 9, ad_read(devc, 9) & ~0x04); /* Dual DMA mode */
1521 ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1523 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
1524 ad_write(devc, 27, ad_read(devc, 27) | 0x08); /* Alternate freq select enabled */
1526 if (devc->model == MD_IWAVE)
1527 { /* Some magic Interwave specific initialization */
1528 ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1529 ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1530 ad_write(devc, 17, 0xc2); /* Alternate feature enable */
1535 devc->audio_flags &= ~DMA_DUPLEX;
1536 ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1538 ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1541 outb((0), io_Status(devc)); /* Clear pending interrupts */
1544 * Toggle the MCE bit. It completes the initialization phase.
1547 ad_enter_MCE(devc); /* In case the bit was off */
1550 ad1848_mixer_reset(devc);
1553 int ad1848_detect(int io_base, int *ad_flags, int *osp)
1556 ad1848_info *devc = &adev_info[nr_ad1848_devs];
1557 unsigned char tmp1 = 0xff, tmp2 = 0xff;
1558 int optiC930 = 0; /* OPTi 82C930 flag */
1560 int ad1847_flag = 0;
1561 int cs4248_flag = 0;
1562 int sscape_flag = 0;
1566 DDB(printk("ad1848_detect(%x)\n", io_base));
1570 if (*ad_flags == 0x12345678)
1576 if (*ad_flags == 0x87654321)
1582 if (*ad_flags == 0x12345677)
1588 if (nr_ad1848_devs >= MAX_AUDIO_DEV)
1590 printk(KERN_ERR "ad1848 - Too many audio devices\n");
1593 if (check_region(io_base, 4))
1595 printk(KERN_ERR "ad1848.c: Port %x not free.\n", io_base);
1598 devc->base = io_base;
1600 devc->timer_running = 0;
1601 devc->MCE_bit = 0x40;
1603 devc->open_mode = 0;
1604 devc->chip_name = devc->name = "AD1848";
1605 devc->model = MD_1848; /* AD1848 or CS4248 */
1606 devc->levels = NULL;
1607 devc->debug_flag = 0;
1610 * Check that the I/O address is in use.
1612 * The bit 0x80 of the base I/O port is known to be 0 after the
1613 * chip has performed its power on initialization. Just assume
1614 * this has happened before the OS is starting.
1616 * If the I/O address is unused, it typically returns 0xff.
1619 if (inb(devc->base) == 0xff)
1621 DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1625 * Wait for the device to stop initialization
1628 DDB(printk("ad1848_detect() - step 0\n"));
1630 for (i = 0; i < 10000000; i++)
1632 unsigned char x = inb(devc->base);
1634 if (x == 0xff || !(x & 0x80))
1638 DDB(printk("ad1848_detect() - step A\n"));
1640 if (inb(devc->base) == 0x80) /* Not ready. Let's wait */
1643 if ((inb(devc->base) & 0x80) != 0x00) /* Not a AD1848 */
1645 DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc->base)));
1650 * Test if it's possible to change contents of the indirect registers.
1651 * Registers 0 and 1 are ADC volume registers. The bit 0x10 is read only
1652 * so try to avoid using it.
1655 DDB(printk("ad1848_detect() - step B\n"));
1656 ad_write(devc, 0, 0xaa);
1657 ad_write(devc, 1, 0x45); /* 0x55 with bit 0x10 clear */
1659 if ((tmp1 = ad_read(devc, 0)) != 0xaa || (tmp2 = ad_read(devc, 1)) != 0x45)
1661 if (tmp2 == 0x65) /* AD1847 has couple of bits hardcoded to 1 */
1665 DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1, tmp2));
1669 DDB(printk("ad1848_detect() - step C\n"));
1670 ad_write(devc, 0, 0x45);
1671 ad_write(devc, 1, 0xaa);
1673 if ((tmp1 = ad_read(devc, 0)) != 0x45 || (tmp2 = ad_read(devc, 1)) != 0xaa)
1675 if (tmp2 == 0x8a) /* AD1847 has few bits hardcoded to 1 */
1679 DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1, tmp2));
1685 * The indirect register I12 has some read only bits. Let's
1686 * try to change them.
1689 DDB(printk("ad1848_detect() - step D\n"));
1690 tmp = ad_read(devc, 12);
1691 ad_write(devc, 12, (~tmp) & 0x0f);
1693 if ((tmp & 0x0f) != ((tmp1 = ad_read(devc, 12)) & 0x0f))
1695 DDB(printk("ad1848 detect error - step D (%x)\n", tmp1));
1700 * NOTE! Last 4 bits of the reg I12 tell the chip revision.
1701 * 0x01=RevB and 0x0A=RevC.
1705 * The original AD1848/CS4248 has just 15 indirect registers. This means
1706 * that I0 and I16 should return the same value (etc.).
1707 * However this doesn't work with CS4248. Actually it seems to be impossible
1708 * to detect if the chip is a CS4231 or CS4248.
1709 * Ensure that the Mode2 enable bit of I12 is 0. Otherwise this test fails
1714 * OPTi 82C930 has mode2 control bit in another place. This test will fail
1715 * with it. Accept this situation as a possible indication of this chip.
1718 DDB(printk("ad1848_detect() - step F\n"));
1719 ad_write(devc, 12, 0); /* Mode2=disabled */
1721 for (i = 0; i < 16; i++)
1723 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16)))
1725 DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i, tmp1, tmp2));
1733 * Try to switch the chip to mode2 (CS4231) by setting the MODE2 bit (0x40).
1734 * The bit 0x80 is always 1 in CS4248 and CS4231.
1737 DDB(printk("ad1848_detect() - step G\n"));
1739 if (ad_flags && *ad_flags == 400)
1742 ad_write(devc, 12, 0x40); /* Set mode2, clear 0x80 */
1748 tmp1 = ad_read(devc, 12);
1752 *ad_flags |= AD_F_CS4248;
1754 devc->chip_name = "CS4248"; /* Our best knowledge just now */
1756 if (optiC930 || (tmp1 & 0xc0) == (0x80 | 0x40))
1759 * CS4231 detected - is it?
1761 * Verify that setting I0 doesn't change I16.
1764 DDB(printk("ad1848_detect() - step H\n"));
1765 ad_write(devc, 16, 0); /* Set I16 to known value */
1767 ad_write(devc, 0, 0x45);
1768 if ((tmp1 = ad_read(devc, 16)) != 0x45) /* No change -> CS4231? */
1770 ad_write(devc, 0, 0xaa);
1771 if ((tmp1 = ad_read(devc, 16)) == 0xaa) /* Rotten bits? */
1773 DDB(printk("ad1848 detect error - step H(%x)\n", tmp1));
1778 * Verify that some bits of I25 are read only.
1781 DDB(printk("ad1848_detect() - step I\n"));
1782 tmp1 = ad_read(devc, 25); /* Original bits */
1783 ad_write(devc, 25, ~tmp1); /* Invert all bits */
1784 if ((ad_read(devc, 25) & 0xe7) == (tmp1 & 0xe7))
1789 * It's at least CS4231
1792 devc->chip_name = "CS4231";
1793 devc->model = MD_4231;
1796 * It could be an AD1845 or CS4231A as well.
1797 * CS4231 and AD1845 report the same revision info in I25
1798 * while the CS4231A reports different.
1801 id = ad_read(devc, 25);
1802 if ((id & 0xe7) == 0x80) /* Device busy??? */
1803 id = ad_read(devc, 25);
1804 if ((id & 0xe7) == 0x80) /* Device still busy??? */
1805 id = ad_read(devc, 25);
1806 DDB(printk("ad1848_detect() - step J (%02x/%02x)\n", id, ad_read(devc, 25)));
1808 if ((id & 0xe7) == 0x80) {
1810 * It must be a CS4231 or AD1845. The register I23 of
1811 * CS4231 is undefined and it appears to be read only.
1812 * AD1845 uses I23 for setting sample rate. Assume
1813 * the chip is AD1845 if I23 is changeable.
1816 unsigned char tmp = ad_read(devc, 23);
1817 ad_write(devc, 23, ~tmp);
1821 devc->model = MD_IWAVE;
1822 devc->chip_name = "IWave";
1824 else if (ad_read(devc, 23) != tmp) /* AD1845 ? */
1826 devc->chip_name = "AD1845";
1827 devc->model = MD_1845;
1829 else if (cs4248_flag)
1832 *ad_flags |= AD_F_CS4248;
1833 devc->chip_name = "CS4248";
1834 devc->model = MD_1848;
1835 ad_write(devc, 12, ad_read(devc, 12) & ~0x40); /* Mode2 off */
1837 ad_write(devc, 23, tmp); /* Restore */
1841 switch (id & 0x1f) {
1842 case 3: /* CS4236/CS4235/CS42xB/CS4239 */
1845 ad_write(devc, 12, ad_read(devc, 12) | 0x60); /* switch to mode 3 */
1846 ad_write(devc, 23, 0x9c); /* select extended register 25 */
1847 xid = inb(io_Indexed_Data(devc));
1848 ad_write(devc, 12, ad_read(devc, 12) & ~0x60); /* back to mode 0 */
1852 devc->chip_name = "CS4237B(B)";
1853 devc->model = MD_42xB;
1856 /* Seems to be a 4238 ?? */
1857 devc->chip_name = "CS4238";
1858 devc->model = MD_42xB;
1861 devc->chip_name = "CS4238B";
1862 devc->model = MD_42xB;
1865 devc->chip_name = "CS4236B";
1866 devc->model = MD_4236;
1869 devc->chip_name = "CS4237B";
1870 devc->model = MD_42xB;
1873 devc->chip_name = "CS4235";
1874 devc->model = MD_4235;
1877 devc->chip_name = "CS4239";
1878 devc->model = MD_4239;
1881 printk("Chip ident is %X.\n", xid&0x1F);
1882 devc->chip_name = "CS42xx";
1883 devc->model = MD_4232;
1889 case 2: /* CS4232/CS4232A */
1890 devc->chip_name = "CS4232";
1891 devc->model = MD_4232;
1895 if ((id & 0xe0) == 0xa0)
1897 devc->chip_name = "CS4231A";
1898 devc->model = MD_4231A;
1902 devc->chip_name = "CS4321";
1903 devc->model = MD_4231;
1907 default: /* maybe */
1908 DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc, 25), ad_read(devc, 25) & 0xe7));
1911 devc->chip_name = "82C930";
1912 devc->model = MD_C930;
1916 devc->chip_name = "CS4231";
1917 devc->model = MD_4231;
1922 ad_write(devc, 25, tmp1); /* Restore bits */
1924 DDB(printk("ad1848_detect() - step K\n"));
1926 } else if (tmp1 == 0x0a) {
1928 * Is it perhaps a SoundPro CMI8330?
1929 * If so, then we should be able to change indirect registers
1930 * greater than I15 after activating MODE2, even though reading
1931 * back I12 does not show it.
1935 * Let's try comparing register values
1937 for (i = 0; i < 16; i++) {
1938 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16))) {
1939 DDB(printk("ad1848 detect step H(%d/%x/%x) - SoundPro chip?\n", i, tmp1, tmp2));
1941 devc->chip_name = "SoundPro CMI 8330";
1947 DDB(printk("ad1848_detect() - step L\n"));
1950 if (devc->model != MD_1848)
1951 *ad_flags |= AD_F_CS4231;
1953 DDB(printk("ad1848_detect() - Detected OK\n"));
1955 if (devc->model == MD_1848 && ad1847_flag)
1956 devc->chip_name = "AD1847";
1959 if (sscape_flag == 1)
1960 devc->model = MD_1845_SSCAPE;
1965 int ad1848_init (char *name, int io_base, int irq, int dma_playback,
1966 int dma_capture, int share_dma, int *osp, struct module *owner)
1969 * NOTE! If irq < 0, there is another driver which has allocated the IRQ
1970 * so that this driver doesn't need to allocate/deallocate it.
1971 * The actually used IRQ is ABS(irq).
1978 ad1848_info *devc = &adev_info[nr_ad1848_devs];
1980 ad1848_port_info *portc = NULL;
1982 devc->irq = (irq > 0) ? irq : 0;
1983 devc->open_mode = 0;
1984 devc->timer_ticks = 0;
1985 devc->dma1 = dma_playback;
1986 devc->dma2 = dma_capture;
1987 devc->subtype = cfg.card_subtype;
1988 devc->audio_flags = DMA_AUTOMODE;
1989 devc->playback_dev = devc->record_dev = 0;
1993 if (name != NULL && name[0] != 0)
1995 "%s (%s)", name, devc->chip_name);
1998 "Generic audio codec (%s)", devc->chip_name);
2000 request_region(devc->base, 4, devc->name);
2002 conf_printf2(dev_name, devc->base, devc->irq, dma_playback, dma_capture);
2004 if (devc->model == MD_1848 || devc->model == MD_C930)
2005 devc->audio_flags |= DMA_HARDSTOP;
2007 if (devc->model > MD_1848)
2009 if (devc->dma1 == devc->dma2 || devc->dma2 == -1 || devc->dma1 == -1)
2010 devc->audio_flags &= ~DMA_DUPLEX;
2012 devc->audio_flags |= DMA_DUPLEX;
2015 portc = (ad1848_port_info *) kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
2019 if ((my_dev = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
2021 &ad1848_audio_driver,
2022 sizeof(struct audio_driver),
2024 ad_format_mask[devc->model],
2034 audio_devs[my_dev]->portc = portc;
2035 audio_devs[my_dev]->mixer_dev = -1;
2037 audio_devs[my_dev]->d->owner = owner;
2038 memset((char *) portc, 0, sizeof(*portc));
2042 devc->pmdev = pm_register(PM_ISA_DEV, my_dev, ad1848_pm_callback);
2044 devc->pmdev->data = devc;
2046 ad1848_init_hw(devc);
2050 devc->dev_no = my_dev;
2051 if (request_irq(devc->irq, adintr, 0, devc->name, (void *)my_dev) < 0)
2053 printk(KERN_WARNING "ad1848: Unable to allocate IRQ\n");
2054 /* Don't free it either then.. */
2057 if (capabilities[devc->model].flags & CAP_F_TIMER)
2061 unsigned char tmp = ad_read(devc, 16);
2064 devc->timer_ticks = 0;
2066 ad_write(devc, 21, 0x00); /* Timer MSB */
2067 ad_write(devc, 20, 0x10); /* Timer LSB */
2069 ad_write(devc, 16, tmp | 0x40); /* Enable timer */
2070 for (x = 0; x < 100000 && devc->timer_ticks == 0; x++);
2071 ad_write(devc, 16, tmp & ~0x40); /* Disable timer */
2073 if (devc->timer_ticks == 0)
2074 printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
2077 DDB(printk("Interrupt test OK\n"));
2085 devc->irq_ok = 1; /* Couldn't test. assume it's OK */
2087 irq2dev[-irq] = devc->dev_no = my_dev;
2089 #ifndef EXCLUDE_TIMERS
2090 if ((capabilities[devc->model].flags & CAP_F_TIMER) &&
2092 ad1848_tmr_install(my_dev);
2097 if (sound_alloc_dma(dma_playback, devc->name))
2098 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_playback);
2100 if (dma_capture != dma_playback)
2101 if (sound_alloc_dma(dma_capture, devc->name))
2102 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_capture);
2105 if ((e = sound_install_mixer(MIXER_DRIVER_VERSION,
2107 &ad1848_mixer_operations,
2108 sizeof(struct mixer_operations),
2111 audio_devs[my_dev]->mixer_dev = e;
2113 mixer_devs[e]->owner = owner;
2118 int ad1848_control(int cmd, int arg)
2122 if (nr_ad1848_devs < 1)
2125 devc = &adev_info[nr_ad1848_devs - 1];
2129 case AD1848_SET_XTAL: /* Change clock frequency of AD1845 (only ) */
2130 if (devc->model != MD_1845 || devc->model != MD_1845_SSCAPE)
2133 ad_write(devc, 29, (ad_read(devc, 29) & 0x1f) | (arg << 5));
2137 case AD1848_MIXER_REROUTE:
2139 int o = (arg >> 8) & 0xff;
2142 if (o < 0 || o >= SOUND_MIXER_NRDEVICES)
2145 if (!(devc->supported_devices & (1 << o)) &&
2146 !(devc->supported_rec_devices & (1 << o)))
2149 if (n == SOUND_MIXER_NONE)
2150 { /* Just hide this control */
2151 ad1848_mixer_set(devc, o, 0); /* Shut up it */
2152 devc->supported_devices &= ~(1 << o);
2153 devc->supported_rec_devices &= ~(1 << o);
2157 /* Make the mixer control identified by o to appear as n */
2158 if (n < 0 || n >= SOUND_MIXER_NRDEVICES)
2161 devc->mixer_reroute[n] = o; /* Rename the control */
2162 if (devc->supported_devices & (1 << o))
2163 devc->supported_devices |= (1 << n);
2164 if (devc->supported_rec_devices & (1 << o))
2165 devc->supported_rec_devices |= (1 << n);
2167 devc->supported_devices &= ~(1 << o);
2168 devc->supported_rec_devices &= ~(1 << o);
2175 void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int share_dma)
2177 int i, mixer, dev = 0;
2178 ad1848_info *devc = NULL;
2180 for (i = 0; devc == NULL && i < nr_ad1848_devs; i++)
2182 if (adev_info[i].base == io_base)
2184 devc = &adev_info[i];
2191 if(audio_devs[dev]->portc!=NULL)
2192 kfree(audio_devs[dev]->portc);
2193 release_region(devc->base, 4);
2197 if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */
2198 free_irq(devc->irq, (void *)devc->dev_no);
2200 sound_free_dma(dma_playback);
2202 if (dma_playback != dma_capture)
2203 sound_free_dma(dma_capture);
2206 mixer = audio_devs[devc->dev_no]->mixer_dev;
2208 sound_unload_mixerdev(mixer);
2211 pm_unregister(devc->pmdev);
2214 for ( ; i < nr_ad1848_devs ; i++)
2215 adev_info[i] = adev_info[i+1];
2218 printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
2221 void adintr(int irq, void *dev_id, struct pt_regs *dummy)
2223 unsigned char status;
2226 int alt_stat = 0xff;
2227 unsigned char c930_stat = 0;
2231 devc = (ad1848_info *) audio_devs[dev]->devc;
2233 interrupt_again: /* Jump back here if int status doesn't reset */
2235 status = inb(io_Status(devc));
2238 printk(KERN_DEBUG "adintr: Why?\n");
2239 if (devc->model == MD_1848)
2240 outb((0), io_Status(devc)); /* Clear interrupt status */
2244 if (devc->model == MD_C930)
2245 { /* 82C930 has interrupt status register in MAD16 register MC11 */
2246 unsigned long flags;
2251 /* 0xe0e is C930 address port
2252 * 0xe0f is C930 data port
2255 c930_stat = inb(0xe0f);
2256 outb((~c930_stat), 0xe0f);
2258 restore_flags(flags);
2260 alt_stat = (c930_stat << 2) & 0x30;
2262 else if (devc->model != MD_1848)
2264 alt_stat = ad_read(devc, 24);
2265 ad_write(devc, 24, ad_read(devc, 24) & ~alt_stat); /* Selective ack */
2268 if ((devc->open_mode & OPEN_READ) && (devc->audio_mode & PCM_ENABLE_INPUT) && (alt_stat & 0x20))
2270 DMAbuf_inputintr(devc->record_dev);
2272 if ((devc->open_mode & OPEN_WRITE) && (devc->audio_mode & PCM_ENABLE_OUTPUT) &&
2275 DMAbuf_outputintr(devc->playback_dev, 1);
2277 if (devc->model != MD_1848 && (alt_stat & 0x40)) /* Timer interrupt */
2279 devc->timer_ticks++;
2280 #ifndef EXCLUDE_TIMERS
2281 if (timer_installed == dev && devc->timer_running)
2282 sound_timer_interrupt();
2287 * Sometimes playback or capture interrupts occur while a timer interrupt
2288 * is being handled. The interrupt will not be retriggered if we don't
2289 * handle it now. Check if an interrupt is still pending and restart
2290 * the handler in this case.
2292 if (inb(io_Status(devc)) & 0x01 && cnt++ < 4)
2294 goto interrupt_again;
2299 * Experimental initialization sequence for the integrated sound system
2300 * of the Compaq Deskpro M.
2303 static int init_deskpro_m(struct address_info *hw_config)
2307 if ((tmp = inb(0xc44)) == 0xff)
2309 DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2327 * Experimental initialization sequence for the integrated sound system
2328 * of Compaq Deskpro XL.
2331 static int init_deskpro(struct address_info *hw_config)
2335 if ((tmp = inb(0xc44)) == 0xff)
2337 DDB(printk("init_deskpro: Dead port 0xc44\n"));
2340 outb((tmp | 0x04), 0xc44); /* Select bank 1 */
2341 if (inb(0xc44) != 0x04)
2343 DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2347 * OK. It looks like a Deskpro so let's proceed.
2351 * I/O port 0xc44 Audio configuration register.
2353 * bits 0xc0: Audio revision bits
2354 * 0x00 = Compaq Business Audio
2355 * 0x40 = MS Sound System Compatible (reset default)
2358 * bit 0x20: No Wait State Enable
2359 * 0x00 = Disabled (reset default, DMA mode)
2360 * 0x20 = Enabled (programmed I/O mode)
2361 * bit 0x10: MS Sound System Decode Enable
2362 * 0x00 = Decoding disabled (reset default)
2363 * 0x10 = Decoding enabled
2364 * bit 0x08: FM Synthesis Decode Enable
2365 * 0x00 = Decoding Disabled (reset default)
2366 * 0x08 = Decoding enabled
2367 * bit 0x04 Bank select
2370 * bits 0x03 MSS Base address
2371 * 0x00 = 0x530 (reset default)
2378 /* Debug printing */
2379 printk("Port 0xc44 (before): ");
2380 outb((tmp & ~0x04), 0xc44);
2381 printk("%02x ", inb(0xc44));
2382 outb((tmp | 0x04), 0xc44);
2383 printk("%02x\n", inb(0xc44));
2386 /* Set bank 1 of the register */
2387 tmp = 0x58; /* MSS Mode, MSS&FM decode enabled */
2389 switch (hw_config->io_base)
2404 DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config->io_base));
2407 outb((tmp & ~0x04), 0xc44); /* Write to bank=0 */
2410 /* Debug printing */
2411 printk("Port 0xc44 (after): ");
2412 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2413 printk("%02x ", inb(0xc44));
2414 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2415 printk("%02x\n", inb(0xc44));
2419 * I/O port 0xc45 FM Address Decode/MSS ID Register.
2421 * bank=0, bits 0xfe: FM synthesis Decode Compare bits 7:1 (default=0x88)
2422 * bank=0, bit 0x01: SBIC Power Control Bit
2424 * 0x01 = Powered down
2425 * bank=1, bits 0xfc: MSS ID (default=0x40)
2429 /* Debug printing */
2430 printk("Port 0xc45 (before): ");
2431 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2432 printk("%02x ", inb(0xc45));
2433 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2434 printk("%02x\n", inb(0xc45));
2437 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2438 outb((0x88), 0xc45); /* FM base 7:0 = 0x88 */
2439 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2440 outb((0x10), 0xc45); /* MSS ID = 0x10 (MSS port returns 0x04) */
2443 /* Debug printing */
2444 printk("Port 0xc45 (after): ");
2445 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2446 printk("%02x ", inb(0xc45));
2447 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2448 printk("%02x\n", inb(0xc45));
2453 * I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2455 * bank=0, bits 0xff: FM synthesis Decode Compare bits 15:8 (default=0x03)
2456 * bank=1, bits 0xff: Audio addressing ASIC id
2460 /* Debug printing */
2461 printk("Port 0xc46 (before): ");
2462 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2463 printk("%02x ", inb(0xc46));
2464 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2465 printk("%02x\n", inb(0xc46));
2468 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2469 outb((0x03), 0xc46); /* FM base 15:8 = 0x03 */
2470 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2471 outb((0x11), 0xc46); /* ASIC ID = 0x11 */
2474 /* Debug printing */
2475 printk("Port 0xc46 (after): ");
2476 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2477 printk("%02x ", inb(0xc46));
2478 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2479 printk("%02x\n", inb(0xc46));
2483 * I/O port 0xc47 FM Address Decode Register.
2485 * bank=0, bits 0xff: Decode enable selection for various FM address bits
2486 * bank=1, bits 0xff: Reserved
2490 /* Debug printing */
2491 printk("Port 0xc47 (before): ");
2492 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2493 printk("%02x ", inb(0xc47));
2494 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2495 printk("%02x\n", inb(0xc47));
2498 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2499 outb((0x7c), 0xc47); /* FM decode enable bits = 0x7c */
2500 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2501 outb((0x00), 0xc47); /* Reserved bank1 = 0x00 */
2504 /* Debug printing */
2505 printk("Port 0xc47 (after): ");
2506 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2507 printk("%02x ", inb(0xc47));
2508 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2509 printk("%02x\n", inb(0xc47));
2513 * I/O port 0xc6f = Audio Disable Function Register
2517 printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2520 outb((0x80), 0xc6f);
2523 printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2529 int probe_ms_sound(struct address_info *hw_config)
2533 DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config->io_base, hw_config->card_subtype));
2535 if (check_region(hw_config->io_base, 8))
2537 printk(KERN_ERR "MSS: I/O port conflict\n");
2540 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2542 /* check_opl3(0x388, hw_config); */
2543 return ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp);
2546 if (deskpro_xl && hw_config->card_subtype == 2) /* Compaq Deskpro XL */
2548 if (!init_deskpro(hw_config))
2552 if (deskpro_m) /* Compaq Deskpro M */
2554 if (!init_deskpro_m(hw_config))
2559 * Check if the IO port returns valid signature. The original MS Sound
2560 * system returns 0x04 while some cards (AudioTrix Pro for example)
2561 * return 0x00 or 0x0f.
2564 if ((tmp = inb(hw_config->io_base + 3)) == 0xff) /* Bus float */
2568 DDB(printk("I/O address is inactive (%x)\n", tmp));
2569 if (!(ret = ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp)))
2573 DDB(printk("MSS signature = %x\n", tmp & 0x3f));
2574 if ((tmp & 0x3f) != 0x04 &&
2575 (tmp & 0x3f) != 0x0f &&
2576 (tmp & 0x3f) != 0x00)
2580 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)));
2581 DDB(printk("Trying to detect codec anyway but IRQ/DMA may not work\n"));
2582 if (!(ret = ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp)))
2585 hw_config->card_subtype = 1;
2588 if ((hw_config->irq != 5) &&
2589 (hw_config->irq != 7) &&
2590 (hw_config->irq != 9) &&
2591 (hw_config->irq != 10) &&
2592 (hw_config->irq != 11) &&
2593 (hw_config->irq != 12))
2595 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2598 if (hw_config->dma != 0 && hw_config->dma != 1 && hw_config->dma != 3)
2600 printk(KERN_ERR "MSS: Bad DMA %d\n", hw_config->dma);
2604 * Check that DMA0 is not in use with a 8 bit board.
2607 if (hw_config->dma == 0 && inb(hw_config->io_base + 3) & 0x80)
2609 printk(KERN_ERR "MSS: Can't use DMA0 with a 8 bit card/slot\n");
2612 if (hw_config->irq > 7 && hw_config->irq != 9 && inb(hw_config->io_base + 3) & 0x80)
2614 printk(KERN_ERR "MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config->irq);
2617 return ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp);
2620 void attach_ms_sound(struct address_info *hw_config, struct module *owner)
2622 static signed char interrupt_bits[12] =
2624 -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2629 static char dma_bits[4] =
2634 int config_port = hw_config->io_base + 0;
2635 int version_port = hw_config->io_base + 3;
2636 int dma = hw_config->dma;
2637 int dma2 = hw_config->dma2;
2639 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2641 hw_config->slots[0] = ad1848_init("MS Sound System", hw_config->io_base + 4,
2647 request_region(hw_config->io_base, 4, "WSS config");
2651 * Set the IRQ and DMA addresses.
2654 bits = interrupt_bits[hw_config->irq];
2657 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2660 outb((bits | 0x40), config_port);
2661 if ((inb(version_port) & 0x40) == 0)
2662 printk(KERN_ERR "[MSS: IRQ Conflict?]\n");
2665 * Handle the capture DMA channel
2668 if (dma2 != -1 && dma2 != dma)
2670 if (!((dma == 0 && dma2 == 1) ||
2671 (dma == 1 && dma2 == 0) ||
2672 (dma == 3 && dma2 == 0)))
2673 { /* Unsupported combination. Try to swap channels */
2679 if ((dma == 0 && dma2 == 1) ||
2680 (dma == 1 && dma2 == 0) ||
2681 (dma == 3 && dma2 == 0))
2683 dma2_bit = 0x04; /* Enable capture DMA */
2687 printk(KERN_WARNING "MSS: Invalid capture DMA\n");
2696 hw_config->dma = dma;
2697 hw_config->dma2 = dma2;
2699 outb((bits | dma_bits[dma] | dma2_bit), config_port); /* Write IRQ+DMA setup */
2701 hw_config->slots[0] = ad1848_init("MS Sound System", hw_config->io_base + 4,
2706 request_region(hw_config->io_base, 4, "WSS config");
2709 void unload_ms_sound(struct address_info *hw_config)
2711 ad1848_unload(hw_config->io_base + 4,
2714 hw_config->dma2, 0);
2715 sound_unload_audiodev(hw_config->slots[0]);
2716 release_region(hw_config->io_base, 4);
2719 #ifndef EXCLUDE_TIMERS
2722 * Timer stuff (for /dev/music).
2725 static unsigned int current_interval = 0;
2727 static unsigned int ad1848_tmr_start(int dev, unsigned int usecs)
2729 unsigned long flags;
2730 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2731 unsigned long xtal_nsecs; /* nanoseconds per xtal oscillator tick */
2732 unsigned long divider;
2738 * Length of the timer interval (in nanoseconds) depends on the
2739 * selected crystal oscillator. Check this from bit 0x01 of I8.
2741 * AD1845 has just one oscillator which has cycle time of 10.050 us
2742 * (when a 24.576 MHz xtal oscillator is used).
2744 * Convert requested interval to nanoseconds before computing
2745 * the timer divider.
2748 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
2750 else if (ad_read(devc, 8) & 0x01)
2755 divider = (usecs * 1000 + xtal_nsecs / 2) / xtal_nsecs;
2757 if (divider < 100) /* Don't allow shorter intervals than about 1ms */
2760 if (divider > 65535) /* Overflow check */
2763 ad_write(devc, 21, (divider >> 8) & 0xff); /* Set upper bits */
2764 ad_write(devc, 20, divider & 0xff); /* Set lower bits */
2765 ad_write(devc, 16, ad_read(devc, 16) | 0x40); /* Start the timer */
2766 devc->timer_running = 1;
2767 restore_flags(flags);
2769 return current_interval = (divider * xtal_nsecs + 500) / 1000;
2772 static void ad1848_tmr_reprogram(int dev)
2775 * Audio driver has changed sampling rate so that a different xtal
2776 * oscillator was selected. We have to reprogram the timer rate.
2779 ad1848_tmr_start(dev, current_interval);
2780 sound_timer_syncinterval(current_interval);
2783 static void ad1848_tmr_disable(int dev)
2785 unsigned long flags;
2786 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2790 ad_write(devc, 16, ad_read(devc, 16) & ~0x40);
2791 devc->timer_running = 0;
2792 restore_flags(flags);
2795 static void ad1848_tmr_restart(int dev)
2797 unsigned long flags;
2798 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2800 if (current_interval == 0)
2805 ad_write(devc, 16, ad_read(devc, 16) | 0x40);
2806 devc->timer_running = 1;
2807 restore_flags(flags);
2810 static struct sound_lowlev_timer ad1848_tmr =
2819 static int ad1848_tmr_install(int dev)
2821 if (timer_installed != -1)
2822 return 0; /* Don't install another timer */
2824 timer_installed = ad1848_tmr.dev = dev;
2825 sound_timer_init(&ad1848_tmr, audio_devs[dev]->name);
2829 #endif /* EXCLUDE_TIMERS */
2831 static int ad1848_suspend(ad1848_info *devc)
2833 unsigned long flags;
2840 restore_flags(flags);
2844 static int ad1848_resume(ad1848_info *devc)
2846 unsigned long flags;
2847 int mixer_levels[32], i;
2852 /* Thinkpad is a bit more of PITA than normal. The BIOS tends to
2853 restore it in a different config to the one we use. Need to
2856 /* store old mixer levels */
2857 memcpy(mixer_levels, devc->levels, sizeof (mixer_levels));
2858 ad1848_init_hw(devc);
2860 /* restore mixer levels */
2861 for (i = 0; i < 32; i++)
2862 ad1848_mixer_set(devc, devc->dev_no, mixer_levels[i]);
2864 if (!devc->subtype) {
2865 static signed char interrupt_bits[12] = { -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20 };
2866 static char dma_bits[4] = { 1, 2, 0, 3 };
2871 int config_port = devc->base + 0;
2873 bits = interrupt_bits[devc->irq];
2875 printk(KERN_ERR "MSS: Bad IRQ %d\n", devc->irq);
2876 restore_flags(flags);
2880 outb((bits | 0x40), config_port);
2882 if (devc->dma2 != -1 && devc->dma2 != devc->dma1)
2883 if ( (devc->dma1 == 0 && devc->dma2 == 1) ||
2884 (devc->dma1 == 1 && devc->dma2 == 0) ||
2885 (devc->dma1 == 3 && devc->dma2 == 0))
2888 outb((bits | dma_bits[devc->dma1] | dma2_bit), config_port);
2891 restore_flags(flags);
2895 static int ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
2897 ad1848_info *devc = dev->data;
2899 DEB(printk("ad1848: pm event received: 0x%x\n", rqst));
2903 ad1848_suspend(devc);
2906 ad1848_resume(devc);
2914 EXPORT_SYMBOL(ad1848_detect);
2915 EXPORT_SYMBOL(ad1848_init);
2916 EXPORT_SYMBOL(ad1848_unload);
2917 EXPORT_SYMBOL(ad1848_control);
2918 EXPORT_SYMBOL(adintr);
2919 EXPORT_SYMBOL(probe_ms_sound);
2920 EXPORT_SYMBOL(attach_ms_sound);
2921 EXPORT_SYMBOL(unload_ms_sound);
2923 static int __initdata io = -1;
2924 static int __initdata irq = -1;
2925 static int __initdata dma = -1;
2926 static int __initdata dma2 = -1;
2927 static int __initdata type = 0;
2929 MODULE_PARM(io, "i"); /* I/O for a raw AD1848 card */
2930 MODULE_PARM(irq, "i"); /* IRQ to use */
2931 MODULE_PARM(dma, "i"); /* First DMA channel */
2932 MODULE_PARM(dma2, "i"); /* Second DMA channel */
2933 MODULE_PARM(type, "i"); /* Card type */
2934 MODULE_PARM(deskpro_xl, "i"); /* Special magic for Deskpro XL boxen */
2935 MODULE_PARM(deskpro_m, "i"); /* Special magic for Deskpro M box */
2936 MODULE_PARM(soundpro, "i"); /* More special magic for SoundPro chips */
2938 #if defined CONFIG_ISAPNP || defined CONFIG_ISAPNP_MODULE
2939 MODULE_PARM(isapnp, "i");
2940 MODULE_PARM(isapnpjump, "i");
2941 MODULE_PARM(reverse, "i");
2942 MODULE_PARM_DESC(isapnp, "When set to 0, Plug & Play support will be disabled");
2943 MODULE_PARM_DESC(isapnpjump, "Jumps to a specific slot in the driver's PnP table. Use the source, Luke.");
2944 MODULE_PARM_DESC(reverse, "When set to 1, will reverse ISAPnP search order");
2946 struct pci_dev *ad1848_dev = NULL;
2948 /* Please add new entries at the end of the table */
2951 unsigned short card_vendor, card_device,
2953 short mss_io, irq, dma, dma2; /* index into isapnp table */
2955 } ad1848_isapnp_list[] __initdata = {
2956 {"CMI 8330 SoundPRO",
2957 ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2958 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2960 {"CS4232 based card",
2961 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2962 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2964 {"CS4232 based card",
2965 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2966 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2968 {"OPL3-SA2 WSS mode",
2969 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2970 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2975 static struct isapnp_device_id id_table[] __devinitdata = {
2976 { ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2977 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001), 0 },
2978 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2979 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000), 0 },
2980 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2981 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100), 0 },
2982 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2983 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021), 0 },
2987 MODULE_DEVICE_TABLE(isapnp, id_table);
2989 static struct pci_dev *activate_dev(char *devname, char *resname, struct pci_dev *dev)
2993 /* Device already active? Let's use it */
2997 if((err = dev->activate(dev)) < 0) {
2998 printk(KERN_ERR "ad1848: %s %s config failed (out of resources?)[%d]\n", devname, resname, err);
3000 dev->deactivate(dev);
3007 static struct pci_dev *ad1848_init_generic(struct pci_dev *dev, struct address_info *hw_config, int slot)
3009 /* Configure Audio device, point ad1848_dev to device found */
3010 if((ad1848_dev = dev))
3013 ret = ad1848_dev->prepare(ad1848_dev);
3014 /* If device is active, assume configured with /proc/isapnp
3015 * and use anyway. Some other way to check this? */
3016 if(ret && ret != -EBUSY) {
3017 printk(KERN_ERR "ad1848: ISAPnP found device that could not be autoconfigured.\n");
3021 audio_activated = 1;
3023 if((ad1848_dev = activate_dev(ad1848_isapnp_list[slot].name, "ad1848", ad1848_dev)))
3025 hw_config->io_base = ad1848_dev->resource[ad1848_isapnp_list[slot].mss_io].start;
3026 hw_config->irq = ad1848_dev->irq_resource[ad1848_isapnp_list[slot].irq].start;
3027 hw_config->dma = ad1848_dev->dma_resource[ad1848_isapnp_list[slot].dma].start;
3028 if(ad1848_isapnp_list[slot].dma2 != -1)
3029 hw_config->dma2 = ad1848_dev->dma_resource[ad1848_isapnp_list[slot].dma2].start;
3031 hw_config->dma2 = -1;
3032 hw_config->card_subtype = ad1848_isapnp_list[slot].type;
3041 static int __init ad1848_isapnp_init(struct address_info *hw_config, struct pci_dev *dev, int slot)
3043 char *devname = dev->name[0] ? dev->name : ad1848_isapnp_list[slot].name;
3045 printk(KERN_INFO "ad1848: %s detected\n", devname);
3047 /* Initialize this baby. */
3049 if(ad1848_init_generic(dev, hw_config, slot)) {
3052 printk(KERN_NOTICE "ad1848: ISAPnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
3054 hw_config->io_base, hw_config->irq, hw_config->dma,
3059 printk(KERN_INFO "ad1848: Failed to initialize %s\n", devname);
3064 static int __init ad1848_isapnp_probe(struct address_info *hw_config)
3066 static int first = 1;
3069 /* Count entries in sb_isapnp_list */
3070 for (i = 0; ad1848_isapnp_list[i].card_vendor != 0; i++);
3073 /* Check and adjust isapnpjump */
3074 if( isapnpjump < 0 || isapnpjump > i) {
3075 isapnpjump = reverse ? i : 0;
3076 printk(KERN_ERR "ad1848: Valid range for isapnpjump is 0-%d. Adjusted to %d.\n", i, isapnpjump);
3079 if(!first || !reverse)
3082 while(ad1848_isapnp_list[i].card_vendor != 0) {
3083 static struct pci_dev *dev = NULL;
3085 while ((dev = isapnp_find_dev(NULL,
3086 ad1848_isapnp_list[i].vendor,
3087 ad1848_isapnp_list[i].function,
3090 if(ad1848_isapnp_init(hw_config, dev, i)) {
3091 isapnpjump = i; /* start next search from here */
3095 i += reverse ? -1 : 1;
3103 static int __init init_ad1848(void)
3105 printk(KERN_INFO "ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
3107 #if defined CONFIG_ISAPNP || defined CONFIG_ISAPNP_MODULE
3108 if(isapnp && (ad1848_isapnp_probe(&cfg) < 0) ) {
3109 printk(KERN_NOTICE "ad1848: No ISAPnP cards found, trying standard ones...\n");
3117 if(irq == -1 || dma == -1) {
3118 printk(KERN_WARNING "ad1848: must give I/O , IRQ and DMA.\n");
3126 cfg.card_subtype = type;
3129 if(!probe_ms_sound(&cfg))
3131 attach_ms_sound(&cfg, THIS_MODULE);
3137 static void __exit cleanup_ad1848(void)
3140 unload_ms_sound(&cfg);
3142 #if defined CONFIG_ISAPNP || defined CONFIG_ISAPNP_MODULE
3145 ad1848_dev->deactivate(ad1848_dev);
3149 module_init(init_ad1848);
3150 module_exit(cleanup_ad1848);
3153 static int __init setup_ad1848(char *str)
3155 /* io, irq, dma, dma2, type */
3158 str = get_options(str, ARRAY_SIZE(ints), ints);
3169 __setup("ad1848=", setup_ad1848);
3171 MODULE_LICENSE("GPL");