++dev;
                return -ENOENT;
        }
-       err = oxygen_pci_probe(pci, index[dev], id[dev], 0, &model_hifier);
+       err = oxygen_pci_probe(pci, index[dev], id[dev], &model_hifier);
        if (err >= 0)
                ++dev;
        return err;
 
                       CAPTURE_1_FROM_SPDIF |
                       CAPTURE_2_FROM_AC97_1,
        .dac_channels = 8,
+       .misc_flags = OXYGEN_MISC_MIDI,
        .function_flags = OXYGEN_FUNCTION_SPI |
                          OXYGEN_FUNCTION_ENABLE_SPI_4_5,
        .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
                return -ENOENT;
        }
        is_meridian = pci_id->driver_data;
-       err = oxygen_pci_probe(pci, index[dev], id[dev], is_meridian,
+       err = oxygen_pci_probe(pci, index[dev], id[dev],
                               is_meridian ? &model_meridian : &model_generic);
        if (err >= 0)
                ++dev;
 
        size_t model_data_size;
        unsigned int pcm_dev_cfg;
        u8 dac_channels;
+       u8 misc_flags;
        u8 function_flags;
        u16 dac_i2s_format;
        u16 adc_i2s_format;
 
 /* oxygen_lib.c */
 
-int oxygen_pci_probe(struct pci_dev *pci, int index, char *id, int midi,
+int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
                     const struct oxygen_model *model);
 void oxygen_pci_remove(struct pci_dev *pci);
 
 
                      OXYGEN_DMA_A_BURST_8 |
                      OXYGEN_DMA_MULTICH_BURST_8);
        oxygen_write16(chip, OXYGEN_INTERRUPT_MASK, 0);
-       oxygen_write8_masked(chip, OXYGEN_MISC, 0,
+       oxygen_write8_masked(chip, OXYGEN_MISC,
+                            chip->model->misc_flags,
                             OXYGEN_MISC_WRITE_PCI_SUBID |
                             OXYGEN_MISC_REC_C_FROM_SPDIF |
                             OXYGEN_MISC_REC_B_FROM_AC97 |
-                            OXYGEN_MISC_REC_A_FROM_MULTICH);
+                            OXYGEN_MISC_REC_A_FROM_MULTICH |
+                            OXYGEN_MISC_MIDI);
        oxygen_write8(chip, OXYGEN_REC_FORMAT,
                      (OXYGEN_FORMAT_16 << OXYGEN_REC_FORMAT_A_SHIFT) |
                      (OXYGEN_FORMAT_16 << OXYGEN_REC_FORMAT_B_SHIFT) |
 }
 
 int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
-                    int midi, const struct oxygen_model *model)
+                    const struct oxygen_model *model)
 {
        struct snd_card *card;
        struct oxygen *chip;
        if (err < 0)
                goto err_card;
 
-       oxygen_write8_masked(chip, OXYGEN_MISC,
-                            midi ? OXYGEN_MISC_MIDI : 0, OXYGEN_MISC_MIDI);
-       if (midi) {
+       if (model->misc_flags & OXYGEN_MISC_MIDI) {
                err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
                                          chip->addr + OXYGEN_MPU401,
                                          MPU401_INFO_INTEGRATED, 0, 0,
 
                       CAPTURE_0_FROM_I2S_2 |
                       CAPTURE_1_FROM_SPDIF,
        .dac_channels = 8,
+       .misc_flags = OXYGEN_MISC_MIDI,
        .function_flags = OXYGEN_FUNCTION_SPI |
                          OXYGEN_FUNCTION_ENABLE_SPI_4_5,
        .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
                ++dev;
                return -ENOENT;
        }
-       err = oxygen_pci_probe(pci, index[dev], id[dev], 1, &model_xonar);
+       err = oxygen_pci_probe(pci, index[dev], id[dev], &model_xonar);
        if (err >= 0)
                ++dev;
        return err;