Commit a3c6048d authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'topic/cs423x-merge' into for-linus

parents 87cd9d7c cda9043d
...@@ -346,6 +346,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -346,6 +346,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
sbirq - IRQ # for CMI8330 chip (SB16) sbirq - IRQ # for CMI8330 chip (SB16)
sbdma8 - 8bit DMA # for CMI8330 chip (SB16) sbdma8 - 8bit DMA # for CMI8330 chip (SB16)
sbdma16 - 16bit DMA # for CMI8330 chip (SB16) sbdma16 - 16bit DMA # for CMI8330 chip (SB16)
fmport - (optional) OPL3 I/O port
mpuport - (optional) MPU401 I/O port
mpuirq - (optional) MPU401 irq #
This module supports multiple cards and autoprobe. This module supports multiple cards and autoprobe.
...@@ -388,34 +391,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -388,34 +391,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
The power-management is supported. The power-management is supported.
Module snd-cs4232
-----------------
Module for sound cards based on CS4232/CS4232A ISA chips.
isapnp - ISA PnP detection - 0 = disable, 1 = enable (default)
with isapnp=0, the following options are available:
port - port # for CS4232 chip (PnP setup - 0x534)
cport - control port # for CS4232 chip (PnP setup - 0x120,0x210,0xf00)
mpu_port - port # for MPU-401 UART (PnP setup - 0x300), -1 = disable
fm_port - FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable
irq - IRQ # for CS4232 chip (5,7,9,11,12,15)
mpu_irq - IRQ # for MPU-401 UART (9,11,12,15)
dma1 - first DMA # for CS4232 chip (0,1,3)
dma2 - second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable
This module supports multiple cards. This module does not support autoprobe
(if ISA PnP is not used) thus main port must be specified!!! Other ports are
optional.
The power-management is supported.
Module snd-cs4236 Module snd-cs4236
----------------- -----------------
Module for sound cards based on CS4235/CS4236/CS4236B/CS4237B/ Module for sound cards based on CS4232/CS4232A,
CS4235/CS4236/CS4236B/CS4237B/
CS4238B/CS4239 ISA chips. CS4238B/CS4239 ISA chips.
isapnp - ISA PnP detection - 0 = disable, 1 = enable (default) isapnp - ISA PnP detection - 0 = disable, 1 = enable (default)
...@@ -437,6 +417,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -437,6 +417,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
The power-management is supported. The power-management is supported.
This module is aliased as snd-cs4232 since it provides the old
snd-cs4232 functionality, too.
Module snd-cs4281 Module snd-cs4281
----------------- -----------------
...@@ -606,6 +589,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -606,6 +589,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
Module for ESS AudioDrive ES-1688 and ES-688 sound cards. Module for ESS AudioDrive ES-1688 and ES-688 sound cards.
port - port # for ES-1688 chip (0x220,0x240,0x260) port - port # for ES-1688 chip (0x220,0x240,0x260)
fm_port - port # for OPL3 (option; share the same port as default)
mpu_port - port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable (default) mpu_port - port # for MPU-401 port (0x300,0x310,0x320,0x330), -1 = disable (default)
irq - IRQ # for ES-1688 chip (5,7,9,10) irq - IRQ # for ES-1688 chip (5,7,9,10)
mpu_irq - IRQ # for MPU-401 port (5,7,9,10) mpu_irq - IRQ # for MPU-401 port (5,7,9,10)
......
...@@ -169,5 +169,7 @@ extern int snd_ad1816a_create(struct snd_card *card, unsigned long port, ...@@ -169,5 +169,7 @@ extern int snd_ad1816a_create(struct snd_card *card, unsigned long port,
extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm); extern int snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_pcm **rpcm);
extern int snd_ad1816a_mixer(struct snd_ad1816a *chip); extern int snd_ad1816a_mixer(struct snd_ad1816a *chip);
extern int snd_ad1816a_timer(struct snd_ad1816a *chip, int device,
struct snd_timer **rtimer);
#endif /* __SOUND_AD1816A_H */ #endif /* __SOUND_AD1816A_H */
...@@ -154,6 +154,7 @@ int snd_wss_create(struct snd_card *card, ...@@ -154,6 +154,7 @@ int snd_wss_create(struct snd_card *card,
unsigned short hardware, unsigned short hardware,
unsigned short hwshare, unsigned short hwshare,
struct snd_wss **rchip); struct snd_wss **rchip);
int snd_wss_free(struct snd_wss *chip);
int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm); int snd_wss_pcm(struct snd_wss *chip, int device, struct snd_pcm **rpcm);
int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer); int snd_wss_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer);
int snd_wss_mixer(struct snd_wss *chip); int snd_wss_mixer(struct snd_wss *chip);
......
...@@ -56,8 +56,8 @@ config SND_AD1848 ...@@ -56,8 +56,8 @@ config SND_AD1848
Say Y here to include support for AD1848 (Analog Devices) or Say Y here to include support for AD1848 (Analog Devices) or
CS4248 (Cirrus Logic - Crystal Semiconductors) chips. CS4248 (Cirrus Logic - Crystal Semiconductors) chips.
For newer chips from Cirrus Logic, use the CS4231, CS4232 or For newer chips from Cirrus Logic, use the CS4231 or CS4232+
CS4236+ drivers. drivers.
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called snd-ad1848. will be called snd-ad1848.
...@@ -94,6 +94,8 @@ config SND_CMI8330 ...@@ -94,6 +94,8 @@ config SND_CMI8330
tristate "C-Media CMI8330" tristate "C-Media CMI8330"
select SND_WSS_LIB select SND_WSS_LIB
select SND_SB16_DSP select SND_SB16_DSP
select SND_OPL3_LIB
select SND_MPU401_UART
help help
Say Y here to include support for soundcards based on the Say Y here to include support for soundcards based on the
C-Media CMI8330 chip. C-Media CMI8330 chip.
...@@ -112,26 +114,15 @@ config SND_CS4231 ...@@ -112,26 +114,15 @@ config SND_CS4231
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called snd-cs4231. will be called snd-cs4231.
config SND_CS4232
tristate "Generic Cirrus Logic CS4232 driver"
select SND_OPL3_LIB
select SND_MPU401_UART
select SND_WSS_LIB
help
Say Y here to include support for CS4232 chips from Cirrus
Logic - Crystal Semiconductors.
To compile this driver as a module, choose M here: the module
will be called snd-cs4232.
config SND_CS4236 config SND_CS4236
tristate "Generic Cirrus Logic CS4236+ driver" tristate "Generic Cirrus Logic CS4232/CS4236+ driver"
select SND_OPL3_LIB select SND_OPL3_LIB
select SND_MPU401_UART select SND_MPU401_UART
select SND_WSS_LIB select SND_WSS_LIB
help help
Say Y to include support for CS4235,CS4236,CS4237B,CS4238B, Say Y to include support for CS4232,CS4235,CS4236,CS4237B,
CS4239 chips from Cirrus Logic - Crystal Semiconductors. CS4238B,CS4239 chips from Cirrus Logic - Crystal
Semiconductors.
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called snd-cs4236. will be called snd-cs4236.
......
...@@ -156,6 +156,7 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard ...@@ -156,6 +156,7 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
struct snd_card_ad1816a *acard; struct snd_card_ad1816a *acard;
struct snd_ad1816a *chip; struct snd_ad1816a *chip;
struct snd_opl3 *opl3; struct snd_opl3 *opl3;
struct snd_timer *timer;
error = snd_card_create(index[dev], id[dev], THIS_MODULE, error = snd_card_create(index[dev], id[dev], THIS_MODULE,
sizeof(struct snd_card_ad1816a), &card); sizeof(struct snd_card_ad1816a), &card);
...@@ -195,6 +196,12 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard ...@@ -195,6 +196,12 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
return error; return error;
} }
error = snd_ad1816a_timer(chip, 0, &timer);
if (error < 0) {
snd_card_free(card);
return error;
}
if (mpu_port[dev] > 0) { if (mpu_port[dev] > 0) {
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
mpu_port[dev], 0, mpu_irq[dev], IRQF_DISABLED, mpu_port[dev], 0, mpu_irq[dev], IRQF_DISABLED,
...@@ -208,11 +215,8 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard ...@@ -208,11 +215,8 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
OPL3_HW_AUTO, 0, &opl3) < 0) { OPL3_HW_AUTO, 0, &opl3) < 0) {
printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx.\n", fm_port[dev], fm_port[dev] + 2); printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx.\n", fm_port[dev], fm_port[dev] + 2);
} else { } else {
if ((error = snd_opl3_timer_new(opl3, 1, 2)) < 0) { error = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
snd_card_free(card); if (error < 0) {
return error;
}
if ((error = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
snd_card_free(card); snd_card_free(card);
return error; return error;
} }
......
...@@ -37,7 +37,7 @@ static inline int snd_ad1816a_busy_wait(struct snd_ad1816a *chip) ...@@ -37,7 +37,7 @@ static inline int snd_ad1816a_busy_wait(struct snd_ad1816a *chip)
if (inb(AD1816A_REG(AD1816A_CHIP_STATUS)) & AD1816A_READY) if (inb(AD1816A_REG(AD1816A_CHIP_STATUS)) & AD1816A_READY)
return 0; return 0;
snd_printk("chip busy.\n"); snd_printk(KERN_WARNING "chip busy.\n");
return -EBUSY; return -EBUSY;
} }
...@@ -196,7 +196,7 @@ static int snd_ad1816a_trigger(struct snd_ad1816a *chip, unsigned char what, ...@@ -196,7 +196,7 @@ static int snd_ad1816a_trigger(struct snd_ad1816a *chip, unsigned char what,
spin_unlock(&chip->lock); spin_unlock(&chip->lock);
break; break;
default: default:
snd_printk("invalid trigger mode 0x%x.\n", what); snd_printk(KERN_WARNING "invalid trigger mode 0x%x.\n", what);
error = -EINVAL; error = -EINVAL;
} }
...@@ -377,7 +377,6 @@ static struct snd_pcm_hardware snd_ad1816a_capture = { ...@@ -377,7 +377,6 @@ static struct snd_pcm_hardware snd_ad1816a_capture = {
.fifo_size = 0, .fifo_size = 0,
}; };
#if 0 /* not used now */
static int snd_ad1816a_timer_close(struct snd_timer *timer) static int snd_ad1816a_timer_close(struct snd_timer *timer)
{ {
struct snd_ad1816a *chip = snd_timer_chip(timer); struct snd_ad1816a *chip = snd_timer_chip(timer);
...@@ -442,8 +441,6 @@ static struct snd_timer_hardware snd_ad1816a_timer_table = { ...@@ -442,8 +441,6 @@ static struct snd_timer_hardware snd_ad1816a_timer_table = {
.start = snd_ad1816a_timer_start, .start = snd_ad1816a_timer_start,
.stop = snd_ad1816a_timer_stop, .stop = snd_ad1816a_timer_stop,
}; };
#endif /* not used now */
static int snd_ad1816a_playback_open(struct snd_pcm_substream *substream) static int snd_ad1816a_playback_open(struct snd_pcm_substream *substream)
{ {
...@@ -568,7 +565,7 @@ static const char __devinit *snd_ad1816a_chip_id(struct snd_ad1816a *chip) ...@@ -568,7 +565,7 @@ static const char __devinit *snd_ad1816a_chip_id(struct snd_ad1816a *chip)
case AD1816A_HW_AD1815: return "AD1815"; case AD1816A_HW_AD1815: return "AD1815";
case AD1816A_HW_AD18MAX10: return "AD18max10"; case AD1816A_HW_AD18MAX10: return "AD18max10";
default: default:
snd_printk("Unknown chip version %d:%d.\n", snd_printk(KERN_WARNING "Unknown chip version %d:%d.\n",
chip->version, chip->hardware); chip->version, chip->hardware);
return "AD1816A - unknown"; return "AD1816A - unknown";
} }
...@@ -687,7 +684,6 @@ int __devinit snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_p ...@@ -687,7 +684,6 @@ int __devinit snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_p
return 0; return 0;
} }
#if 0 /* not used now */
int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd_timer **rtimer) int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd_timer **rtimer)
{ {
struct snd_timer *timer; struct snd_timer *timer;
...@@ -709,7 +705,6 @@ int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd ...@@ -709,7 +705,6 @@ int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd
*rtimer = timer; *rtimer = timer;
return 0; return 0;
} }
#endif /* not used now */
/* /*
* *
......
...@@ -31,11 +31,11 @@ ...@@ -31,11 +31,11 @@
* To quickly load the module, * To quickly load the module,
* *
* modprobe -a snd-cmi8330 sbport=0x220 sbirq=5 sbdma8=1 * modprobe -a snd-cmi8330 sbport=0x220 sbirq=5 sbdma8=1
* sbdma16=5 wssport=0x530 wssirq=11 wssdma=0 * sbdma16=5 wssport=0x530 wssirq=11 wssdma=0 fmport=0x388
* *
* This card has two mixers and two PCM devices. I've cheesed it such * This card has two mixers and two PCM devices. I've cheesed it such
* that recording and playback can be done through the same device. * that recording and playback can be done through the same device.
* The driver "magically" routes the capturing to the AD1848 codec, * The driver "magically" routes the capturing to the CMI8330 codec,
* and playback to the SB16 codec. This allows for full-duplex mode * and playback to the SB16 codec. This allows for full-duplex mode
* to some extent. * to some extent.
* The utilities in alsa-utils are aware of both devices, so passing * The utilities in alsa-utils are aware of both devices, so passing
...@@ -51,6 +51,8 @@ ...@@ -51,6 +51,8 @@
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/wss.h> #include <sound/wss.h>
#include <sound/opl3.h>
#include <sound/mpu401.h>
#include <sound/sb.h> #include <sound/sb.h>
#include <sound/initval.h> #include <sound/initval.h>
...@@ -79,6 +81,9 @@ static int sbdma16[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; ...@@ -79,6 +81,9 @@ static int sbdma16[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
static long wssport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; static long wssport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
static int wssirq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; static int wssirq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
static int wssdma[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; static int wssdma[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
static long fmport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
static long mpuport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
static int mpuirq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
module_param_array(index, int, NULL, 0444); module_param_array(index, int, NULL, 0444);
MODULE_PARM_DESC(index, "Index value for CMI8330 soundcard."); MODULE_PARM_DESC(index, "Index value for CMI8330 soundcard.");
...@@ -107,6 +112,12 @@ MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330 WSS driver."); ...@@ -107,6 +112,12 @@ MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330 WSS driver.");
module_param_array(wssdma, int, NULL, 0444); module_param_array(wssdma, int, NULL, 0444);
MODULE_PARM_DESC(wssdma, "DMA for CMI8330 WSS driver."); MODULE_PARM_DESC(wssdma, "DMA for CMI8330 WSS driver.");
module_param_array(fmport, long, NULL, 0444);
MODULE_PARM_DESC(fmport, "FM port # for CMI8330 driver.");
module_param_array(mpuport, long, NULL, 0444);
MODULE_PARM_DESC(mpuport, "MPU-401 port # for CMI8330 driver.");
module_param_array(mpuirq, int, NULL, 0444);
MODULE_PARM_DESC(mpuirq, "IRQ # for CMI8330 MPU-401 port.");
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
static int isa_registered; static int isa_registered;
static int pnp_registered; static int pnp_registered;
...@@ -149,6 +160,7 @@ struct snd_cmi8330 { ...@@ -149,6 +160,7 @@ struct snd_cmi8330 {
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
struct pnp_dev *cap; struct pnp_dev *cap;
struct pnp_dev *play; struct pnp_dev *play;
struct pnp_dev *mpu;
#endif #endif
struct snd_card *card; struct snd_card *card;
struct snd_wss *wss; struct snd_wss *wss;
...@@ -165,7 +177,7 @@ struct snd_cmi8330 { ...@@ -165,7 +177,7 @@ struct snd_cmi8330 {
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
static struct pnp_card_device_id snd_cmi8330_pnpids[] = { static struct pnp_card_device_id snd_cmi8330_pnpids[] = {
{ .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" } } }, { .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" } } },
{ .id = "" } { .id = "" }
}; };
...@@ -219,8 +231,10 @@ WSS_SINGLE("3D Control - Switch", 0, ...@@ -219,8 +231,10 @@ WSS_SINGLE("3D Control - Switch", 0,
CMI8330_RMUX3D, 5, 1, 1), CMI8330_RMUX3D, 5, 1, 1),
WSS_SINGLE("PC Speaker Playback Volume", 0, WSS_SINGLE("PC Speaker Playback Volume", 0,
CMI8330_OUTPUTVOL, 3, 3, 0), CMI8330_OUTPUTVOL, 3, 3, 0),
WSS_SINGLE("FM Playback Switch", 0, WSS_DOUBLE("FM Playback Switch", 0,
CMI8330_RECMUX, 3, 1, 1), CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 7, 7, 1, 1),
WSS_DOUBLE("FM Playback Volume", 0,
CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 0, 0, 31, 1),
WSS_SINGLE(SNDRV_CTL_NAME_IEC958("Input ", CAPTURE, SWITCH), 0, WSS_SINGLE(SNDRV_CTL_NAME_IEC958("Input ", CAPTURE, SWITCH), 0,
CMI8330_RMUX3D, 7, 1, 1), CMI8330_RMUX3D, 7, 1, 1),
WSS_SINGLE(SNDRV_CTL_NAME_IEC958("Input ", PLAYBACK, SWITCH), 0, WSS_SINGLE(SNDRV_CTL_NAME_IEC958("Input ", PLAYBACK, SWITCH), 0,
...@@ -323,16 +337,21 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, ...@@ -323,16 +337,21 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard,
if (acard->play == NULL) if (acard->play == NULL)
return -EBUSY; return -EBUSY;
acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL);
if (acard->play == NULL)
return -EBUSY;
pdev = acard->cap; pdev = acard->cap;
err = pnp_activate_dev(pdev); err = pnp_activate_dev(pdev);
if (err < 0) { if (err < 0) {
snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP configure failure\n"); snd_printk(KERN_ERR "CMI8330/C3D PnP configure failure\n");
return -EBUSY; return -EBUSY;
} }
wssport[dev] = pnp_port_start(pdev, 0); wssport[dev] = pnp_port_start(pdev, 0);
wssdma[dev] = pnp_dma(pdev, 0); wssdma[dev] = pnp_dma(pdev, 0);
wssirq[dev] = pnp_irq(pdev, 0); wssirq[dev] = pnp_irq(pdev, 0);
fmport[dev] = pnp_port_start(pdev, 1);
/* allocate SB16 resources */ /* allocate SB16 resources */
pdev = acard->play; pdev = acard->play;
...@@ -347,6 +366,17 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, ...@@ -347,6 +366,17 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard,
sbdma16[dev] = pnp_dma(pdev, 1); sbdma16[dev] = pnp_dma(pdev, 1);
sbirq[dev] = pnp_irq(pdev, 0); sbirq[dev] = pnp_irq(pdev, 0);
/* allocate MPU-401 resources */
pdev = acard->mpu;
err = pnp_activate_dev(pdev);
if (err < 0) {
snd_printk(KERN_ERR
"CMI8330/C3D (MPU-401) PnP configure failure\n");
return -EBUSY;
}
mpuport[dev] = pnp_port_start(pdev, 0);
mpuirq[dev] = pnp_irq(pdev, 0);
return 0; return 0;
} }
#endif #endif
...@@ -489,6 +519,7 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev) ...@@ -489,6 +519,7 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
{ {
struct snd_cmi8330 *acard; struct snd_cmi8330 *acard;
int i, err; int i, err;
struct snd_opl3 *opl3;
acard = card->private_data; acard = card->private_data;
err = snd_wss_create(card, wssport[dev] + 4, -1, err = snd_wss_create(card, wssport[dev] + 4, -1,
...@@ -496,11 +527,11 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev) ...@@ -496,11 +527,11 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
wssdma[dev], -1, wssdma[dev], -1,
WSS_HW_DETECT, 0, &acard->wss); WSS_HW_DETECT, 0, &acard->wss);
if (err < 0) { if (err < 0) {
snd_printk(KERN_ERR PFX "(AD1848) device busy??\n"); snd_printk(KERN_ERR PFX "(CMI8330) device busy??\n");
return err; return err;
} }
if (acard->wss->hardware != WSS_HW_CMI8330) { if (acard->wss->hardware != WSS_HW_CMI8330) {
snd_printk(KERN_ERR PFX "(AD1848) not found during probe\n"); snd_printk(KERN_ERR PFX "(CMI8330) not found during probe\n");
return -ENODEV; return -ENODEV;
} }
...@@ -532,6 +563,27 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev) ...@@ -532,6 +563,27 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
snd_printk(KERN_ERR PFX "failed to create pcms\n"); snd_printk(KERN_ERR PFX "failed to create pcms\n");
return err; return err;
} }
if (fmport[dev] != SNDRV_AUTO_PORT) {
if (snd_opl3_create(card,
fmport[dev], fmport[dev] + 2,
OPL3_HW_AUTO, 0, &opl3) < 0) {
snd_printk(KERN_ERR PFX
"no OPL device at 0x%lx-0x%lx ?\n",
fmport[dev], fmport[dev] + 2);
} else {
err = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
if (err < 0)
return err;
}
}
if (mpuport[dev] != SNDRV_AUTO_PORT) {
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
mpuport[dev], 0, mpuirq[dev],
IRQF_DISABLED, NULL) < 0)
printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n",
mpuport[dev]);
}
strcpy(card->driver, "CMI8330/C3D"); strcpy(card->driver, "CMI8330/C3D");
strcpy(card->shortname, "C-Media CMI8330/C3D"); strcpy(card->shortname, "C-Media CMI8330/C3D");
......
...@@ -3,13 +3,11 @@ ...@@ -3,13 +3,11 @@
# Copyright (c) 2001 by Jaroslav Kysela <perex@perex.cz> # Copyright (c) 2001 by Jaroslav Kysela <perex@perex.cz>
# #
snd-cs4236-lib-objs := cs4236_lib.o
snd-cs4231-objs := cs4231.o snd-cs4231-objs := cs4231.o
snd-cs4232-objs := cs4232.o snd-cs4236-objs := cs4236.o cs4236_lib.o
snd-cs4236-objs := cs4236.o
# Toplevel Module Dependency # Toplevel Module Dependency
obj-$(CONFIG_SND_CS4231) += snd-cs4231.o obj-$(CONFIG_SND_CS4231) += snd-cs4231.o
obj-$(CONFIG_SND_CS4232) += snd-cs4232.o obj-$(CONFIG_SND_CS4236) += snd-cs4236.o
obj-$(CONFIG_SND_CS4236) += snd-cs4236.o snd-cs4236-lib.o
#define CS4232
#include "cs4236.c"
...@@ -33,17 +33,14 @@ ...@@ -33,17 +33,14 @@
MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>"); MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#ifdef CS4232 MODULE_DESCRIPTION("Cirrus Logic CS4232-9");
MODULE_DESCRIPTION("Cirrus Logic CS4232");
MODULE_SUPPORTED_DEVICE("{{Turtle Beach,TBS-2000}," MODULE_SUPPORTED_DEVICE("{{Turtle Beach,TBS-2000},"
"{Turtle Beach,Tropez Plus}," "{Turtle Beach,Tropez Plus},"
"{SIC CrystalWave 32}," "{SIC CrystalWave 32},"
"{Hewlett Packard,Omnibook 5500}," "{Hewlett Packard,Omnibook 5500},"
"{TerraTec,Maestro 32/96}," "{TerraTec,Maestro 32/96},"
"{Philips,PCA70PS}}"); "{Philips,PCA70PS}},"
#else "{{Crystal Semiconductors,CS4235},"
MODULE_DESCRIPTION("Cirrus Logic CS4235-9");
MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
"{Crystal Semiconductors,CS4236}," "{Crystal Semiconductors,CS4236},"
"{Crystal Semiconductors,CS4237}," "{Crystal Semiconductors,CS4237},"
"{Crystal Semiconductors,CS4238}," "{Crystal Semiconductors,CS4238},"
...@@ -70,15 +67,11 @@ MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235}," ...@@ -70,15 +67,11 @@ MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
"{Typhoon Soundsystem,CS4236B}," "{Typhoon Soundsystem,CS4236B},"
"{Turtle Beach,Malibu}," "{Turtle Beach,Malibu},"
"{Unknown,Digital PC 5000 Onboard}}"); "{Unknown,Digital PC 5000 Onboard}}");
#endif
#ifdef CS4232 MODULE_ALIAS("snd_cs4232");
#define IDENT "CS4232"
#define DEV_NAME "cs4232" #define IDENT "CS4232+"
#else #define DEV_NAME "cs4232+"
#define IDENT "CS4236+"
#define DEV_NAME "cs4236"
#endif
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
...@@ -128,9 +121,7 @@ MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); ...@@ -128,9 +121,7 @@ MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver.");
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
static int isa_registered; static int isa_registered;
static int pnpc_registered; static int pnpc_registered;
#ifdef CS4232
static int pnp_registered; static int pnp_registered;
#endif
#endif /* CONFIG_PNP */ #endif /* CONFIG_PNP */
struct snd_card_cs4236 { struct snd_card_cs4236 {
...@@ -145,11 +136,10 @@ struct snd_card_cs4236 { ...@@ -145,11 +136,10 @@ struct snd_card_cs4236 {
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
#ifdef CS4232
/* /*
* PNP BIOS * PNP BIOS
*/ */
static const struct pnp_device_id snd_cs4232_pnpbiosids[] = { static const struct pnp_device_id snd_cs423x_pnpbiosids[] = {
{ .id = "CSC0100" }, { .id = "CSC0100" },
{ .id = "CSC0000" }, { .id = "CSC0000" },
/* Guillemot Turtlebeach something appears to be cs4232 compatible /* Guillemot Turtlebeach something appears to be cs4232 compatible
...@@ -157,10 +147,8 @@ static const struct pnp_device_id snd_cs4232_pnpbiosids[] = { ...@@ -157,10 +147,8 @@ static const struct pnp_device_id snd_cs4232_pnpbiosids[] = {
{ .id = "GIM0100" }, { .id = "GIM0100" },
{ .id = "" } { .id = "" }
}; };
MODULE_DEVICE_TABLE(pnp, snd_cs4232_pnpbiosids); MODULE_DEVICE_TABLE(pnp, snd_cs423x_pnpbiosids);
#endif /* CS4232 */
#ifdef CS4232
#define CS423X_ISAPNP_DRIVER "cs4232_isapnp" #define CS423X_ISAPNP_DRIVER "cs4232_isapnp"
static struct pnp_card_device_id snd_cs423x_pnpids[] = { static struct pnp_card_device_id snd_cs423x_pnpids[] = {
/* Philips PCA70PS */ /* Philips PCA70PS */
...@@ -179,12 +167,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = { ...@@ -179,12 +167,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = {
{ .id = "CSCf032", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, { .id = "CSCf032", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } },
/* Netfinity 3000 on-board soundcard */ /* Netfinity 3000 on-board soundcard */
{ .id = "CSCe825", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC010f" } } }, { .id = "CSCe825", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC010f" } } },
/* --- */
{ .id = "" } /* end */
};
#else /* CS4236 */
#define CS423X_ISAPNP_DRIVER "cs4236_isapnp"
static struct pnp_card_device_id snd_cs423x_pnpids[] = {
/* Intel Marlin Spike Motherboard - CS4235 */ /* Intel Marlin Spike Motherboard - CS4235 */
{ .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, { .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } },
/* Intel Marlin Spike Motherboard (#2) - CS4235 */ /* Intel Marlin Spike Motherboard (#2) - CS4235 */
...@@ -266,7 +248,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = { ...@@ -266,7 +248,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = {
/* --- */ /* --- */
{ .id = "" } /* end */ { .id = "" } /* end */
}; };
#endif
MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids); MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids);
...@@ -323,17 +304,19 @@ static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev) ...@@ -323,17 +304,19 @@ static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev)
return 0; return 0;
} }
#ifdef CS4232 static int __devinit snd_card_cs423x_pnp(int dev, struct snd_card_cs4236 *acard,
static int __devinit snd_card_cs4232_pnp(int dev, struct snd_card_cs4236 *acard, struct pnp_dev *pdev,
struct pnp_dev *pdev) struct pnp_dev *cdev)
{ {
acard->wss = pdev; acard->wss = pdev;
if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0) if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0)
return -EBUSY; return -EBUSY;
cport[dev] = -1; if (cdev)
cport[dev] = pnp_port_start(cdev, 0);
else
cport[dev] = -1;
return 0; return 0;
} }
#endif
static int __devinit snd_card_cs423x_pnpc(int dev, struct snd_card_cs4236 *acard, static int __devinit snd_card_cs423x_pnpc(int dev, struct snd_card_cs4236 *acard,
struct pnp_card_link *card, struct pnp_card_link *card,
...@@ -411,40 +394,39 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev) ...@@ -411,40 +394,39 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
return -EBUSY; return -EBUSY;
} }
#ifdef CS4232
err = snd_wss_create(card, port[dev], cport[dev], err = snd_wss_create(card, port[dev], cport[dev],
irq[dev], irq[dev],
dma1[dev], dma2[dev], dma1[dev], dma2[dev],
WSS_HW_DETECT, 0, &chip); WSS_HW_DETECT3, 0, &chip);
if (err < 0)
return err;
acard->chip = chip;
err = snd_wss_pcm(chip, 0, &pcm);
if (err < 0)
return err;
err = snd_wss_mixer(chip);
if (err < 0) if (err < 0)
return err; return err;
if (chip->hardware & WSS_HW_CS4236B_MASK) {
#else /* CS4236 */ snd_wss_free(chip);
err = snd_cs4236_create(card, err = snd_cs4236_create(card,
port[dev], cport[dev], port[dev], cport[dev],
irq[dev], dma1[dev], dma2[dev], irq[dev], dma1[dev], dma2[dev],
WSS_HW_DETECT, 0, &chip); WSS_HW_DETECT, 0, &chip);
if (err < 0) if (err < 0)
return err; return err;
acard->chip = chip; acard->chip = chip;
err = snd_cs4236_pcm(chip, 0, &pcm); err = snd_cs4236_pcm(chip, 0, &pcm);
if (err < 0) if (err < 0)
return err; return err;
err = snd_cs4236_mixer(chip); err = snd_cs4236_mixer(chip);
if (err < 0) if (err < 0)
return err; return err;
#endif } else {
acard->chip = chip;
err = snd_wss_pcm(chip, 0, &pcm);
if (err < 0)
return err;
err = snd_wss_mixer(chip);
if (err < 0)
return err;
}
strcpy(card->driver, pcm->name); strcpy(card->driver, pcm->name);
strcpy(card->shortname, pcm->name); strcpy(card->shortname, pcm->name);
sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i",
...@@ -579,13 +561,14 @@ static struct isa_driver cs423x_isa_driver = { ...@@ -579,13 +561,14 @@ static struct isa_driver cs423x_isa_driver = {
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
#ifdef CS4232 static int __devinit snd_cs423x_pnpbios_detect(struct pnp_dev *pdev,
static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
const struct pnp_device_id *id) const struct pnp_device_id *id)
{ {
static int dev; static int dev;
int err; int err;
struct snd_card *card; struct snd_card *card;
struct pnp_dev *cdev;
char cid[PNP_ID_LEN];
if (pnp_device_is_isapnp(pdev)) if (pnp_device_is_isapnp(pdev))
return -ENOENT; /* we have another procedure - card */ return -ENOENT; /* we have another procedure - card */
...@@ -596,10 +579,19 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev, ...@@ -596,10 +579,19 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
if (dev >= SNDRV_CARDS) if (dev >= SNDRV_CARDS)
return -ENODEV; return -ENODEV;
/* prepare second id */
strcpy(cid, pdev->id[0].id);
cid[5] = '1';
cdev = NULL;
list_for_each_entry(cdev, &(pdev->protocol->devices), protocol_list) {
if (!strcmp(cdev->id[0].id, cid))
break;
}
err = snd_cs423x_card_new(dev, &card); err = snd_cs423x_card_new(dev, &card);
if (err < 0) if (err < 0)
return err; return err;
if ((err = snd_card_cs4232_pnp(dev, card->private_data, pdev)) < 0) { err = snd_card_cs423x_pnp(dev, card->private_data, pdev, cdev);
if (err < 0) {
printk(KERN_ERR "PnP BIOS detection failed for " IDENT "\n"); printk(KERN_ERR "PnP BIOS detection failed for " IDENT "\n");
snd_card_free(card); snd_card_free(card);
return err; return err;
...@@ -614,35 +606,34 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev, ...@@ -614,35 +606,34 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
return 0; return 0;
} }
static void __devexit snd_cs4232_pnp_remove(struct pnp_dev * pdev) static void __devexit snd_cs423x_pnp_remove(struct pnp_dev *pdev)
{ {
snd_card_free(pnp_get_drvdata(pdev)); snd_card_free(pnp_get_drvdata(pdev));
pnp_set_drvdata(pdev, NULL); pnp_set_drvdata(pdev, NULL);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int snd_cs4232_pnp_suspend(struct pnp_dev *pdev, pm_message_t state) static int snd_cs423x_pnp_suspend(struct pnp_dev *pdev, pm_message_t state)
{ {
return snd_cs423x_suspend(pnp_get_drvdata(pdev)); return snd_cs423x_suspend(pnp_get_drvdata(pdev));
} }
static int snd_cs4232_pnp_resume(struct pnp_dev *pdev) static int snd_cs423x_pnp_resume(struct pnp_dev *pdev)
{ {
return snd_cs423x_resume(pnp_get_drvdata(pdev)); return snd_cs423x_resume(pnp_get_drvdata(pdev));
} }
#endif #endif
static struct pnp_driver cs4232_pnp_driver = { static struct pnp_driver cs423x_pnp_driver = {
.name = "cs4232-pnpbios", .name = "cs423x-pnpbios",
.id_table = snd_cs4232_pnpbiosids, .id_table = snd_cs423x_pnpbiosids,
.probe = snd_cs4232_pnpbios_detect, .probe = snd_cs423x_pnpbios_detect,
.remove = __devexit_p(snd_cs4232_pnp_remove), .remove = __devexit_p(snd_cs423x_pnp_remove),
#ifdef CONFIG_PM #ifdef CONFIG_PM
.suspend = snd_cs4232_pnp_suspend, .suspend = snd_cs423x_pnp_suspend,
.resume = snd_cs4232_pnp_resume, .resume = snd_cs423x_pnp_resume,
#endif #endif
}; };
#endif /* CS4232 */
static int __devinit snd_cs423x_pnpc_detect(struct pnp_card_link *pcard, static int __devinit snd_cs423x_pnpc_detect(struct pnp_card_link *pcard,
const struct pnp_card_device_id *pid) const struct pnp_card_device_id *pid)
...@@ -716,18 +707,14 @@ static int __init alsa_card_cs423x_init(void) ...@@ -716,18 +707,14 @@ static int __init alsa_card_cs423x_init(void)
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
if (!err) if (!err)
isa_registered = 1; isa_registered = 1;
#ifdef CS4232 err = pnp_register_driver(&cs423x_pnp_driver);
err = pnp_register_driver(&cs4232_pnp_driver);
if (!err) if (!err)
pnp_registered = 1; pnp_registered = 1;
#endif
err = pnp_register_card_driver(&cs423x_pnpc_driver); err = pnp_register_card_driver(&cs423x_pnpc_driver);
if (!err) if (!err)
pnpc_registered = 1; pnpc_registered = 1;
#ifdef CS4232
if (pnp_registered) if (pnp_registered)
err = 0; err = 0;
#endif
if (isa_registered) if (isa_registered)
err = 0; err = 0;
#endif #endif
...@@ -739,10 +726,8 @@ static void __exit alsa_card_cs423x_exit(void) ...@@ -739,10 +726,8 @@ static void __exit alsa_card_cs423x_exit(void)
#ifdef CONFIG_PNP #ifdef CONFIG_PNP
if (pnpc_registered) if (pnpc_registered)
pnp_unregister_card_driver(&cs423x_pnpc_driver); pnp_unregister_card_driver(&cs423x_pnpc_driver);
#ifdef CS4232
if (pnp_registered) if (pnp_registered)
pnp_unregister_driver(&cs4232_pnp_driver); pnp_unregister_driver(&cs423x_pnp_driver);
#endif
if (isa_registered) if (isa_registered)
#endif #endif
isa_unregister_driver(&cs423x_isa_driver); isa_unregister_driver(&cs423x_isa_driver);
......
...@@ -88,10 +88,6 @@ ...@@ -88,10 +88,6 @@
#include <sound/wss.h> #include <sound/wss.h>
#include <sound/asoundef.h> #include <sound/asoundef.h>
MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
MODULE_DESCRIPTION("Routines for control of CS4235/4236B/4237B/4238B/4239 chips");
MODULE_LICENSE("GPL");
/* /*
* *
*/ */
...@@ -286,7 +282,8 @@ int snd_cs4236_create(struct snd_card *card, ...@@ -286,7 +282,8 @@ int snd_cs4236_create(struct snd_card *card,
if (hardware == WSS_HW_DETECT) if (hardware == WSS_HW_DETECT)
hardware = WSS_HW_DETECT3; hardware = WSS_HW_DETECT3;
if (cport < 0x100) { if (cport < 0x100) {
snd_printk("please, specify control port for CS4236+ chips\n"); snd_printk(KERN_ERR "please, specify control port "
"for CS4236+ chips\n");
return -ENODEV; return -ENODEV;
} }
err = snd_wss_create(card, port, cport, err = snd_wss_create(card, port, cport,
...@@ -295,7 +292,8 @@ int snd_cs4236_create(struct snd_card *card, ...@@ -295,7 +292,8 @@ int snd_cs4236_create(struct snd_card *card,
return err; return err;
if (!(chip->hardware & WSS_HW_CS4236B_MASK)) { if (!(chip->hardware & WSS_HW_CS4236B_MASK)) {
snd_printk("CS4236+: MODE3 and extended registers not available, hardware=0x%x\n",chip->hardware); snd_printk(KERN_ERR "CS4236+: MODE3 and extended registers "
"not available, hardware=0x%x\n", chip->hardware);
snd_device_free(card, chip); snd_device_free(card, chip);
return -ENODEV; return -ENODEV;
} }
...@@ -303,16 +301,19 @@ int snd_cs4236_create(struct snd_card *card, ...@@ -303,16 +301,19 @@ int snd_cs4236_create(struct snd_card *card,
{ {
int idx; int idx;
for (idx = 0; idx < 8; idx++) for (idx = 0; idx < 8; idx++)
snd_printk("CD%i = 0x%x\n", idx, inb(chip->cport + idx)); snd_printk(KERN_DEBUG "CD%i = 0x%x\n",
idx, inb(chip->cport + idx));
for (idx = 0; idx < 9; idx++) for (idx = 0; idx < 9; idx++)
snd_printk("C%i = 0x%x\n", idx, snd_cs4236_ctrl_in(chip, idx)); snd_printk(KERN_DEBUG "C%i = 0x%x\n",
idx, snd_cs4236_ctrl_in(chip, idx));
} }
#endif #endif
ver1 = snd_cs4236_ctrl_in(chip, 1); ver1 = snd_cs4236_ctrl_in(chip, 1);
ver2 = snd_cs4236_ext_in(chip, CS4236_VERSION); ver2 = snd_cs4236_ext_in(chip, CS4236_VERSION);
snd_printdd("CS4236: [0x%lx] C1 (version) = 0x%x, ext = 0x%x\n", cport, ver1, ver2); snd_printdd("CS4236: [0x%lx] C1 (version) = 0x%x, ext = 0x%x\n", cport, ver1, ver2);
if (ver1 != ver2) { if (ver1 != ver2) {
snd_printk("CS4236+ chip detected, but control port 0x%lx is not valid\n", cport); snd_printk(KERN_ERR "CS4236+ chip detected, but "
"control port 0x%lx is not valid\n", cport);
snd_device_free(card, chip); snd_device_free(card, chip);
return -ENODEV; return -ENODEV;
} }
...@@ -883,7 +884,8 @@ static int snd_cs4236_get_iec958_switch(struct snd_kcontrol *kcontrol, struct sn ...@@ -883,7 +884,8 @@ static int snd_cs4236_get_iec958_switch(struct snd_kcontrol *kcontrol, struct sn
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
ucontrol->value.integer.value[0] = chip->image[CS4231_ALT_FEATURE_1] & 0x02 ? 1 : 0; ucontrol->value.integer.value[0] = chip->image[CS4231_ALT_FEATURE_1] & 0x02 ? 1 : 0;
#if 0 #if 0
printk("get valid: ALT = 0x%x, C3 = 0x%x, C4 = 0x%x, C5 = 0x%x, C6 = 0x%x, C8 = 0x%x\n", printk(KERN_DEBUG "get valid: ALT = 0x%x, C3 = 0x%x, C4 = 0x%x, "
"C5 = 0x%x, C6 = 0x%x, C8 = 0x%x\n",
snd_wss_in(chip, CS4231_ALT_FEATURE_1), snd_wss_in(chip, CS4231_ALT_FEATURE_1),
snd_cs4236_ctrl_in(chip, 3), snd_cs4236_ctrl_in(chip, 3),
snd_cs4236_ctrl_in(chip, 4), snd_cs4236_ctrl_in(chip, 4),
...@@ -920,7 +922,8 @@ static int snd_cs4236_put_iec958_switch(struct snd_kcontrol *kcontrol, struct sn ...@@ -920,7 +922,8 @@ static int snd_cs4236_put_iec958_switch(struct snd_kcontrol *kcontrol, struct sn
mutex_unlock(&chip->mce_mutex); mutex_unlock(&chip->mce_mutex);
#if 0 #if 0
printk("set valid: ALT = 0x%x, C3 = 0x%x, C4 = 0x%x, C5 = 0x%x, C6 = 0x%x, C8 = 0x%x\n", printk(KERN_DEBUG "set valid: ALT = 0x%x, C3 = 0x%x, C4 = 0x%x, "
"C5 = 0x%x, C6 = 0x%x, C8 = 0x%x\n",
snd_wss_in(chip, CS4231_ALT_FEATURE_1), snd_wss_in(chip, CS4231_ALT_FEATURE_1),
snd_cs4236_ctrl_in(chip, 3), snd_cs4236_ctrl_in(chip, 3),
snd_cs4236_ctrl_in(chip, 4), snd_cs4236_ctrl_in(chip, 4),
...@@ -1015,23 +1018,3 @@ int snd_cs4236_mixer(struct snd_wss *chip) ...@@ -1015,23 +1018,3 @@ int snd_cs4236_mixer(struct snd_wss *chip)
} }
return 0; return 0;
} }
EXPORT_SYMBOL(snd_cs4236_create);
EXPORT_SYMBOL(snd_cs4236_pcm);
EXPORT_SYMBOL(snd_cs4236_mixer);
/*
* INIT part
*/
static int __init alsa_cs4236_init(void)
{
return 0;
}
static void __exit alsa_cs4236_exit(void)
{
}
module_init(alsa_cs4236_init)
module_exit(alsa_cs4236_exit)
...@@ -49,6 +49,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ ...@@ -49,6 +49,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE; /* Enable this card */
static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x220,0x240,0x260 */ static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x220,0x240,0x260 */
static long fm_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* Usually 0x388 */
static long mpu_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1}; static long mpu_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1};
static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */
static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */
...@@ -65,6 +66,8 @@ MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); ...@@ -65,6 +66,8 @@ MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
module_param_array(mpu_port, long, NULL, 0444); module_param_array(mpu_port, long, NULL, 0444);
MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver."); MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
module_param_array(irq, int, NULL, 0444); module_param_array(irq, int, NULL, 0444);
module_param_array(fm_port, long, NULL, 0444);
MODULE_PARM_DESC(fm_port, "FM port # for ES1688 driver.");
MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
module_param_array(mpu_irq, int, NULL, 0444); module_param_array(mpu_irq, int, NULL, 0444);
MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver."); MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver.");
...@@ -143,13 +146,19 @@ static int __devinit snd_es1688_probe(struct device *dev, unsigned int n) ...@@ -143,13 +146,19 @@ static int __devinit snd_es1688_probe(struct device *dev, unsigned int n)
sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", pcm->name, sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", pcm->name,
chip->port, chip->irq, chip->dma8); chip->port, chip->irq, chip->dma8);
if (snd_opl3_create(card, chip->port, chip->port + 2, if (fm_port[n] == SNDRV_AUTO_PORT)
OPL3_HW_OPL3, 0, &opl3) < 0) fm_port[n] = port[n]; /* share the same port */
dev_warn(dev, "opl3 not detected at 0x%lx\n", chip->port);
else { if (fm_port[n] > 0) {
error = snd_opl3_hwdep_new(opl3, 0, 1, NULL); if (snd_opl3_create(card, fm_port[n], fm_port[n] + 2,
if (error < 0) OPL3_HW_OPL3, 0, &opl3) < 0)
goto out; dev_warn(dev,
"opl3 not detected at 0x%lx\n", fm_port[n]);
else {
error = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
if (error < 0)
goto out;
}
} }
if (mpu_irq[n] >= 0 && mpu_irq[n] != SNDRV_AUTO_IRQ && if (mpu_irq[n] >= 0 && mpu_irq[n] != SNDRV_AUTO_IRQ &&
......
...@@ -45,7 +45,7 @@ static int snd_es1688_dsp_command(struct snd_es1688 *chip, unsigned char val) ...@@ -45,7 +45,7 @@ static int snd_es1688_dsp_command(struct snd_es1688 *chip, unsigned char val)
return 1; return 1;
} }
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
printk("snd_es1688_dsp_command: timeout (0x%x)\n", val); printk(KERN_DEBUG "snd_es1688_dsp_command: timeout (0x%x)\n", val);
#endif #endif
return 0; return 0;
} }
...@@ -167,13 +167,16 @@ static int snd_es1688_probe(struct snd_es1688 *chip) ...@@ -167,13 +167,16 @@ static int snd_es1688_probe(struct snd_es1688 *chip)
hw = ES1688_HW_AUTO; hw = ES1688_HW_AUTO;
switch (chip->version & 0xfff0) { switch (chip->version & 0xfff0) {
case 0x4880: case 0x4880:
snd_printk("[0x%lx] ESS: AudioDrive ES488 detected, but driver is in another place\n", chip->port); snd_printk(KERN_ERR "[0x%lx] ESS: AudioDrive ES488 detected, "
"but driver is in another place\n", chip->port);
return -ENODEV; return -ENODEV;
case 0x6880: case 0x6880:
hw = (chip->version & 0x0f) >= 8 ? ES1688_HW_1688 : ES1688_HW_688; hw = (chip->version & 0x0f) >= 8 ? ES1688_HW_1688 : ES1688_HW_688;
break; break;
default: default:
snd_printk("[0x%lx] ESS: unknown AudioDrive chip with version 0x%x (Jazz16 soundcard?)\n", chip->port, chip->version); snd_printk(KERN_ERR "[0x%lx] ESS: unknown AudioDrive chip "
"with version 0x%x (Jazz16 soundcard?)\n",
chip->port, chip->version);
return -ENODEV; return -ENODEV;
} }
...@@ -223,7 +226,7 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable) ...@@ -223,7 +226,7 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
} }
} }
#if 0 #if 0
snd_printk("mpu cfg = 0x%x\n", cfg); snd_printk(KERN_DEBUG "mpu cfg = 0x%x\n", cfg);
#endif #endif
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
snd_es1688_mixer_write(chip, 0x40, cfg); snd_es1688_mixer_write(chip, 0x40, cfg);
...@@ -237,7 +240,9 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable) ...@@ -237,7 +240,9 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
cfg = 0xf0; /* enable only DMA counter interrupt */ cfg = 0xf0; /* enable only DMA counter interrupt */
irq_bits = irqs[chip->irq & 0x0f]; irq_bits = irqs[chip->irq & 0x0f];
if (irq_bits < 0) { if (irq_bits < 0) {
snd_printk("[0x%lx] ESS: bad IRQ %d for ES1688 chip!!\n", chip->port, chip->irq); snd_printk(KERN_ERR "[0x%lx] ESS: bad IRQ %d "
"for ES1688 chip!!\n",
chip->port, chip->irq);
#if 0 #if 0
irq_bits = 0; irq_bits = 0;
cfg = 0x10; cfg = 0x10;
...@@ -250,7 +255,8 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable) ...@@ -250,7 +255,8 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
cfg = 0xf0; /* extended mode DMA enable */ cfg = 0xf0; /* extended mode DMA enable */
dma = chip->dma8; dma = chip->dma8;
if (dma > 3 || dma == 2) { if (dma > 3 || dma == 2) {
snd_printk("[0x%lx] ESS: bad DMA channel %d for ES1688 chip!!\n", chip->port, dma); snd_printk(KERN_ERR "[0x%lx] ESS: bad DMA channel %d "
"for ES1688 chip!!\n", chip->port, dma);
#if 0 #if 0
dma_bits = 0; dma_bits = 0;
cfg = 0x00; /* disable all DMA */ cfg = 0x00; /* disable all DMA */
...@@ -341,8 +347,9 @@ static int snd_es1688_trigger(struct snd_es1688 *chip, int cmd, unsigned char va ...@@ -341,8 +347,9 @@ static int snd_es1688_trigger(struct snd_es1688 *chip, int cmd, unsigned char va
return -EINVAL; /* something is wrong */ return -EINVAL; /* something is wrong */
} }
#if 0 #if 0
printk("trigger: val = 0x%x, value = 0x%x\n", val, value); printk(KERN_DEBUG "trigger: val = 0x%x, value = 0x%x\n", val, value);
printk("trigger: pointer = 0x%x\n", snd_dma_pointer(chip->dma8, chip->dma_size)); printk(KERN_DEBUG "trigger: pointer = 0x%x\n",
snd_dma_pointer(chip->dma8, chip->dma_size));
#endif #endif
snd_es1688_write(chip, 0xb8, (val & 0xf0) | value); snd_es1688_write(chip, 0xb8, (val & 0xf0) | value);
spin_unlock(&chip->reg_lock); spin_unlock(&chip->reg_lock);
......
...@@ -45,7 +45,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * gus, ...@@ -45,7 +45,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * gus,
unsigned char dma_cmd; unsigned char dma_cmd;
unsigned int address_high; unsigned int address_high;
// snd_printk("dma_transfer: addr=0x%x, buf=0x%lx, count=0x%x\n", addr, (long) buf, count); snd_printdd("dma_transfer: addr=0x%x, buf=0x%lx, count=0x%x\n",
addr, buf_addr, count);
if (gus->gf1.dma1 > 3) { if (gus->gf1.dma1 > 3) {
if (gus->gf1.enh_mode) { if (gus->gf1.enh_mode) {
...@@ -77,7 +78,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * gus, ...@@ -77,7 +78,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * gus,
snd_gf1_dma_ack(gus); snd_gf1_dma_ack(gus);
snd_dma_program(gus->gf1.dma1, buf_addr, count, dma_cmd & SNDRV_GF1_DMA_READ ? DMA_MODE_READ : DMA_MODE_WRITE); snd_dma_program(gus->gf1.dma1, buf_addr, count, dma_cmd & SNDRV_GF1_DMA_READ ? DMA_MODE_READ : DMA_MODE_WRITE);
#if 0 #if 0
snd_printk("address = 0x%x, count = 0x%x, dma_cmd = 0x%x\n", address << 1, count, dma_cmd); snd_printk(KERN_DEBUG "address = 0x%x, count = 0x%x, dma_cmd = 0x%x\n",
address << 1, count, dma_cmd);
#endif #endif
spin_lock_irqsave(&gus->reg_lock, flags); spin_lock_irqsave(&gus->reg_lock, flags);
if (gus->gf1.enh_mode) { if (gus->gf1.enh_mode) {
...@@ -142,7 +144,9 @@ static void snd_gf1_dma_interrupt(struct snd_gus_card * gus) ...@@ -142,7 +144,9 @@ static void snd_gf1_dma_interrupt(struct snd_gus_card * gus)
snd_gf1_dma_program(gus, block->addr, block->buf_addr, block->count, (unsigned short) block->cmd); snd_gf1_dma_program(gus, block->addr, block->buf_addr, block->count, (unsigned short) block->cmd);
kfree(block); kfree(block);
#if 0 #if 0
printk("program dma (IRQ) - addr = 0x%x, buffer = 0x%lx, count = 0x%x, cmd = 0x%x\n", addr, (long) buffer, count, cmd); snd_printd(KERN_DEBUG "program dma (IRQ) - "
"addr = 0x%x, buffer = 0x%lx, count = 0x%x, cmd = 0x%x\n",
block->addr, block->buf_addr, block->count, block->cmd);
#endif #endif
} }
...@@ -203,13 +207,16 @@ int snd_gf1_dma_transfer_block(struct snd_gus_card * gus, ...@@ -203,13 +207,16 @@ int snd_gf1_dma_transfer_block(struct snd_gus_card * gus,
} }
*block = *__block; *block = *__block;
block->next = NULL; block->next = NULL;
#if 0
printk("addr = 0x%x, buffer = 0x%lx, count = 0x%x, cmd = 0x%x\n", block->addr, (long) block->buffer, block->count, block->cmd); snd_printdd("addr = 0x%x, buffer = 0x%lx, count = 0x%x, cmd = 0x%x\n",
#endif block->addr, (long) block->buffer, block->count,
#if 0 block->cmd);
printk("gus->gf1.dma_data_pcm_last = 0x%lx\n", (long)gus->gf1.dma_data_pcm_last);
printk("gus->gf1.dma_data_pcm = 0x%lx\n", (long)gus->gf1.dma_data_pcm); snd_printdd("gus->gf1.dma_data_pcm_last = 0x%lx\n",
#endif (long)gus->gf1.dma_data_pcm_last);
snd_printdd("gus->gf1.dma_data_pcm = 0x%lx\n",
(long)gus->gf1.dma_data_pcm);
spin_lock_irqsave(&gus->dma_lock, flags); spin_lock_irqsave(&gus->dma_lock, flags);
if (synth) { if (synth) {
if (gus->gf1.dma_data_synth_last) { if (gus->gf1.dma_data_synth_last) {
......
...@@ -41,7 +41,7 @@ irqreturn_t snd_gus_interrupt(int irq, void *dev_id) ...@@ -41,7 +41,7 @@ irqreturn_t snd_gus_interrupt(int irq, void *dev_id)
if (status == 0) if (status == 0)
return IRQ_RETVAL(handled); return IRQ_RETVAL(handled);
handled = 1; handled = 1;
// snd_printk("IRQ: status = 0x%x\n", status); /* snd_printk(KERN_DEBUG "IRQ: status = 0x%x\n", status); */
if (status & 0x02) { if (status & 0x02) {
STAT_ADD(gus->gf1.interrupt_stat_midi_in); STAT_ADD(gus->gf1.interrupt_stat_midi_in);
if (gus->gf1.interrupt_handler_midi_in) if (gus->gf1.interrupt_handler_midi_in)
...@@ -65,7 +65,9 @@ irqreturn_t snd_gus_interrupt(int irq, void *dev_id) ...@@ -65,7 +65,9 @@ irqreturn_t snd_gus_interrupt(int irq, void *dev_id)
continue; /* multi request */ continue; /* multi request */
already |= _current_; /* mark request */ already |= _current_; /* mark request */
#if 0 #if 0
printk("voice = %i, voice_status = 0x%x, voice_verify = %i\n", voice, voice_status, inb(GUSP(gus, GF1PAGE))); printk(KERN_DEBUG "voice = %i, voice_status = 0x%x, "
"voice_verify = %i\n",
voice, voice_status, inb(GUSP(gus, GF1PAGE)));
#endif #endif
pvoice = &gus->gf1.voices[voice]; pvoice = &gus->gf1.voices[voice];
if (pvoice->use) { if (pvoice->use) {
......
...@@ -82,7 +82,10 @@ static int snd_gf1_pcm_block_change(struct snd_pcm_substream *substream, ...@@ -82,7 +82,10 @@ static int snd_gf1_pcm_block_change(struct snd_pcm_substream *substream,
count += offset & 31; count += offset & 31;
offset &= ~31; offset &= ~31;
// snd_printk("block change - offset = 0x%x, count = 0x%x\n", offset, count); /*
snd_printk(KERN_DEBUG "block change - offset = 0x%x, count = 0x%x\n",
offset, count);
*/
memset(&block, 0, sizeof(block)); memset(&block, 0, sizeof(block));
block.cmd = SNDRV_GF1_DMA_IRQ; block.cmd = SNDRV_GF1_DMA_IRQ;
if (snd_pcm_format_unsigned(runtime->format)) if (snd_pcm_format_unsigned(runtime->format))
...@@ -135,7 +138,11 @@ static void snd_gf1_pcm_trigger_up(struct snd_pcm_substream *substream) ...@@ -135,7 +138,11 @@ static void snd_gf1_pcm_trigger_up(struct snd_pcm_substream *substream)
curr = begin + (pcmp->bpos * pcmp->block_size) / runtime->channels; curr = begin + (pcmp->bpos * pcmp->block_size) / runtime->channels;
end = curr + (pcmp->block_size / runtime->channels); end = curr + (pcmp->block_size / runtime->channels);
end -= snd_pcm_format_width(runtime->format) == 16 ? 2 : 1; end -= snd_pcm_format_width(runtime->format) == 16 ? 2 : 1;
// snd_printk("init: curr=0x%x, begin=0x%x, end=0x%x, ctrl=0x%x, ramp=0x%x, rate=0x%x\n", curr, begin, end, voice_ctrl, ramp_ctrl, rate); /*
snd_printk(KERN_DEBUG "init: curr=0x%x, begin=0x%x, end=0x%x, "
"ctrl=0x%x, ramp=0x%x, rate=0x%x\n",
curr, begin, end, voice_ctrl, ramp_ctrl, rate);
*/
pan = runtime->channels == 2 ? (!voice ? 1 : 14) : 8; pan = runtime->channels == 2 ? (!voice ? 1 : 14) : 8;
vol = !voice ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_right; vol = !voice ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_right;
spin_lock_irqsave(&gus->reg_lock, flags); spin_lock_irqsave(&gus->reg_lock, flags);
...@@ -205,9 +212,11 @@ static void snd_gf1_pcm_interrupt_wave(struct snd_gus_card * gus, ...@@ -205,9 +212,11 @@ static void snd_gf1_pcm_interrupt_wave(struct snd_gus_card * gus,
ramp_ctrl = (snd_gf1_read8(gus, SNDRV_GF1_VB_VOLUME_CONTROL) & ~0xa4) | 0x03; ramp_ctrl = (snd_gf1_read8(gus, SNDRV_GF1_VB_VOLUME_CONTROL) & ~0xa4) | 0x03;
#if 0 #if 0
snd_gf1_select_voice(gus, pvoice->number); snd_gf1_select_voice(gus, pvoice->number);
printk("position = 0x%x\n", (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4)); printk(KERN_DEBUG "position = 0x%x\n",
(snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4));
snd_gf1_select_voice(gus, pcmp->pvoices[1]->number); snd_gf1_select_voice(gus, pcmp->pvoices[1]->number);
printk("position = 0x%x\n", (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4)); printk(KERN_DEBUG "position = 0x%x\n",
(snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4));
snd_gf1_select_voice(gus, pvoice->number); snd_gf1_select_voice(gus, pvoice->number);
#endif #endif
pcmp->bpos++; pcmp->bpos++;
...@@ -299,7 +308,11 @@ static int snd_gf1_pcm_poke_block(struct snd_gus_card *gus, unsigned char *buf, ...@@ -299,7 +308,11 @@ static int snd_gf1_pcm_poke_block(struct snd_gus_card *gus, unsigned char *buf,
unsigned int len; unsigned int len;
unsigned long flags; unsigned long flags;
// printk("poke block; buf = 0x%x, pos = %i, count = %i, port = 0x%x\n", (int)buf, pos, count, gus->gf1.port); /*
printk(KERN_DEBUG
"poke block; buf = 0x%x, pos = %i, count = %i, port = 0x%x\n",
(int)buf, pos, count, gus->gf1.port);
*/
while (count > 0) { while (count > 0) {
len = count; len = count;
if (len > 512) /* limit, to allow IRQ */ if (len > 512) /* limit, to allow IRQ */
...@@ -680,7 +693,8 @@ static int snd_gf1_pcm_playback_open(struct snd_pcm_substream *substream) ...@@ -680,7 +693,8 @@ static int snd_gf1_pcm_playback_open(struct snd_pcm_substream *substream)
runtime->private_free = snd_gf1_pcm_playback_free; runtime->private_free = snd_gf1_pcm_playback_free;
#if 0 #if 0
printk("playback.buffer = 0x%lx, gf1.pcm_buffer = 0x%lx\n", (long) pcm->playback.buffer, (long) gus->gf1.pcm_buffer); printk(KERN_DEBUG "playback.buffer = 0x%lx, gf1.pcm_buffer = 0x%lx\n",
(long) pcm->playback.buffer, (long) gus->gf1.pcm_buffer);
#endif #endif
if ((err = snd_gf1_dma_init(gus)) < 0) if ((err = snd_gf1_dma_init(gus)) < 0)
return err; return err;
......
...@@ -129,8 +129,14 @@ static int snd_gf1_uart_input_open(struct snd_rawmidi_substream *substream) ...@@ -129,8 +129,14 @@ static int snd_gf1_uart_input_open(struct snd_rawmidi_substream *substream)
} }
spin_unlock_irqrestore(&gus->uart_cmd_lock, flags); spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
#if 0 #if 0
snd_printk("read init - enable = %i, cmd = 0x%x, stat = 0x%x\n", gus->uart_enable, gus->gf1.uart_cmd, snd_gf1_uart_stat(gus)); snd_printk(KERN_DEBUG
snd_printk("[0x%x] reg (ctrl/status) = 0x%x, reg (data) = 0x%x (page = 0x%x)\n", gus->gf1.port + 0x100, inb(gus->gf1.port + 0x100), inb(gus->gf1.port + 0x101), inb(gus->gf1.port + 0x102)); "read init - enable = %i, cmd = 0x%x, stat = 0x%x\n",
gus->uart_enable, gus->gf1.uart_cmd, snd_gf1_uart_stat(gus));
snd_printk(KERN_DEBUG
"[0x%x] reg (ctrl/status) = 0x%x, reg (data) = 0x%x "
"(page = 0x%x)\n",
gus->gf1.port + 0x100, inb(gus->gf1.port + 0x100),
inb(gus->gf1.port + 0x101), inb(gus->gf1.port + 0x102));
#endif #endif
return 0; return 0;
} }
......
...@@ -170,7 +170,7 @@ static void snd_interwave_i2c_setlines(struct snd_i2c_bus *bus, int ctrl, int da ...@@ -170,7 +170,7 @@ static void snd_interwave_i2c_setlines(struct snd_i2c_bus *bus, int ctrl, int da
unsigned long port = bus->private_value; unsigned long port = bus->private_value;
#if 0 #if 0
printk("i2c_setlines - 0x%lx <- %i,%i\n", port, ctrl, data); printk(KERN_DEBUG "i2c_setlines - 0x%lx <- %i,%i\n", port, ctrl, data);
#endif #endif
outb((data << 1) | ctrl, port); outb((data << 1) | ctrl, port);
udelay(10); udelay(10);
...@@ -183,7 +183,7 @@ static int snd_interwave_i2c_getclockline(struct snd_i2c_bus *bus) ...@@ -183,7 +183,7 @@ static int snd_interwave_i2c_getclockline(struct snd_i2c_bus *bus)
res = inb(port) & 1; res = inb(port) & 1;
#if 0 #if 0
printk("i2c_getclockline - 0x%lx -> %i\n", port, res); printk(KERN_DEBUG "i2c_getclockline - 0x%lx -> %i\n", port, res);
#endif #endif
return res; return res;
} }
...@@ -197,7 +197,7 @@ static int snd_interwave_i2c_getdataline(struct snd_i2c_bus *bus, int ack) ...@@ -197,7 +197,7 @@ static int snd_interwave_i2c_getdataline(struct snd_i2c_bus *bus, int ack)
udelay(10); udelay(10);
res = (inb(port) & 2) >> 1; res = (inb(port) & 2) >> 1;
#if 0 #if 0
printk("i2c_getdataline - 0x%lx -> %i\n", port, res); printk(KERN_DEBUG "i2c_getdataline - 0x%lx -> %i\n", port, res);
#endif #endif
return res; return res;
} }
...@@ -342,7 +342,8 @@ static void __devinit snd_interwave_bank_sizes(struct snd_gus_card * gus, int *s ...@@ -342,7 +342,8 @@ static void __devinit snd_interwave_bank_sizes(struct snd_gus_card * gus, int *s
snd_gf1_poke(gus, local, d); snd_gf1_poke(gus, local, d);
snd_gf1_poke(gus, local + 1, d + 1); snd_gf1_poke(gus, local + 1, d + 1);
#if 0 #if 0
printk("d = 0x%x, local = 0x%x, local + 1 = 0x%x, idx << 22 = 0x%x\n", printk(KERN_DEBUG "d = 0x%x, local = 0x%x, "
"local + 1 = 0x%x, idx << 22 = 0x%x\n",
d, d,
snd_gf1_peek(gus, local), snd_gf1_peek(gus, local),
snd_gf1_peek(gus, local + 1), snd_gf1_peek(gus, local + 1),
...@@ -356,7 +357,8 @@ static void __devinit snd_interwave_bank_sizes(struct snd_gus_card * gus, int *s ...@@ -356,7 +357,8 @@ static void __devinit snd_interwave_bank_sizes(struct snd_gus_card * gus, int *s
} }
} }
#if 0 #if 0
printk("sizes: %i %i %i %i\n", sizes[0], sizes[1], sizes[2], sizes[3]); printk(KERN_DEBUG "sizes: %i %i %i %i\n",
sizes[0], sizes[1], sizes[2], sizes[3]);
#endif #endif
} }
...@@ -410,12 +412,12 @@ static void __devinit snd_interwave_detect_memory(struct snd_gus_card * gus) ...@@ -410,12 +412,12 @@ static void __devinit snd_interwave_detect_memory(struct snd_gus_card * gus)
lmct = (psizes[3] << 24) | (psizes[2] << 16) | lmct = (psizes[3] << 24) | (psizes[2] << 16) |
(psizes[1] << 8) | psizes[0]; (psizes[1] << 8) | psizes[0];
#if 0 #if 0
printk("lmct = 0x%08x\n", lmct); printk(KERN_DEBUG "lmct = 0x%08x\n", lmct);
#endif #endif
for (i = 0; i < ARRAY_SIZE(lmc); i++) for (i = 0; i < ARRAY_SIZE(lmc); i++)
if (lmct == lmc[i]) { if (lmct == lmc[i]) {
#if 0 #if 0
printk("found !!! %i\n", i); printk(KERN_DEBUG "found !!! %i\n", i);
#endif #endif
snd_gf1_write16(gus, SNDRV_GF1_GW_MEMORY_CONFIG, (snd_gf1_look16(gus, SNDRV_GF1_GW_MEMORY_CONFIG) & 0xfff0) | i); snd_gf1_write16(gus, SNDRV_GF1_GW_MEMORY_CONFIG, (snd_gf1_look16(gus, SNDRV_GF1_GW_MEMORY_CONFIG) & 0xfff0) | i);
snd_interwave_bank_sizes(gus, psizes); snd_interwave_bank_sizes(gus, psizes);
......
...@@ -179,12 +179,13 @@ static unsigned char __snd_opl3sa2_read(struct snd_opl3sa2 *chip, unsigned char ...@@ -179,12 +179,13 @@ static unsigned char __snd_opl3sa2_read(struct snd_opl3sa2 *chip, unsigned char
unsigned char result; unsigned char result;
#if 0 #if 0
outb(0x1d, port); /* password */ outb(0x1d, port); /* password */
printk("read [0x%lx] = 0x%x\n", port, inb(port)); printk(KERN_DEBUG "read [0x%lx] = 0x%x\n", port, inb(port));
#endif #endif
outb(reg, chip->port); /* register */ outb(reg, chip->port); /* register */
result = inb(chip->port + 1); result = inb(chip->port + 1);
#if 0 #if 0
printk("read [0x%lx] = 0x%x [0x%x]\n", port, result, inb(port)); printk(KERN_DEBUG "read [0x%lx] = 0x%x [0x%x]\n",
port, result, inb(port));
#endif #endif
return result; return result;
} }
...@@ -233,7 +234,10 @@ static int __devinit snd_opl3sa2_detect(struct snd_card *card) ...@@ -233,7 +234,10 @@ static int __devinit snd_opl3sa2_detect(struct snd_card *card)
snd_printk(KERN_ERR PFX "can't grab port 0x%lx\n", port); snd_printk(KERN_ERR PFX "can't grab port 0x%lx\n", port);
return -EBUSY; return -EBUSY;
} }
// snd_printk("REG 0A = 0x%x\n", snd_opl3sa2_read(chip, 0x0a)); /*
snd_printk(KERN_DEBUG "REG 0A = 0x%x\n",
snd_opl3sa2_read(chip, 0x0a));
*/
chip->version = 0; chip->version = 0;
tmp = snd_opl3sa2_read(chip, OPL3SA2_MISC); tmp = snd_opl3sa2_read(chip, OPL3SA2_MISC);
if (tmp == 0xff) { if (tmp == 0xff) {
......
...@@ -252,7 +252,7 @@ static int __devinit snd_opti9xx_init(struct snd_opti9xx *chip, ...@@ -252,7 +252,7 @@ static int __devinit snd_opti9xx_init(struct snd_opti9xx *chip,
#endif /* OPTi93X */ #endif /* OPTi93X */
default: default:
snd_printk("chip %d not supported\n", hardware); snd_printk(KERN_ERR "chip %d not supported\n", hardware);
return -ENODEV; return -ENODEV;
} }
return 0; return 0;
...@@ -294,7 +294,7 @@ static unsigned char snd_opti9xx_read(struct snd_opti9xx *chip, ...@@ -294,7 +294,7 @@ static unsigned char snd_opti9xx_read(struct snd_opti9xx *chip,
#endif /* OPTi93X */ #endif /* OPTi93X */
default: default:
snd_printk("chip %d not supported\n", chip->hardware); snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware);
} }
spin_unlock_irqrestore(&chip->lock, flags); spin_unlock_irqrestore(&chip->lock, flags);
...@@ -336,7 +336,7 @@ static void snd_opti9xx_write(struct snd_opti9xx *chip, unsigned char reg, ...@@ -336,7 +336,7 @@ static void snd_opti9xx_write(struct snd_opti9xx *chip, unsigned char reg,
#endif /* OPTi93X */ #endif /* OPTi93X */
default: default:
snd_printk("chip %d not supported\n", chip->hardware); snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware);
} }
spin_unlock_irqrestore(&chip->lock, flags); spin_unlock_irqrestore(&chip->lock, flags);
...@@ -412,7 +412,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -412,7 +412,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
#endif /* OPTi93X */ #endif /* OPTi93X */
default: default:
snd_printk("chip %d not supported\n", chip->hardware); snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware);
return -EINVAL; return -EINVAL;
} }
...@@ -430,7 +430,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -430,7 +430,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
wss_base_bits = 0x02; wss_base_bits = 0x02;
break; break;
default: default:
snd_printk("WSS port 0x%lx not valid\n", chip->wss_base); snd_printk(KERN_WARNING "WSS port 0x%lx not valid\n",
chip->wss_base);
goto __skip_base; goto __skip_base;
} }
snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), wss_base_bits << 4, 0x30); snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), wss_base_bits << 4, 0x30);
...@@ -455,7 +456,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -455,7 +456,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
irq_bits = 0x04; irq_bits = 0x04;
break; break;
default: default:
snd_printk("WSS irq # %d not valid\n", chip->irq); snd_printk(KERN_WARNING "WSS irq # %d not valid\n", chip->irq);
goto __skip_resources; goto __skip_resources;
} }
...@@ -470,13 +471,14 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -470,13 +471,14 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
dma_bits = 0x03; dma_bits = 0x03;
break; break;
default: default:
snd_printk("WSS dma1 # %d not valid\n", chip->dma1); snd_printk(KERN_WARNING "WSS dma1 # %d not valid\n",
chip->dma1);
goto __skip_resources; goto __skip_resources;
} }
#if defined(CS4231) || defined(OPTi93X) #if defined(CS4231) || defined(OPTi93X)
if (chip->dma1 == chip->dma2) { if (chip->dma1 == chip->dma2) {
snd_printk("don't want to share dmas\n"); snd_printk(KERN_ERR "don't want to share dmas\n");
return -EBUSY; return -EBUSY;
} }
...@@ -485,7 +487,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -485,7 +487,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
case 1: case 1:
break; break;
default: default:
snd_printk("WSS dma2 # %d not valid\n", chip->dma2); snd_printk(KERN_WARNING "WSS dma2 # %d not valid\n",
chip->dma2);
goto __skip_resources; goto __skip_resources;
} }
dma_bits |= 0x04; dma_bits |= 0x04;
...@@ -516,7 +519,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -516,7 +519,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
mpu_port_bits = 0x00; mpu_port_bits = 0x00;
break; break;
default: default:
snd_printk("MPU-401 port 0x%lx not valid\n", snd_printk(KERN_WARNING
"MPU-401 port 0x%lx not valid\n",
chip->mpu_port); chip->mpu_port);
goto __skip_mpu; goto __skip_mpu;
} }
...@@ -535,7 +539,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip) ...@@ -535,7 +539,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
mpu_irq_bits = 0x01; mpu_irq_bits = 0x01;
break; break;
default: default:
snd_printk("MPU-401 irq # %d not valid\n", snd_printk(KERN_WARNING "MPU-401 irq # %d not valid\n",
chip->mpu_irq); chip->mpu_irq);
goto __skip_mpu; goto __skip_mpu;
} }
...@@ -726,7 +730,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card) ...@@ -726,7 +730,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card)
if (chip->wss_base == SNDRV_AUTO_PORT) { if (chip->wss_base == SNDRV_AUTO_PORT) {
chip->wss_base = snd_legacy_find_free_ioport(possible_ports, 4); chip->wss_base = snd_legacy_find_free_ioport(possible_ports, 4);
if (chip->wss_base < 0) { if (chip->wss_base < 0) {
snd_printk("unable to find a free WSS port\n"); snd_printk(KERN_ERR "unable to find a free WSS port\n");
return -EBUSY; return -EBUSY;
} }
} }
...@@ -815,14 +819,8 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card) ...@@ -815,14 +819,8 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card)
chip->fm_port, chip->fm_port + 4 - 1); chip->fm_port, chip->fm_port + 4 - 1);
} }
if (opl3) { if (opl3) {
#ifdef CS4231 error = snd_opl3_hwdep_new(opl3, 0, 1, &synth);
const int t1dev = 1; if (error < 0)
#else
const int t1dev = 0;
#endif
if ((error = snd_opl3_timer_new(opl3, t1dev, t1dev+1)) < 0)
return error;
if ((error = snd_opl3_hwdep_new(opl3, 0, 1, &synth)) < 0)
return error; return error;
} }
} }
...@@ -900,7 +898,7 @@ static int __devinit snd_opti9xx_isa_probe(struct device *devptr, ...@@ -900,7 +898,7 @@ static int __devinit snd_opti9xx_isa_probe(struct device *devptr,
#if defined(CS4231) || defined(OPTi93X) #if defined(CS4231) || defined(OPTi93X)
if (dma2 == SNDRV_AUTO_DMA) { if (dma2 == SNDRV_AUTO_DMA) {
if ((dma2 = snd_legacy_find_free_dma(possible_dma2s[dma1 % 4])) < 0) { if ((dma2 = snd_legacy_find_free_dma(possible_dma2s[dma1 % 4])) < 0) {
snd_printk("unable to find a free DMA2\n"); snd_printk(KERN_ERR "unable to find a free DMA2\n");
return -EBUSY; return -EBUSY;
} }
} }
......
...@@ -576,10 +576,6 @@ static int __devinit snd_sc6000_probe(struct device *devptr, unsigned int dev) ...@@ -576,10 +576,6 @@ static int __devinit snd_sc6000_probe(struct device *devptr, unsigned int dev)
snd_printk(KERN_ERR PFX "no OPL device at 0x%x-0x%x ?\n", snd_printk(KERN_ERR PFX "no OPL device at 0x%x-0x%x ?\n",
0x388, 0x388 + 2); 0x388, 0x388 + 2);
} else { } else {
err = snd_opl3_timer_new(opl3, 0, 1);
if (err < 0)
goto err_unmap2;
err = snd_opl3_hwdep_new(opl3, 0, 1, NULL); err = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
if (err < 0) if (err < 0)
goto err_unmap2; goto err_unmap2;
......
...@@ -553,11 +553,11 @@ static int __devinit snd_wavefront_isa_match(struct device *pdev, ...@@ -553,11 +553,11 @@ static int __devinit snd_wavefront_isa_match(struct device *pdev,
return 0; return 0;
#endif #endif
if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) { if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) {
snd_printk("specify CS4232 port\n"); snd_printk(KERN_ERR "specify CS4232 port\n");
return 0; return 0;
} }
if (ics2115_port[dev] == SNDRV_AUTO_PORT) { if (ics2115_port[dev] == SNDRV_AUTO_PORT) {
snd_printk("specify ICS2115 port\n"); snd_printk(KERN_ERR "specify ICS2115 port\n");
return 0; return 0;
} }
return 1; return 1;
......
...@@ -633,7 +633,7 @@ wavefront_get_sample_status (snd_wavefront_t *dev, int assume_rom) ...@@ -633,7 +633,7 @@ wavefront_get_sample_status (snd_wavefront_t *dev, int assume_rom)
wbuf[1] = i >> 7; wbuf[1] = i >> 7;
if (snd_wavefront_cmd (dev, WFC_IDENTIFY_SAMPLE_TYPE, rbuf, wbuf)) { if (snd_wavefront_cmd (dev, WFC_IDENTIFY_SAMPLE_TYPE, rbuf, wbuf)) {
snd_printk("cannot identify sample " snd_printk(KERN_WARNING "cannot identify sample "
"type of slot %d\n", i); "type of slot %d\n", i);
dev->sample_status[i] = WF_ST_EMPTY; dev->sample_status[i] = WF_ST_EMPTY;
continue; continue;
......
...@@ -219,7 +219,8 @@ void snd_wss_out(struct snd_wss *chip, unsigned char reg, unsigned char value) ...@@ -219,7 +219,8 @@ void snd_wss_out(struct snd_wss *chip, unsigned char reg, unsigned char value)
snd_wss_wait(chip); snd_wss_wait(chip);
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT)
snd_printk("out: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); snd_printk(KERN_DEBUG "out: auto calibration time out "
"- reg = 0x%x, value = 0x%x\n", reg, value);
#endif #endif
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg); wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg);
wss_outb(chip, CS4231P(REG), value); wss_outb(chip, CS4231P(REG), value);
...@@ -235,7 +236,8 @@ unsigned char snd_wss_in(struct snd_wss *chip, unsigned char reg) ...@@ -235,7 +236,8 @@ unsigned char snd_wss_in(struct snd_wss *chip, unsigned char reg)
snd_wss_wait(chip); snd_wss_wait(chip);
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT)
snd_printk("in: auto calibration time out - reg = 0x%x\n", reg); snd_printk(KERN_DEBUG "in: auto calibration time out "
"- reg = 0x%x\n", reg);
#endif #endif
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg); wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg);
mb(); mb();
...@@ -252,7 +254,7 @@ void snd_cs4236_ext_out(struct snd_wss *chip, unsigned char reg, ...@@ -252,7 +254,7 @@ void snd_cs4236_ext_out(struct snd_wss *chip, unsigned char reg,
wss_outb(chip, CS4231P(REG), val); wss_outb(chip, CS4231P(REG), val);
chip->eimage[CS4236_REG(reg)] = val; chip->eimage[CS4236_REG(reg)] = val;
#if 0 #if 0
printk("ext out : reg = 0x%x, val = 0x%x\n", reg, val); printk(KERN_DEBUG "ext out : reg = 0x%x, val = 0x%x\n", reg, val);
#endif #endif
} }
EXPORT_SYMBOL(snd_cs4236_ext_out); EXPORT_SYMBOL(snd_cs4236_ext_out);
...@@ -268,7 +270,8 @@ unsigned char snd_cs4236_ext_in(struct snd_wss *chip, unsigned char reg) ...@@ -268,7 +270,8 @@ unsigned char snd_cs4236_ext_in(struct snd_wss *chip, unsigned char reg)
{ {
unsigned char res; unsigned char res;
res = wss_inb(chip, CS4231P(REG)); res = wss_inb(chip, CS4231P(REG));
printk("ext in : reg = 0x%x, val = 0x%x\n", reg, res); printk(KERN_DEBUG "ext in : reg = 0x%x, val = 0x%x\n",
reg, res);
return res; return res;
} }
#endif #endif
...@@ -394,13 +397,16 @@ void snd_wss_mce_up(struct snd_wss *chip) ...@@ -394,13 +397,16 @@ void snd_wss_mce_up(struct snd_wss *chip)
snd_wss_wait(chip); snd_wss_wait(chip);
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT)
snd_printk("mce_up - auto calibration time out (0)\n"); snd_printk(KERN_DEBUG
"mce_up - auto calibration time out (0)\n");
#endif #endif
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
chip->mce_bit |= CS4231_MCE; chip->mce_bit |= CS4231_MCE;
timeout = wss_inb(chip, CS4231P(REGSEL)); timeout = wss_inb(chip, CS4231P(REGSEL));
if (timeout == 0x80) if (timeout == 0x80)
snd_printk("mce_up [0x%lx]: serious init problem - codec still busy\n", chip->port); snd_printk(KERN_DEBUG "mce_up [0x%lx]: "
"serious init problem - codec still busy\n",
chip->port);
if (!(timeout & CS4231_MCE)) if (!(timeout & CS4231_MCE))
wss_outb(chip, CS4231P(REGSEL), wss_outb(chip, CS4231P(REGSEL),
chip->mce_bit | (timeout & 0x1f)); chip->mce_bit | (timeout & 0x1f));
...@@ -419,7 +425,9 @@ void snd_wss_mce_down(struct snd_wss *chip) ...@@ -419,7 +425,9 @@ void snd_wss_mce_down(struct snd_wss *chip)
#ifdef CONFIG_SND_DEBUG #ifdef CONFIG_SND_DEBUG
if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) if (wss_inb(chip, CS4231P(REGSEL)) & CS4231_INIT)
snd_printk("mce_down [0x%lx] - auto calibration time out (0)\n", (long)CS4231P(REGSEL)); snd_printk(KERN_DEBUG "mce_down [0x%lx] - "
"auto calibration time out (0)\n",
(long)CS4231P(REGSEL));
#endif #endif
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
chip->mce_bit &= ~CS4231_MCE; chip->mce_bit &= ~CS4231_MCE;
...@@ -427,7 +435,9 @@ void snd_wss_mce_down(struct snd_wss *chip) ...@@ -427,7 +435,9 @@ void snd_wss_mce_down(struct snd_wss *chip)
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f));
spin_unlock_irqrestore(&chip->reg_lock, flags); spin_unlock_irqrestore(&chip->reg_lock, flags);
if (timeout == 0x80) if (timeout == 0x80)
snd_printk("mce_down [0x%lx]: serious init problem - codec still busy\n", chip->port); snd_printk(KERN_DEBUG "mce_down [0x%lx]: "
"serious init problem - codec still busy\n",
chip->port);
if ((timeout & CS4231_MCE) == 0 || !(chip->hardware & hw_mask)) if ((timeout & CS4231_MCE) == 0 || !(chip->hardware & hw_mask))
return; return;
...@@ -565,7 +575,7 @@ static unsigned char snd_wss_get_format(struct snd_wss *chip, ...@@ -565,7 +575,7 @@ static unsigned char snd_wss_get_format(struct snd_wss *chip,
if (channels > 1) if (channels > 1)
rformat |= CS4231_STEREO; rformat |= CS4231_STEREO;
#if 0 #if 0
snd_printk("get_format: 0x%x (mode=0x%x)\n", format, mode); snd_printk(KERN_DEBUG "get_format: 0x%x (mode=0x%x)\n", format, mode);
#endif #endif
return rformat; return rformat;
} }
...@@ -774,7 +784,7 @@ static void snd_wss_init(struct snd_wss *chip) ...@@ -774,7 +784,7 @@ static void snd_wss_init(struct snd_wss *chip)
snd_wss_mce_down(chip); snd_wss_mce_down(chip);
#ifdef SNDRV_DEBUG_MCE #ifdef SNDRV_DEBUG_MCE
snd_printk("init: (1)\n"); snd_printk(KERN_DEBUG "init: (1)\n");
#endif #endif
snd_wss_mce_up(chip); snd_wss_mce_up(chip);
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
...@@ -789,7 +799,7 @@ static void snd_wss_init(struct snd_wss *chip) ...@@ -789,7 +799,7 @@ static void snd_wss_init(struct snd_wss *chip)
snd_wss_mce_down(chip); snd_wss_mce_down(chip);
#ifdef SNDRV_DEBUG_MCE #ifdef SNDRV_DEBUG_MCE
snd_printk("init: (2)\n"); snd_printk(KERN_DEBUG "init: (2)\n");
#endif #endif
snd_wss_mce_up(chip); snd_wss_mce_up(chip);
...@@ -800,7 +810,7 @@ static void snd_wss_init(struct snd_wss *chip) ...@@ -800,7 +810,7 @@ static void snd_wss_init(struct snd_wss *chip)
snd_wss_mce_down(chip); snd_wss_mce_down(chip);
#ifdef SNDRV_DEBUG_MCE #ifdef SNDRV_DEBUG_MCE
snd_printk("init: (3) - afei = 0x%x\n", snd_printk(KERN_DEBUG "init: (3) - afei = 0x%x\n",
chip->image[CS4231_ALT_FEATURE_1]); chip->image[CS4231_ALT_FEATURE_1]);
#endif #endif
...@@ -817,7 +827,7 @@ static void snd_wss_init(struct snd_wss *chip) ...@@ -817,7 +827,7 @@ static void snd_wss_init(struct snd_wss *chip)
snd_wss_mce_down(chip); snd_wss_mce_down(chip);
#ifdef SNDRV_DEBUG_MCE #ifdef SNDRV_DEBUG_MCE
snd_printk("init: (4)\n"); snd_printk(KERN_DEBUG "init: (4)\n");
#endif #endif
snd_wss_mce_up(chip); snd_wss_mce_up(chip);
...@@ -829,7 +839,7 @@ static void snd_wss_init(struct snd_wss *chip) ...@@ -829,7 +839,7 @@ static void snd_wss_init(struct snd_wss *chip)
snd_wss_mce_down(chip); snd_wss_mce_down(chip);
#ifdef SNDRV_DEBUG_MCE #ifdef SNDRV_DEBUG_MCE
snd_printk("init: (5)\n"); snd_printk(KERN_DEBUG "init: (5)\n");
#endif #endif
} }
...@@ -1278,7 +1288,8 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1278,7 +1288,8 @@ static int snd_wss_probe(struct snd_wss *chip)
} else if (rev == 0x03) { } else if (rev == 0x03) {
chip->hardware = WSS_HW_CS4236B; chip->hardware = WSS_HW_CS4236B;
} else { } else {
snd_printk("unknown CS chip with version 0x%x\n", rev); snd_printk(KERN_ERR
"unknown CS chip with version 0x%x\n", rev);
return -ENODEV; /* unknown CS4231 chip? */ return -ENODEV; /* unknown CS4231 chip? */
} }
} }
...@@ -1342,7 +1353,10 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1342,7 +1353,10 @@ static int snd_wss_probe(struct snd_wss *chip)
case 6: case 6:
break; break;
default: default:
snd_printk("unknown CS4235 chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4235 chip "
"(enhanced version = 0x%x)\n",
id);
} }
} else if ((id & 0x1f) == 0x0b) { /* CS4236/B */ } else if ((id & 0x1f) == 0x0b) { /* CS4236/B */
switch (id >> 5) { switch (id >> 5) {
...@@ -1353,7 +1367,10 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1353,7 +1367,10 @@ static int snd_wss_probe(struct snd_wss *chip)
chip->hardware = WSS_HW_CS4236B; chip->hardware = WSS_HW_CS4236B;
break; break;
default: default:
snd_printk("unknown CS4236 chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4236 chip "
"(enhanced version = 0x%x)\n",
id);
} }
} else if ((id & 0x1f) == 0x08) { /* CS4237B */ } else if ((id & 0x1f) == 0x08) { /* CS4237B */
chip->hardware = WSS_HW_CS4237B; chip->hardware = WSS_HW_CS4237B;
...@@ -1364,7 +1381,10 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1364,7 +1381,10 @@ static int snd_wss_probe(struct snd_wss *chip)
case 7: case 7:
break; break;
default: default:
snd_printk("unknown CS4237B chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4237B chip "
"(enhanced version = 0x%x)\n",
id);
} }
} else if ((id & 0x1f) == 0x09) { /* CS4238B */ } else if ((id & 0x1f) == 0x09) { /* CS4238B */
chip->hardware = WSS_HW_CS4238B; chip->hardware = WSS_HW_CS4238B;
...@@ -1374,7 +1394,10 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1374,7 +1394,10 @@ static int snd_wss_probe(struct snd_wss *chip)
case 7: case 7:
break; break;
default: default:
snd_printk("unknown CS4238B chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4238B chip "
"(enhanced version = 0x%x)\n",
id);
} }
} else if ((id & 0x1f) == 0x1e) { /* CS4239 */ } else if ((id & 0x1f) == 0x1e) { /* CS4239 */
chip->hardware = WSS_HW_CS4239; chip->hardware = WSS_HW_CS4239;
...@@ -1384,10 +1407,15 @@ static int snd_wss_probe(struct snd_wss *chip) ...@@ -1384,10 +1407,15 @@ static int snd_wss_probe(struct snd_wss *chip)
case 6: case 6:
break; break;
default: default:
snd_printk("unknown CS4239 chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4239 chip "
"(enhanced version = 0x%x)\n",
id);
} }
} else { } else {
snd_printk("unknown CS4236/CS423xB chip (enhanced version = 0x%x)\n", id); snd_printk(KERN_WARNING
"unknown CS4236/CS423xB chip "
"(enhanced version = 0x%x)\n", id);
} }
} }
} }
...@@ -1618,7 +1646,8 @@ static void snd_wss_resume(struct snd_wss *chip) ...@@ -1618,7 +1646,8 @@ static void snd_wss_resume(struct snd_wss *chip)
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f)); wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f));
spin_unlock_irqrestore(&chip->reg_lock, flags); spin_unlock_irqrestore(&chip->reg_lock, flags);
if (timeout == 0x80) if (timeout == 0x80)
snd_printk("down [0x%lx]: serious init problem - codec still busy\n", chip->port); snd_printk(KERN_ERR "down [0x%lx]: serious init problem "
"- codec still busy\n", chip->port);
if ((timeout & CS4231_MCE) == 0 || if ((timeout & CS4231_MCE) == 0 ||
!(chip->hardware & (WSS_HW_CS4231_MASK | WSS_HW_CS4232_MASK))) { !(chip->hardware & (WSS_HW_CS4231_MASK | WSS_HW_CS4232_MASK))) {
return; return;
...@@ -1628,7 +1657,7 @@ static void snd_wss_resume(struct snd_wss *chip) ...@@ -1628,7 +1657,7 @@ static void snd_wss_resume(struct snd_wss *chip)
} }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
static int snd_wss_free(struct snd_wss *chip) int snd_wss_free(struct snd_wss *chip)
{ {
release_and_free_resource(chip->res_port); release_and_free_resource(chip->res_port);
release_and_free_resource(chip->res_cport); release_and_free_resource(chip->res_cport);
...@@ -1651,6 +1680,7 @@ static int snd_wss_free(struct snd_wss *chip) ...@@ -1651,6 +1680,7 @@ static int snd_wss_free(struct snd_wss *chip)
kfree(chip); kfree(chip);
return 0; return 0;
} }
EXPORT_SYMBOL(snd_wss_free);
static int snd_wss_dev_free(struct snd_device *device) static int snd_wss_dev_free(struct snd_device *device)
{ {
...@@ -1820,7 +1850,8 @@ int snd_wss_create(struct snd_card *card, ...@@ -1820,7 +1850,8 @@ int snd_wss_create(struct snd_card *card,
#if 0 #if 0
if (chip->hardware & WSS_HW_CS4232_MASK) { if (chip->hardware & WSS_HW_CS4232_MASK) {
if (chip->res_cport == NULL) if (chip->res_cport == NULL)
snd_printk("CS4232 control port features are not accessible\n"); snd_printk(KERN_ERR "CS4232 control port features are "
"not accessible\n");
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment