[ALSA] cmipci: fix handling of FM/MIDI port addresses
Make sure that the MPU-401 MIDI and OPL-3 FM devices are used only on those chips where they are supported, and that the correct port addresses are used. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
committed by
Jaroslav Kysela
parent
c2b1239a9f
commit
45c41b4868
@@ -2774,10 +2774,14 @@ static int __devinit snd_cmipci_create_fm(struct cmipci *cm, long fm_port)
|
||||
if (!fm_port)
|
||||
goto disable_fm;
|
||||
|
||||
/* first try FM regs in PCI port range */
|
||||
iosynth = cm->iobase + CM_REG_FM_PCI;
|
||||
err = snd_opl3_create(cm->card, iosynth, iosynth + 2,
|
||||
OPL3_HW_OPL3, 1, &opl3);
|
||||
if (cm->chip_version > 33) {
|
||||
/* first try FM regs in PCI port range */
|
||||
iosynth = cm->iobase + CM_REG_FM_PCI;
|
||||
err = snd_opl3_create(cm->card, iosynth, iosynth + 2,
|
||||
OPL3_HW_OPL3, 1, &opl3);
|
||||
} else {
|
||||
err = -EIO;
|
||||
}
|
||||
if (err < 0) {
|
||||
/* then try legacy ports */
|
||||
val = snd_cmipci_read(cm, CM_REG_LEGACY_CTRL) & ~CM_FMSEL_MASK;
|
||||
@@ -2935,7 +2939,8 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
|
||||
return err;
|
||||
}
|
||||
|
||||
integrated_midi = snd_cmipci_read_b(cm, CM_REG_MPU_PCI) != 0xff;
|
||||
integrated_midi = cm->chip_version > 33 &&
|
||||
snd_cmipci_read_b(cm, CM_REG_MPU_PCI + 1) != 0xff;
|
||||
if (integrated_midi && mpu_port[dev] == 1)
|
||||
iomidi = cm->iobase + CM_REG_MPU_PCI;
|
||||
else {
|
||||
@@ -2955,8 +2960,11 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
|
||||
}
|
||||
}
|
||||
|
||||
if ((err = snd_cmipci_create_fm(cm, fm_port[dev])) < 0)
|
||||
return err;
|
||||
if (cm->chip_version < 68) {
|
||||
err = snd_cmipci_create_fm(cm, fm_port[dev]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
/* reset mixer */
|
||||
snd_cmipci_mixer_write(cm, 0, 0);
|
||||
|
Reference in New Issue
Block a user