Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[ALSA] Change an arugment of snd_mpu401_uart_new() to bit flags

Change the 5th argument of snd_mpu401_uart_new() to bit flags
instead of a boolean. The argument takes bits that consist of
MPU401_INFO_XXX flags.
The callers that used the value 1 there are replaced with
MPU401_INFO_INTEGRATED.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Takashi Iwai and committed by
Jaroslav Kysela
302e4c2f 140432fd

+147 -62
+25 -4
Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
··· 4215 4215 <programlisting> 4216 4216 <![CDATA[ 4217 4217 struct snd_rawmidi *rmidi; 4218 - snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, integrated, 4218 + snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, port, info_flags, 4219 4219 irq, irq_flags, &rmidi); 4220 4220 ]]> 4221 4221 </programlisting> ··· 4242 4242 </para> 4243 4243 4244 4244 <para> 4245 + The 5th argument is bitflags for additional information. 4245 4246 When the i/o port address above is a part of the PCI i/o 4246 4247 region, the MPU401 i/o port might have been already allocated 4247 - (reserved) by the driver itself. In such a case, pass non-zero 4248 - to the 5th argument 4249 - (<parameter>integrated</parameter>). Otherwise, pass 0 to it, 4248 + (reserved) by the driver itself. In such a case, pass a bit flag 4249 + <constant>MPU401_INFO_INTEGRATED</constant>, 4250 4250 and 4251 4251 the mpu401-uart layer will allocate the i/o ports by itself. 4252 4252 </para> 4253 + 4254 + <para> 4255 + When the controller supports only the input or output MIDI stream, 4256 + pass <constant>MPU401_INFO_INPUT</constant> or 4257 + <constant>MPU401_INFO_OUTPUT</constant> bitflag, respectively. 4258 + Then the rawmidi instance is created as a single stream. 4259 + </para> 4260 + 4261 + <para> 4262 + <constant>MPU401_INFO_MMIO</constant> bitflag is used to change 4263 + the access method to MMIO (via readb and writeb) instead of 4264 + iob and outb. In this case, you have to pass the iomapped address 4265 + to <function>snd_mpu401_uart_new()</function>. 4266 + </para> 4267 + 4268 + <para> 4269 + When <constant>MPU401_INFO_TX_IRQ</constant> is set, the output 4270 + stream isn't checked in the default interrupt handler. The driver 4271 + needs to call <function>snd_mpu401_uart_interrupt_tx()</function> 4272 + by itself to start processing the output stream in irq handler. 4273 + </para> 4253 4274 4254 4275 <para> 4255 4276 Usually, the port address corresponds to the command port and
+12 -2
include/sound/mpu401.h
··· 45 45 #define MPU401_HW_PC98II 18 /* Roland PC98II */ 46 46 #define MPU401_HW_AUREAL 19 /* Aureal Vortex */ 47 47 48 + #define MPU401_INFO_INPUT (1 << 0) /* input stream */ 49 + #define MPU401_INFO_OUTPUT (1 << 1) /* output stream */ 50 + #define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */ 51 + #define MPU401_INFO_MMIO (1 << 3) /* MMIO access */ 52 + #define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */ 53 + 48 54 #define MPU401_MODE_BIT_INPUT 0 49 55 #define MPU401_MODE_BIT_OUTPUT 1 50 56 #define MPU401_MODE_BIT_INPUT_TRIGGER 2 ··· 68 62 struct snd_rawmidi *rmidi; 69 63 70 64 unsigned short hardware; /* MPU401_HW_XXXX */ 65 + unsigned int info_flags; /* MPU401_INFO_XXX */ 71 66 unsigned long port; /* base port of MPU-401 chip */ 72 67 unsigned long cport; /* port + 1 (usually) */ 73 68 struct resource *res; /* port resource */ ··· 106 99 107 100 */ 108 101 109 - irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id, struct pt_regs *regs); 102 + irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id, 103 + struct pt_regs *regs); 104 + irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id, 105 + struct pt_regs *regs); 110 106 111 107 int snd_mpu401_uart_new(struct snd_card *card, 112 108 int device, 113 109 unsigned short hardware, 114 110 unsigned long port, 115 - int integrated, 111 + unsigned int info_flags, 116 112 int irq, 117 113 int irq_flags, 118 114 struct snd_rawmidi ** rrawmidi);
+68 -28
sound/drivers/mpu401/mpu401_uart.c
··· 95 95 #endif 96 96 } 97 97 98 - static void _snd_mpu401_uart_interrupt(struct snd_mpu401 *mpu) 98 + static void uart_interrupt_tx(struct snd_mpu401 *mpu) 99 99 { 100 - spin_lock(&mpu->input_lock); 101 - if (test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) 102 - snd_mpu401_uart_input_read(mpu); 103 - else 104 - snd_mpu401_uart_clear_rx(mpu); 105 - spin_unlock(&mpu->input_lock); 106 - /* ok. for better Tx performance try do some output when 107 - * input is done 108 - */ 109 100 if (test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode) && 110 101 test_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode)) { 111 102 spin_lock(&mpu->output_lock); 112 103 snd_mpu401_uart_output_write(mpu); 113 104 spin_unlock(&mpu->output_lock); 114 105 } 106 + } 107 + 108 + static void _snd_mpu401_uart_interrupt(struct snd_mpu401 *mpu) 109 + { 110 + if (mpu->info_flags & MPU401_INFO_INPUT) { 111 + spin_lock(&mpu->input_lock); 112 + if (test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) 113 + snd_mpu401_uart_input_read(mpu); 114 + else 115 + snd_mpu401_uart_clear_rx(mpu); 116 + spin_unlock(&mpu->input_lock); 117 + } 118 + if (! (mpu->info_flags & MPU401_INFO_TX_IRQ)) 119 + /* ok. for better Tx performance try do some output 120 + when input is done */ 121 + uart_interrupt_tx(mpu); 115 122 } 116 123 117 124 /** ··· 141 134 } 142 135 143 136 EXPORT_SYMBOL(snd_mpu401_uart_interrupt); 137 + 138 + /** 139 + * snd_mpu401_uart_interrupt_tx - generic MPU401-UART transmit irq handler 140 + * @irq: the irq number 141 + * @dev_id: mpu401 instance 142 + * @regs: the reigster 143 + * 144 + * Processes the interrupt for MPU401-UART output. 145 + */ 146 + irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id, 147 + struct pt_regs *regs) 148 + { 149 + struct snd_mpu401 *mpu = dev_id; 150 + 151 + if (mpu == NULL) 152 + return IRQ_NONE; 153 + uart_interrupt_tx(mpu); 154 + return IRQ_HANDLED; 155 + } 156 + 157 + EXPORT_SYMBOL(snd_mpu401_uart_interrupt_tx); 144 158 145 159 /* 146 160 * timer callback ··· 458 430 * since the output timer might have been removed in 459 431 * snd_mpu401_uart_output_write(). 460 432 */ 461 - snd_mpu401_uart_add_timer(mpu, 0); 433 + if (! (mpu->info_flags & MPU401_INFO_TX_IRQ)) 434 + snd_mpu401_uart_add_timer(mpu, 0); 462 435 463 436 /* output pending data */ 464 437 spin_lock_irqsave(&mpu->output_lock, flags); 465 438 snd_mpu401_uart_output_write(mpu); 466 439 spin_unlock_irqrestore(&mpu->output_lock, flags); 467 440 } else { 468 - snd_mpu401_uart_remove_timer(mpu, 0); 441 + if (! (mpu->info_flags & MPU401_INFO_TX_IRQ)) 442 + snd_mpu401_uart_remove_timer(mpu, 0); 469 443 clear_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode); 470 444 } 471 445 } ··· 505 475 * @device: the device index, zero-based 506 476 * @hardware: the hardware type, MPU401_HW_XXXX 507 477 * @port: the base address of MPU401 port 508 - * @integrated: non-zero if the port was already reserved by the chip 478 + * @info_flags: bitflags MPU401_INFO_XXX 509 479 * @irq: the irq number, -1 if no interrupt for mpu 510 480 * @irq_flags: the irq request flags (SA_XXX), 0 if irq was already reserved. 511 481 * @rrawmidi: the pointer to store the new rawmidi instance ··· 520 490 */ 521 491 int snd_mpu401_uart_new(struct snd_card *card, int device, 522 492 unsigned short hardware, 523 - unsigned long port, int integrated, 493 + unsigned long port, 494 + unsigned int info_flags, 524 495 int irq, int irq_flags, 525 496 struct snd_rawmidi ** rrawmidi) 526 497 { 527 498 struct snd_mpu401 *mpu; 528 499 struct snd_rawmidi *rmidi; 500 + int in_enable, out_enable; 529 501 int err; 530 502 531 503 if (rrawmidi) 532 504 *rrawmidi = NULL; 533 - if ((err = snd_rawmidi_new(card, "MPU-401U", device, 1, 1, &rmidi)) < 0) 505 + if (! (info_flags & (MPU401_INFO_INPUT | MPU401_INFO_OUTPUT))) 506 + info_flags |= MPU401_INFO_INPUT | MPU401_INFO_OUTPUT; 507 + in_enable = (info_flags & MPU401_INFO_INPUT) ? 1 : 0; 508 + out_enable = (info_flags & MPU401_INFO_OUTPUT) ? 1 : 0; 509 + if ((err = snd_rawmidi_new(card, "MPU-401U", device, 510 + out_enable, in_enable, &rmidi)) < 0) 534 511 return err; 535 512 mpu = kzalloc(sizeof(*mpu), GFP_KERNEL); 536 513 if (mpu == NULL) { ··· 551 514 spin_lock_init(&mpu->output_lock); 552 515 spin_lock_init(&mpu->timer_lock); 553 516 mpu->hardware = hardware; 554 - if (!integrated) { 517 + if (! (info_flags & MPU401_INFO_INTEGRATED)) { 555 518 int res_size = hardware == MPU401_HW_PC98II ? 4 : 2; 556 519 mpu->res = request_region(port, res_size, "MPU401 UART"); 557 520 if (mpu->res == NULL) { ··· 562 525 return -EBUSY; 563 526 } 564 527 } 565 - switch (hardware) { 566 - case MPU401_HW_AUREAL: 528 + if (info_flags & MPU401_INFO_MMIO) { 567 529 mpu->write = mpu401_write_mmio; 568 530 mpu->read = mpu401_read_mmio; 569 - break; 570 - default: 531 + } else { 571 532 mpu->write = mpu401_write_port; 572 533 mpu->read = mpu401_read_port; 573 - break; 574 534 } 575 535 mpu->port = port; 576 536 if (hardware == MPU401_HW_PC98II) ··· 583 549 return -EBUSY; 584 550 } 585 551 } 552 + mpu->info_flags = info_flags; 586 553 mpu->irq = irq; 587 554 mpu->irq_flags = irq_flags; 588 555 if (card->shortname[0]) ··· 591 556 card->shortname); 592 557 else 593 558 sprintf(rmidi->name, "MPU-401 MIDI %d-%d",card->number, device); 594 - snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, 595 - &snd_mpu401_uart_output); 596 - snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, 597 - &snd_mpu401_uart_input); 598 - rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT | 599 - SNDRV_RAWMIDI_INFO_INPUT | 600 - SNDRV_RAWMIDI_INFO_DUPLEX; 559 + if (out_enable) { 560 + snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, 561 + &snd_mpu401_uart_output); 562 + rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT; 563 + } 564 + if (in_enable) { 565 + snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_INPUT, 566 + &snd_mpu401_uart_input); 567 + rmidi->info_flags |= SNDRV_RAWMIDI_INFO_INPUT; 568 + if (out_enable) 569 + rmidi->info_flags |= SNDRV_RAWMIDI_INFO_DUPLEX; 570 + } 601 571 mpu->rmidi = rmidi; 602 572 if (rrawmidi) 603 573 *rrawmidi = rmidi;
+1 -2
sound/isa/sscape.c
··· 897 897 struct snd_rawmidi *rawmidi; 898 898 int err; 899 899 900 - #define MPU401_SHARE_HARDWARE 1 901 900 if ((err = snd_mpu401_uart_new(card, devnum, 902 901 MPU401_HW_MPU401, 903 - port, MPU401_SHARE_HARDWARE, 902 + port, MPU401_INFO_INTEGRATED, 904 903 irq, SA_INTERRUPT, 905 904 &rawmidi)) == 0) { 906 905 struct snd_mpu401 *mpu = (struct snd_mpu401 *) rawmidi->private_data;
+2 -2
sound/pci/als4000.c
··· 746 746 card->shortname, chip->alt_port, chip->irq); 747 747 748 748 if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_ALS4000, 749 - gcr+0x30, 1, pci->irq, 0, 750 - &chip->rmidi)) < 0) { 749 + gcr+0x30, MPU401_INFO_INTEGRATED, 750 + pci->irq, 0, &chip->rmidi)) < 0) { 751 751 printk(KERN_ERR "als4000: no MPU-401 device at 0x%lx?\n", gcr+0x30); 752 752 goto out_err; 753 753 }
+2 -1
sound/pci/au88x0/au88x0_mpu401.c
··· 95 95 port = (unsigned long)(vortex->mmio + VORTEX_MIDI_DATA); 96 96 if ((temp = 97 97 snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port, 98 - 1, 0, 0, &rmidi)) != 0) { 98 + MPU401_INFO_INTEGRATED | MPU401_INFO_MMIO, 99 + 0, 0, &rmidi)) != 0) { 99 100 hwwrite(vortex->mmio, VORTEX_CTRL, 100 101 (hwread(vortex->mmio, VORTEX_CTRL) & 101 102 ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
+2 -2
sound/pci/azt3328.c
··· 1806 1806 card->private_data = chip; 1807 1807 1808 1808 if ((err = snd_mpu401_uart_new( card, 0, MPU401_HW_MPU401, 1809 - chip->mpu_port, 1, pci->irq, 0, 1810 - &chip->rmidi)) < 0) { 1809 + chip->mpu_port, MPU401_INFO_INTEGRATED, 1810 + pci->irq, 0, &chip->rmidi)) < 0) { 1811 1811 snd_printk(KERN_ERR "azf3328: no MPU-401 device at 0x%lx?\n", chip->mpu_port); 1812 1812 goto out_err; 1813 1813 }
+3 -1
sound/pci/cmipci.c
··· 2981 2981 2982 2982 if (iomidi > 0) { 2983 2983 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI, 2984 - iomidi, integrated_midi, 2984 + iomidi, 2985 + (integrated_midi ? 2986 + MPU401_INFO_INTEGRATED : 0), 2985 2987 cm->irq, 0, &cm->rmidi)) < 0) { 2986 2988 printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi); 2987 2989 }
+12 -9
sound/pci/cs5535audio/cs5535audio.c
··· 56 56 {} 57 57 }; 58 58 59 - static int index = SNDRV_DEFAULT_IDX1; 60 - static char *id = SNDRV_DEFAULT_STR1; 61 - /* for backward compatibility */ 62 - static int enable; 59 + static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; 60 + static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; 61 + static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; 63 62 64 - module_param(index, int, 0444); 63 + module_param_array(index, int, NULL, 0444); 65 64 MODULE_PARM_DESC(index, "Index value for " DRIVER_NAME); 66 - module_param(id, charp, 0444); 65 + module_param_array(id, charp, NULL, 0444); 67 66 MODULE_PARM_DESC(id, "ID string for " DRIVER_NAME); 68 - module_param(enable, bool, 0444); 69 - MODULE_PARM_DESC(enable, "Enable for " DRIVER_NAME); 67 + module_param_array(enable, bool, NULL, 0444); 68 + MODULE_PARM_DESC(enable, "Enable " DRIVER_NAME); 70 69 71 70 static struct pci_device_id snd_cs5535audio_ids[] __devinitdata = { 72 71 { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_AUDIO) }, ··· 357 358 358 359 if (dev >= SNDRV_CARDS) 359 360 return -ENODEV; 361 + if (!enable[dev]) { 362 + dev++; 363 + return -ENOENT; 364 + } 360 365 361 - card = snd_card_new(index, id, THIS_MODULE, 0); 366 + card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); 362 367 if (card == NULL) 363 368 return -ENOMEM; 364 369
+2 -1
sound/pci/es1938.c
··· 1756 1756 } 1757 1757 } 1758 1758 if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, 1759 - chip->mpu_port, 1, chip->irq, 0, &chip->rmidi) < 0) { 1759 + chip->mpu_port, MPU401_INFO_INTEGRATED, 1760 + chip->irq, 0, &chip->rmidi) < 0) { 1760 1761 printk(KERN_ERR "es1938: unable to initialize MPU-401\n"); 1761 1762 } else { 1762 1763 // this line is vital for MIDI interrupt handling on ess-solo1
+2 -1
sound/pci/es1968.c
··· 2727 2727 } 2728 2728 if (enable_mpu[dev]) { 2729 2729 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401, 2730 - chip->io_port + ESM_MPU401_PORT, 1, 2730 + chip->io_port + ESM_MPU401_PORT, 2731 + MPU401_INFO_INTEGRATED, 2731 2732 chip->irq, 0, &chip->rmidi)) < 0) { 2732 2733 printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n"); 2733 2734 }
+2 -1
sound/pci/fm801.c
··· 1448 1448 return err; 1449 1449 } 1450 1450 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_FM801, 1451 - FM801_REG(chip, MPU401_DATA), 1, 1451 + FM801_REG(chip, MPU401_DATA), 1452 + MPU401_INFO_INTEGRATED, 1452 1453 chip->irq, 0, &chip->rmidi)) < 0) { 1453 1454 snd_card_free(card); 1454 1455 return err;
+4 -2
sound/pci/ice1712/ice1712.c
··· 2737 2737 2738 2738 if (! c->no_mpu401) { 2739 2739 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712, 2740 - ICEREG(ice, MPU1_CTRL), 1, 2740 + ICEREG(ice, MPU1_CTRL), 2741 + MPU401_INFO_INTEGRATED, 2741 2742 ice->irq, 0, 2742 2743 &ice->rmidi[0])) < 0) { 2743 2744 snd_card_free(card); ··· 2753 2752 if (ice->eeprom.data[ICE_EEP1_CODEC] & ICE1712_CFG_2xMPU401) { 2754 2753 /* 2nd port used */ 2755 2754 if ((err = snd_mpu401_uart_new(card, 1, MPU401_HW_ICE1712, 2756 - ICEREG(ice, MPU2_CTRL), 1, 2755 + ICEREG(ice, MPU2_CTRL), 2756 + MPU401_INFO_INTEGRATED, 2757 2757 ice->irq, 0, 2758 2758 &ice->rmidi[1])) < 0) { 2759 2759 snd_card_free(card);
+2 -1
sound/pci/ice1712/ice1724.c
··· 2388 2388 if (! c->no_mpu401) { 2389 2389 if (ice->eeprom.data[ICE_EEP2_SYSCONF] & VT1724_CFG_MPU401) { 2390 2390 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ICE1712, 2391 - ICEREG1724(ice, MPU_CTRL), 1, 2391 + ICEREG1724(ice, MPU_CTRL), 2392 + MPU401_INFO_INTEGRATED, 2392 2393 ice->irq, 0, 2393 2394 &ice->rmidi[0])) < 0) { 2394 2395 snd_card_free(card);
+2 -1
sound/pci/maestro3.c
··· 2861 2861 #if 0 /* TODO: not supported yet */ 2862 2862 /* TODO enable MIDI IRQ and I/O */ 2863 2863 err = snd_mpu401_uart_new(chip->card, 0, MPU401_HW_MPU401, 2864 - chip->iobase + MPU401_DATA_PORT, 1, 2864 + chip->iobase + MPU401_DATA_PORT, 2865 + MPU401_INFO_INTEGRATED, 2865 2866 chip->irq, 0, &chip->rmidi); 2866 2867 if (err < 0) 2867 2868 printk(KERN_WARNING "maestro3: no MIDI support.\n");
+1 -1
sound/pci/sonicvibes.c
··· 1456 1456 return err; 1457 1457 } 1458 1458 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_SONICVIBES, 1459 - sonic->midi_port, 1, 1459 + sonic->midi_port, MPU401_INFO_INTEGRATED, 1460 1460 sonic->irq, 0, 1461 1461 &midi_uart)) < 0) { 1462 1462 snd_card_free(card);
+2 -1
sound/pci/trident/trident.c
··· 148 148 } 149 149 if (trident->device != TRIDENT_DEVICE_ID_SI7018 && 150 150 (err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE, 151 - trident->midi_port, 1, 151 + trident->midi_port, 152 + MPU401_INFO_INTEGRATED, 152 153 trident->irq, 0, &trident->rmidi)) < 0) { 153 154 snd_card_free(card); 154 155 return err;
+1 -1
sound/pci/via82xx.c
··· 1973 1973 pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg); 1974 1974 if (chip->mpu_res) { 1975 1975 if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A, 1976 - mpu_port, 1, 1976 + mpu_port, MPU401_INFO_INTEGRATED, 1977 1977 chip->irq, 0, &chip->rmidi) < 0) { 1978 1978 printk(KERN_WARNING "unable to initialize MPU-401" 1979 1979 " at 0x%lx, skipping\n", mpu_port);
+2 -1
sound/pci/ymfpci/ymfpci.c
··· 308 308 } 309 309 if (chip->mpu_res) { 310 310 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI, 311 - mpu_port[dev], 1, 311 + mpu_port[dev], 312 + MPU401_INFO_INTEGRATED, 312 313 pci->irq, 0, &chip->rawmidi)) < 0) { 313 314 printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]); 314 315 legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */