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/config.h>
45 #include <linux/init.h>
46 #include <linux/interrupt.h>
47 #include <linux/module.h>
48 #include <linux/stddef.h>
50 #include <linux/isapnp.h>
51 #include <linux/pnp.h>
52 #include <linux/spinlock.h>
56 #include "sound_config.h"
59 #include "ad1848_mixer.h"
67 int dual_dma; /* 1, when two DMA channels allocated */
69 unsigned char MCE_bit;
70 unsigned char saved_regs[64]; /* Includes extended register space */
74 int record_dev, playback_dev;
80 char *chip_name, *name;
89 #define MD_4235 8 /* Crystal Audio CS4235 */
90 #define MD_1845_SSCAPE 9 /* Ensoniq Soundscape PNP*/
91 #define MD_4236 10 /* 4236 and higher */
92 #define MD_42xB 11 /* CS 42xB */
93 #define MD_4239 12 /* CS4239 */
95 /* Mixer parameters */
97 int supported_devices, orig_devices;
98 int supported_rec_devices, orig_rec_devices;
100 short mixer_reroute[32];
102 volatile unsigned long timer_ticks;
105 mixer_ents *mix_devices;
106 int mixer_output_port;
108 /* Power management */
109 struct pm_dev *pmdev;
112 typedef struct ad1848_port_info
116 unsigned char speed_bits;
119 unsigned char format_bits;
123 static struct address_info cfg;
124 static int nr_ad1848_devs;
126 static int deskpro_xl;
127 static int deskpro_m;
130 static volatile signed char irq2dev[17] = {
131 -1, -1, -1, -1, -1, -1, -1, -1,
132 -1, -1, -1, -1, -1, -1, -1, -1, -1
135 #ifndef EXCLUDE_TIMERS
136 static int timer_installed = -1;
141 static int ad_format_mask[13 /*devc->model */ ] =
144 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW,
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, /* AD1845 */
148 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
149 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
150 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
151 AFMT_U8 | AFMT_S16_LE /* CS4235 */,
152 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW /* Ensoniq Soundscape*/,
153 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
154 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
155 AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM
158 static ad1848_info adev_info[MAX_AUDIO_DEV];
160 #define io_Index_Addr(d) ((d)->base)
161 #define io_Indexed_Data(d) ((d)->base+1)
162 #define io_Status(d) ((d)->base+2)
163 #define io_Polled_IO(d) ((d)->base+3)
167 #define CAP_F_TIMER 0x01
168 } capabilities [10 /*devc->model */ ] = {
171 ,{CAP_F_TIMER} /* MD_4231 */
172 ,{CAP_F_TIMER} /* MD_4231A */
173 ,{CAP_F_TIMER} /* MD_1845 */
174 ,{CAP_F_TIMER} /* MD_4232 */
176 ,{CAP_F_TIMER} /* MD_IWAVE */
178 ,{CAP_F_TIMER} /* MD_1845_SSCAPE */
182 static int isapnp = 1;
183 static int isapnpjump;
186 static int audio_activated;
193 static int ad1848_open(int dev, int mode);
194 static void ad1848_close(int dev);
195 static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag);
196 static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag);
197 static int ad1848_prepare_for_output(int dev, int bsize, int bcount);
198 static int ad1848_prepare_for_input(int dev, int bsize, int bcount);
199 static void ad1848_halt(int dev);
200 static void ad1848_halt_input(int dev);
201 static void ad1848_halt_output(int dev);
202 static void ad1848_trigger(int dev, int bits);
203 static int ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data);
205 #ifndef EXCLUDE_TIMERS
206 static int ad1848_tmr_install(int dev);
207 static void ad1848_tmr_reprogram(int dev);
210 static int ad_read(ad1848_info * devc, int reg)
213 int timeout = 900000;
215 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
220 outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
221 x = inb(io_Indexed_Data(devc));
227 xreg = (reg & 0xff) - 32;
228 xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
229 outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
230 outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
231 x = inb(io_Indexed_Data(devc));
237 static void ad_write(ad1848_info * devc, int reg, int data)
239 int timeout = 900000;
241 while (timeout > 0 && inb(devc->base) == 0x80) /* Are we initializing */
246 outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
247 outb(((unsigned char) (data & 0xff)), io_Indexed_Data(devc));
253 xreg = (reg & 0xff) - 32;
254 xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
255 outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
256 outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
257 outb((unsigned char) (data & 0xff), io_Indexed_Data(devc));
261 static void wait_for_calibration(ad1848_info * devc)
266 * Wait until the auto calibration process has finished.
268 * 1) Wait until the chip becomes ready (reads don't return 0x80).
269 * 2) Wait until the ACI bit of I11 gets on and then off.
273 while (timeout > 0 && inb(devc->base) == 0x80)
275 if (inb(devc->base) & 0x80)
276 printk(KERN_WARNING "ad1848: Auto calibration timed out(1).\n");
279 while (timeout > 0 && !(ad_read(devc, 11) & 0x20))
281 if (!(ad_read(devc, 11) & 0x20))
285 while (timeout > 0 && (ad_read(devc, 11) & 0x20))
287 if (ad_read(devc, 11) & 0x20)
288 if ( (devc->model != MD_1845) || (devc->model != MD_1845_SSCAPE))
289 printk(KERN_WARNING "ad1848: Auto calibration timed out(3).\n");
292 static void ad_mute(ad1848_info * devc)
298 * Save old register settings and mute output channels
301 for (i = 6; i < 8; i++)
303 prev = devc->saved_regs[i] = ad_read(devc, i);
308 static void ad_unmute(ad1848_info * devc)
312 static void ad_enter_MCE(ad1848_info * devc)
317 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
320 devc->MCE_bit = 0x40;
321 prev = inb(io_Index_Addr(devc));
326 outb((devc->MCE_bit), io_Index_Addr(devc));
329 static void ad_leave_MCE(ad1848_info * devc)
331 unsigned char prev, acal;
334 while (timeout > 0 && inb(devc->base) == 0x80) /*Are we initializing */
337 acal = ad_read(devc, 9);
339 devc->MCE_bit = 0x00;
340 prev = inb(io_Index_Addr(devc));
341 outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
343 if ((prev & 0x40) == 0) /* Not in MCE mode */
347 outb((0x00), io_Index_Addr(devc)); /* Clear the MCE bit */
348 if (acal & 0x08) /* Auto calibration is enabled */
349 wait_for_calibration(devc);
352 static int ad1848_set_recmask(ad1848_info * devc, int mask)
354 unsigned char recdev;
358 mask &= devc->supported_rec_devices;
360 /* Rename the mixer bits if necessary */
361 for (i = 0; i < 32; i++)
363 if (devc->mixer_reroute[i] != i)
368 mask |= (1 << devc->mixer_reroute[i]);
374 for (i = 0; i < 32; i++) /* Count selected device bits */
378 spin_lock_irqsave(&devc->lock,flags);
381 mask = SOUND_MASK_MIC;
382 else if (n != 1) { /* Too many devices selected */
383 mask &= ~devc->recmask; /* Filter out active settings */
386 for (i = 0; i < 32; i++) /* Count selected device bits */
391 mask = SOUND_MASK_MIC;
398 case SOUND_MASK_LINE:
399 case SOUND_MASK_LINE3:
404 case SOUND_MASK_LINE1:
408 case SOUND_MASK_IMIX:
413 mask = SOUND_MASK_MIC;
418 ad_write(devc, 0, (ad_read(devc, 0) & 0x3f) | recdev);
419 ad_write(devc, 1, (ad_read(devc, 1) & 0x3f) | recdev);
420 } else { /* soundpro */
425 for (i = 0; i < 32; i++) { /* For each bit */
426 if ((devc->supported_rec_devices & (1 << i)) == 0)
427 continue; /* Device not supported */
429 for (j = LEFT_CHN; j <= RIGHT_CHN; j++) {
430 if (devc->mix_devices[i][j].nbits == 0) /* Inexistent channel */
435 * set_rec_bit becomes 1 if the corresponding bit in mask is set
436 * then it gets flipped if the polarity is inverse
438 set_rec_bit = ((mask & (1 << i)) != 0) ^ devc->mix_devices[i][j].recpol;
440 val = ad_read(devc, devc->mix_devices[i][j].recreg);
441 val &= ~(1 << devc->mix_devices[i][j].recpos);
442 val |= (set_rec_bit << devc->mix_devices[i][j].recpos);
443 ad_write(devc, devc->mix_devices[i][j].recreg, val);
447 spin_unlock_irqrestore(&devc->lock,flags);
449 /* Rename the mixer bits back if necessary */
450 for (i = 0; i < 32; i++)
452 if (devc->mixer_reroute[i] != i)
454 if (mask & (1 << devc->mixer_reroute[i]))
456 mask &= ~(1 << devc->mixer_reroute[i]);
461 devc->recmask = mask;
465 static void change_bits(ad1848_info * devc, unsigned char *regval,
466 unsigned char *muteval, int dev, int chn, int newval)
474 set_mute_bit = (newval == 0) ^ devc->mix_devices[dev][chn].mutepol;
476 if (devc->mix_devices[dev][chn].polarity == 1) /* Reverse */
477 newval = 100 - newval;
479 mask = (1 << devc->mix_devices[dev][chn].nbits) - 1;
480 shift = devc->mix_devices[dev][chn].bitpos;
482 if (devc->mix_devices[dev][chn].mutepos == 8)
483 { /* if there is no mute bit */
484 mute = 0; /* No mute bit; do nothing special */
485 mutemask = ~0; /* No mute bit; do nothing special */
489 mute = (set_mute_bit << devc->mix_devices[dev][chn].mutepos);
490 mutemask = ~(1 << devc->mix_devices[dev][chn].mutepos);
493 newval = (int) ((newval * mask) + 50) / 100; /* Scale it */
494 *regval &= ~(mask << shift); /* Clear bits */
495 *regval |= (newval & mask) << shift; /* Set new value */
497 *muteval &= mutemask;
501 static int ad1848_mixer_get(ad1848_info * devc, int dev)
503 if (!((1 << dev) & devc->supported_devices))
506 dev = devc->mixer_reroute[dev];
508 return devc->levels[dev];
511 static void ad1848_mixer_set_channel(ad1848_info *devc, int dev, int value, int channel)
513 int regoffs, muteregoffs;
514 unsigned char val, muteval;
517 regoffs = devc->mix_devices[dev][channel].regno;
518 muteregoffs = devc->mix_devices[dev][channel].mutereg;
519 val = ad_read(devc, regoffs);
521 if (muteregoffs != regoffs) {
522 muteval = ad_read(devc, muteregoffs);
523 change_bits(devc, &val, &muteval, dev, channel, value);
526 change_bits(devc, &val, &val, dev, channel, value);
528 spin_lock_irqsave(&devc->lock,flags);
529 ad_write(devc, regoffs, val);
530 devc->saved_regs[regoffs] = val;
531 if (muteregoffs != regoffs) {
532 ad_write(devc, muteregoffs, muteval);
533 devc->saved_regs[muteregoffs] = muteval;
535 spin_unlock_irqrestore(&devc->lock,flags);
538 static int ad1848_mixer_set(ad1848_info * devc, int dev, int value)
540 int left = value & 0x000000ff;
541 int right = (value & 0x0000ff00) >> 8;
547 if (!(devc->supported_devices & (1 << dev)))
550 dev = devc->mixer_reroute[dev];
552 if (devc->mix_devices[dev][LEFT_CHN].nbits == 0)
560 if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0) /* Mono control */
563 retvol = left | (right << 8);
566 left = mix_cvt[left];
567 right = mix_cvt[right];
569 devc->levels[dev] = retvol;
572 * Set the left channel
574 ad1848_mixer_set_channel(devc, dev, left, LEFT_CHN);
577 * Set the right channel
579 if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0)
581 ad1848_mixer_set_channel(devc, dev, right, RIGHT_CHN);
587 static void ad1848_mixer_reset(ad1848_info * devc)
593 devc->mix_devices = &(ad1848_mix_devices[0]);
595 sprintf(name, "%s_%d", devc->chip_name, nr_ad1848_devs);
597 for (i = 0; i < 32; i++)
598 devc->mixer_reroute[i] = i;
600 devc->supported_rec_devices = MODE1_REC_DEVICES;
608 devc->supported_devices = MODE2_MIXER_DEVICES;
612 devc->supported_devices = C930_MIXER_DEVICES;
613 devc->mix_devices = &(c930_mix_devices[0]);
617 devc->supported_devices = MODE3_MIXER_DEVICES;
618 devc->mix_devices = &(iwave_mix_devices[0]);
623 devc->mix_devices = &(cs42xb_mix_devices[0]);
624 devc->supported_devices = MODE3_MIXER_DEVICES;
629 devc->supported_devices = MODE3_MIXER_DEVICES;
634 devc->supported_devices = SPRO_MIXER_DEVICES;
635 devc->supported_rec_devices = SPRO_REC_DEVICES;
636 devc->mix_devices = &(spro_mix_devices[0]);
641 devc->supported_devices = MODE1_MIXER_DEVICES;
644 devc->orig_devices = devc->supported_devices;
645 devc->orig_rec_devices = devc->supported_rec_devices;
647 devc->levels = load_mixer_volumes(name, default_mixer_levels, 1);
649 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
651 if (devc->supported_devices & (1 << i))
652 ad1848_mixer_set(devc, i, devc->levels[i]);
655 ad1848_set_recmask(devc, SOUND_MASK_MIC);
657 devc->mixer_output_port = devc->levels[31] | AUDIO_HEADPHONE | AUDIO_LINE_OUT;
659 spin_lock_irqsave(&devc->lock,flags);
661 if (devc->mixer_output_port & AUDIO_SPEAKER)
662 ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
664 ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
667 * From the "wouldn't it be nice if the mixer API had (better)
668 * support for custom stuff" category
670 /* Enable surround mode and SB16 mixer */
671 ad_write(devc, 16, 0x60);
673 spin_unlock_irqrestore(&devc->lock,flags);
676 static int ad1848_mixer_ioctl(int dev, unsigned int cmd, void __user *arg)
678 ad1848_info *devc = mixer_devs[dev]->devc;
681 if (cmd == SOUND_MIXER_PRIVATE1)
683 if (get_user(val, (int __user *)arg))
689 val &= (AUDIO_SPEAKER | AUDIO_HEADPHONE | AUDIO_LINE_OUT);
690 devc->mixer_output_port = val;
691 val |= AUDIO_HEADPHONE | AUDIO_LINE_OUT; /* Always on */
692 devc->mixer_output_port = val;
693 spin_lock_irqsave(&devc->lock,flags);
694 if (val & AUDIO_SPEAKER)
695 ad_write(devc, 26, ad_read(devc, 26) & ~0x40); /* Unmute mono out */
697 ad_write(devc, 26, ad_read(devc, 26) | 0x40); /* Mute mono out */
698 spin_unlock_irqrestore(&devc->lock,flags);
700 val = devc->mixer_output_port;
701 return put_user(val, (int __user *)arg);
703 if (cmd == SOUND_MIXER_PRIVATE2)
705 if (get_user(val, (int __user *)arg))
707 return(ad1848_control(AD1848_MIXER_REROUTE, val));
709 if (((cmd >> 8) & 0xff) == 'M')
711 if (_SIOC_DIR(cmd) & _SIOC_WRITE)
715 case SOUND_MIXER_RECSRC:
716 if (get_user(val, (int __user *)arg))
718 val = ad1848_set_recmask(devc, val);
722 if (get_user(val, (int __user *)arg))
724 val = ad1848_mixer_set(devc, cmd & 0xff, val);
727 return put_user(val, (int __user *)arg);
737 case SOUND_MIXER_RECSRC:
741 case SOUND_MIXER_DEVMASK:
742 val = devc->supported_devices;
745 case SOUND_MIXER_STEREODEVS:
746 val = devc->supported_devices;
747 if (devc->model != MD_C930)
748 val &= ~(SOUND_MASK_SPEAKER | SOUND_MASK_IMIX);
751 case SOUND_MIXER_RECMASK:
752 val = devc->supported_rec_devices;
755 case SOUND_MIXER_CAPS:
756 val=SOUND_CAP_EXCL_INPUT;
760 val = ad1848_mixer_get(devc, cmd & 0xff);
763 return put_user(val, (int __user *)arg);
770 static int ad1848_set_speed(int dev, int arg)
772 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
773 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
776 * The sampling speed is encoded in the least significant nibble of I8. The
777 * LSB selects the clock source (0=24.576 MHz, 1=16.9344 MHz) and other
778 * three bits select the divisor (indirectly):
780 * The available speeds are in the following table. Keep the speeds in
781 * the increasing order.
790 static speed_struct speed_table[] =
792 {5510, (0 << 1) | 1},
793 {5510, (0 << 1) | 1},
794 {6620, (7 << 1) | 1},
795 {8000, (0 << 1) | 0},
796 {9600, (7 << 1) | 0},
797 {11025, (1 << 1) | 1},
798 {16000, (1 << 1) | 0},
799 {18900, (2 << 1) | 1},
800 {22050, (3 << 1) | 1},
801 {27420, (2 << 1) | 0},
802 {32000, (3 << 1) | 0},
803 {33075, (6 << 1) | 1},
804 {37800, (4 << 1) | 1},
805 {44100, (5 << 1) | 1},
806 {48000, (6 << 1) | 0}
809 int i, n, selected = -1;
811 n = sizeof(speed_table) / sizeof(speed_struct);
816 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* AD1845 has different timer than others */
824 portc->speed_bits = speed_table[3].bits;
827 if (arg < speed_table[0].speed)
829 if (arg > speed_table[n - 1].speed)
832 for (i = 1 /*really */ ; selected == -1 && i < n; i++)
834 if (speed_table[i].speed == arg)
836 else if (speed_table[i].speed > arg)
840 diff1 = arg - speed_table[i - 1].speed;
841 diff2 = speed_table[i].speed - arg;
851 printk(KERN_WARNING "ad1848: Can't find speed???\n");
854 portc->speed = speed_table[selected].speed;
855 portc->speed_bits = speed_table[selected].bits;
859 static short ad1848_set_channels(int dev, short arg)
861 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
863 if (arg != 1 && arg != 2)
864 return portc->channels;
866 portc->channels = arg;
870 static unsigned int ad1848_set_bits(int dev, unsigned int arg)
872 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
873 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
875 static struct format_tbl
922 int i, n = sizeof(format2bits) / sizeof(struct format_tbl);
925 return portc->audio_format;
927 if (!(arg & ad_format_mask[devc->model]))
930 portc->audio_format = arg;
932 for (i = 0; i < n; i++)
933 if (format2bits[i].format == arg)
935 if ((portc->format_bits = format2bits[i].bits) == 0)
936 return portc->audio_format = AFMT_U8; /* Was not supported */
940 /* Still hanging here. Something must be terribly wrong */
941 portc->format_bits = 0;
942 return portc->audio_format = AFMT_U8;
945 static struct audio_driver ad1848_audio_driver =
947 .owner = THIS_MODULE,
949 .close = ad1848_close,
950 .output_block = ad1848_output_block,
951 .start_input = ad1848_start_input,
952 .prepare_for_input = ad1848_prepare_for_input,
953 .prepare_for_output = ad1848_prepare_for_output,
954 .halt_io = ad1848_halt,
955 .halt_input = ad1848_halt_input,
956 .halt_output = ad1848_halt_output,
957 .trigger = ad1848_trigger,
958 .set_speed = ad1848_set_speed,
959 .set_bits = ad1848_set_bits,
960 .set_channels = ad1848_set_channels
963 static struct mixer_operations ad1848_mixer_operations =
965 .owner = THIS_MODULE,
967 .name = "AD1848/CS4248/CS4231",
968 .ioctl = ad1848_mixer_ioctl
971 static int ad1848_open(int dev, int mode)
974 ad1848_port_info *portc;
977 if (dev < 0 || dev >= num_audiodevs)
980 devc = (ad1848_info *) audio_devs[dev]->devc;
981 portc = (ad1848_port_info *) audio_devs[dev]->portc;
983 /* here we don't have to protect against intr */
984 spin_lock(&devc->lock);
985 if (portc->open_mode || (devc->open_mode & mode))
987 spin_unlock(&devc->lock);
992 if (audio_devs[dev]->flags & DMA_DUPLEX)
996 devc->intr_active = 0;
997 devc->audio_mode = 0;
998 devc->open_mode |= mode;
999 portc->open_mode = mode;
1000 spin_unlock(&devc->lock);
1001 ad1848_trigger(dev, 0);
1003 if (mode & OPEN_READ)
1004 devc->record_dev = dev;
1005 if (mode & OPEN_WRITE)
1006 devc->playback_dev = dev;
1008 * Mute output until the playback really starts. This decreases clicking (hope so).
1010 spin_lock_irqsave(&devc->lock,flags);
1012 spin_unlock_irqrestore(&devc->lock,flags);
1017 static void ad1848_close(int dev)
1019 unsigned long flags;
1020 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1021 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1023 DEB(printk("ad1848_close(void)\n"));
1025 devc->intr_active = 0;
1028 spin_lock_irqsave(&devc->lock,flags);
1030 devc->audio_mode = 0;
1031 devc->open_mode &= ~portc->open_mode;
1032 portc->open_mode = 0;
1035 spin_unlock_irqrestore(&devc->lock,flags);
1038 static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag)
1040 unsigned long flags, cnt;
1041 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1042 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1046 if (portc->audio_format == AFMT_IMA_ADPCM)
1052 if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1055 if (portc->channels > 1)
1059 if ((devc->audio_mode & PCM_ENABLE_OUTPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1061 cnt == devc->xfer_count)
1063 devc->audio_mode |= PCM_ENABLE_OUTPUT;
1064 devc->intr_active = 1;
1066 * Auto DMA mode on. No need to react
1069 spin_lock_irqsave(&devc->lock,flags);
1071 ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1072 ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1074 devc->xfer_count = cnt;
1075 devc->audio_mode |= PCM_ENABLE_OUTPUT;
1076 devc->intr_active = 1;
1077 spin_unlock_irqrestore(&devc->lock,flags);
1080 static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag)
1082 unsigned long flags, cnt;
1083 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1084 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1087 if (portc->audio_format == AFMT_IMA_ADPCM)
1093 if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE)) /* 16 bit data */
1096 if (portc->channels > 1)
1100 if ((devc->audio_mode & PCM_ENABLE_INPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1102 cnt == devc->xfer_count)
1104 devc->audio_mode |= PCM_ENABLE_INPUT;
1105 devc->intr_active = 1;
1107 * Auto DMA mode on. No need to react
1110 spin_lock_irqsave(&devc->lock,flags);
1112 if (devc->model == MD_1848)
1114 ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1115 ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1119 ad_write(devc, 31, (unsigned char) (cnt & 0xff));
1120 ad_write(devc, 30, (unsigned char) ((cnt >> 8) & 0xff));
1125 devc->xfer_count = cnt;
1126 devc->audio_mode |= PCM_ENABLE_INPUT;
1127 devc->intr_active = 1;
1128 spin_unlock_irqrestore(&devc->lock,flags);
1131 static int ad1848_prepare_for_output(int dev, int bsize, int bcount)
1134 unsigned char fs, old_fs, tmp = 0;
1135 unsigned long flags;
1136 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1137 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1141 spin_lock_irqsave(&devc->lock,flags);
1142 fs = portc->speed_bits | (portc->format_bits << 5);
1144 if (portc->channels > 1)
1147 ad_enter_MCE(devc); /* Enables changes to the format select reg */
1149 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* Use alternate speed select registers */
1151 fs &= 0xf0; /* Mask off the rate select bits */
1153 ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1154 ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1156 old_fs = ad_read(devc, 8);
1158 if (devc->model == MD_4232 || devc->model >= MD_4236)
1160 tmp = ad_read(devc, 16);
1161 ad_write(devc, 16, tmp | 0x30);
1163 if (devc->model == MD_IWAVE)
1164 ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1166 ad_write(devc, 8, fs);
1169 * Write to I8 starts resynchronization. Wait until it completes.
1173 while (timeout < 100 && inb(devc->base) != 0x80)
1176 while (timeout < 10000 && inb(devc->base) == 0x80)
1179 if (devc->model >= MD_4232)
1180 ad_write(devc, 16, tmp & ~0x30);
1182 ad_leave_MCE(devc); /*
1183 * Starts the calibration process.
1185 spin_unlock_irqrestore(&devc->lock,flags);
1186 devc->xfer_count = 0;
1188 #ifndef EXCLUDE_TIMERS
1189 if (dev == timer_installed && devc->timer_running)
1190 if ((fs & 0x01) != (old_fs & 0x01))
1192 ad1848_tmr_reprogram(dev);
1195 ad1848_halt_output(dev);
1199 static int ad1848_prepare_for_input(int dev, int bsize, int bcount)
1202 unsigned char fs, old_fs, tmp = 0;
1203 unsigned long flags;
1204 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1205 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1207 if (devc->audio_mode)
1210 spin_lock_irqsave(&devc->lock,flags);
1211 fs = portc->speed_bits | (portc->format_bits << 5);
1213 if (portc->channels > 1)
1216 ad_enter_MCE(devc); /* Enables changes to the format select reg */
1218 if ((devc->model == MD_1845) || (devc->model == MD_1845_SSCAPE)) /* Use alternate speed select registers */
1220 fs &= 0xf0; /* Mask off the rate select bits */
1222 ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1223 ad_write(devc, 23, portc->speed & 0xff); /* Speed LSB */
1225 if (devc->model == MD_4232)
1227 tmp = ad_read(devc, 16);
1228 ad_write(devc, 16, tmp | 0x30);
1230 if (devc->model == MD_IWAVE)
1231 ad_write(devc, 17, 0xc2); /* Disable variable frequency select */
1234 * If mode >= 2 (CS4231), set I28. It's the capture format register.
1237 if (devc->model != MD_1848)
1239 old_fs = ad_read(devc, 28);
1240 ad_write(devc, 28, fs);
1243 * Write to I28 starts resynchronization. Wait until it completes.
1247 while (timeout < 100 && inb(devc->base) != 0x80)
1251 while (timeout < 10000 && inb(devc->base) == 0x80)
1254 if (devc->model != MD_1848 && devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
1257 * CS4231 compatible devices don't have separate sampling rate selection
1258 * register for recording an playback. The I8 register is shared so we have to
1259 * set the speed encoding bits of it too.
1261 unsigned char tmp = portc->speed_bits | (ad_read(devc, 8) & 0xf0);
1263 ad_write(devc, 8, tmp);
1265 * Write to I8 starts resynchronization. Wait until it completes.
1268 while (timeout < 100 && inb(devc->base) != 0x80)
1272 while (timeout < 10000 && inb(devc->base) == 0x80)
1277 { /* For AD1848 set I8. */
1279 old_fs = ad_read(devc, 8);
1280 ad_write(devc, 8, fs);
1282 * Write to I8 starts resynchronization. Wait until it completes.
1285 while (timeout < 100 && inb(devc->base) != 0x80)
1288 while (timeout < 10000 && inb(devc->base) == 0x80)
1292 if (devc->model == MD_4232)
1293 ad_write(devc, 16, tmp & ~0x30);
1295 ad_leave_MCE(devc); /*
1296 * Starts the calibration process.
1298 spin_unlock_irqrestore(&devc->lock,flags);
1299 devc->xfer_count = 0;
1301 #ifndef EXCLUDE_TIMERS
1302 if (dev == timer_installed && devc->timer_running)
1304 if ((fs & 0x01) != (old_fs & 0x01))
1306 ad1848_tmr_reprogram(dev);
1310 ad1848_halt_input(dev);
1314 static void ad1848_halt(int dev)
1316 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1317 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1319 unsigned char bits = ad_read(devc, 9);
1321 if (bits & 0x01 && (portc->open_mode & OPEN_WRITE))
1322 ad1848_halt_output(dev);
1324 if (bits & 0x02 && (portc->open_mode & OPEN_READ))
1325 ad1848_halt_input(dev);
1326 devc->audio_mode = 0;
1329 static void ad1848_halt_input(int dev)
1331 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1332 unsigned long flags;
1334 if (!(ad_read(devc, 9) & 0x02))
1335 return; /* Capture not enabled */
1337 spin_lock_irqsave(&devc->lock,flags);
1344 if(!isa_dma_bridge_buggy)
1345 disable_dma(audio_devs[dev]->dmap_in->dma);
1347 for (tmout = 0; tmout < 100000; tmout++)
1348 if (ad_read(devc, 11) & 0x10)
1350 ad_write(devc, 9, ad_read(devc, 9) & ~0x02); /* Stop capture */
1352 if(!isa_dma_bridge_buggy)
1353 enable_dma(audio_devs[dev]->dmap_in->dma);
1354 devc->audio_mode &= ~PCM_ENABLE_INPUT;
1357 outb(0, io_Status(devc)); /* Clear interrupt status */
1358 outb(0, io_Status(devc)); /* Clear interrupt status */
1360 devc->audio_mode &= ~PCM_ENABLE_INPUT;
1362 spin_unlock_irqrestore(&devc->lock,flags);
1365 static void ad1848_halt_output(int dev)
1367 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1368 unsigned long flags;
1370 if (!(ad_read(devc, 9) & 0x01))
1371 return; /* Playback not enabled */
1373 spin_lock_irqsave(&devc->lock,flags);
1379 if(!isa_dma_bridge_buggy)
1380 disable_dma(audio_devs[dev]->dmap_out->dma);
1382 for (tmout = 0; tmout < 100000; tmout++)
1383 if (ad_read(devc, 11) & 0x10)
1385 ad_write(devc, 9, ad_read(devc, 9) & ~0x01); /* Stop playback */
1387 if(!isa_dma_bridge_buggy)
1388 enable_dma(audio_devs[dev]->dmap_out->dma);
1390 devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1393 outb((0), io_Status(devc)); /* Clear interrupt status */
1394 outb((0), io_Status(devc)); /* Clear interrupt status */
1396 devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1398 spin_unlock_irqrestore(&devc->lock,flags);
1401 static void ad1848_trigger(int dev, int state)
1403 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1404 ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1405 unsigned long flags;
1406 unsigned char tmp, old;
1408 spin_lock_irqsave(&devc->lock,flags);
1409 state &= devc->audio_mode;
1411 tmp = old = ad_read(devc, 9);
1413 if (portc->open_mode & OPEN_READ)
1415 if (state & PCM_ENABLE_INPUT)
1420 if (portc->open_mode & OPEN_WRITE)
1422 if (state & PCM_ENABLE_OUTPUT)
1427 /* ad_mute(devc); */
1430 ad_write(devc, 9, tmp);
1433 spin_unlock_irqrestore(&devc->lock,flags);
1436 static void ad1848_init_hw(ad1848_info * devc)
1442 * Initial values for the indirect registers of CS4248/AD1848.
1444 static int init_values_a[] =
1446 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1447 0x00, 0x0c, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00,
1449 /* Positions 16 to 31 just for CS4231/2 and ad1845 */
1450 0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1454 static int init_values_b[] =
1457 Values for the newer chips
1458 Some of the register initialization values were changed. In
1459 order to get rid of the click that preceded PCM playback,
1460 calibration was disabled on the 10th byte. On that same byte,
1461 dual DMA was enabled; on the 11th byte, ADC dithering was
1462 enabled, since that is theoretically desirable; on the 13th
1463 byte, Mode 3 was selected, to enable access to extended
1466 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1467 0x00, 0x00, 0x06, 0x00, 0xe0, 0x01, 0x00, 0x00,
1468 0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1469 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1473 * Select initialisation data
1476 init_values = init_values_a;
1477 if(devc->model >= MD_4236)
1478 init_values = init_values_b;
1480 for (i = 0; i < 16; i++)
1481 ad_write(devc, i, init_values[i]);
1484 ad_mute(devc); /* Initialize some variables */
1485 ad_unmute(devc); /* Leave it unmuted now */
1487 if (devc->model > MD_1848)
1489 if (devc->model == MD_1845_SSCAPE)
1490 ad_write(devc, 12, ad_read(devc, 12) | 0x50);
1492 ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1494 if (devc->model == MD_IWAVE)
1495 ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1497 if (devc->model != MD_1845_SSCAPE)
1498 for (i = 16; i < 32; i++)
1499 ad_write(devc, i, init_values[i]);
1501 if (devc->model == MD_IWAVE)
1502 ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1504 if (devc->model > MD_1848)
1506 if (devc->audio_flags & DMA_DUPLEX)
1507 ad_write(devc, 9, ad_read(devc, 9) & ~0x04); /* Dual DMA mode */
1509 ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1511 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
1512 ad_write(devc, 27, ad_read(devc, 27) | 0x08); /* Alternate freq select enabled */
1514 if (devc->model == MD_IWAVE)
1515 { /* Some magic Interwave specific initialization */
1516 ad_write(devc, 12, 0x6c); /* Select codec mode 3 */
1517 ad_write(devc, 16, 0x30); /* Playback and capture counters enabled */
1518 ad_write(devc, 17, 0xc2); /* Alternate feature enable */
1523 devc->audio_flags &= ~DMA_DUPLEX;
1524 ad_write(devc, 9, ad_read(devc, 9) | 0x04); /* Single DMA mode */
1526 ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1529 outb((0), io_Status(devc)); /* Clear pending interrupts */
1532 * Toggle the MCE bit. It completes the initialization phase.
1535 ad_enter_MCE(devc); /* In case the bit was off */
1538 ad1848_mixer_reset(devc);
1541 int ad1848_detect(struct resource *ports, int *ad_flags, int *osp)
1544 ad1848_info *devc = &adev_info[nr_ad1848_devs];
1545 unsigned char tmp1 = 0xff, tmp2 = 0xff;
1546 int optiC930 = 0; /* OPTi 82C930 flag */
1548 int ad1847_flag = 0;
1549 int cs4248_flag = 0;
1550 int sscape_flag = 0;
1551 int io_base = ports->start;
1555 DDB(printk("ad1848_detect(%x)\n", io_base));
1559 if (*ad_flags == 0x12345678)
1565 if (*ad_flags == 0x87654321)
1571 if (*ad_flags == 0x12345677)
1577 if (nr_ad1848_devs >= MAX_AUDIO_DEV)
1579 printk(KERN_ERR "ad1848 - Too many audio devices\n");
1582 spin_lock_init(&devc->lock);
1583 devc->base = io_base;
1585 devc->timer_running = 0;
1586 devc->MCE_bit = 0x40;
1588 devc->open_mode = 0;
1589 devc->chip_name = devc->name = "AD1848";
1590 devc->model = MD_1848; /* AD1848 or CS4248 */
1591 devc->levels = NULL;
1592 devc->debug_flag = 0;
1595 * Check that the I/O address is in use.
1597 * The bit 0x80 of the base I/O port is known to be 0 after the
1598 * chip has performed its power on initialization. Just assume
1599 * this has happened before the OS is starting.
1601 * If the I/O address is unused, it typically returns 0xff.
1604 if (inb(devc->base) == 0xff)
1606 DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1610 * Wait for the device to stop initialization
1613 DDB(printk("ad1848_detect() - step 0\n"));
1615 for (i = 0; i < 10000000; i++)
1617 unsigned char x = inb(devc->base);
1619 if (x == 0xff || !(x & 0x80))
1623 DDB(printk("ad1848_detect() - step A\n"));
1625 if (inb(devc->base) == 0x80) /* Not ready. Let's wait */
1628 if ((inb(devc->base) & 0x80) != 0x00) /* Not a AD1848 */
1630 DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc->base)));
1635 * Test if it's possible to change contents of the indirect registers.
1636 * Registers 0 and 1 are ADC volume registers. The bit 0x10 is read only
1637 * so try to avoid using it.
1640 DDB(printk("ad1848_detect() - step B\n"));
1641 ad_write(devc, 0, 0xaa);
1642 ad_write(devc, 1, 0x45); /* 0x55 with bit 0x10 clear */
1644 if ((tmp1 = ad_read(devc, 0)) != 0xaa || (tmp2 = ad_read(devc, 1)) != 0x45)
1646 if (tmp2 == 0x65) /* AD1847 has couple of bits hardcoded to 1 */
1650 DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1, tmp2));
1654 DDB(printk("ad1848_detect() - step C\n"));
1655 ad_write(devc, 0, 0x45);
1656 ad_write(devc, 1, 0xaa);
1658 if ((tmp1 = ad_read(devc, 0)) != 0x45 || (tmp2 = ad_read(devc, 1)) != 0xaa)
1660 if (tmp2 == 0x8a) /* AD1847 has few bits hardcoded to 1 */
1664 DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1, tmp2));
1670 * The indirect register I12 has some read only bits. Let's
1671 * try to change them.
1674 DDB(printk("ad1848_detect() - step D\n"));
1675 tmp = ad_read(devc, 12);
1676 ad_write(devc, 12, (~tmp) & 0x0f);
1678 if ((tmp & 0x0f) != ((tmp1 = ad_read(devc, 12)) & 0x0f))
1680 DDB(printk("ad1848 detect error - step D (%x)\n", tmp1));
1685 * NOTE! Last 4 bits of the reg I12 tell the chip revision.
1686 * 0x01=RevB and 0x0A=RevC.
1690 * The original AD1848/CS4248 has just 15 indirect registers. This means
1691 * that I0 and I16 should return the same value (etc.).
1692 * However this doesn't work with CS4248. Actually it seems to be impossible
1693 * to detect if the chip is a CS4231 or CS4248.
1694 * Ensure that the Mode2 enable bit of I12 is 0. Otherwise this test fails
1699 * OPTi 82C930 has mode2 control bit in another place. This test will fail
1700 * with it. Accept this situation as a possible indication of this chip.
1703 DDB(printk("ad1848_detect() - step F\n"));
1704 ad_write(devc, 12, 0); /* Mode2=disabled */
1706 for (i = 0; i < 16; i++)
1708 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16)))
1710 DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i, tmp1, tmp2));
1718 * Try to switch the chip to mode2 (CS4231) by setting the MODE2 bit (0x40).
1719 * The bit 0x80 is always 1 in CS4248 and CS4231.
1722 DDB(printk("ad1848_detect() - step G\n"));
1724 if (ad_flags && *ad_flags == 400)
1727 ad_write(devc, 12, 0x40); /* Set mode2, clear 0x80 */
1733 tmp1 = ad_read(devc, 12);
1737 *ad_flags |= AD_F_CS4248;
1739 devc->chip_name = "CS4248"; /* Our best knowledge just now */
1741 if (optiC930 || (tmp1 & 0xc0) == (0x80 | 0x40))
1744 * CS4231 detected - is it?
1746 * Verify that setting I0 doesn't change I16.
1749 DDB(printk("ad1848_detect() - step H\n"));
1750 ad_write(devc, 16, 0); /* Set I16 to known value */
1752 ad_write(devc, 0, 0x45);
1753 if ((tmp1 = ad_read(devc, 16)) != 0x45) /* No change -> CS4231? */
1755 ad_write(devc, 0, 0xaa);
1756 if ((tmp1 = ad_read(devc, 16)) == 0xaa) /* Rotten bits? */
1758 DDB(printk("ad1848 detect error - step H(%x)\n", tmp1));
1763 * Verify that some bits of I25 are read only.
1766 DDB(printk("ad1848_detect() - step I\n"));
1767 tmp1 = ad_read(devc, 25); /* Original bits */
1768 ad_write(devc, 25, ~tmp1); /* Invert all bits */
1769 if ((ad_read(devc, 25) & 0xe7) == (tmp1 & 0xe7))
1774 * It's at least CS4231
1777 devc->chip_name = "CS4231";
1778 devc->model = MD_4231;
1781 * It could be an AD1845 or CS4231A as well.
1782 * CS4231 and AD1845 report the same revision info in I25
1783 * while the CS4231A reports different.
1786 id = ad_read(devc, 25);
1787 if ((id & 0xe7) == 0x80) /* Device busy??? */
1788 id = ad_read(devc, 25);
1789 if ((id & 0xe7) == 0x80) /* Device still busy??? */
1790 id = ad_read(devc, 25);
1791 DDB(printk("ad1848_detect() - step J (%02x/%02x)\n", id, ad_read(devc, 25)));
1793 if ((id & 0xe7) == 0x80) {
1795 * It must be a CS4231 or AD1845. The register I23 of
1796 * CS4231 is undefined and it appears to be read only.
1797 * AD1845 uses I23 for setting sample rate. Assume
1798 * the chip is AD1845 if I23 is changeable.
1801 unsigned char tmp = ad_read(devc, 23);
1802 ad_write(devc, 23, ~tmp);
1806 devc->model = MD_IWAVE;
1807 devc->chip_name = "IWave";
1809 else if (ad_read(devc, 23) != tmp) /* AD1845 ? */
1811 devc->chip_name = "AD1845";
1812 devc->model = MD_1845;
1814 else if (cs4248_flag)
1817 *ad_flags |= AD_F_CS4248;
1818 devc->chip_name = "CS4248";
1819 devc->model = MD_1848;
1820 ad_write(devc, 12, ad_read(devc, 12) & ~0x40); /* Mode2 off */
1822 ad_write(devc, 23, tmp); /* Restore */
1826 switch (id & 0x1f) {
1827 case 3: /* CS4236/CS4235/CS42xB/CS4239 */
1830 ad_write(devc, 12, ad_read(devc, 12) | 0x60); /* switch to mode 3 */
1831 ad_write(devc, 23, 0x9c); /* select extended register 25 */
1832 xid = inb(io_Indexed_Data(devc));
1833 ad_write(devc, 12, ad_read(devc, 12) & ~0x60); /* back to mode 0 */
1837 devc->chip_name = "CS4237B(B)";
1838 devc->model = MD_42xB;
1841 /* Seems to be a 4238 ?? */
1842 devc->chip_name = "CS4238";
1843 devc->model = MD_42xB;
1846 devc->chip_name = "CS4238B";
1847 devc->model = MD_42xB;
1850 devc->chip_name = "CS4236B";
1851 devc->model = MD_4236;
1854 devc->chip_name = "CS4237B";
1855 devc->model = MD_42xB;
1858 devc->chip_name = "CS4235";
1859 devc->model = MD_4235;
1862 devc->chip_name = "CS4239";
1863 devc->model = MD_4239;
1866 printk("Chip ident is %X.\n", xid&0x1F);
1867 devc->chip_name = "CS42xx";
1868 devc->model = MD_4232;
1874 case 2: /* CS4232/CS4232A */
1875 devc->chip_name = "CS4232";
1876 devc->model = MD_4232;
1880 if ((id & 0xe0) == 0xa0)
1882 devc->chip_name = "CS4231A";
1883 devc->model = MD_4231A;
1887 devc->chip_name = "CS4321";
1888 devc->model = MD_4231;
1892 default: /* maybe */
1893 DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc, 25), ad_read(devc, 25) & 0xe7));
1896 devc->chip_name = "82C930";
1897 devc->model = MD_C930;
1901 devc->chip_name = "CS4231";
1902 devc->model = MD_4231;
1907 ad_write(devc, 25, tmp1); /* Restore bits */
1909 DDB(printk("ad1848_detect() - step K\n"));
1911 } else if (tmp1 == 0x0a) {
1913 * Is it perhaps a SoundPro CMI8330?
1914 * If so, then we should be able to change indirect registers
1915 * greater than I15 after activating MODE2, even though reading
1916 * back I12 does not show it.
1920 * Let's try comparing register values
1922 for (i = 0; i < 16; i++) {
1923 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16))) {
1924 DDB(printk("ad1848 detect step H(%d/%x/%x) - SoundPro chip?\n", i, tmp1, tmp2));
1926 devc->chip_name = "SoundPro CMI 8330";
1932 DDB(printk("ad1848_detect() - step L\n"));
1935 if (devc->model != MD_1848)
1936 *ad_flags |= AD_F_CS4231;
1938 DDB(printk("ad1848_detect() - Detected OK\n"));
1940 if (devc->model == MD_1848 && ad1847_flag)
1941 devc->chip_name = "AD1847";
1944 if (sscape_flag == 1)
1945 devc->model = MD_1845_SSCAPE;
1950 int ad1848_init (char *name, struct resource *ports, int irq, int dma_playback,
1951 int dma_capture, int share_dma, int *osp, struct module *owner)
1954 * NOTE! If irq < 0, there is another driver which has allocated the IRQ
1955 * so that this driver doesn't need to allocate/deallocate it.
1956 * The actually used IRQ is ABS(irq).
1963 ad1848_info *devc = &adev_info[nr_ad1848_devs];
1965 ad1848_port_info *portc = NULL;
1967 devc->irq = (irq > 0) ? irq : 0;
1968 devc->open_mode = 0;
1969 devc->timer_ticks = 0;
1970 devc->dma1 = dma_playback;
1971 devc->dma2 = dma_capture;
1972 devc->subtype = cfg.card_subtype;
1973 devc->audio_flags = DMA_AUTOMODE;
1974 devc->playback_dev = devc->record_dev = 0;
1978 if (name != NULL && name[0] != 0)
1980 "%s (%s)", name, devc->chip_name);
1983 "Generic audio codec (%s)", devc->chip_name);
1985 rename_region(ports, devc->name);
1987 conf_printf2(dev_name, devc->base, devc->irq, dma_playback, dma_capture);
1989 if (devc->model == MD_1848 || devc->model == MD_C930)
1990 devc->audio_flags |= DMA_HARDSTOP;
1992 if (devc->model > MD_1848)
1994 if (devc->dma1 == devc->dma2 || devc->dma2 == -1 || devc->dma1 == -1)
1995 devc->audio_flags &= ~DMA_DUPLEX;
1997 devc->audio_flags |= DMA_DUPLEX;
2000 portc = (ad1848_port_info *) kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
2002 release_region(devc->base, 4);
2006 if ((my_dev = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
2008 &ad1848_audio_driver,
2009 sizeof(struct audio_driver),
2011 ad_format_mask[devc->model],
2016 release_region(devc->base, 4);
2021 audio_devs[my_dev]->portc = portc;
2022 audio_devs[my_dev]->mixer_dev = -1;
2024 audio_devs[my_dev]->d->owner = owner;
2025 memset((char *) portc, 0, sizeof(*portc));
2029 devc->pmdev = pm_register(PM_ISA_DEV, my_dev, ad1848_pm_callback);
2031 devc->pmdev->data = devc;
2033 ad1848_init_hw(devc);
2037 devc->dev_no = my_dev;
2038 if (request_irq(devc->irq, adintr, 0, devc->name, (void *)my_dev) < 0)
2040 printk(KERN_WARNING "ad1848: Unable to allocate IRQ\n");
2041 /* Don't free it either then.. */
2044 if (capabilities[devc->model].flags & CAP_F_TIMER)
2048 unsigned char tmp = ad_read(devc, 16);
2051 devc->timer_ticks = 0;
2053 ad_write(devc, 21, 0x00); /* Timer MSB */
2054 ad_write(devc, 20, 0x10); /* Timer LSB */
2056 ad_write(devc, 16, tmp | 0x40); /* Enable timer */
2057 for (x = 0; x < 100000 && devc->timer_ticks == 0; x++);
2058 ad_write(devc, 16, tmp & ~0x40); /* Disable timer */
2060 if (devc->timer_ticks == 0)
2061 printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
2064 DDB(printk("Interrupt test OK\n"));
2072 devc->irq_ok = 1; /* Couldn't test. assume it's OK */
2074 irq2dev[-irq] = devc->dev_no = my_dev;
2076 #ifndef EXCLUDE_TIMERS
2077 if ((capabilities[devc->model].flags & CAP_F_TIMER) &&
2079 ad1848_tmr_install(my_dev);
2084 if (sound_alloc_dma(dma_playback, devc->name))
2085 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_playback);
2087 if (dma_capture != dma_playback)
2088 if (sound_alloc_dma(dma_capture, devc->name))
2089 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_capture);
2092 if ((e = sound_install_mixer(MIXER_DRIVER_VERSION,
2094 &ad1848_mixer_operations,
2095 sizeof(struct mixer_operations),
2098 audio_devs[my_dev]->mixer_dev = e;
2100 mixer_devs[e]->owner = owner;
2105 int ad1848_control(int cmd, int arg)
2108 unsigned long flags;
2110 if (nr_ad1848_devs < 1)
2113 devc = &adev_info[nr_ad1848_devs - 1];
2117 case AD1848_SET_XTAL: /* Change clock frequency of AD1845 (only ) */
2118 if (devc->model != MD_1845 || devc->model != MD_1845_SSCAPE)
2120 spin_lock_irqsave(&devc->lock,flags);
2122 ad_write(devc, 29, (ad_read(devc, 29) & 0x1f) | (arg << 5));
2124 spin_unlock_irqrestore(&devc->lock,flags);
2127 case AD1848_MIXER_REROUTE:
2129 int o = (arg >> 8) & 0xff;
2132 if (o < 0 || o >= SOUND_MIXER_NRDEVICES)
2135 if (!(devc->supported_devices & (1 << o)) &&
2136 !(devc->supported_rec_devices & (1 << o)))
2139 if (n == SOUND_MIXER_NONE)
2140 { /* Just hide this control */
2141 ad1848_mixer_set(devc, o, 0); /* Shut up it */
2142 devc->supported_devices &= ~(1 << o);
2143 devc->supported_rec_devices &= ~(1 << o);
2147 /* Make the mixer control identified by o to appear as n */
2148 if (n < 0 || n >= SOUND_MIXER_NRDEVICES)
2151 devc->mixer_reroute[n] = o; /* Rename the control */
2152 if (devc->supported_devices & (1 << o))
2153 devc->supported_devices |= (1 << n);
2154 if (devc->supported_rec_devices & (1 << o))
2155 devc->supported_rec_devices |= (1 << n);
2157 devc->supported_devices &= ~(1 << o);
2158 devc->supported_rec_devices &= ~(1 << o);
2165 void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int share_dma)
2167 int i, mixer, dev = 0;
2168 ad1848_info *devc = NULL;
2170 for (i = 0; devc == NULL && i < nr_ad1848_devs; i++)
2172 if (adev_info[i].base == io_base)
2174 devc = &adev_info[i];
2181 kfree(audio_devs[dev]->portc);
2182 release_region(devc->base, 4);
2186 if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */
2187 free_irq(devc->irq, (void *)devc->dev_no);
2189 sound_free_dma(dma_playback);
2191 if (dma_playback != dma_capture)
2192 sound_free_dma(dma_capture);
2195 mixer = audio_devs[devc->dev_no]->mixer_dev;
2197 sound_unload_mixerdev(mixer);
2200 pm_unregister(devc->pmdev);
2203 for ( ; i < nr_ad1848_devs ; i++)
2204 adev_info[i] = adev_info[i+1];
2207 printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
2210 irqreturn_t adintr(int irq, void *dev_id, struct pt_regs *dummy)
2212 unsigned char status;
2215 int alt_stat = 0xff;
2216 unsigned char c930_stat = 0;
2220 devc = (ad1848_info *) audio_devs[dev]->devc;
2222 interrupt_again: /* Jump back here if int status doesn't reset */
2224 status = inb(io_Status(devc));
2227 printk(KERN_DEBUG "adintr: Why?\n");
2228 if (devc->model == MD_1848)
2229 outb((0), io_Status(devc)); /* Clear interrupt status */
2233 if (devc->model == MD_C930)
2234 { /* 82C930 has interrupt status register in MAD16 register MC11 */
2236 spin_lock(&devc->lock);
2238 /* 0xe0e is C930 address port
2239 * 0xe0f is C930 data port
2242 c930_stat = inb(0xe0f);
2243 outb((~c930_stat), 0xe0f);
2245 spin_unlock(&devc->lock);
2247 alt_stat = (c930_stat << 2) & 0x30;
2249 else if (devc->model != MD_1848)
2251 spin_lock(&devc->lock);
2252 alt_stat = ad_read(devc, 24);
2253 ad_write(devc, 24, ad_read(devc, 24) & ~alt_stat); /* Selective ack */
2254 spin_unlock(&devc->lock);
2257 if ((devc->open_mode & OPEN_READ) && (devc->audio_mode & PCM_ENABLE_INPUT) && (alt_stat & 0x20))
2259 DMAbuf_inputintr(devc->record_dev);
2261 if ((devc->open_mode & OPEN_WRITE) && (devc->audio_mode & PCM_ENABLE_OUTPUT) &&
2264 DMAbuf_outputintr(devc->playback_dev, 1);
2266 if (devc->model != MD_1848 && (alt_stat & 0x40)) /* Timer interrupt */
2268 devc->timer_ticks++;
2269 #ifndef EXCLUDE_TIMERS
2270 if (timer_installed == dev && devc->timer_running)
2271 sound_timer_interrupt();
2276 * Sometimes playback or capture interrupts occur while a timer interrupt
2277 * is being handled. The interrupt will not be retriggered if we don't
2278 * handle it now. Check if an interrupt is still pending and restart
2279 * the handler in this case.
2281 if (inb(io_Status(devc)) & 0x01 && cnt++ < 4)
2283 goto interrupt_again;
2289 * Experimental initialization sequence for the integrated sound system
2290 * of the Compaq Deskpro M.
2293 static int init_deskpro_m(struct address_info *hw_config)
2297 if ((tmp = inb(0xc44)) == 0xff)
2299 DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2317 * Experimental initialization sequence for the integrated sound system
2318 * of Compaq Deskpro XL.
2321 static int init_deskpro(struct address_info *hw_config)
2325 if ((tmp = inb(0xc44)) == 0xff)
2327 DDB(printk("init_deskpro: Dead port 0xc44\n"));
2330 outb((tmp | 0x04), 0xc44); /* Select bank 1 */
2331 if (inb(0xc44) != 0x04)
2333 DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2337 * OK. It looks like a Deskpro so let's proceed.
2341 * I/O port 0xc44 Audio configuration register.
2343 * bits 0xc0: Audio revision bits
2344 * 0x00 = Compaq Business Audio
2345 * 0x40 = MS Sound System Compatible (reset default)
2348 * bit 0x20: No Wait State Enable
2349 * 0x00 = Disabled (reset default, DMA mode)
2350 * 0x20 = Enabled (programmed I/O mode)
2351 * bit 0x10: MS Sound System Decode Enable
2352 * 0x00 = Decoding disabled (reset default)
2353 * 0x10 = Decoding enabled
2354 * bit 0x08: FM Synthesis Decode Enable
2355 * 0x00 = Decoding Disabled (reset default)
2356 * 0x08 = Decoding enabled
2357 * bit 0x04 Bank select
2360 * bits 0x03 MSS Base address
2361 * 0x00 = 0x530 (reset default)
2368 /* Debug printing */
2369 printk("Port 0xc44 (before): ");
2370 outb((tmp & ~0x04), 0xc44);
2371 printk("%02x ", inb(0xc44));
2372 outb((tmp | 0x04), 0xc44);
2373 printk("%02x\n", inb(0xc44));
2376 /* Set bank 1 of the register */
2377 tmp = 0x58; /* MSS Mode, MSS&FM decode enabled */
2379 switch (hw_config->io_base)
2394 DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config->io_base));
2397 outb((tmp & ~0x04), 0xc44); /* Write to bank=0 */
2400 /* Debug printing */
2401 printk("Port 0xc44 (after): ");
2402 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2403 printk("%02x ", inb(0xc44));
2404 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2405 printk("%02x\n", inb(0xc44));
2409 * I/O port 0xc45 FM Address Decode/MSS ID Register.
2411 * bank=0, bits 0xfe: FM synthesis Decode Compare bits 7:1 (default=0x88)
2412 * bank=0, bit 0x01: SBIC Power Control Bit
2414 * 0x01 = Powered down
2415 * bank=1, bits 0xfc: MSS ID (default=0x40)
2419 /* Debug printing */
2420 printk("Port 0xc45 (before): ");
2421 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2422 printk("%02x ", inb(0xc45));
2423 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2424 printk("%02x\n", inb(0xc45));
2427 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2428 outb((0x88), 0xc45); /* FM base 7:0 = 0x88 */
2429 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2430 outb((0x10), 0xc45); /* MSS ID = 0x10 (MSS port returns 0x04) */
2433 /* Debug printing */
2434 printk("Port 0xc45 (after): ");
2435 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2436 printk("%02x ", inb(0xc45));
2437 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2438 printk("%02x\n", inb(0xc45));
2443 * I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2445 * bank=0, bits 0xff: FM synthesis Decode Compare bits 15:8 (default=0x03)
2446 * bank=1, bits 0xff: Audio addressing ASIC id
2450 /* Debug printing */
2451 printk("Port 0xc46 (before): ");
2452 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2453 printk("%02x ", inb(0xc46));
2454 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2455 printk("%02x\n", inb(0xc46));
2458 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2459 outb((0x03), 0xc46); /* FM base 15:8 = 0x03 */
2460 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2461 outb((0x11), 0xc46); /* ASIC ID = 0x11 */
2464 /* Debug printing */
2465 printk("Port 0xc46 (after): ");
2466 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2467 printk("%02x ", inb(0xc46));
2468 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2469 printk("%02x\n", inb(0xc46));
2473 * I/O port 0xc47 FM Address Decode Register.
2475 * bank=0, bits 0xff: Decode enable selection for various FM address bits
2476 * bank=1, bits 0xff: Reserved
2480 /* Debug printing */
2481 printk("Port 0xc47 (before): ");
2482 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2483 printk("%02x ", inb(0xc47));
2484 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2485 printk("%02x\n", inb(0xc47));
2488 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2489 outb((0x7c), 0xc47); /* FM decode enable bits = 0x7c */
2490 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2491 outb((0x00), 0xc47); /* Reserved bank1 = 0x00 */
2494 /* Debug printing */
2495 printk("Port 0xc47 (after): ");
2496 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2497 printk("%02x ", inb(0xc47));
2498 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2499 printk("%02x\n", inb(0xc47));
2503 * I/O port 0xc6f = Audio Disable Function Register
2507 printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2510 outb((0x80), 0xc6f);
2513 printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2519 int probe_ms_sound(struct address_info *hw_config, struct resource *ports)
2523 DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config->io_base, hw_config->card_subtype));
2525 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2527 /* check_opl3(0x388, hw_config); */
2528 return ad1848_detect(ports, NULL, hw_config->osp);
2531 if (deskpro_xl && hw_config->card_subtype == 2) /* Compaq Deskpro XL */
2533 if (!init_deskpro(hw_config))
2537 if (deskpro_m) /* Compaq Deskpro M */
2539 if (!init_deskpro_m(hw_config))
2544 * Check if the IO port returns valid signature. The original MS Sound
2545 * system returns 0x04 while some cards (AudioTrix Pro for example)
2546 * return 0x00 or 0x0f.
2549 if ((tmp = inb(hw_config->io_base + 3)) == 0xff) /* Bus float */
2553 DDB(printk("I/O address is inactive (%x)\n", tmp));
2554 if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2558 DDB(printk("MSS signature = %x\n", tmp & 0x3f));
2559 if ((tmp & 0x3f) != 0x04 &&
2560 (tmp & 0x3f) != 0x0f &&
2561 (tmp & 0x3f) != 0x00)
2565 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)));
2566 DDB(printk("Trying to detect codec anyway but IRQ/DMA may not work\n"));
2567 if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2570 hw_config->card_subtype = 1;
2573 if ((hw_config->irq != 5) &&
2574 (hw_config->irq != 7) &&
2575 (hw_config->irq != 9) &&
2576 (hw_config->irq != 10) &&
2577 (hw_config->irq != 11) &&
2578 (hw_config->irq != 12))
2580 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2583 if (hw_config->dma != 0 && hw_config->dma != 1 && hw_config->dma != 3)
2585 printk(KERN_ERR "MSS: Bad DMA %d\n", hw_config->dma);
2589 * Check that DMA0 is not in use with a 8 bit board.
2592 if (hw_config->dma == 0 && inb(hw_config->io_base + 3) & 0x80)
2594 printk(KERN_ERR "MSS: Can't use DMA0 with a 8 bit card/slot\n");
2597 if (hw_config->irq > 7 && hw_config->irq != 9 && inb(hw_config->io_base + 3) & 0x80)
2599 printk(KERN_ERR "MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config->irq);
2602 return ad1848_detect(ports, NULL, hw_config->osp);
2605 void attach_ms_sound(struct address_info *hw_config, struct resource *ports, struct module *owner)
2607 static signed char interrupt_bits[12] =
2609 -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2614 static char dma_bits[4] =
2619 int config_port = hw_config->io_base + 0;
2620 int version_port = hw_config->io_base + 3;
2621 int dma = hw_config->dma;
2622 int dma2 = hw_config->dma2;
2624 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2626 hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2635 * Set the IRQ and DMA addresses.
2638 bits = interrupt_bits[hw_config->irq];
2641 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2642 release_region(ports->start, 4);
2643 release_region(ports->start - 4, 4);
2646 outb((bits | 0x40), config_port);
2647 if ((inb(version_port) & 0x40) == 0)
2648 printk(KERN_ERR "[MSS: IRQ Conflict?]\n");
2651 * Handle the capture DMA channel
2654 if (dma2 != -1 && dma2 != dma)
2656 if (!((dma == 0 && dma2 == 1) ||
2657 (dma == 1 && dma2 == 0) ||
2658 (dma == 3 && dma2 == 0)))
2659 { /* Unsupported combination. Try to swap channels */
2665 if ((dma == 0 && dma2 == 1) ||
2666 (dma == 1 && dma2 == 0) ||
2667 (dma == 3 && dma2 == 0))
2669 dma2_bit = 0x04; /* Enable capture DMA */
2673 printk(KERN_WARNING "MSS: Invalid capture DMA\n");
2682 hw_config->dma = dma;
2683 hw_config->dma2 = dma2;
2685 outb((bits | dma_bits[dma] | dma2_bit), config_port); /* Write IRQ+DMA setup */
2687 hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2694 void unload_ms_sound(struct address_info *hw_config)
2696 ad1848_unload(hw_config->io_base + 4,
2699 hw_config->dma2, 0);
2700 sound_unload_audiodev(hw_config->slots[0]);
2701 release_region(hw_config->io_base, 4);
2704 #ifndef EXCLUDE_TIMERS
2707 * Timer stuff (for /dev/music).
2710 static unsigned int current_interval;
2712 static unsigned int ad1848_tmr_start(int dev, unsigned int usecs)
2714 unsigned long flags;
2715 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2716 unsigned long xtal_nsecs; /* nanoseconds per xtal oscillator tick */
2717 unsigned long divider;
2719 spin_lock_irqsave(&devc->lock,flags);
2722 * Length of the timer interval (in nanoseconds) depends on the
2723 * selected crystal oscillator. Check this from bit 0x01 of I8.
2725 * AD1845 has just one oscillator which has cycle time of 10.050 us
2726 * (when a 24.576 MHz xtal oscillator is used).
2728 * Convert requested interval to nanoseconds before computing
2729 * the timer divider.
2732 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
2734 else if (ad_read(devc, 8) & 0x01)
2739 divider = (usecs * 1000 + xtal_nsecs / 2) / xtal_nsecs;
2741 if (divider < 100) /* Don't allow shorter intervals than about 1ms */
2744 if (divider > 65535) /* Overflow check */
2747 ad_write(devc, 21, (divider >> 8) & 0xff); /* Set upper bits */
2748 ad_write(devc, 20, divider & 0xff); /* Set lower bits */
2749 ad_write(devc, 16, ad_read(devc, 16) | 0x40); /* Start the timer */
2750 devc->timer_running = 1;
2751 spin_unlock_irqrestore(&devc->lock,flags);
2753 return current_interval = (divider * xtal_nsecs + 500) / 1000;
2756 static void ad1848_tmr_reprogram(int dev)
2759 * Audio driver has changed sampling rate so that a different xtal
2760 * oscillator was selected. We have to reprogram the timer rate.
2763 ad1848_tmr_start(dev, current_interval);
2764 sound_timer_syncinterval(current_interval);
2767 static void ad1848_tmr_disable(int dev)
2769 unsigned long flags;
2770 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2772 spin_lock_irqsave(&devc->lock,flags);
2773 ad_write(devc, 16, ad_read(devc, 16) & ~0x40);
2774 devc->timer_running = 0;
2775 spin_unlock_irqrestore(&devc->lock,flags);
2778 static void ad1848_tmr_restart(int dev)
2780 unsigned long flags;
2781 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2783 if (current_interval == 0)
2786 spin_lock_irqsave(&devc->lock,flags);
2787 ad_write(devc, 16, ad_read(devc, 16) | 0x40);
2788 devc->timer_running = 1;
2789 spin_unlock_irqrestore(&devc->lock,flags);
2792 static struct sound_lowlev_timer ad1848_tmr =
2801 static int ad1848_tmr_install(int dev)
2803 if (timer_installed != -1)
2804 return 0; /* Don't install another timer */
2806 timer_installed = ad1848_tmr.dev = dev;
2807 sound_timer_init(&ad1848_tmr, audio_devs[dev]->name);
2811 #endif /* EXCLUDE_TIMERS */
2813 static int ad1848_suspend(ad1848_info *devc)
2815 unsigned long flags;
2817 spin_lock_irqsave(&devc->lock,flags);
2821 spin_unlock_irqrestore(&devc->lock,flags);
2825 static int ad1848_resume(ad1848_info *devc)
2827 int mixer_levels[32], i;
2829 /* Thinkpad is a bit more of PITA than normal. The BIOS tends to
2830 restore it in a different config to the one we use. Need to
2833 /* store old mixer levels */
2834 memcpy(mixer_levels, devc->levels, sizeof (mixer_levels));
2835 ad1848_init_hw(devc);
2837 /* restore mixer levels */
2838 for (i = 0; i < 32; i++)
2839 ad1848_mixer_set(devc, devc->dev_no, mixer_levels[i]);
2841 if (!devc->subtype) {
2842 static signed char interrupt_bits[12] = { -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20 };
2843 static char dma_bits[4] = { 1, 2, 0, 3 };
2844 unsigned long flags;
2848 int config_port = devc->base + 0;
2850 bits = interrupt_bits[devc->irq];
2852 printk(KERN_ERR "MSS: Bad IRQ %d\n", devc->irq);
2856 spin_lock_irqsave(&devc->lock,flags);
2858 outb((bits | 0x40), config_port);
2860 if (devc->dma2 != -1 && devc->dma2 != devc->dma1)
2861 if ( (devc->dma1 == 0 && devc->dma2 == 1) ||
2862 (devc->dma1 == 1 && devc->dma2 == 0) ||
2863 (devc->dma1 == 3 && devc->dma2 == 0))
2866 outb((bits | dma_bits[devc->dma1] | dma2_bit), config_port);
2867 spin_unlock_irqrestore(&devc->lock,flags);
2873 static int ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
2875 ad1848_info *devc = dev->data;
2877 DEB(printk("ad1848: pm event received: 0x%x\n", rqst));
2881 ad1848_suspend(devc);
2884 ad1848_resume(devc);
2892 EXPORT_SYMBOL(ad1848_detect);
2893 EXPORT_SYMBOL(ad1848_init);
2894 EXPORT_SYMBOL(ad1848_unload);
2895 EXPORT_SYMBOL(ad1848_control);
2896 EXPORT_SYMBOL(adintr);
2897 EXPORT_SYMBOL(probe_ms_sound);
2898 EXPORT_SYMBOL(attach_ms_sound);
2899 EXPORT_SYMBOL(unload_ms_sound);
2901 static int __initdata io = -1;
2902 static int __initdata irq = -1;
2903 static int __initdata dma = -1;
2904 static int __initdata dma2 = -1;
2905 static int __initdata type = 0;
2907 module_param(io, int, 0); /* I/O for a raw AD1848 card */
2908 module_param(irq, int, 0); /* IRQ to use */
2909 module_param(dma, int, 0); /* First DMA channel */
2910 module_param(dma2, int, 0); /* Second DMA channel */
2911 module_param(type, int, 0); /* Card type */
2912 module_param(deskpro_xl, bool, 0); /* Special magic for Deskpro XL boxen */
2913 module_param(deskpro_m, bool, 0); /* Special magic for Deskpro M box */
2914 module_param(soundpro, bool, 0); /* More special magic for SoundPro chips */
2917 module_param(isapnp, int, 0);
2918 module_param(isapnpjump, int, 0);
2919 module_param(reverse, bool, 0);
2920 MODULE_PARM_DESC(isapnp, "When set to 0, Plug & Play support will be disabled");
2921 MODULE_PARM_DESC(isapnpjump, "Jumps to a specific slot in the driver's PnP table. Use the source, Luke.");
2922 MODULE_PARM_DESC(reverse, "When set to 1, will reverse ISAPnP search order");
2924 static struct pnp_dev *ad1848_dev = NULL;
2926 /* Please add new entries at the end of the table */
2929 unsigned short card_vendor, card_device,
2931 short mss_io, irq, dma, dma2; /* index into isapnp table */
2933 } ad1848_isapnp_list[] __initdata = {
2934 {"CMI 8330 SoundPRO",
2935 ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2936 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2938 {"CS4232 based card",
2939 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2940 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2942 {"CS4232 based card",
2943 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2944 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2946 {"OPL3-SA2 WSS mode",
2947 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2948 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2950 {"Advanced Gravis InterWave Audio",
2951 ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2952 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000),
2957 static struct isapnp_device_id id_table[] __devinitdata = {
2958 { ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2959 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001), 0 },
2960 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2961 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000), 0 },
2962 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2963 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100), 0 },
2964 /* The main driver for this card is opl3sa2
2965 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2966 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021), 0 },
2968 { ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2969 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000), 0 },
2973 MODULE_DEVICE_TABLE(isapnp, id_table);
2975 static struct pnp_dev *activate_dev(char *devname, char *resname, struct pnp_dev *dev)
2979 err = pnp_device_attach(dev);
2983 if((err = pnp_activate_dev(dev)) < 0) {
2984 printk(KERN_ERR "ad1848: %s %s config failed (out of resources?)[%d]\n", devname, resname, err);
2986 pnp_device_detach(dev);
2990 audio_activated = 1;
2994 static struct pnp_dev *ad1848_init_generic(struct pnp_card *bus, struct address_info *hw_config, int slot)
2997 /* Configure Audio device */
2998 if((ad1848_dev = pnp_find_dev(bus, ad1848_isapnp_list[slot].vendor, ad1848_isapnp_list[slot].function, NULL)))
3000 if((ad1848_dev = activate_dev(ad1848_isapnp_list[slot].name, "ad1848", ad1848_dev)))
3002 hw_config->io_base = pnp_port_start(ad1848_dev, ad1848_isapnp_list[slot].mss_io);
3003 hw_config->irq = pnp_irq(ad1848_dev, ad1848_isapnp_list[slot].irq);
3004 hw_config->dma = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma);
3005 if(ad1848_isapnp_list[slot].dma2 != -1)
3006 hw_config->dma2 = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma2);
3008 hw_config->dma2 = -1;
3009 hw_config->card_subtype = ad1848_isapnp_list[slot].type;
3018 static int __init ad1848_isapnp_init(struct address_info *hw_config, struct pnp_card *bus, int slot)
3020 char *busname = bus->name[0] ? bus->name : ad1848_isapnp_list[slot].name;
3022 /* Initialize this baby. */
3024 if(ad1848_init_generic(bus, hw_config, slot)) {
3027 printk(KERN_NOTICE "ad1848: PnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
3029 hw_config->io_base, hw_config->irq, hw_config->dma,
3036 static int __init ad1848_isapnp_probe(struct address_info *hw_config)
3038 static int first = 1;
3041 /* Count entries in sb_isapnp_list */
3042 for (i = 0; ad1848_isapnp_list[i].card_vendor != 0; i++);
3045 /* Check and adjust isapnpjump */
3046 if( isapnpjump < 0 || isapnpjump > i) {
3047 isapnpjump = reverse ? i : 0;
3048 printk(KERN_ERR "ad1848: Valid range for isapnpjump is 0-%d. Adjusted to %d.\n", i, isapnpjump);
3051 if(!first || !reverse)
3054 while(ad1848_isapnp_list[i].card_vendor != 0) {
3055 static struct pnp_card *bus = NULL;
3057 while ((bus = pnp_find_card(
3058 ad1848_isapnp_list[i].card_vendor,
3059 ad1848_isapnp_list[i].card_device,
3062 if(ad1848_isapnp_init(hw_config, bus, i)) {
3063 isapnpjump = i; /* start next search from here */
3067 i += reverse ? -1 : 1;
3075 static int __init init_ad1848(void)
3077 printk(KERN_INFO "ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
3080 if(isapnp && (ad1848_isapnp_probe(&cfg) < 0) ) {
3081 printk(KERN_NOTICE "ad1848: No ISAPnP cards found, trying standard ones...\n");
3087 struct resource *ports;
3090 if(irq == -1 || dma == -1) {
3091 printk(KERN_WARNING "ad1848: must give I/O , IRQ and DMA.\n");
3099 cfg.card_subtype = type;
3102 ports = request_region(io + 4, 4, "ad1848");
3107 if (!request_region(io, 4, "WSS config")) {
3108 release_region(io + 4, 4);
3112 if (!probe_ms_sound(&cfg, ports)) {
3113 release_region(io + 4, 4);
3114 release_region(io, 4);
3117 attach_ms_sound(&cfg, ports, THIS_MODULE);
3123 static void __exit cleanup_ad1848(void)
3126 unload_ms_sound(&cfg);
3131 pnp_device_detach(ad1848_dev);
3136 module_init(init_ad1848);
3137 module_exit(cleanup_ad1848);
3140 static int __init setup_ad1848(char *str)
3142 /* io, irq, dma, dma2, type */
3145 str = get_options(str, ARRAY_SIZE(ints), ints);
3156 __setup("ad1848=", setup_ad1848);
3158 MODULE_LICENSE("GPL");