Merge branch 'topic/cs423x-merge' into for-linus
This commit is contained in:
commit
a3c6048dcf
|
@ -346,6 +346,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||
sbirq - IRQ # for CMI8330 chip (SB16)
|
||||
sbdma8 - 8bit 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.
|
||||
|
||||
|
@ -388,34 +391,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||
|
||||
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 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.
|
||||
|
||||
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.
|
|||
|
||||
The power-management is supported.
|
||||
|
||||
This module is aliased as snd-cs4232 since it provides the old
|
||||
snd-cs4232 functionality, too.
|
||||
|
||||
Module snd-cs4281
|
||||
-----------------
|
||||
|
||||
|
@ -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.
|
||||
|
||||
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)
|
||||
irq - IRQ # for ES-1688 chip (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,
|
|||
|
||||
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_timer(struct snd_ad1816a *chip, int device,
|
||||
struct snd_timer **rtimer);
|
||||
|
||||
#endif /* __SOUND_AD1816A_H */
|
||||
|
|
|
@ -154,6 +154,7 @@ int snd_wss_create(struct snd_card *card,
|
|||
unsigned short hardware,
|
||||
unsigned short hwshare,
|
||||
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_timer(struct snd_wss *chip, int device, struct snd_timer **rtimer);
|
||||
int snd_wss_mixer(struct snd_wss *chip);
|
||||
|
|
|
@ -56,8 +56,8 @@ config SND_AD1848
|
|||
Say Y here to include support for AD1848 (Analog Devices) or
|
||||
CS4248 (Cirrus Logic - Crystal Semiconductors) chips.
|
||||
|
||||
For newer chips from Cirrus Logic, use the CS4231, CS4232 or
|
||||
CS4236+ drivers.
|
||||
For newer chips from Cirrus Logic, use the CS4231 or CS4232+
|
||||
drivers.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called snd-ad1848.
|
||||
|
@ -94,6 +94,8 @@ config SND_CMI8330
|
|||
tristate "C-Media CMI8330"
|
||||
select SND_WSS_LIB
|
||||
select SND_SB16_DSP
|
||||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
help
|
||||
Say Y here to include support for soundcards based on the
|
||||
C-Media CMI8330 chip.
|
||||
|
@ -112,26 +114,15 @@ config SND_CS4231
|
|||
To compile this driver as a module, choose M here: the module
|
||||
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
|
||||
tristate "Generic Cirrus Logic CS4236+ driver"
|
||||
tristate "Generic Cirrus Logic CS4232/CS4236+ driver"
|
||||
select SND_OPL3_LIB
|
||||
select SND_MPU401_UART
|
||||
select SND_WSS_LIB
|
||||
help
|
||||
Say Y to include support for CS4235,CS4236,CS4237B,CS4238B,
|
||||
CS4239 chips from Cirrus Logic - Crystal Semiconductors.
|
||||
Say Y to include support for CS4232,CS4235,CS4236,CS4237B,
|
||||
CS4238B,CS4239 chips from Cirrus Logic - Crystal
|
||||
Semiconductors.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called snd-cs4236.
|
||||
|
|
|
@ -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_ad1816a *chip;
|
||||
struct snd_opl3 *opl3;
|
||||
struct snd_timer *timer;
|
||||
|
||||
error = snd_card_create(index[dev], id[dev], THIS_MODULE,
|
||||
sizeof(struct snd_card_ad1816a), &card);
|
||||
|
@ -195,6 +196,12 @@ static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard
|
|||
return error;
|
||||
}
|
||||
|
||||
error = snd_ad1816a_timer(chip, 0, &timer);
|
||||
if (error < 0) {
|
||||
snd_card_free(card);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (mpu_port[dev] > 0) {
|
||||
if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
|
||||
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
|
|||
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);
|
||||
} else {
|
||||
if ((error = snd_opl3_timer_new(opl3, 1, 2)) < 0) {
|
||||
snd_card_free(card);
|
||||
return error;
|
||||
}
|
||||
if ((error = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
|
||||
error = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
|
||||
if (error < 0) {
|
||||
snd_card_free(card);
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ static inline int snd_ad1816a_busy_wait(struct snd_ad1816a *chip)
|
|||
if (inb(AD1816A_REG(AD1816A_CHIP_STATUS)) & AD1816A_READY)
|
||||
return 0;
|
||||
|
||||
snd_printk("chip busy.\n");
|
||||
snd_printk(KERN_WARNING "chip busy.\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
@ -196,7 +196,7 @@ static int snd_ad1816a_trigger(struct snd_ad1816a *chip, unsigned char what,
|
|||
spin_unlock(&chip->lock);
|
||||
break;
|
||||
default:
|
||||
snd_printk("invalid trigger mode 0x%x.\n", what);
|
||||
snd_printk(KERN_WARNING "invalid trigger mode 0x%x.\n", what);
|
||||
error = -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -377,7 +377,6 @@ static struct snd_pcm_hardware snd_ad1816a_capture = {
|
|||
.fifo_size = 0,
|
||||
};
|
||||
|
||||
#if 0 /* not used now */
|
||||
static int snd_ad1816a_timer_close(struct snd_timer *timer)
|
||||
{
|
||||
struct snd_ad1816a *chip = snd_timer_chip(timer);
|
||||
|
@ -442,8 +441,6 @@ static struct snd_timer_hardware snd_ad1816a_timer_table = {
|
|||
.start = snd_ad1816a_timer_start,
|
||||
.stop = snd_ad1816a_timer_stop,
|
||||
};
|
||||
#endif /* not used now */
|
||||
|
||||
|
||||
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)
|
|||
case AD1816A_HW_AD1815: return "AD1815";
|
||||
case AD1816A_HW_AD18MAX10: return "AD18max10";
|
||||
default:
|
||||
snd_printk("Unknown chip version %d:%d.\n",
|
||||
snd_printk(KERN_WARNING "Unknown chip version %d:%d.\n",
|
||||
chip->version, chip->hardware);
|
||||
return "AD1816A - unknown";
|
||||
}
|
||||
|
@ -687,7 +684,6 @@ int __devinit snd_ad1816a_pcm(struct snd_ad1816a *chip, int device, struct snd_p
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if 0 /* not used now */
|
||||
int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd_timer **rtimer)
|
||||
{
|
||||
struct snd_timer *timer;
|
||||
|
@ -709,7 +705,6 @@ int __devinit snd_ad1816a_timer(struct snd_ad1816a *chip, int device, struct snd
|
|||
*rtimer = timer;
|
||||
return 0;
|
||||
}
|
||||
#endif /* not used now */
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
* To quickly load the module,
|
||||
*
|
||||
* 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
|
||||
* 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
|
||||
* to some extent.
|
||||
* The utilities in alsa-utils are aware of both devices, so passing
|
||||
|
@ -51,6 +51,8 @@
|
|||
#include <linux/moduleparam.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/wss.h>
|
||||
#include <sound/opl3.h>
|
||||
#include <sound/mpu401.h>
|
||||
#include <sound/sb.h>
|
||||
#include <sound/initval.h>
|
||||
|
||||
|
@ -79,6 +81,9 @@ static int sbdma16[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
|
|||
static long wssport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT;
|
||||
static int wssirq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
|
||||
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_PARM_DESC(index, "Index value for CMI8330 soundcard.");
|
||||
|
@ -107,6 +112,12 @@ MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330 WSS driver.");
|
|||
module_param_array(wssdma, int, NULL, 0444);
|
||||
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
|
||||
static int isa_registered;
|
||||
static int pnp_registered;
|
||||
|
@ -149,6 +160,7 @@ struct snd_cmi8330 {
|
|||
#ifdef CONFIG_PNP
|
||||
struct pnp_dev *cap;
|
||||
struct pnp_dev *play;
|
||||
struct pnp_dev *mpu;
|
||||
#endif
|
||||
struct snd_card *card;
|
||||
struct snd_wss *wss;
|
||||
|
@ -165,7 +177,7 @@ struct snd_cmi8330 {
|
|||
#ifdef CONFIG_PNP
|
||||
|
||||
static struct pnp_card_device_id snd_cmi8330_pnpids[] = {
|
||||
{ .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" } } },
|
||||
{ .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" } } },
|
||||
{ .id = "" }
|
||||
};
|
||||
|
||||
|
@ -219,8 +231,10 @@ WSS_SINGLE("3D Control - Switch", 0,
|
|||
CMI8330_RMUX3D, 5, 1, 1),
|
||||
WSS_SINGLE("PC Speaker Playback Volume", 0,
|
||||
CMI8330_OUTPUTVOL, 3, 3, 0),
|
||||
WSS_SINGLE("FM Playback Switch", 0,
|
||||
CMI8330_RECMUX, 3, 1, 1),
|
||||
WSS_DOUBLE("FM Playback Switch", 0,
|
||||
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,
|
||||
CMI8330_RMUX3D, 7, 1, 1),
|
||||
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,
|
|||
if (acard->play == NULL)
|
||||
return -EBUSY;
|
||||
|
||||
acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL);
|
||||
if (acard->play == NULL)
|
||||
return -EBUSY;
|
||||
|
||||
pdev = acard->cap;
|
||||
|
||||
err = pnp_activate_dev(pdev);
|
||||
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;
|
||||
}
|
||||
wssport[dev] = pnp_port_start(pdev, 0);
|
||||
wssdma[dev] = pnp_dma(pdev, 0);
|
||||
wssirq[dev] = pnp_irq(pdev, 0);
|
||||
fmport[dev] = pnp_port_start(pdev, 1);
|
||||
|
||||
/* allocate SB16 resources */
|
||||
pdev = acard->play;
|
||||
|
@ -347,6 +366,17 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard,
|
|||
sbdma16[dev] = pnp_dma(pdev, 1);
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
@ -489,6 +519,7 @@ static int __devinit snd_cmi8330_probe(struct snd_card *card, int dev)
|
|||
{
|
||||
struct snd_cmi8330 *acard;
|
||||
int i, err;
|
||||
struct snd_opl3 *opl3;
|
||||
|
||||
acard = card->private_data;
|
||||
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)
|
|||
wssdma[dev], -1,
|
||||
WSS_HW_DETECT, 0, &acard->wss);
|
||||
if (err < 0) {
|
||||
snd_printk(KERN_ERR PFX "(AD1848) device busy??\n");
|
||||
snd_printk(KERN_ERR PFX "(CMI8330) device busy??\n");
|
||||
return err;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
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->shortname, "C-Media CMI8330/C3D");
|
||||
|
|
|
@ -3,13 +3,11 @@
|
|||
# Copyright (c) 2001 by Jaroslav Kysela <perex@perex.cz>
|
||||
#
|
||||
|
||||
snd-cs4236-lib-objs := cs4236_lib.o
|
||||
snd-cs4231-objs := cs4231.o
|
||||
snd-cs4232-objs := cs4232.o
|
||||
snd-cs4236-objs := cs4236.o
|
||||
snd-cs4236-objs := cs4236.o cs4236_lib.o
|
||||
|
||||
# Toplevel Module Dependency
|
||||
obj-$(CONFIG_SND_CS4231) += snd-cs4231.o
|
||||
obj-$(CONFIG_SND_CS4232) += snd-cs4232.o
|
||||
obj-$(CONFIG_SND_CS4236) += snd-cs4236.o snd-cs4236-lib.o
|
||||
obj-$(CONFIG_SND_CS4236) += snd-cs4236.o
|
||||
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
#define CS4232
|
||||
#include "cs4236.c"
|
|
@ -33,17 +33,14 @@
|
|||
|
||||
MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
|
||||
MODULE_LICENSE("GPL");
|
||||
#ifdef CS4232
|
||||
MODULE_DESCRIPTION("Cirrus Logic CS4232");
|
||||
MODULE_DESCRIPTION("Cirrus Logic CS4232-9");
|
||||
MODULE_SUPPORTED_DEVICE("{{Turtle Beach,TBS-2000},"
|
||||
"{Turtle Beach,Tropez Plus},"
|
||||
"{SIC CrystalWave 32},"
|
||||
"{Hewlett Packard,Omnibook 5500},"
|
||||
"{TerraTec,Maestro 32/96},"
|
||||
"{Philips,PCA70PS}}");
|
||||
#else
|
||||
MODULE_DESCRIPTION("Cirrus Logic CS4235-9");
|
||||
MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
|
||||
"{Philips,PCA70PS}},"
|
||||
"{{Crystal Semiconductors,CS4235},"
|
||||
"{Crystal Semiconductors,CS4236},"
|
||||
"{Crystal Semiconductors,CS4237},"
|
||||
"{Crystal Semiconductors,CS4238},"
|
||||
|
@ -70,15 +67,11 @@ MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
|
|||
"{Typhoon Soundsystem,CS4236B},"
|
||||
"{Turtle Beach,Malibu},"
|
||||
"{Unknown,Digital PC 5000 Onboard}}");
|
||||
#endif
|
||||
|
||||
#ifdef CS4232
|
||||
#define IDENT "CS4232"
|
||||
#define DEV_NAME "cs4232"
|
||||
#else
|
||||
#define IDENT "CS4236+"
|
||||
#define DEV_NAME "cs4236"
|
||||
#endif
|
||||
MODULE_ALIAS("snd_cs4232");
|
||||
|
||||
#define IDENT "CS4232+"
|
||||
#define DEV_NAME "cs4232+"
|
||||
|
||||
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
|
||||
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
|
||||
|
@ -128,9 +121,7 @@ MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver.");
|
|||
#ifdef CONFIG_PNP
|
||||
static int isa_registered;
|
||||
static int pnpc_registered;
|
||||
#ifdef CS4232
|
||||
static int pnp_registered;
|
||||
#endif
|
||||
#endif /* CONFIG_PNP */
|
||||
|
||||
struct snd_card_cs4236 {
|
||||
|
@ -145,11 +136,10 @@ struct snd_card_cs4236 {
|
|||
|
||||
#ifdef CONFIG_PNP
|
||||
|
||||
#ifdef CS4232
|
||||
/*
|
||||
* PNP BIOS
|
||||
*/
|
||||
static const struct pnp_device_id snd_cs4232_pnpbiosids[] = {
|
||||
static const struct pnp_device_id snd_cs423x_pnpbiosids[] = {
|
||||
{ .id = "CSC0100" },
|
||||
{ .id = "CSC0000" },
|
||||
/* Guillemot Turtlebeach something appears to be cs4232 compatible
|
||||
|
@ -157,10 +147,8 @@ static const struct pnp_device_id snd_cs4232_pnpbiosids[] = {
|
|||
{ .id = "GIM0100" },
|
||||
{ .id = "" }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pnp, snd_cs4232_pnpbiosids);
|
||||
#endif /* CS4232 */
|
||||
MODULE_DEVICE_TABLE(pnp, snd_cs423x_pnpbiosids);
|
||||
|
||||
#ifdef CS4232
|
||||
#define CS423X_ISAPNP_DRIVER "cs4232_isapnp"
|
||||
static struct pnp_card_device_id snd_cs423x_pnpids[] = {
|
||||
/* Philips PCA70PS */
|
||||
|
@ -179,12 +167,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = {
|
|||
{ .id = "CSCf032", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } },
|
||||
/* Netfinity 3000 on-board soundcard */
|
||||
{ .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 */
|
||||
{ .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } },
|
||||
/* Intel Marlin Spike Motherboard (#2) - CS4235 */
|
||||
|
@ -266,7 +248,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = {
|
|||
/* --- */
|
||||
{ .id = "" } /* end */
|
||||
};
|
||||
#endif
|
||||
|
||||
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)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CS4232
|
||||
static int __devinit snd_card_cs4232_pnp(int dev, struct snd_card_cs4236 *acard,
|
||||
struct pnp_dev *pdev)
|
||||
static int __devinit snd_card_cs423x_pnp(int dev, struct snd_card_cs4236 *acard,
|
||||
struct pnp_dev *pdev,
|
||||
struct pnp_dev *cdev)
|
||||
{
|
||||
acard->wss = pdev;
|
||||
if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0)
|
||||
return -EBUSY;
|
||||
cport[dev] = -1;
|
||||
if (cdev)
|
||||
cport[dev] = pnp_port_start(cdev, 0);
|
||||
else
|
||||
cport[dev] = -1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int __devinit snd_card_cs423x_pnpc(int dev, struct snd_card_cs4236 *acard,
|
||||
struct pnp_card_link *card,
|
||||
|
@ -411,40 +394,39 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev)
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
#ifdef CS4232
|
||||
err = snd_wss_create(card, port[dev], cport[dev],
|
||||
irq[dev],
|
||||
dma1[dev], dma2[dev],
|
||||
WSS_HW_DETECT, 0, &chip);
|
||||
WSS_HW_DETECT3, 0, &chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
acard->chip = chip;
|
||||
if (chip->hardware & WSS_HW_CS4236B_MASK) {
|
||||
snd_wss_free(chip);
|
||||
err = snd_cs4236_create(card,
|
||||
port[dev], cport[dev],
|
||||
irq[dev], dma1[dev], dma2[dev],
|
||||
WSS_HW_DETECT, 0, &chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
acard->chip = chip;
|
||||
|
||||
err = snd_wss_pcm(chip, 0, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_cs4236_pcm(chip, 0, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = snd_wss_mixer(chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_cs4236_mixer(chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
} else {
|
||||
acard->chip = chip;
|
||||
err = snd_wss_pcm(chip, 0, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
#else /* CS4236 */
|
||||
err = snd_cs4236_create(card,
|
||||
port[dev], cport[dev],
|
||||
irq[dev], dma1[dev], dma2[dev],
|
||||
WSS_HW_DETECT, 0, &chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
acard->chip = chip;
|
||||
|
||||
err = snd_cs4236_pcm(chip, 0, &pcm);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
err = snd_cs4236_mixer(chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
#endif
|
||||
err = snd_wss_mixer(chip);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
strcpy(card->driver, pcm->name);
|
||||
strcpy(card->shortname, pcm->name);
|
||||
sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i",
|
||||
|
@ -579,13 +561,14 @@ static struct isa_driver cs423x_isa_driver = {
|
|||
|
||||
|
||||
#ifdef CONFIG_PNP
|
||||
#ifdef CS4232
|
||||
static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
|
||||
static int __devinit snd_cs423x_pnpbios_detect(struct pnp_dev *pdev,
|
||||
const struct pnp_device_id *id)
|
||||
{
|
||||
static int dev;
|
||||
int err;
|
||||
struct snd_card *card;
|
||||
struct pnp_dev *cdev;
|
||||
char cid[PNP_ID_LEN];
|
||||
|
||||
if (pnp_device_is_isapnp(pdev))
|
||||
return -ENOENT; /* we have another procedure - card */
|
||||
|
@ -596,10 +579,19 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
|
|||
if (dev >= SNDRV_CARDS)
|
||||
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);
|
||||
if (err < 0)
|
||||
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");
|
||||
snd_card_free(card);
|
||||
return err;
|
||||
|
@ -614,35 +606,34 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev,
|
|||
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));
|
||||
pnp_set_drvdata(pdev, NULL);
|
||||
}
|
||||
|
||||
#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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct pnp_driver cs4232_pnp_driver = {
|
||||
.name = "cs4232-pnpbios",
|
||||
.id_table = snd_cs4232_pnpbiosids,
|
||||
.probe = snd_cs4232_pnpbios_detect,
|
||||
.remove = __devexit_p(snd_cs4232_pnp_remove),
|
||||
static struct pnp_driver cs423x_pnp_driver = {
|
||||
.name = "cs423x-pnpbios",
|
||||
.id_table = snd_cs423x_pnpbiosids,
|
||||
.probe = snd_cs423x_pnpbios_detect,
|
||||
.remove = __devexit_p(snd_cs423x_pnp_remove),
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = snd_cs4232_pnp_suspend,
|
||||
.resume = snd_cs4232_pnp_resume,
|
||||
.suspend = snd_cs423x_pnp_suspend,
|
||||
.resume = snd_cs423x_pnp_resume,
|
||||
#endif
|
||||
};
|
||||
#endif /* CS4232 */
|
||||
|
||||
static int __devinit snd_cs423x_pnpc_detect(struct pnp_card_link *pcard,
|
||||
const struct pnp_card_device_id *pid)
|
||||
|
@ -716,18 +707,14 @@ static int __init alsa_card_cs423x_init(void)
|
|||
#ifdef CONFIG_PNP
|
||||
if (!err)
|
||||
isa_registered = 1;
|
||||
#ifdef CS4232
|
||||
err = pnp_register_driver(&cs4232_pnp_driver);
|
||||
err = pnp_register_driver(&cs423x_pnp_driver);
|
||||
if (!err)
|
||||
pnp_registered = 1;
|
||||
#endif
|
||||
err = pnp_register_card_driver(&cs423x_pnpc_driver);
|
||||
if (!err)
|
||||
pnpc_registered = 1;
|
||||
#ifdef CS4232
|
||||
if (pnp_registered)
|
||||
err = 0;
|
||||
#endif
|
||||
if (isa_registered)
|
||||
err = 0;
|
||||
#endif
|
||||
|
@ -739,10 +726,8 @@ static void __exit alsa_card_cs423x_exit(void)
|
|||
#ifdef CONFIG_PNP
|
||||
if (pnpc_registered)
|
||||
pnp_unregister_card_driver(&cs423x_pnpc_driver);
|
||||
#ifdef CS4232
|
||||
if (pnp_registered)
|
||||
pnp_unregister_driver(&cs4232_pnp_driver);
|
||||
#endif
|
||||
pnp_unregister_driver(&cs423x_pnp_driver);
|
||||
if (isa_registered)
|
||||
#endif
|
||||
isa_unregister_driver(&cs423x_isa_driver);
|
||||
|
|
|
@ -88,10 +88,6 @@
|
|||
#include <sound/wss.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,
|
|||
if (hardware == WSS_HW_DETECT)
|
||||
hardware = WSS_HW_DETECT3;
|
||||
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;
|
||||
}
|
||||
err = snd_wss_create(card, port, cport,
|
||||
|
@ -295,7 +292,8 @@ int snd_cs4236_create(struct snd_card *card,
|
|||
return err;
|
||||
|
||||
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);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -303,16 +301,19 @@ int snd_cs4236_create(struct snd_card *card,
|
|||
{
|
||||
int 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++)
|
||||
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
|
||||
ver1 = snd_cs4236_ctrl_in(chip, 1);
|
||||
ver2 = snd_cs4236_ext_in(chip, CS4236_VERSION);
|
||||
snd_printdd("CS4236: [0x%lx] C1 (version) = 0x%x, ext = 0x%x\n", cport, 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);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -883,7 +884,8 @@ static int snd_cs4236_get_iec958_switch(struct snd_kcontrol *kcontrol, struct sn
|
|||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
ucontrol->value.integer.value[0] = chip->image[CS4231_ALT_FEATURE_1] & 0x02 ? 1 : 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_cs4236_ctrl_in(chip, 3),
|
||||
snd_cs4236_ctrl_in(chip, 4),
|
||||
|
@ -920,7 +922,8 @@ static int snd_cs4236_put_iec958_switch(struct snd_kcontrol *kcontrol, struct sn
|
|||
mutex_unlock(&chip->mce_mutex);
|
||||
|
||||
#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_cs4236_ctrl_in(chip, 3),
|
||||
snd_cs4236_ctrl_in(chip, 4),
|
||||
|
@ -1015,23 +1018,3 @@ int snd_cs4236_mixer(struct snd_wss *chip)
|
|||
}
|
||||
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 */
|
|||
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for 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 fm_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* Usually 0x388 */
|
||||
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 mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ; /* 5,7,9,10 */
|
||||
|
@ -65,6 +66,8 @@ MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
|
|||
module_param_array(mpu_port, long, NULL, 0444);
|
||||
MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
|
||||
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_param_array(mpu_irq, int, NULL, 0444);
|
||||
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)
|
|||
sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", pcm->name,
|
||||
chip->port, chip->irq, chip->dma8);
|
||||
|
||||
if (snd_opl3_create(card, chip->port, chip->port + 2,
|
||||
OPL3_HW_OPL3, 0, &opl3) < 0)
|
||||
dev_warn(dev, "opl3 not detected at 0x%lx\n", chip->port);
|
||||
else {
|
||||
error = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
|
||||
if (error < 0)
|
||||
goto out;
|
||||
if (fm_port[n] == SNDRV_AUTO_PORT)
|
||||
fm_port[n] = port[n]; /* share the same port */
|
||||
|
||||
if (fm_port[n] > 0) {
|
||||
if (snd_opl3_create(card, fm_port[n], fm_port[n] + 2,
|
||||
OPL3_HW_OPL3, 0, &opl3) < 0)
|
||||
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 &&
|
||||
|
|
|
@ -45,7 +45,7 @@ static int snd_es1688_dsp_command(struct snd_es1688 *chip, unsigned char val)
|
|||
return 1;
|
||||
}
|
||||
#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
|
||||
return 0;
|
||||
}
|
||||
|
@ -167,13 +167,16 @@ static int snd_es1688_probe(struct snd_es1688 *chip)
|
|||
hw = ES1688_HW_AUTO;
|
||||
switch (chip->version & 0xfff0) {
|
||||
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;
|
||||
case 0x6880:
|
||||
hw = (chip->version & 0x0f) >= 8 ? ES1688_HW_1688 : ES1688_HW_688;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -223,7 +226,7 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
|
|||
}
|
||||
}
|
||||
#if 0
|
||||
snd_printk("mpu cfg = 0x%x\n", cfg);
|
||||
snd_printk(KERN_DEBUG "mpu cfg = 0x%x\n", cfg);
|
||||
#endif
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
snd_es1688_mixer_write(chip, 0x40, cfg);
|
||||
|
@ -237,7 +240,9 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
|
|||
cfg = 0xf0; /* enable only DMA counter interrupt */
|
||||
irq_bits = irqs[chip->irq & 0x0f];
|
||||
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
|
||||
irq_bits = 0;
|
||||
cfg = 0x10;
|
||||
|
@ -250,7 +255,8 @@ static int snd_es1688_init(struct snd_es1688 * chip, int enable)
|
|||
cfg = 0xf0; /* extended mode DMA enable */
|
||||
dma = chip->dma8;
|
||||
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
|
||||
dma_bits = 0;
|
||||
cfg = 0x00; /* disable all DMA */
|
||||
|
@ -341,8 +347,9 @@ static int snd_es1688_trigger(struct snd_es1688 *chip, int cmd, unsigned char va
|
|||
return -EINVAL; /* something is wrong */
|
||||
}
|
||||
#if 0
|
||||
printk("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: val = 0x%x, value = 0x%x\n", val, value);
|
||||
printk(KERN_DEBUG "trigger: pointer = 0x%x\n",
|
||||
snd_dma_pointer(chip->dma8, chip->dma_size));
|
||||
#endif
|
||||
snd_es1688_write(chip, 0xb8, (val & 0xf0) | value);
|
||||
spin_unlock(&chip->reg_lock);
|
||||
|
|
|
@ -45,7 +45,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * gus,
|
|||
unsigned char dma_cmd;
|
||||
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.enh_mode) {
|
||||
|
@ -77,7 +78,8 @@ static void snd_gf1_dma_program(struct snd_gus_card * 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);
|
||||
#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
|
||||
spin_lock_irqsave(&gus->reg_lock, flags);
|
||||
if (gus->gf1.enh_mode) {
|
||||
|
@ -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);
|
||||
kfree(block);
|
||||
#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
|
||||
}
|
||||
|
||||
|
@ -203,13 +207,16 @@ int snd_gf1_dma_transfer_block(struct snd_gus_card * gus,
|
|||
}
|
||||
*block = *__block;
|
||||
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);
|
||||
#endif
|
||||
#if 0
|
||||
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);
|
||||
#endif
|
||||
|
||||
snd_printdd("addr = 0x%x, buffer = 0x%lx, count = 0x%x, cmd = 0x%x\n",
|
||||
block->addr, (long) block->buffer, block->count,
|
||||
block->cmd);
|
||||
|
||||
snd_printdd("gus->gf1.dma_data_pcm_last = 0x%lx\n",
|
||||
(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);
|
||||
if (synth) {
|
||||
if (gus->gf1.dma_data_synth_last) {
|
||||
|
|
|
@ -41,7 +41,7 @@ __again:
|
|||
if (status == 0)
|
||||
return IRQ_RETVAL(handled);
|
||||
handled = 1;
|
||||
// snd_printk("IRQ: status = 0x%x\n", status);
|
||||
/* snd_printk(KERN_DEBUG "IRQ: status = 0x%x\n", status); */
|
||||
if (status & 0x02) {
|
||||
STAT_ADD(gus->gf1.interrupt_stat_midi_in);
|
||||
if (gus->gf1.interrupt_handler_midi_in)
|
||||
|
@ -65,7 +65,9 @@ __again:
|
|||
continue; /* multi request */
|
||||
already |= _current_; /* mark request */
|
||||
#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
|
||||
pvoice = &gus->gf1.voices[voice];
|
||||
if (pvoice->use) {
|
||||
|
|
|
@ -82,7 +82,10 @@ static int snd_gf1_pcm_block_change(struct snd_pcm_substream *substream,
|
|||
|
||||
count += 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));
|
||||
block.cmd = SNDRV_GF1_DMA_IRQ;
|
||||
if (snd_pcm_format_unsigned(runtime->format))
|
||||
|
@ -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;
|
||||
end = curr + (pcmp->block_size / runtime->channels);
|
||||
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;
|
||||
vol = !voice ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_right;
|
||||
spin_lock_irqsave(&gus->reg_lock, flags);
|
||||
|
@ -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;
|
||||
#if 0
|
||||
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);
|
||||
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);
|
||||
#endif
|
||||
pcmp->bpos++;
|
||||
|
@ -299,7 +308,11 @@ static int snd_gf1_pcm_poke_block(struct snd_gus_card *gus, unsigned char *buf,
|
|||
unsigned int len;
|
||||
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) {
|
||||
len = count;
|
||||
if (len > 512) /* limit, to allow IRQ */
|
||||
|
@ -680,7 +693,8 @@ static int snd_gf1_pcm_playback_open(struct snd_pcm_substream *substream)
|
|||
runtime->private_free = snd_gf1_pcm_playback_free;
|
||||
|
||||
#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
|
||||
if ((err = snd_gf1_dma_init(gus)) < 0)
|
||||
return err;
|
||||
|
|
|
@ -129,8 +129,14 @@ static int snd_gf1_uart_input_open(struct snd_rawmidi_substream *substream)
|
|||
}
|
||||
spin_unlock_irqrestore(&gus->uart_cmd_lock, flags);
|
||||
#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("[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));
|
||||
snd_printk(KERN_DEBUG
|
||||
"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
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
#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
|
||||
outb((data << 1) | ctrl, port);
|
||||
udelay(10);
|
||||
|
@ -183,7 +183,7 @@ static int snd_interwave_i2c_getclockline(struct snd_i2c_bus *bus)
|
|||
|
||||
res = inb(port) & 1;
|
||||
#if 0
|
||||
printk("i2c_getclockline - 0x%lx -> %i\n", port, res);
|
||||
printk(KERN_DEBUG "i2c_getclockline - 0x%lx -> %i\n", port, res);
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ static int snd_interwave_i2c_getdataline(struct snd_i2c_bus *bus, int ack)
|
|||
udelay(10);
|
||||
res = (inb(port) & 2) >> 1;
|
||||
#if 0
|
||||
printk("i2c_getdataline - 0x%lx -> %i\n", port, res);
|
||||
printk(KERN_DEBUG "i2c_getdataline - 0x%lx -> %i\n", port, res);
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
@ -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 + 1, d + 1);
|
||||
#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,
|
||||
snd_gf1_peek(gus, local),
|
||||
snd_gf1_peek(gus, local + 1),
|
||||
|
@ -356,7 +357,8 @@ static void __devinit snd_interwave_bank_sizes(struct snd_gus_card * gus, int *s
|
|||
}
|
||||
}
|
||||
#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
|
||||
}
|
||||
|
||||
|
@ -410,12 +412,12 @@ static void __devinit snd_interwave_detect_memory(struct snd_gus_card * gus)
|
|||
lmct = (psizes[3] << 24) | (psizes[2] << 16) |
|
||||
(psizes[1] << 8) | psizes[0];
|
||||
#if 0
|
||||
printk("lmct = 0x%08x\n", lmct);
|
||||
printk(KERN_DEBUG "lmct = 0x%08x\n", lmct);
|
||||
#endif
|
||||
for (i = 0; i < ARRAY_SIZE(lmc); i++)
|
||||
if (lmct == lmc[i]) {
|
||||
#if 0
|
||||
printk("found !!! %i\n", i);
|
||||
printk(KERN_DEBUG "found !!! %i\n", i);
|
||||
#endif
|
||||
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);
|
||||
|
|
|
@ -179,12 +179,13 @@ static unsigned char __snd_opl3sa2_read(struct snd_opl3sa2 *chip, unsigned char
|
|||
unsigned char result;
|
||||
#if 0
|
||||
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
|
||||
outb(reg, chip->port); /* register */
|
||||
result = inb(chip->port + 1);
|
||||
#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
|
||||
return result;
|
||||
}
|
||||
|
@ -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);
|
||||
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;
|
||||
tmp = snd_opl3sa2_read(chip, OPL3SA2_MISC);
|
||||
if (tmp == 0xff) {
|
||||
|
|
|
@ -252,7 +252,7 @@ static int __devinit snd_opti9xx_init(struct snd_opti9xx *chip,
|
|||
#endif /* OPTi93X */
|
||||
|
||||
default:
|
||||
snd_printk("chip %d not supported\n", hardware);
|
||||
snd_printk(KERN_ERR "chip %d not supported\n", hardware);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
|
@ -294,7 +294,7 @@ static unsigned char snd_opti9xx_read(struct snd_opti9xx *chip,
|
|||
#endif /* OPTi93X */
|
||||
|
||||
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);
|
||||
|
@ -336,7 +336,7 @@ static void snd_opti9xx_write(struct snd_opti9xx *chip, unsigned char reg,
|
|||
#endif /* OPTi93X */
|
||||
|
||||
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);
|
||||
|
@ -412,7 +412,7 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
|
|||
#endif /* OPTi93X */
|
||||
|
||||
default:
|
||||
snd_printk("chip %d not supported\n", chip->hardware);
|
||||
snd_printk(KERN_ERR "chip %d not supported\n", chip->hardware);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -430,7 +430,8 @@ static int __devinit snd_opti9xx_configure(struct snd_opti9xx *chip)
|
|||
wss_base_bits = 0x02;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(1), wss_base_bits << 4, 0x30);
|
||||
|
@ -455,7 +456,7 @@ __skip_base:
|
|||
irq_bits = 0x04;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -470,13 +471,14 @@ __skip_base:
|
|||
dma_bits = 0x03;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
#if defined(CS4231) || defined(OPTi93X)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -485,7 +487,8 @@ __skip_base:
|
|||
case 1:
|
||||
break;
|
||||
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;
|
||||
}
|
||||
dma_bits |= 0x04;
|
||||
|
@ -516,7 +519,8 @@ __skip_resources:
|
|||
mpu_port_bits = 0x00;
|
||||
break;
|
||||
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);
|
||||
goto __skip_mpu;
|
||||
}
|
||||
|
@ -535,7 +539,7 @@ __skip_resources:
|
|||
mpu_irq_bits = 0x01;
|
||||
break;
|
||||
default:
|
||||
snd_printk("MPU-401 irq # %d not valid\n",
|
||||
snd_printk(KERN_WARNING "MPU-401 irq # %d not valid\n",
|
||||
chip->mpu_irq);
|
||||
goto __skip_mpu;
|
||||
}
|
||||
|
@ -726,7 +730,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card)
|
|||
if (chip->wss_base == SNDRV_AUTO_PORT) {
|
||||
chip->wss_base = snd_legacy_find_free_ioport(possible_ports, 4);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -815,14 +819,8 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card)
|
|||
chip->fm_port, chip->fm_port + 4 - 1);
|
||||
}
|
||||
if (opl3) {
|
||||
#ifdef CS4231
|
||||
const int t1dev = 1;
|
||||
#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)
|
||||
error = snd_opl3_hwdep_new(opl3, 0, 1, &synth);
|
||||
if (error < 0)
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
@ -900,7 +898,7 @@ static int __devinit snd_opti9xx_isa_probe(struct device *devptr,
|
|||
#if defined(CS4231) || defined(OPTi93X)
|
||||
if (dma2 == SNDRV_AUTO_DMA) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
0x388, 0x388 + 2);
|
||||
} else {
|
||||
err = snd_opl3_timer_new(opl3, 0, 1);
|
||||
if (err < 0)
|
||||
goto err_unmap2;
|
||||
|
||||
err = snd_opl3_hwdep_new(opl3, 0, 1, NULL);
|
||||
if (err < 0)
|
||||
goto err_unmap2;
|
||||
|
|
|
@ -553,11 +553,11 @@ static int __devinit snd_wavefront_isa_match(struct device *pdev,
|
|||
return 0;
|
||||
#endif
|
||||
if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) {
|
||||
snd_printk("specify CS4232 port\n");
|
||||
snd_printk(KERN_ERR "specify CS4232 port\n");
|
||||
return 0;
|
||||
}
|
||||
if (ics2115_port[dev] == SNDRV_AUTO_PORT) {
|
||||
snd_printk("specify ICS2115 port\n");
|
||||
snd_printk(KERN_ERR "specify ICS2115 port\n");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
|
|
|
@ -633,7 +633,7 @@ wavefront_get_sample_status (snd_wavefront_t *dev, int assume_rom)
|
|||
wbuf[1] = i >> 7;
|
||||
|
||||
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);
|
||||
dev->sample_status[i] = WF_ST_EMPTY;
|
||||
continue;
|
||||
|
|
|
@ -219,7 +219,8 @@ void snd_wss_out(struct snd_wss *chip, unsigned char reg, unsigned char value)
|
|||
snd_wss_wait(chip);
|
||||
#ifdef CONFIG_SND_DEBUG
|
||||
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
|
||||
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg);
|
||||
wss_outb(chip, CS4231P(REG), value);
|
||||
|
@ -235,7 +236,8 @@ unsigned char snd_wss_in(struct snd_wss *chip, unsigned char reg)
|
|||
snd_wss_wait(chip);
|
||||
#ifdef CONFIG_SND_DEBUG
|
||||
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
|
||||
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | reg);
|
||||
mb();
|
||||
|
@ -252,7 +254,7 @@ void snd_cs4236_ext_out(struct snd_wss *chip, unsigned char reg,
|
|||
wss_outb(chip, CS4231P(REG), val);
|
||||
chip->eimage[CS4236_REG(reg)] = val;
|
||||
#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
|
||||
}
|
||||
EXPORT_SYMBOL(snd_cs4236_ext_out);
|
||||
|
@ -268,7 +270,8 @@ unsigned char snd_cs4236_ext_in(struct snd_wss *chip, unsigned char reg)
|
|||
{
|
||||
unsigned char res;
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
@ -394,13 +397,16 @@ void snd_wss_mce_up(struct snd_wss *chip)
|
|||
snd_wss_wait(chip);
|
||||
#ifdef CONFIG_SND_DEBUG
|
||||
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
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
chip->mce_bit |= CS4231_MCE;
|
||||
timeout = wss_inb(chip, CS4231P(REGSEL));
|
||||
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))
|
||||
wss_outb(chip, CS4231P(REGSEL),
|
||||
chip->mce_bit | (timeout & 0x1f));
|
||||
|
@ -419,7 +425,9 @@ void snd_wss_mce_down(struct snd_wss *chip)
|
|||
|
||||
#ifdef CONFIG_SND_DEBUG
|
||||
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
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
chip->mce_bit &= ~CS4231_MCE;
|
||||
|
@ -427,7 +435,9 @@ void snd_wss_mce_down(struct snd_wss *chip)
|
|||
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f));
|
||||
spin_unlock_irqrestore(&chip->reg_lock, flags);
|
||||
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))
|
||||
return;
|
||||
|
||||
|
@ -565,7 +575,7 @@ static unsigned char snd_wss_get_format(struct snd_wss *chip,
|
|||
if (channels > 1)
|
||||
rformat |= CS4231_STEREO;
|
||||
#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
|
||||
return rformat;
|
||||
}
|
||||
|
@ -774,7 +784,7 @@ static void snd_wss_init(struct snd_wss *chip)
|
|||
snd_wss_mce_down(chip);
|
||||
|
||||
#ifdef SNDRV_DEBUG_MCE
|
||||
snd_printk("init: (1)\n");
|
||||
snd_printk(KERN_DEBUG "init: (1)\n");
|
||||
#endif
|
||||
snd_wss_mce_up(chip);
|
||||
spin_lock_irqsave(&chip->reg_lock, flags);
|
||||
|
@ -789,7 +799,7 @@ static void snd_wss_init(struct snd_wss *chip)
|
|||
snd_wss_mce_down(chip);
|
||||
|
||||
#ifdef SNDRV_DEBUG_MCE
|
||||
snd_printk("init: (2)\n");
|
||||
snd_printk(KERN_DEBUG "init: (2)\n");
|
||||
#endif
|
||||
|
||||
snd_wss_mce_up(chip);
|
||||
|
@ -800,7 +810,7 @@ static void snd_wss_init(struct snd_wss *chip)
|
|||
snd_wss_mce_down(chip);
|
||||
|
||||
#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]);
|
||||
#endif
|
||||
|
||||
|
@ -817,7 +827,7 @@ static void snd_wss_init(struct snd_wss *chip)
|
|||
snd_wss_mce_down(chip);
|
||||
|
||||
#ifdef SNDRV_DEBUG_MCE
|
||||
snd_printk("init: (4)\n");
|
||||
snd_printk(KERN_DEBUG "init: (4)\n");
|
||||
#endif
|
||||
|
||||
snd_wss_mce_up(chip);
|
||||
|
@ -829,7 +839,7 @@ static void snd_wss_init(struct snd_wss *chip)
|
|||
snd_wss_mce_down(chip);
|
||||
|
||||
#ifdef SNDRV_DEBUG_MCE
|
||||
snd_printk("init: (5)\n");
|
||||
snd_printk(KERN_DEBUG "init: (5)\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1278,7 +1288,8 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
} else if (rev == 0x03) {
|
||||
chip->hardware = WSS_HW_CS4236B;
|
||||
} 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? */
|
||||
}
|
||||
}
|
||||
|
@ -1342,7 +1353,10 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
case 6:
|
||||
break;
|
||||
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 */
|
||||
switch (id >> 5) {
|
||||
|
@ -1353,7 +1367,10 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
chip->hardware = WSS_HW_CS4236B;
|
||||
break;
|
||||
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 */
|
||||
chip->hardware = WSS_HW_CS4237B;
|
||||
|
@ -1364,7 +1381,10 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
case 7:
|
||||
break;
|
||||
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 */
|
||||
chip->hardware = WSS_HW_CS4238B;
|
||||
|
@ -1374,7 +1394,10 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
case 7:
|
||||
break;
|
||||
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 */
|
||||
chip->hardware = WSS_HW_CS4239;
|
||||
|
@ -1384,10 +1407,15 @@ static int snd_wss_probe(struct snd_wss *chip)
|
|||
case 6:
|
||||
break;
|
||||
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 {
|
||||
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)
|
|||
wss_outb(chip, CS4231P(REGSEL), chip->mce_bit | (timeout & 0x1f));
|
||||
spin_unlock_irqrestore(&chip->reg_lock, flags);
|
||||
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 ||
|
||||
!(chip->hardware & (WSS_HW_CS4231_MASK | WSS_HW_CS4232_MASK))) {
|
||||
return;
|
||||
|
@ -1628,7 +1657,7 @@ static void snd_wss_resume(struct snd_wss *chip)
|
|||
}
|
||||
#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_cport);
|
||||
|
@ -1651,6 +1680,7 @@ static int snd_wss_free(struct snd_wss *chip)
|
|||
kfree(chip);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_wss_free);
|
||||
|
||||
static int snd_wss_dev_free(struct snd_device *device)
|
||||
{
|
||||
|
@ -1820,7 +1850,8 @@ int snd_wss_create(struct snd_card *card,
|
|||
#if 0
|
||||
if (chip->hardware & WSS_HW_CS4232_MASK) {
|
||||
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
|
||||
|
||||
|
|
Loading…
Reference in a new issue