diff options
author | jkh <jkh@FreeBSD.org> | 1996-12-30 22:26:26 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1996-12-30 22:26:26 +0000 |
commit | 0ed11a872239643d0c351bc48cd44102a40ca333 (patch) | |
tree | efd1622bced6f80578a3812176fe6ab017c98df1 | |
parent | b265d4fc3daadf264aacae6afd544943c25bf1f3 (diff) | |
download | FreeBSD-src-0ed11a872239643d0c351bc48cd44102a40ca333.zip FreeBSD-src-0ed11a872239643d0c351bc48cd44102a40ca333.tar.gz |
A couple of changes for proper mpu401 recognition, and an opl3 patch
taken from the voxware-3.5 distribution. Also some changes to the SB
and MPU IRQs to reflect more common/default settings.
Submitted-By: Brian Campbell <brianc@netrover.com>
-rw-r--r-- | sys/i386/isa/sound/mpu401.c | 30 | ||||
-rw-r--r-- | sys/i386/isa/sound/opl3.c | 2 | ||||
-rw-r--r-- | sys/i386/isa/sound/sound_config.h | 4 |
3 files changed, 21 insertions, 15 deletions
diff --git a/sys/i386/isa/sound/mpu401.c b/sys/i386/isa/sound/mpu401.c index eaee157..26ed926 100644 --- a/sys/i386/isa/sound/mpu401.c +++ b/sys/i386/isa/sound/mpu401.c @@ -96,7 +96,7 @@ struct mpu_config #define OUTPUT_READY 0x40 #define INPUT_AVAIL 0x80 -#define MPU_ACK 0xF7 +#define MPU_ACK 0xFE #define MPU_RESET 0xFF #define UART_MODE_ON 0x3F @@ -210,7 +210,7 @@ mpu_input_scanner (struct mpu_config *devc, unsigned char midic) devc->m_state = ST_TIMED; } else - printk ("<MPU: Unknown event %02x> ", midic); + printk ("<MPU: Unknown event %#x> ", midic); } break; @@ -257,7 +257,7 @@ mpu_input_scanner (struct mpu_config *devc, unsigned char midic) break; default: - printk ("Unknown MPU mark %02x\n", midic); + printk ("Unknown MPU mark %#x\n", midic); } } else @@ -340,14 +340,14 @@ mpu_input_scanner (struct mpu_config *devc, unsigned char midic) break; default: - printk ("unknown MIDI sysmsg %0x\n", midic); + printk ("unknown MIDI sysmsg %#x\n", midic); devc->m_state = ST_INIT; } break; case ST_MTC: devc->m_state = ST_INIT; - printk ("MTC frame %x02\n", midic); + printk ("MTC frame %#x\n", midic); break; case ST_SYSEX: @@ -357,7 +357,7 @@ mpu_input_scanner (struct mpu_config *devc, unsigned char midic) devc->m_state = ST_INIT; } else - printk ("%02x ", midic); + printk ("%#x ", midic); break; case ST_SONGPOS: @@ -579,7 +579,7 @@ mpu401_out (int dev, unsigned char midi_byte) DISABLE_INTR (flags); if (!output_ready (devc->base)) { - printk ("MPU-401: Send data timeout\n"); + printk ("MPU-401: Send data (%#x) timeout\n", midi_byte); RESTORE_INTR (flags); return 0; } @@ -622,7 +622,7 @@ mpu401_command (int dev, mpu_command_rec * cmd) retry: if (timeout-- <= 0) { - printk ("MPU-401: Command (0x%x) timeout\n", (int) cmd->cmd); + printk ("MPU-401: Command (%#x) timeout\n", (int) cmd->cmd); return RET_ERROR (EIO); } @@ -638,15 +638,21 @@ retry: ok = 0; for (timeout = 50000; timeout > 0 && !ok; timeout--) if (input_avail (devc->base)) + if (devc->opened && devc->mode == MODE_SYNTH) { if (mpu_input_scanner (devc, read_data (devc->base)) == MPU_ACK) ok = 1; } + else + { /* Device is not currently open. Use simplier method */ + if (read_data (devc->base) == MPU_ACK) + ok = 1; + } if (!ok) { RESTORE_INTR (flags); - /* printk ("MPU: No ACK to command (0x%x)\n", (int) cmd->cmd); */ + /* printk ("MPU: No ACK to command (%#x)\n", (int) cmd->cmd); */ return RET_ERROR (EIO); } @@ -658,7 +664,7 @@ retry: if (!mpu401_out (dev, cmd->data[i])) { RESTORE_INTR (flags); - printk ("MPU: Command (0x%x), parm send failed.\n", (int) cmd->cmd); + printk ("MPU: Command (%#x), parm send failed.\n", (int) cmd->cmd); return RET_ERROR (EIO); } } @@ -680,7 +686,7 @@ retry: if (!ok) { RESTORE_INTR (flags); - /* printk ("MPU: No response(%d) to command (0x%x)\n", i, (int) cmd->cmd); */ + /* printk ("MPU: No response(%d) to command (%#x)\n", i, (int) cmd->cmd); */ return RET_ERROR (EIO); } } @@ -1037,7 +1043,7 @@ attach_mpu401 (long mem_start, struct address_info *hw_config) devc->m_state = ST_INIT; devc->shared_irq = hw_config->always_detect; - if (!hw_config->always_detect) + if (hw_config->always_detect) { /* Verify the hardware again */ if (!reset_mpu401 (devc)) diff --git a/sys/i386/isa/sound/opl3.c b/sys/i386/isa/sound/opl3.c index 42379cd..30d13a7 100644 --- a/sys/i386/isa/sound/opl3.c +++ b/sys/i386/isa/sound/opl3.c @@ -1102,7 +1102,7 @@ opl3_bender (int dev, int voice, int value) if (voice < 0 || voice >= nr_voices) return; - bend_pitch (dev, voice, value); + bend_pitch (dev, voice, value - 8192); } static int diff --git a/sys/i386/isa/sound/sound_config.h b/sys/i386/isa/sound/sound_config.h index 5649820..938495f 100644 --- a/sys/i386/isa/sound/sound_config.h +++ b/sys/i386/isa/sound/sound_config.h @@ -90,7 +90,7 @@ If your card has nonstandard I/O address or IRQ number, change defines #ifdef PC98 #define SBC_IRQ 10 /* IQR10 is not the factory default on PC9821. */ #else -#define SBC_IRQ 7 /* IQR7 is the factory default. */ +#define SBC_IRQ 5 /* IQR5 is the factory default. */ #endif #endif @@ -159,7 +159,7 @@ If your card has nonstandard I/O address or IRQ number, change defines #endif #ifndef MPU_IRQ -#define MPU_IRQ 6 +#define MPU_IRQ 9 #endif /* Echo Personal Sound System */ |