patch-1.3.18 linux/drivers/sound/ad1848.c
Next file: linux/drivers/sound/audio.c
Previous file: linux/drivers/sound/Readme.cards
Back to the patch index
Back to the overall index
- Lines: 70
- Date:
Sat Aug 12 21:54:35 1995
- Orig file:
v1.3.17/linux/drivers/sound/ad1848.c
- Orig date:
Tue Jul 11 10:02:52 1995
diff -u --recursive --new-file v1.3.17/linux/drivers/sound/ad1848.c linux/drivers/sound/ad1848.c
@@ -7,6 +7,11 @@
* The CS4231 which is used in the GUS MAX and some other cards is
* upwards compatible with AD1848 and this driver is able to drive it.
*
+ * CS4231A and AD1845 are upward compatible with CS4231. However
+ * the new features of these chips are different.
+ *
+ * CS4232 is a PnP audio chip which contains a CS4231A.
+ *
* Copyright by Hannu Savolainen 1994, 1995
*
* Redistribution and use in source and binary forms, with or without
@@ -1039,7 +1044,7 @@
OUTB (0, io_Status (devc)); /* Clear interrupt status */
ad_leave_MCE (devc);
- DMAbuf_reset_dma (dev);
+ /* DMAbuf_reset_dma (dev); */
}
int
@@ -1181,17 +1186,46 @@
if ((ad_read (devc, 25) & 0xe7) == (tmp1 & 0xe7))
{
/*
- * It's a CS4231
+ * It's at least CS4231
*/
devc->chip_name = "CS4231";
-
#ifdef MOZART_PORT
if (devc->base != MOZART_PORT + 4)
#endif
devc->mode = 2;
+ /*
+ * It could be an AD1845 or CS4231A as well.
+ * CS4231 and AD1845 report the same revision info in I25
+ * while the CS4231A reports different.
+ */
+
+ if ((ad_read (devc, 25) & 0xe7) == 0xa0)
+ {
+ devc->chip_name = "CS4231A";
+ }
+ else if ((ad_read (devc, 25) & 0xe7) == 0x80)
+ {
+ /*
+ * It must be a CS4231 or AD1845. The register I23 of
+ * CS4231 is undefined and it appears to be read only.
+ * AD1845 uses I23 for setting sample rate. Assume
+ * the chip is AD1845 if I23 is changeable.
+ */
+
+ unsigned char tmp = ad_read (devc, 23);
+
+ ad_write (devc, 23, ~tmp);
+ if (ad_read (devc, 23) != tmp) /* AD1845 ? */
+ {
+ devc->chip_name = "AD1845";
+ }
+
+ ad_write (devc, 23, tmp); /* Restore */
+ }
+ /* Otherwise behave just as if the chip is a CS4231 */
}
ad_write (devc, 25, tmp1); /* Restore bits */
}
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]
with Sam's (original) version of this