瀏覽代碼

[ALSA] oxygen: remove MIDI autodetection

The MIDI bit in the MISC register is set by default and cannot be used
to detect the presence of a MIDI port.  Instead, add a parameter to the
oxygen_pci_probe() function so that model drivers can specify this.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Clemens Ladisch 17 年之前
父節點
當前提交
44fb7aae82
共有 4 個文件被更改,包括 7 次插入5 次删除
  1. 1 1
      sound/pci/oxygen/oxygen.c
  2. 1 1
      sound/pci/oxygen/oxygen.h
  3. 4 2
      sound/pci/oxygen/oxygen_lib.c
  4. 1 1
      sound/pci/oxygen/virtuoso.c

+ 1 - 1
sound/pci/oxygen/oxygen.c

@@ -327,7 +327,7 @@ static int __devinit generic_oxygen_probe(struct pci_dev *pci,
 		return -ENOENT;
 		return -ENOENT;
 	}
 	}
 	model = pci_id->driver_data ? &model_meridian : &model_generic;
 	model = pci_id->driver_data ? &model_meridian : &model_generic;
-	err = oxygen_pci_probe(pci, index[dev], id[dev], model);
+	err = oxygen_pci_probe(pci, index[dev], id[dev], 1, model);
 	if (err >= 0)
 	if (err >= 0)
 		++dev;
 		++dev;
 	return err;
 	return err;

+ 1 - 1
sound/pci/oxygen/oxygen.h

@@ -92,7 +92,7 @@ struct oxygen_model {
 
 
 /* oxygen_lib.c */
 /* oxygen_lib.c */
 
 
-int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
+int oxygen_pci_probe(struct pci_dev *pci, int index, char *id, int midi,
 		     const struct oxygen_model *model);
 		     const struct oxygen_model *model);
 void oxygen_pci_remove(struct pci_dev *pci);
 void oxygen_pci_remove(struct pci_dev *pci);
 
 

+ 4 - 2
sound/pci/oxygen/oxygen_lib.c

@@ -306,7 +306,7 @@ static void oxygen_card_free(struct snd_card *card)
 }
 }
 
 
 int __devinit oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
 int __devinit oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
-			       const struct oxygen_model *model)
+			       int midi, const struct oxygen_model *model)
 {
 {
 	struct snd_card *card;
 	struct snd_card *card;
 	struct oxygen *chip;
 	struct oxygen *chip;
@@ -374,7 +374,9 @@ int __devinit oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
 	if (err < 0)
 	if (err < 0)
 		goto err_card;
 		goto err_card;
 
 
-	if (oxygen_read8(chip, OXYGEN_MISC) & OXYGEN_MISC_MIDI) {
+	oxygen_write8_masked(chip, OXYGEN_MISC,
+			     midi ? OXYGEN_MISC_MIDI : 0, OXYGEN_MISC_MIDI);
+	if (midi) {
 		err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
 		err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
 					  chip->addr + OXYGEN_MPU401,
 					  chip->addr + OXYGEN_MPU401,
 					  MPU401_INFO_INTEGRATED, 0, 0,
 					  MPU401_INFO_INTEGRATED, 0, 0,

+ 1 - 1
sound/pci/oxygen/virtuoso.c

@@ -266,7 +266,7 @@ static int __devinit xonar_probe(struct pci_dev *pci,
 		++dev;
 		++dev;
 		return -ENOENT;
 		return -ENOENT;
 	}
 	}
-	err = oxygen_pci_probe(pci, index[dev], id[dev], &model_xonar);
+	err = oxygen_pci_probe(pci, index[dev], id[dev], 1, &model_xonar);
 	if (err >= 0)
 	if (err >= 0)
 		++dev;
 		++dev;
 	return err;
 	return err;