On Mon, 16 Dec 2019 17:06:14 +0100, Patrick May wrote: > > Hello, > > I have a C-Media CMI8738 soundcard. I'm using it because it has a > special feature that I want: the OPL3 synth. > > It creates two ALSA MIDI ports. In my case, these are '20:0, C-Media > CMI8738, C-Media CMI8738 MIDI' and '21:0, OPL3 FM synth, OPL3 FM > Port'. > The first one is completely useless - this soundcard actually has no > game/midi port connector on it. The second one is what I really want. > > The problem I have is that the first port has a weird problem in that > if you access it in some way (eg. play a midi file through it with > aplaymidi) it has a very high chance of making the computer reboot > suddenly and without warning. This seems to be different from a kernel > panic because my system is configured not to automatically reboot on > panic, and I don't get the capslock/scroll lock lights flashing - the > system just reboots suddenly and without warning. > > I can't simply avoid using that MIDI port - music software I use, such > as Rosegarden, seems to automatically connect to all MIDI ports as > part of its initialisation routine. I discovered the problem because > it was happening (my system was unexpectedly rebooting) every few > times I opened a project file in Rosegarden. > > So I'm looking for a workaround that will remove/destroy/eliminate > this unwanted and unused MIDI port so that nothing can make my system > reboot by accident. So far I have tried this: > > * load snd_cmipci with parameter 'mpu_port=0'. This didn't work, the > unwanted port was still created and still caused the reboot when I > tested it. > * prevent snd_mpu401_uart from loading. This didn't work - snd_cmipci > refused to load without it. > > Does anyone have any ideas or suggestions? > Maybe this is something that the ALSA driver developers should be made > aware of, but I thought I should ask about it here first.
A patch like below should make mpu_port=0 option working to disable for the MIDI port. Give it a try. Takashi diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 4bfab21c53f4..92610ab3290d 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -42,7 +42,7 @@ MODULE_SUPPORTED_DEVICE("{{C-Media,CMI8738}," static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable switches */ -static long mpu_port[SNDRV_CARDS]; +static long mpu_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1}; static long fm_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1}; static bool soft_ac3[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)]=1}; #ifdef SUPPORT_JOYSTICK @@ -3132,7 +3132,8 @@ static int snd_cmipci_create(struct snd_card *card, struct pci_dev *pci, if (cm->chip_version >= 39) { val = snd_cmipci_read_b(cm, CM_REG_MPU_PCI + 1); if (val != 0x00 && val != 0xff) { - iomidi = cm->iobase + CM_REG_MPU_PCI; + if (mpu_port[dev]) + iomidi = cm->iobase + CM_REG_MPU_PCI; integrated_midi = 1; } } _______________________________________________ Alsa-user mailing list Alsa-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/alsa-user