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;
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(int io_base, 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;
1554 DDB(printk("ad1848_detect(%x)\n", io_base));
1558 if (*ad_flags == 0x12345678)
1564 if (*ad_flags == 0x87654321)
1570 if (*ad_flags == 0x12345677)
1576 if (nr_ad1848_devs >= MAX_AUDIO_DEV)
1578 printk(KERN_ERR "ad1848 - Too many audio devices\n");
1581 if (check_region(io_base, 4))
1583 printk(KERN_ERR "ad1848.c: Port %x not free.\n", io_base);
1586 spin_lock_init(&devc->lock);
1587 devc->base = io_base;
1589 devc->timer_running = 0;
1590 devc->MCE_bit = 0x40;
1592 devc->open_mode = 0;
1593 devc->chip_name = devc->name = "AD1848";
1594 devc->model = MD_1848; /* AD1848 or CS4248 */
1595 devc->levels = NULL;
1596 devc->debug_flag = 0;
1599 * Check that the I/O address is in use.
1601 * The bit 0x80 of the base I/O port is known to be 0 after the
1602 * chip has performed its power on initialization. Just assume
1603 * this has happened before the OS is starting.
1605 * If the I/O address is unused, it typically returns 0xff.
1608 if (inb(devc->base) == 0xff)
1610 DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1614 * Wait for the device to stop initialization
1617 DDB(printk("ad1848_detect() - step 0\n"));
1619 for (i = 0; i < 10000000; i++)
1621 unsigned char x = inb(devc->base);
1623 if (x == 0xff || !(x & 0x80))
1627 DDB(printk("ad1848_detect() - step A\n"));
1629 if (inb(devc->base) == 0x80) /* Not ready. Let's wait */
1632 if ((inb(devc->base) & 0x80) != 0x00) /* Not a AD1848 */
1634 DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc->base)));
1639 * Test if it's possible to change contents of the indirect registers.
1640 * Registers 0 and 1 are ADC volume registers. The bit 0x10 is read only
1641 * so try to avoid using it.
1644 DDB(printk("ad1848_detect() - step B\n"));
1645 ad_write(devc, 0, 0xaa);
1646 ad_write(devc, 1, 0x45); /* 0x55 with bit 0x10 clear */
1648 if ((tmp1 = ad_read(devc, 0)) != 0xaa || (tmp2 = ad_read(devc, 1)) != 0x45)
1650 if (tmp2 == 0x65) /* AD1847 has couple of bits hardcoded to 1 */
1654 DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1, tmp2));
1658 DDB(printk("ad1848_detect() - step C\n"));
1659 ad_write(devc, 0, 0x45);
1660 ad_write(devc, 1, 0xaa);
1662 if ((tmp1 = ad_read(devc, 0)) != 0x45 || (tmp2 = ad_read(devc, 1)) != 0xaa)
1664 if (tmp2 == 0x8a) /* AD1847 has few bits hardcoded to 1 */
1668 DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1, tmp2));
1674 * The indirect register I12 has some read only bits. Let's
1675 * try to change them.
1678 DDB(printk("ad1848_detect() - step D\n"));
1679 tmp = ad_read(devc, 12);
1680 ad_write(devc, 12, (~tmp) & 0x0f);
1682 if ((tmp & 0x0f) != ((tmp1 = ad_read(devc, 12)) & 0x0f))
1684 DDB(printk("ad1848 detect error - step D (%x)\n", tmp1));
1689 * NOTE! Last 4 bits of the reg I12 tell the chip revision.
1690 * 0x01=RevB and 0x0A=RevC.
1694 * The original AD1848/CS4248 has just 15 indirect registers. This means
1695 * that I0 and I16 should return the same value (etc.).
1696 * However this doesn't work with CS4248. Actually it seems to be impossible
1697 * to detect if the chip is a CS4231 or CS4248.
1698 * Ensure that the Mode2 enable bit of I12 is 0. Otherwise this test fails
1703 * OPTi 82C930 has mode2 control bit in another place. This test will fail
1704 * with it. Accept this situation as a possible indication of this chip.
1707 DDB(printk("ad1848_detect() - step F\n"));
1708 ad_write(devc, 12, 0); /* Mode2=disabled */
1710 for (i = 0; i < 16; i++)
1712 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16)))
1714 DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i, tmp1, tmp2));
1722 * Try to switch the chip to mode2 (CS4231) by setting the MODE2 bit (0x40).
1723 * The bit 0x80 is always 1 in CS4248 and CS4231.
1726 DDB(printk("ad1848_detect() - step G\n"));
1728 if (ad_flags && *ad_flags == 400)
1731 ad_write(devc, 12, 0x40); /* Set mode2, clear 0x80 */
1737 tmp1 = ad_read(devc, 12);
1741 *ad_flags |= AD_F_CS4248;
1743 devc->chip_name = "CS4248"; /* Our best knowledge just now */
1745 if (optiC930 || (tmp1 & 0xc0) == (0x80 | 0x40))
1748 * CS4231 detected - is it?
1750 * Verify that setting I0 doesn't change I16.
1753 DDB(printk("ad1848_detect() - step H\n"));
1754 ad_write(devc, 16, 0); /* Set I16 to known value */
1756 ad_write(devc, 0, 0x45);
1757 if ((tmp1 = ad_read(devc, 16)) != 0x45) /* No change -> CS4231? */
1759 ad_write(devc, 0, 0xaa);
1760 if ((tmp1 = ad_read(devc, 16)) == 0xaa) /* Rotten bits? */
1762 DDB(printk("ad1848 detect error - step H(%x)\n", tmp1));
1767 * Verify that some bits of I25 are read only.
1770 DDB(printk("ad1848_detect() - step I\n"));
1771 tmp1 = ad_read(devc, 25); /* Original bits */
1772 ad_write(devc, 25, ~tmp1); /* Invert all bits */
1773 if ((ad_read(devc, 25) & 0xe7) == (tmp1 & 0xe7))
1778 * It's at least CS4231
1781 devc->chip_name = "CS4231";
1782 devc->model = MD_4231;
1785 * It could be an AD1845 or CS4231A as well.
1786 * CS4231 and AD1845 report the same revision info in I25
1787 * while the CS4231A reports different.
1790 id = ad_read(devc, 25);
1791 if ((id & 0xe7) == 0x80) /* Device busy??? */
1792 id = ad_read(devc, 25);
1793 if ((id & 0xe7) == 0x80) /* Device still busy??? */
1794 id = ad_read(devc, 25);
1795 DDB(printk("ad1848_detect() - step J (%02x/%02x)\n", id, ad_read(devc, 25)));
1797 if ((id & 0xe7) == 0x80) {
1799 * It must be a CS4231 or AD1845. The register I23 of
1800 * CS4231 is undefined and it appears to be read only.
1801 * AD1845 uses I23 for setting sample rate. Assume
1802 * the chip is AD1845 if I23 is changeable.
1805 unsigned char tmp = ad_read(devc, 23);
1806 ad_write(devc, 23, ~tmp);
1810 devc->model = MD_IWAVE;
1811 devc->chip_name = "IWave";
1813 else if (ad_read(devc, 23) != tmp) /* AD1845 ? */
1815 devc->chip_name = "AD1845";
1816 devc->model = MD_1845;
1818 else if (cs4248_flag)
1821 *ad_flags |= AD_F_CS4248;
1822 devc->chip_name = "CS4248";
1823 devc->model = MD_1848;
1824 ad_write(devc, 12, ad_read(devc, 12) & ~0x40); /* Mode2 off */
1826 ad_write(devc, 23, tmp); /* Restore */
1830 switch (id & 0x1f) {
1831 case 3: /* CS4236/CS4235/CS42xB/CS4239 */
1834 ad_write(devc, 12, ad_read(devc, 12) | 0x60); /* switch to mode 3 */
1835 ad_write(devc, 23, 0x9c); /* select extended register 25 */
1836 xid = inb(io_Indexed_Data(devc));
1837 ad_write(devc, 12, ad_read(devc, 12) & ~0x60); /* back to mode 0 */
1841 devc->chip_name = "CS4237B(B)";
1842 devc->model = MD_42xB;
1845 /* Seems to be a 4238 ?? */
1846 devc->chip_name = "CS4238";
1847 devc->model = MD_42xB;
1850 devc->chip_name = "CS4238B";
1851 devc->model = MD_42xB;
1854 devc->chip_name = "CS4236B";
1855 devc->model = MD_4236;
1858 devc->chip_name = "CS4237B";
1859 devc->model = MD_42xB;
1862 devc->chip_name = "CS4235";
1863 devc->model = MD_4235;
1866 devc->chip_name = "CS4239";
1867 devc->model = MD_4239;
1870 printk("Chip ident is %X.\n", xid&0x1F);
1871 devc->chip_name = "CS42xx";
1872 devc->model = MD_4232;
1878 case 2: /* CS4232/CS4232A */
1879 devc->chip_name = "CS4232";
1880 devc->model = MD_4232;
1884 if ((id & 0xe0) == 0xa0)
1886 devc->chip_name = "CS4231A";
1887 devc->model = MD_4231A;
1891 devc->chip_name = "CS4321";
1892 devc->model = MD_4231;
1896 default: /* maybe */
1897 DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc, 25), ad_read(devc, 25) & 0xe7));
1900 devc->chip_name = "82C930";
1901 devc->model = MD_C930;
1905 devc->chip_name = "CS4231";
1906 devc->model = MD_4231;
1911 ad_write(devc, 25, tmp1); /* Restore bits */
1913 DDB(printk("ad1848_detect() - step K\n"));
1915 } else if (tmp1 == 0x0a) {
1917 * Is it perhaps a SoundPro CMI8330?
1918 * If so, then we should be able to change indirect registers
1919 * greater than I15 after activating MODE2, even though reading
1920 * back I12 does not show it.
1924 * Let's try comparing register values
1926 for (i = 0; i < 16; i++) {
1927 if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16))) {
1928 DDB(printk("ad1848 detect step H(%d/%x/%x) - SoundPro chip?\n", i, tmp1, tmp2));
1930 devc->chip_name = "SoundPro CMI 8330";
1936 DDB(printk("ad1848_detect() - step L\n"));
1939 if (devc->model != MD_1848)
1940 *ad_flags |= AD_F_CS4231;
1942 DDB(printk("ad1848_detect() - Detected OK\n"));
1944 if (devc->model == MD_1848 && ad1847_flag)
1945 devc->chip_name = "AD1847";
1948 if (sscape_flag == 1)
1949 devc->model = MD_1845_SSCAPE;
1954 int ad1848_init (char *name, int io_base, int irq, int dma_playback,
1955 int dma_capture, int share_dma, int *osp, struct module *owner)
1958 * NOTE! If irq < 0, there is another driver which has allocated the IRQ
1959 * so that this driver doesn't need to allocate/deallocate it.
1960 * The actually used IRQ is ABS(irq).
1967 ad1848_info *devc = &adev_info[nr_ad1848_devs];
1969 ad1848_port_info *portc = NULL;
1971 devc->irq = (irq > 0) ? irq : 0;
1972 devc->open_mode = 0;
1973 devc->timer_ticks = 0;
1974 devc->dma1 = dma_playback;
1975 devc->dma2 = dma_capture;
1976 devc->subtype = cfg.card_subtype;
1977 devc->audio_flags = DMA_AUTOMODE;
1978 devc->playback_dev = devc->record_dev = 0;
1982 if (name != NULL && name[0] != 0)
1984 "%s (%s)", name, devc->chip_name);
1987 "Generic audio codec (%s)", devc->chip_name);
1989 if (!request_region(devc->base, 4, devc->name))
1992 conf_printf2(dev_name, devc->base, devc->irq, dma_playback, dma_capture);
1994 if (devc->model == MD_1848 || devc->model == MD_C930)
1995 devc->audio_flags |= DMA_HARDSTOP;
1997 if (devc->model > MD_1848)
1999 if (devc->dma1 == devc->dma2 || devc->dma2 == -1 || devc->dma1 == -1)
2000 devc->audio_flags &= ~DMA_DUPLEX;
2002 devc->audio_flags |= DMA_DUPLEX;
2005 portc = (ad1848_port_info *) kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
2007 release_region(devc->base, 4);
2011 if ((my_dev = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
2013 &ad1848_audio_driver,
2014 sizeof(struct audio_driver),
2016 ad_format_mask[devc->model],
2021 release_region(devc->base, 4);
2026 audio_devs[my_dev]->portc = portc;
2027 audio_devs[my_dev]->mixer_dev = -1;
2029 audio_devs[my_dev]->d->owner = owner;
2030 memset((char *) portc, 0, sizeof(*portc));
2034 devc->pmdev = pm_register(PM_ISA_DEV, my_dev, ad1848_pm_callback);
2036 devc->pmdev->data = devc;
2038 ad1848_init_hw(devc);
2042 devc->dev_no = my_dev;
2043 if (request_irq(devc->irq, adintr, 0, devc->name, (void *)my_dev) < 0)
2045 printk(KERN_WARNING "ad1848: Unable to allocate IRQ\n");
2046 /* Don't free it either then.. */
2049 if (capabilities[devc->model].flags & CAP_F_TIMER)
2053 unsigned char tmp = ad_read(devc, 16);
2056 devc->timer_ticks = 0;
2058 ad_write(devc, 21, 0x00); /* Timer MSB */
2059 ad_write(devc, 20, 0x10); /* Timer LSB */
2061 ad_write(devc, 16, tmp | 0x40); /* Enable timer */
2062 for (x = 0; x < 100000 && devc->timer_ticks == 0; x++);
2063 ad_write(devc, 16, tmp & ~0x40); /* Disable timer */
2065 if (devc->timer_ticks == 0)
2066 printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
2069 DDB(printk("Interrupt test OK\n"));
2077 devc->irq_ok = 1; /* Couldn't test. assume it's OK */
2079 irq2dev[-irq] = devc->dev_no = my_dev;
2081 #ifndef EXCLUDE_TIMERS
2082 if ((capabilities[devc->model].flags & CAP_F_TIMER) &&
2084 ad1848_tmr_install(my_dev);
2089 if (sound_alloc_dma(dma_playback, devc->name))
2090 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_playback);
2092 if (dma_capture != dma_playback)
2093 if (sound_alloc_dma(dma_capture, devc->name))
2094 printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_capture);
2097 if ((e = sound_install_mixer(MIXER_DRIVER_VERSION,
2099 &ad1848_mixer_operations,
2100 sizeof(struct mixer_operations),
2103 audio_devs[my_dev]->mixer_dev = e;
2105 mixer_devs[e]->owner = owner;
2110 int ad1848_control(int cmd, int arg)
2113 unsigned long flags;
2115 if (nr_ad1848_devs < 1)
2118 devc = &adev_info[nr_ad1848_devs - 1];
2122 case AD1848_SET_XTAL: /* Change clock frequency of AD1845 (only ) */
2123 if (devc->model != MD_1845 || devc->model != MD_1845_SSCAPE)
2125 spin_lock_irqsave(&devc->lock,flags);
2127 ad_write(devc, 29, (ad_read(devc, 29) & 0x1f) | (arg << 5));
2129 spin_unlock_irqrestore(&devc->lock,flags);
2132 case AD1848_MIXER_REROUTE:
2134 int o = (arg >> 8) & 0xff;
2137 if (o < 0 || o >= SOUND_MIXER_NRDEVICES)
2140 if (!(devc->supported_devices & (1 << o)) &&
2141 !(devc->supported_rec_devices & (1 << o)))
2144 if (n == SOUND_MIXER_NONE)
2145 { /* Just hide this control */
2146 ad1848_mixer_set(devc, o, 0); /* Shut up it */
2147 devc->supported_devices &= ~(1 << o);
2148 devc->supported_rec_devices &= ~(1 << o);
2152 /* Make the mixer control identified by o to appear as n */
2153 if (n < 0 || n >= SOUND_MIXER_NRDEVICES)
2156 devc->mixer_reroute[n] = o; /* Rename the control */
2157 if (devc->supported_devices & (1 << o))
2158 devc->supported_devices |= (1 << n);
2159 if (devc->supported_rec_devices & (1 << o))
2160 devc->supported_rec_devices |= (1 << n);
2162 devc->supported_devices &= ~(1 << o);
2163 devc->supported_rec_devices &= ~(1 << o);
2170 void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int share_dma)
2172 int i, mixer, dev = 0;
2173 ad1848_info *devc = NULL;
2175 for (i = 0; devc == NULL && i < nr_ad1848_devs; i++)
2177 if (adev_info[i].base == io_base)
2179 devc = &adev_info[i];
2186 if(audio_devs[dev]->portc!=NULL)
2187 kfree(audio_devs[dev]->portc);
2188 release_region(devc->base, 4);
2192 if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */
2193 free_irq(devc->irq, (void *)devc->dev_no);
2195 sound_free_dma(dma_playback);
2197 if (dma_playback != dma_capture)
2198 sound_free_dma(dma_capture);
2201 mixer = audio_devs[devc->dev_no]->mixer_dev;
2203 sound_unload_mixerdev(mixer);
2206 pm_unregister(devc->pmdev);
2209 for ( ; i < nr_ad1848_devs ; i++)
2210 adev_info[i] = adev_info[i+1];
2213 printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
2216 irqreturn_t adintr(int irq, void *dev_id, struct pt_regs *dummy)
2218 unsigned char status;
2221 int alt_stat = 0xff;
2222 unsigned char c930_stat = 0;
2226 devc = (ad1848_info *) audio_devs[dev]->devc;
2228 interrupt_again: /* Jump back here if int status doesn't reset */
2230 status = inb(io_Status(devc));
2233 printk(KERN_DEBUG "adintr: Why?\n");
2234 if (devc->model == MD_1848)
2235 outb((0), io_Status(devc)); /* Clear interrupt status */
2239 if (devc->model == MD_C930)
2240 { /* 82C930 has interrupt status register in MAD16 register MC11 */
2242 spin_lock(&devc->lock);
2244 /* 0xe0e is C930 address port
2245 * 0xe0f is C930 data port
2248 c930_stat = inb(0xe0f);
2249 outb((~c930_stat), 0xe0f);
2251 spin_unlock(&devc->lock);
2253 alt_stat = (c930_stat << 2) & 0x30;
2255 else if (devc->model != MD_1848)
2257 spin_lock(&devc->lock);
2258 alt_stat = ad_read(devc, 24);
2259 ad_write(devc, 24, ad_read(devc, 24) & ~alt_stat); /* Selective ack */
2260 spin_unlock(&devc->lock);
2263 if ((devc->open_mode & OPEN_READ) && (devc->audio_mode & PCM_ENABLE_INPUT) && (alt_stat & 0x20))
2265 DMAbuf_inputintr(devc->record_dev);
2267 if ((devc->open_mode & OPEN_WRITE) && (devc->audio_mode & PCM_ENABLE_OUTPUT) &&
2270 DMAbuf_outputintr(devc->playback_dev, 1);
2272 if (devc->model != MD_1848 && (alt_stat & 0x40)) /* Timer interrupt */
2274 devc->timer_ticks++;
2275 #ifndef EXCLUDE_TIMERS
2276 if (timer_installed == dev && devc->timer_running)
2277 sound_timer_interrupt();
2282 * Sometimes playback or capture interrupts occur while a timer interrupt
2283 * is being handled. The interrupt will not be retriggered if we don't
2284 * handle it now. Check if an interrupt is still pending and restart
2285 * the handler in this case.
2287 if (inb(io_Status(devc)) & 0x01 && cnt++ < 4)
2289 goto interrupt_again;
2295 * Experimental initialization sequence for the integrated sound system
2296 * of the Compaq Deskpro M.
2299 static int init_deskpro_m(struct address_info *hw_config)
2303 if ((tmp = inb(0xc44)) == 0xff)
2305 DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2323 * Experimental initialization sequence for the integrated sound system
2324 * of Compaq Deskpro XL.
2327 static int init_deskpro(struct address_info *hw_config)
2331 if ((tmp = inb(0xc44)) == 0xff)
2333 DDB(printk("init_deskpro: Dead port 0xc44\n"));
2336 outb((tmp | 0x04), 0xc44); /* Select bank 1 */
2337 if (inb(0xc44) != 0x04)
2339 DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2343 * OK. It looks like a Deskpro so let's proceed.
2347 * I/O port 0xc44 Audio configuration register.
2349 * bits 0xc0: Audio revision bits
2350 * 0x00 = Compaq Business Audio
2351 * 0x40 = MS Sound System Compatible (reset default)
2354 * bit 0x20: No Wait State Enable
2355 * 0x00 = Disabled (reset default, DMA mode)
2356 * 0x20 = Enabled (programmed I/O mode)
2357 * bit 0x10: MS Sound System Decode Enable
2358 * 0x00 = Decoding disabled (reset default)
2359 * 0x10 = Decoding enabled
2360 * bit 0x08: FM Synthesis Decode Enable
2361 * 0x00 = Decoding Disabled (reset default)
2362 * 0x08 = Decoding enabled
2363 * bit 0x04 Bank select
2366 * bits 0x03 MSS Base address
2367 * 0x00 = 0x530 (reset default)
2374 /* Debug printing */
2375 printk("Port 0xc44 (before): ");
2376 outb((tmp & ~0x04), 0xc44);
2377 printk("%02x ", inb(0xc44));
2378 outb((tmp | 0x04), 0xc44);
2379 printk("%02x\n", inb(0xc44));
2382 /* Set bank 1 of the register */
2383 tmp = 0x58; /* MSS Mode, MSS&FM decode enabled */
2385 switch (hw_config->io_base)
2400 DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config->io_base));
2403 outb((tmp & ~0x04), 0xc44); /* Write to bank=0 */
2406 /* Debug printing */
2407 printk("Port 0xc44 (after): ");
2408 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2409 printk("%02x ", inb(0xc44));
2410 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2411 printk("%02x\n", inb(0xc44));
2415 * I/O port 0xc45 FM Address Decode/MSS ID Register.
2417 * bank=0, bits 0xfe: FM synthesis Decode Compare bits 7:1 (default=0x88)
2418 * bank=0, bit 0x01: SBIC Power Control Bit
2420 * 0x01 = Powered down
2421 * bank=1, bits 0xfc: MSS ID (default=0x40)
2425 /* Debug printing */
2426 printk("Port 0xc45 (before): ");
2427 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2428 printk("%02x ", inb(0xc45));
2429 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2430 printk("%02x\n", inb(0xc45));
2433 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2434 outb((0x88), 0xc45); /* FM base 7:0 = 0x88 */
2435 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2436 outb((0x10), 0xc45); /* MSS ID = 0x10 (MSS port returns 0x04) */
2439 /* Debug printing */
2440 printk("Port 0xc45 (after): ");
2441 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2442 printk("%02x ", inb(0xc45));
2443 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2444 printk("%02x\n", inb(0xc45));
2449 * I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2451 * bank=0, bits 0xff: FM synthesis Decode Compare bits 15:8 (default=0x03)
2452 * bank=1, bits 0xff: Audio addressing ASIC id
2456 /* Debug printing */
2457 printk("Port 0xc46 (before): ");
2458 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2459 printk("%02x ", inb(0xc46));
2460 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2461 printk("%02x\n", inb(0xc46));
2464 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2465 outb((0x03), 0xc46); /* FM base 15:8 = 0x03 */
2466 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2467 outb((0x11), 0xc46); /* ASIC ID = 0x11 */
2470 /* Debug printing */
2471 printk("Port 0xc46 (after): ");
2472 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2473 printk("%02x ", inb(0xc46));
2474 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2475 printk("%02x\n", inb(0xc46));
2479 * I/O port 0xc47 FM Address Decode Register.
2481 * bank=0, bits 0xff: Decode enable selection for various FM address bits
2482 * bank=1, bits 0xff: Reserved
2486 /* Debug printing */
2487 printk("Port 0xc47 (before): ");
2488 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2489 printk("%02x ", inb(0xc47));
2490 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2491 printk("%02x\n", inb(0xc47));
2494 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2495 outb((0x7c), 0xc47); /* FM decode enable bits = 0x7c */
2496 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2497 outb((0x00), 0xc47); /* Reserved bank1 = 0x00 */
2500 /* Debug printing */
2501 printk("Port 0xc47 (after): ");
2502 outb((tmp & ~0x04), 0xc44); /* Select bank=0 */
2503 printk("%02x ", inb(0xc47));
2504 outb((tmp | 0x04), 0xc44); /* Select bank=1 */
2505 printk("%02x\n", inb(0xc47));
2509 * I/O port 0xc6f = Audio Disable Function Register
2513 printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2516 outb((0x80), 0xc6f);
2519 printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2525 int probe_ms_sound(struct address_info *hw_config)
2529 DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config->io_base, hw_config->card_subtype));
2531 if (check_region(hw_config->io_base, 8))
2533 printk(KERN_ERR "MSS: I/O port conflict\n");
2536 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2538 /* check_opl3(0x388, hw_config); */
2539 return ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp);
2542 if (deskpro_xl && hw_config->card_subtype == 2) /* Compaq Deskpro XL */
2544 if (!init_deskpro(hw_config))
2548 if (deskpro_m) /* Compaq Deskpro M */
2550 if (!init_deskpro_m(hw_config))
2555 * Check if the IO port returns valid signature. The original MS Sound
2556 * system returns 0x04 while some cards (AudioTrix Pro for example)
2557 * return 0x00 or 0x0f.
2560 if ((tmp = inb(hw_config->io_base + 3)) == 0xff) /* Bus float */
2564 DDB(printk("I/O address is inactive (%x)\n", tmp));
2565 if (!(ret = ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp)))
2569 DDB(printk("MSS signature = %x\n", tmp & 0x3f));
2570 if ((tmp & 0x3f) != 0x04 &&
2571 (tmp & 0x3f) != 0x0f &&
2572 (tmp & 0x3f) != 0x00)
2576 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)));
2577 DDB(printk("Trying to detect codec anyway but IRQ/DMA may not work\n"));
2578 if (!(ret = ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp)))
2581 hw_config->card_subtype = 1;
2584 if ((hw_config->irq != 5) &&
2585 (hw_config->irq != 7) &&
2586 (hw_config->irq != 9) &&
2587 (hw_config->irq != 10) &&
2588 (hw_config->irq != 11) &&
2589 (hw_config->irq != 12))
2591 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2594 if (hw_config->dma != 0 && hw_config->dma != 1 && hw_config->dma != 3)
2596 printk(KERN_ERR "MSS: Bad DMA %d\n", hw_config->dma);
2600 * Check that DMA0 is not in use with a 8 bit board.
2603 if (hw_config->dma == 0 && inb(hw_config->io_base + 3) & 0x80)
2605 printk(KERN_ERR "MSS: Can't use DMA0 with a 8 bit card/slot\n");
2608 if (hw_config->irq > 7 && hw_config->irq != 9 && inb(hw_config->io_base + 3) & 0x80)
2610 printk(KERN_ERR "MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config->irq);
2613 return ad1848_detect(hw_config->io_base + 4, NULL, hw_config->osp);
2616 void attach_ms_sound(struct address_info *hw_config, struct module *owner)
2618 static signed char interrupt_bits[12] =
2620 -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2625 static char dma_bits[4] =
2630 int config_port = hw_config->io_base + 0;
2631 int version_port = hw_config->io_base + 3;
2632 int dma = hw_config->dma;
2633 int dma2 = hw_config->dma2;
2635 if (hw_config->card_subtype == 1) /* Has no IRQ/DMA registers */
2637 hw_config->slots[0] = ad1848_init("MS Sound System", hw_config->io_base + 4,
2643 request_region(hw_config->io_base, 4, "WSS config");
2647 * Set the IRQ and DMA addresses.
2650 bits = interrupt_bits[hw_config->irq];
2653 printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2656 outb((bits | 0x40), config_port);
2657 if ((inb(version_port) & 0x40) == 0)
2658 printk(KERN_ERR "[MSS: IRQ Conflict?]\n");
2661 * Handle the capture DMA channel
2664 if (dma2 != -1 && dma2 != dma)
2666 if (!((dma == 0 && dma2 == 1) ||
2667 (dma == 1 && dma2 == 0) ||
2668 (dma == 3 && dma2 == 0)))
2669 { /* Unsupported combination. Try to swap channels */
2675 if ((dma == 0 && dma2 == 1) ||
2676 (dma == 1 && dma2 == 0) ||
2677 (dma == 3 && dma2 == 0))
2679 dma2_bit = 0x04; /* Enable capture DMA */
2683 printk(KERN_WARNING "MSS: Invalid capture DMA\n");
2692 hw_config->dma = dma;
2693 hw_config->dma2 = dma2;
2695 outb((bits | dma_bits[dma] | dma2_bit), config_port); /* Write IRQ+DMA setup */
2697 hw_config->slots[0] = ad1848_init("MS Sound System", hw_config->io_base + 4,
2702 request_region(hw_config->io_base, 4, "WSS config");
2705 void unload_ms_sound(struct address_info *hw_config)
2707 ad1848_unload(hw_config->io_base + 4,
2710 hw_config->dma2, 0);
2711 sound_unload_audiodev(hw_config->slots[0]);
2712 release_region(hw_config->io_base, 4);
2715 #ifndef EXCLUDE_TIMERS
2718 * Timer stuff (for /dev/music).
2721 static unsigned int current_interval;
2723 static unsigned int ad1848_tmr_start(int dev, unsigned int usecs)
2725 unsigned long flags;
2726 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2727 unsigned long xtal_nsecs; /* nanoseconds per xtal oscillator tick */
2728 unsigned long divider;
2730 spin_lock_irqsave(&devc->lock,flags);
2733 * Length of the timer interval (in nanoseconds) depends on the
2734 * selected crystal oscillator. Check this from bit 0x01 of I8.
2736 * AD1845 has just one oscillator which has cycle time of 10.050 us
2737 * (when a 24.576 MHz xtal oscillator is used).
2739 * Convert requested interval to nanoseconds before computing
2740 * the timer divider.
2743 if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
2745 else if (ad_read(devc, 8) & 0x01)
2750 divider = (usecs * 1000 + xtal_nsecs / 2) / xtal_nsecs;
2752 if (divider < 100) /* Don't allow shorter intervals than about 1ms */
2755 if (divider > 65535) /* Overflow check */
2758 ad_write(devc, 21, (divider >> 8) & 0xff); /* Set upper bits */
2759 ad_write(devc, 20, divider & 0xff); /* Set lower bits */
2760 ad_write(devc, 16, ad_read(devc, 16) | 0x40); /* Start the timer */
2761 devc->timer_running = 1;
2762 spin_unlock_irqrestore(&devc->lock,flags);
2764 return current_interval = (divider * xtal_nsecs + 500) / 1000;
2767 static void ad1848_tmr_reprogram(int dev)
2770 * Audio driver has changed sampling rate so that a different xtal
2771 * oscillator was selected. We have to reprogram the timer rate.
2774 ad1848_tmr_start(dev, current_interval);
2775 sound_timer_syncinterval(current_interval);
2778 static void ad1848_tmr_disable(int dev)
2780 unsigned long flags;
2781 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2783 spin_lock_irqsave(&devc->lock,flags);
2784 ad_write(devc, 16, ad_read(devc, 16) & ~0x40);
2785 devc->timer_running = 0;
2786 spin_unlock_irqrestore(&devc->lock,flags);
2789 static void ad1848_tmr_restart(int dev)
2791 unsigned long flags;
2792 ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
2794 if (current_interval == 0)
2797 spin_lock_irqsave(&devc->lock,flags);
2798 ad_write(devc, 16, ad_read(devc, 16) | 0x40);
2799 devc->timer_running = 1;
2800 spin_unlock_irqrestore(&devc->lock,flags);
2803 static struct sound_lowlev_timer ad1848_tmr =
2812 static int ad1848_tmr_install(int dev)
2814 if (timer_installed != -1)
2815 return 0; /* Don't install another timer */
2817 timer_installed = ad1848_tmr.dev = dev;
2818 sound_timer_init(&ad1848_tmr, audio_devs[dev]->name);
2822 #endif /* EXCLUDE_TIMERS */
2824 static int ad1848_suspend(ad1848_info *devc)
2826 unsigned long flags;
2828 spin_lock_irqsave(&devc->lock,flags);
2832 spin_unlock_irqrestore(&devc->lock,flags);
2836 static int ad1848_resume(ad1848_info *devc)
2838 int mixer_levels[32], i;
2840 /* Thinkpad is a bit more of PITA than normal. The BIOS tends to
2841 restore it in a different config to the one we use. Need to
2844 /* store old mixer levels */
2845 memcpy(mixer_levels, devc->levels, sizeof (mixer_levels));
2846 ad1848_init_hw(devc);
2848 /* restore mixer levels */
2849 for (i = 0; i < 32; i++)
2850 ad1848_mixer_set(devc, devc->dev_no, mixer_levels[i]);
2852 if (!devc->subtype) {
2853 static signed char interrupt_bits[12] = { -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20 };
2854 static char dma_bits[4] = { 1, 2, 0, 3 };
2855 unsigned long flags;
2859 int config_port = devc->base + 0;
2861 bits = interrupt_bits[devc->irq];
2863 printk(KERN_ERR "MSS: Bad IRQ %d\n", devc->irq);
2867 spin_lock_irqsave(&devc->lock,flags);
2869 outb((bits | 0x40), config_port);
2871 if (devc->dma2 != -1 && devc->dma2 != devc->dma1)
2872 if ( (devc->dma1 == 0 && devc->dma2 == 1) ||
2873 (devc->dma1 == 1 && devc->dma2 == 0) ||
2874 (devc->dma1 == 3 && devc->dma2 == 0))
2877 outb((bits | dma_bits[devc->dma1] | dma2_bit), config_port);
2878 spin_unlock_irqrestore(&devc->lock,flags);
2884 static int ad1848_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
2886 ad1848_info *devc = dev->data;
2888 DEB(printk("ad1848: pm event received: 0x%x\n", rqst));
2892 ad1848_suspend(devc);
2895 ad1848_resume(devc);
2903 EXPORT_SYMBOL(ad1848_detect);
2904 EXPORT_SYMBOL(ad1848_init);
2905 EXPORT_SYMBOL(ad1848_unload);
2906 EXPORT_SYMBOL(ad1848_control);
2907 EXPORT_SYMBOL(adintr);
2908 EXPORT_SYMBOL(probe_ms_sound);
2909 EXPORT_SYMBOL(attach_ms_sound);
2910 EXPORT_SYMBOL(unload_ms_sound);
2912 static int __initdata io = -1;
2913 static int __initdata irq = -1;
2914 static int __initdata dma = -1;
2915 static int __initdata dma2 = -1;
2916 static int __initdata type = 0;
2918 MODULE_PARM(io, "i"); /* I/O for a raw AD1848 card */
2919 MODULE_PARM(irq, "i"); /* IRQ to use */
2920 MODULE_PARM(dma, "i"); /* First DMA channel */
2921 MODULE_PARM(dma2, "i"); /* Second DMA channel */
2922 MODULE_PARM(type, "i"); /* Card type */
2923 MODULE_PARM(deskpro_xl, "i"); /* Special magic for Deskpro XL boxen */
2924 MODULE_PARM(deskpro_m, "i"); /* Special magic for Deskpro M box */
2925 MODULE_PARM(soundpro, "i"); /* More special magic for SoundPro chips */
2928 MODULE_PARM(isapnp, "i");
2929 MODULE_PARM(isapnpjump, "i");
2930 MODULE_PARM(reverse, "i");
2931 MODULE_PARM_DESC(isapnp, "When set to 0, Plug & Play support will be disabled");
2932 MODULE_PARM_DESC(isapnpjump, "Jumps to a specific slot in the driver's PnP table. Use the source, Luke.");
2933 MODULE_PARM_DESC(reverse, "When set to 1, will reverse ISAPnP search order");
2935 struct pnp_dev *ad1848_dev = NULL;
2937 /* Please add new entries at the end of the table */
2940 unsigned short card_vendor, card_device,
2942 short mss_io, irq, dma, dma2; /* index into isapnp table */
2944 } ad1848_isapnp_list[] __initdata = {
2945 {"CMI 8330 SoundPRO",
2946 ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2947 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2949 {"CS4232 based card",
2950 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2951 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2953 {"CS4232 based card",
2954 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2955 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2957 {"OPL3-SA2 WSS mode",
2958 ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2959 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2961 {"Advanced Gravis InterWave Audio",
2962 ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2963 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000),
2968 static struct isapnp_device_id id_table[] __devinitdata = {
2969 { ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2970 ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001), 0 },
2971 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2972 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000), 0 },
2973 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2974 ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100), 0 },
2975 /* The main driver for this card is opl3sa2
2976 { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2977 ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021), 0 },
2979 { ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2980 ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000), 0 },
2984 MODULE_DEVICE_TABLE(isapnp, id_table);
2986 static struct pnp_dev *activate_dev(char *devname, char *resname, struct pnp_dev *dev)
2990 err = pnp_device_attach(dev);
2994 if((err = pnp_activate_dev(dev)) < 0) {
2995 printk(KERN_ERR "ad1848: %s %s config failed (out of resources?)[%d]\n", devname, resname, err);
2997 pnp_device_detach(dev);
3001 audio_activated = 1;
3005 static struct pnp_dev *ad1848_init_generic(struct pnp_card *bus, struct address_info *hw_config, int slot)
3008 /* Configure Audio device */
3009 if((ad1848_dev = pnp_find_dev(bus, ad1848_isapnp_list[slot].vendor, ad1848_isapnp_list[slot].function, NULL)))
3011 if((ad1848_dev = activate_dev(ad1848_isapnp_list[slot].name, "ad1848", ad1848_dev)))
3013 hw_config->io_base = pnp_port_start(ad1848_dev, ad1848_isapnp_list[slot].mss_io);
3014 hw_config->irq = pnp_irq(ad1848_dev, ad1848_isapnp_list[slot].irq);
3015 hw_config->dma = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma);
3016 if(ad1848_isapnp_list[slot].dma2 != -1)
3017 hw_config->dma2 = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma2);
3019 hw_config->dma2 = -1;
3020 hw_config->card_subtype = ad1848_isapnp_list[slot].type;
3029 static int __init ad1848_isapnp_init(struct address_info *hw_config, struct pnp_card *bus, int slot)
3031 char *busname = bus->name[0] ? bus->name : ad1848_isapnp_list[slot].name;
3033 /* Initialize this baby. */
3035 if(ad1848_init_generic(bus, hw_config, slot)) {
3038 printk(KERN_NOTICE "ad1848: PnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
3040 hw_config->io_base, hw_config->irq, hw_config->dma,
3047 static int __init ad1848_isapnp_probe(struct address_info *hw_config)
3049 static int first = 1;
3052 /* Count entries in sb_isapnp_list */
3053 for (i = 0; ad1848_isapnp_list[i].card_vendor != 0; i++);
3056 /* Check and adjust isapnpjump */
3057 if( isapnpjump < 0 || isapnpjump > i) {
3058 isapnpjump = reverse ? i : 0;
3059 printk(KERN_ERR "ad1848: Valid range for isapnpjump is 0-%d. Adjusted to %d.\n", i, isapnpjump);
3062 if(!first || !reverse)
3065 while(ad1848_isapnp_list[i].card_vendor != 0) {
3066 static struct pnp_card *bus = NULL;
3068 while ((bus = pnp_find_card(
3069 ad1848_isapnp_list[i].card_vendor,
3070 ad1848_isapnp_list[i].card_device,
3073 if(ad1848_isapnp_init(hw_config, bus, i)) {
3074 isapnpjump = i; /* start next search from here */
3078 i += reverse ? -1 : 1;
3086 static int __init init_ad1848(void)
3088 printk(KERN_INFO "ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
3091 if(isapnp && (ad1848_isapnp_probe(&cfg) < 0) ) {
3092 printk(KERN_NOTICE "ad1848: No ISAPnP cards found, trying standard ones...\n");
3100 if(irq == -1 || dma == -1) {
3101 printk(KERN_WARNING "ad1848: must give I/O , IRQ and DMA.\n");
3109 cfg.card_subtype = type;
3112 if(!probe_ms_sound(&cfg))
3114 attach_ms_sound(&cfg, THIS_MODULE);
3120 static void __exit cleanup_ad1848(void)
3123 unload_ms_sound(&cfg);
3128 pnp_device_detach(ad1848_dev);
3133 module_init(init_ad1848);
3134 module_exit(cleanup_ad1848);
3137 static int __init setup_ad1848(char *str)
3139 /* io, irq, dma, dma2, type */
3142 str = get_options(str, ARRAY_SIZE(ints), ints);
3153 __setup("ad1848=", setup_ad1848);
3155 MODULE_LICENSE("GPL");