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