#include <linux/init.h>
#include <linux/slab.h>
#include <linux/pnp.h>
+#include <linux/moduleparam.h>
#include <sound/core.h>
#ifdef CS4231
#include <sound/cs4231.h>
#endif
#define SNDRV_LEGACY_FIND_FREE_IRQ
#define SNDRV_LEGACY_FIND_FREE_DMA
-#define SNDRV_GET_ID
#include <sound/initval.h>
MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
-MODULE_CLASSES("{sound}");
MODULE_LICENSE("GPL");
#ifdef OPTi93X
MODULE_DESCRIPTION("OPTi93X");
-MODULE_DEVICES("{{OPTi,82C931/3}}");
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C931/3}}");
#else /* OPTi93X */
#ifdef CS4231
MODULE_DESCRIPTION("OPTi92X - CS4231");
-MODULE_DEVICES("{{OPTi,82C924 (CS4231)},"
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C924 (CS4231)},"
"{OPTi,82C925 (CS4231)}}");
#else /* CS4231 */
MODULE_DESCRIPTION("OPTi92X - AD1848");
-MODULE_DEVICES("{{OPTi,82C924 (AD1848)},"
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C924 (AD1848)},"
"{OPTi,82C925 (AD1848)},"
"{OAK,Mozart}}");
#endif /* CS4231 */
static int dma2 = SNDRV_DEFAULT_DMA1; /* 0,1,3 */
#endif /* CS4231 || OPTi93X */
-MODULE_PARM(index, "i");
+module_param(index, int, 0444);
MODULE_PARM_DESC(index, "Index value for opti9xx based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
-MODULE_PARM(id, "s");
+module_param(id, charp, 0444);
MODULE_PARM_DESC(id, "ID string for opti9xx based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
-//MODULE_PARM(enable, "i");
+//module_param(enable, bool, 0444);
//MODULE_PARM_DESC(enable, "Enable opti9xx soundcard.");
-//MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
-MODULE_PARM(isapnp, "i");
+module_param(isapnp, bool, 0444);
MODULE_PARM_DESC(isapnp, "Enable ISA PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
-MODULE_PARM(port, "l");
+module_param(port, long, 0444);
MODULE_PARM_DESC(port, "WSS port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT_DESC);
-MODULE_PARM(mpu_port, "l");
+module_param(mpu_port, long, 0444);
MODULE_PARM_DESC(mpu_port, "MPU-401 port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC);
-MODULE_PARM(fm_port, "l");
+module_param(fm_port, long, 0444);
MODULE_PARM_DESC(fm_port, "FM port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT_DESC);
-MODULE_PARM(irq, "i");
+module_param(irq, int, 0444);
MODULE_PARM_DESC(irq, "WSS irq # for opti9xx driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
-MODULE_PARM(mpu_irq, "i");
+module_param(mpu_irq, int, 0444);
MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for opti9xx driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
-MODULE_PARM(dma1, "i");
+module_param(dma1, int, 0444);
MODULE_PARM_DESC(dma1, "1st dma # for opti9xx driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
#if defined(CS4231) || defined(OPTi93X)
-MODULE_PARM(dma2, "i");
+module_param(dma2, int, 0444);
MODULE_PARM_DESC(dma2, "2nd dma # for opti9xx driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
#endif /* CS4231 || OPTi93X */
#define OPTi9XX_HW_DETECT 0
unsigned char dma_bits;
unsigned char mpu_port_bits = 0;
unsigned char mpu_irq_bits;
- unsigned long flags;
switch (chip->hardware) {
#ifndef OPTi93X
dma_bits |= 0x04;
#endif /* CS4231 || OPTi93X */
- spin_lock_irqsave(&chip->lock, flags);
+#ifndef OPTi93X
+ outb(irq_bits << 3 | dma_bits, chip->wss_base);
+#else /* OPTi93X */
snd_opti9xx_write(chip, OPTi9XX_MC_REG(3), (irq_bits << 3 | dma_bits));
- spin_unlock_irqrestore(&chip->lock, flags);
+#endif /* OPTi93X */
__skip_resources:
if (chip->hardware > OPTi9XX_HW_82C928) {
#ifdef OPTi93X
-#define chip_t opti93x_t
-
static unsigned char snd_opti93x_default_image[32] =
{
0x00, /* 00/00 - l_mixout_outctrl */
static void snd_opti93x_mute(opti93x_t *chip, int mute)
{
- unsigned long flags;
-
- spin_lock_irqsave(&chip->lock, flags);
-
mute = mute ? 1 : 0;
- if (chip->mute == mute) {
- spin_unlock_irqrestore(&chip->lock, flags);
+ if (chip->mute == mute)
return;
- }
+
chip->mute = mute;
snd_opti93x_mute_reg(chip, OPTi93X_CD_LEFT_INPUT, mute);
snd_opti93x_mute_reg(chip, OPTi93X_MIC_RIGHT_INPUT, mute);
snd_opti93x_mute_reg(chip, OPTi93X_OUT_LEFT, mute);
snd_opti93x_mute_reg(chip, OPTi93X_OUT_RIGHT, mute);
-
- spin_unlock_irqrestore(&chip->lock, flags);
}
static unsigned int rates[] = { 5512, 6615, 8000, 9600, 11025, 16000,
18900, 22050, 27428, 32000, 33075, 37800,
44100, 48000 };
-#define RATES sizeof(rates) / sizeof(rates[0])
+#define RATES ARRAY_SIZE(rates)
static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
.count = RATES,
static void snd_opti93x_playback_format(opti93x_t *chip, unsigned char fmt)
{
- unsigned long flags;
unsigned char mask;
- spin_lock_irqsave(&chip->lock, flags);
snd_opti93x_mute(chip, 1);
snd_opti93x_mce_up(chip);
snd_opti93x_mce_down(chip);
snd_opti93x_mute(chip, 0);
- spin_unlock_irqrestore(&chip->lock, flags);
}
static void snd_opti93x_capture_format(opti93x_t *chip, unsigned char fmt)
{
- unsigned long flags;
-
- spin_lock_irqsave(&chip->lock, flags);
snd_opti93x_mute(chip, 1);
snd_opti93x_mce_up(chip);
snd_opti93x_mce_down(chip);
snd_opti93x_mute(chip, 0);
- spin_unlock_irqrestore(&chip->lock, flags);
}
spin_unlock_irqrestore(&chip->lock, flags);
}
-irqreturn_t snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
- opti93x_t *codec = snd_magic_cast(opti93x_t, dev_id, return IRQ_NONE);
+ opti93x_t *codec = dev_id;
unsigned char status;
status = snd_opti9xx_read(codec->chip, OPTi9XX_MC_REG(11));
if (chip->irq >= 0) {
free_irq(chip->irq, chip);
}
- snd_magic_kfree(chip);
+ kfree(chip);
return 0;
}
static int snd_opti93x_dev_free(snd_device_t *device)
{
- opti93x_t *chip = snd_magic_cast(opti93x_t, device->device_data, return -ENXIO);
+ opti93x_t *chip = device->device_data;
return snd_opti93x_free(chip);
}
}
}
-int snd_opti93x_create(snd_card_t *card, opti9xx_t *chip,
- int dma1, int dma2,
- opti93x_t **rcodec)
+static int snd_opti93x_create(snd_card_t *card, opti9xx_t *chip,
+ int dma1, int dma2,
+ opti93x_t **rcodec)
{
static snd_device_ops_t ops = {
.dev_free = snd_opti93x_dev_free,
opti93x_t *codec;
*rcodec = NULL;
- codec = snd_magic_kcalloc(opti93x_t, 0, GFP_KERNEL);
+ codec = kcalloc(1, sizeof(*codec), GFP_KERNEL);
if (codec == NULL)
return -ENOMEM;
codec->irq = -1;
static void snd_opti93x_pcm_free(snd_pcm_t *pcm)
{
- opti93x_t *codec = snd_magic_cast(opti93x_t, pcm->private_data, return);
+ opti93x_t *codec = pcm->private_data;
codec->pcm = NULL;
snd_pcm_lib_preallocate_free_for_all(pcm);
}
-int snd_opti93x_pcm(opti93x_t *codec, int device, snd_pcm_t **rpcm)
+static int snd_opti93x_pcm(opti93x_t *codec, int device, snd_pcm_t **rpcm)
{
int error;
snd_pcm_t *pcm;
return change;
}
-#define OPTi93X_CONTROLS (sizeof(snd_opti93x_controls)/sizeof(snd_kcontrol_new_t))
-
static snd_kcontrol_new_t snd_opti93x_controls[] = {
OPTi93X_DOUBLE("Master Playback Switch", 0, OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 7, 7, 1, 1),
OPTi93X_DOUBLE("Master Playback Volume", 0, OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 1, 1, 31, 1),
}
};
-int snd_opti93x_mixer(opti93x_t *chip)
+static int snd_opti93x_mixer(opti93x_t *chip)
{
snd_card_t *card;
snd_kcontrol_new_t knew;
strcpy(card->mixername, snd_opti93x_chip_id(chip));
- for (idx = 0; idx < OPTi93X_CONTROLS; idx++) {
+ for (idx = 0; idx < ARRAY_SIZE(snd_opti93x_controls); idx++) {
knew = snd_opti93x_controls[idx];
if (chip->hardware == OPTi9XX_HW_82C930) {
if (strstr(knew.name, "FM")) /* skip FM controls */
module_init(alsa_card_opti9xx_init)
module_exit(alsa_card_opti9xx_exit)
-
-#ifndef MODULE
-
-/* format is: snd-opti9xx=enable,index,id,isapnp,
- port,mpu_port,fm_port,
- irq,mpu_irq,
- dma1,[dma2] */
-
-static int __init alsa_card_opti9xx_setup(char *str)
-{
- int __attribute__ ((__unused__)) enable = 1;
- int __attribute__ ((__unused__)) pnp = INT_MAX;
-
- (void)(get_option(&str,&enable) == 2 &&
- get_option(&str,&index) == 2 &&
- get_id(&str,&id) == 2 &&
- get_option(&str,&pnp) == 2 &&
- get_option_long(&str,&port) == 2 &&
- get_option_long(&str,&mpu_port) == 2 &&
- get_option_long(&str,&fm_port) == 2 &&
- get_option(&str,&irq) == 2 &&
- get_option(&str,&mpu_irq) == 2 &&
- get_option(&str,&dma1) == 2
-#if defined(CS4231) || defined(OPTi93X)
- &&
- get_option(&str,&dma2) == 2
-#endif
- );
-#ifdef CONFIG_PNP
- if (pnp != INT_MAX)
- isapnp = pnp;
-#endif
- return 1;
-}
-
-#if defined(OPTi93X)
-__setup("snd-opti93x=", alsa_card_opti9xx_setup);
-#elif defined(CS4231)
-__setup("snd-opti92x-cs4231=", alsa_card_opti9xx_setup);
-#else
-__setup("snd-opti92x-ad1848=", alsa_card_opti9xx_setup);
-#endif
-
-#endif /* ifndef MODULE */