[ALSA] cmipci - Allow to disable integrated FM port
The driver didn't allow to disable the integrated FM port (if available), and this annoyed people who don't want FM port. Now fm_port=0 disables the FM port unconditionally. fm_port=1 is used for enabling the integrated FM port (as default). Also fixed the documentation about this option. Fix ALSA bug#2491. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
parent
dd87da1c5d
commit
2f24d159d5
@ -370,7 +370,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
mpu_port - 0x300,0x310,0x320,0x330 = legacy port,
|
mpu_port - 0x300,0x310,0x320,0x330 = legacy port,
|
||||||
1 = integrated PCI port,
|
1 = integrated PCI port,
|
||||||
0 = disable (default)
|
0 = disable (default)
|
||||||
fm_port - 0x388 (default), 0 = disable (default)
|
fm_port - 0x388 = legacy port,
|
||||||
|
1 = integrated PCI port (default),
|
||||||
|
0 = disable
|
||||||
soft_ac3 - Software-conversion of raw SPDIF packets (model 033 only)
|
soft_ac3 - Software-conversion of raw SPDIF packets (model 033 only)
|
||||||
(default = 1)
|
(default = 1)
|
||||||
joystick_port - Joystick port address (0 = disable, 1 = auto-detect)
|
joystick_port - Joystick port address (0 = disable, 1 = auto-detect)
|
||||||
|
@ -57,7 +57,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_PNP; /* Enable switches */
|
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable switches */
|
||||||
static long mpu_port[SNDRV_CARDS];
|
static long mpu_port[SNDRV_CARDS];
|
||||||
static long fm_port[SNDRV_CARDS];
|
static long fm_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1};
|
||||||
static int soft_ac3[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1};
|
static int soft_ac3[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1};
|
||||||
#ifdef SUPPORT_JOYSTICK
|
#ifdef SUPPORT_JOYSTICK
|
||||||
static int joystick_port[SNDRV_CARDS];
|
static int joystick_port[SNDRV_CARDS];
|
||||||
@ -2779,6 +2779,9 @@ static int __devinit snd_cmipci_create_fm(struct cmipci *cm, long fm_port)
|
|||||||
struct snd_opl3 *opl3;
|
struct snd_opl3 *opl3;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (!fm_port)
|
||||||
|
goto disable_fm;
|
||||||
|
|
||||||
/* first try FM regs in PCI port range */
|
/* first try FM regs in PCI port range */
|
||||||
iosynth = cm->iobase + CM_REG_FM_PCI;
|
iosynth = cm->iobase + CM_REG_FM_PCI;
|
||||||
err = snd_opl3_create(cm->card, iosynth, iosynth + 2,
|
err = snd_opl3_create(cm->card, iosynth, iosynth + 2,
|
||||||
@ -2793,7 +2796,7 @@ static int __devinit snd_cmipci_create_fm(struct cmipci *cm, long fm_port)
|
|||||||
case 0x3C8: val |= CM_FMSEL_3C8; break;
|
case 0x3C8: val |= CM_FMSEL_3C8; break;
|
||||||
case 0x388: val |= CM_FMSEL_388; break;
|
case 0x388: val |= CM_FMSEL_388; break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
goto disable_fm;
|
||||||
}
|
}
|
||||||
snd_cmipci_write(cm, CM_REG_LEGACY_CTRL, val);
|
snd_cmipci_write(cm, CM_REG_LEGACY_CTRL, val);
|
||||||
/* enable FM */
|
/* enable FM */
|
||||||
@ -2803,11 +2806,7 @@ static int __devinit snd_cmipci_create_fm(struct cmipci *cm, long fm_port)
|
|||||||
OPL3_HW_OPL3, 0, &opl3) < 0) {
|
OPL3_HW_OPL3, 0, &opl3) < 0) {
|
||||||
printk(KERN_ERR "cmipci: no OPL device at %#lx, "
|
printk(KERN_ERR "cmipci: no OPL device at %#lx, "
|
||||||
"skipping...\n", iosynth);
|
"skipping...\n", iosynth);
|
||||||
/* disable FM */
|
goto disable_fm;
|
||||||
snd_cmipci_write(cm, CM_REG_LEGACY_CTRL,
|
|
||||||
val & ~CM_FMSEL_MASK);
|
|
||||||
snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
|
if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
|
||||||
@ -2815,6 +2814,11 @@ static int __devinit snd_cmipci_create_fm(struct cmipci *cm, long fm_port)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
disable_fm:
|
||||||
|
snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_FMSEL_MASK);
|
||||||
|
snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pci,
|
static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pci,
|
||||||
|
Loading…
Reference in New Issue
Block a user