Lines Matching refs:emu
15 static inline unsigned char mpu401_read(struct snd_emu10k1 *emu,
18 if (emu->audigy)
19 return (unsigned char)snd_emu10k1_ptr_read(emu, mpu->port + idx, 0);
21 return inb(emu->port + mpu->port + idx);
24 static inline void mpu401_write(struct snd_emu10k1 *emu,
27 if (emu->audigy)
28 snd_emu10k1_ptr_write(emu, mpu->port + idx, 0, data);
30 outb(data, emu->port + mpu->port + idx);
33 #define mpu401_write_data(emu, mpu, data) mpu401_write(emu, mpu, data, 0)
34 #define mpu401_write_cmd(emu, mpu, data) mpu401_write(emu, mpu, data, 1)
35 #define mpu401_read_data(emu, mpu) mpu401_read(emu, mpu, 0)
36 #define mpu401_read_stat(emu, mpu) mpu401_read(emu, mpu, 1)
38 #define mpu401_input_avail(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x80))
39 #define mpu401_output_ready(emu,mpu) (!(mpu401_read_stat(emu,mpu) & 0x40))
45 static void mpu401_clear_rx(struct snd_emu10k1 *emu, struct snd_emu10k1_midi *mpu)
48 for (; timeout > 0 && mpu401_input_avail(emu, mpu); timeout--)
49 mpu401_read_data(emu, mpu);
52 dev_err(emu->card->dev,
54 mpu401_read_stat(emu, mpu));
62 static void do_emu10k1_midi_interrupt(struct snd_emu10k1 *emu, struct snd_emu10k1_midi *midi, unsigned int status)
67 snd_emu10k1_intr_disable(emu, midi->tx_enable | midi->rx_enable);
72 if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) {
74 mpu401_clear_rx(emu, midi);
76 byte = mpu401_read_data(emu, midi);
84 if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) {
87 mpu401_write_data(emu, midi, byte);
89 snd_emu10k1_intr_disable(emu, midi->tx_enable);
95 static void snd_emu10k1_midi_interrupt(struct snd_emu10k1 *emu, unsigned int status)
97 do_emu10k1_midi_interrupt(emu, &emu->midi, status);
100 static void snd_emu10k1_midi_interrupt2(struct snd_emu10k1 *emu, unsigned int status)
102 do_emu10k1_midi_interrupt(emu, &emu->midi2, status);
105 static int snd_emu10k1_midi_cmd(struct snd_emu10k1 * emu, struct snd_emu10k1_midi *midi, unsigned char cmd, int ack)
110 mpu401_write_data(emu, midi, 0x00);
111 /* mpu401_clear_rx(emu, midi); */
113 mpu401_write_cmd(emu, midi, cmd);
118 if (mpu401_input_avail(emu, midi)) {
119 if (mpu401_read_data(emu, midi) == MPU401_ACK)
123 if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK)
130 dev_err(emu->card->dev,
132 cmd, emu->port,
133 mpu401_read_stat(emu, midi),
134 mpu401_read_data(emu, midi));
142 struct snd_emu10k1 *emu;
145 emu = midi->emu;
146 if (snd_BUG_ON(!emu))
153 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1))
155 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1))
168 struct snd_emu10k1 *emu;
171 emu = midi->emu;
172 if (snd_BUG_ON(!emu))
179 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1))
181 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1))
194 struct snd_emu10k1 *emu;
198 emu = midi->emu;
199 if (snd_BUG_ON(!emu))
202 snd_emu10k1_intr_disable(emu, midi->rx_enable);
207 err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0);
216 struct snd_emu10k1 *emu;
220 emu = midi->emu;
221 if (snd_BUG_ON(!emu))
224 snd_emu10k1_intr_disable(emu, midi->tx_enable);
229 err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0);
238 struct snd_emu10k1 *emu;
240 emu = midi->emu;
241 if (snd_BUG_ON(!emu))
245 snd_emu10k1_intr_enable(emu, midi->rx_enable);
247 snd_emu10k1_intr_disable(emu, midi->rx_enable);
252 struct snd_emu10k1 *emu;
255 emu = midi->emu;
256 if (snd_BUG_ON(!emu))
266 if (mpu401_output_ready(emu, midi)) {
273 mpu401_write_data(emu, midi, byte);
280 snd_emu10k1_intr_enable(emu, midi->tx_enable);
282 snd_emu10k1_intr_disable(emu, midi->tx_enable);
311 static int emu10k1_midi_init(struct snd_emu10k1 *emu, struct snd_emu10k1_midi *midi, int device, char *name)
316 err = snd_rawmidi_new(emu->card, name, device, 1, 1, &rmidi);
319 midi->emu = emu;
335 int snd_emu10k1_midi(struct snd_emu10k1 *emu)
337 struct snd_emu10k1_midi *midi = &emu->midi;
340 err = emu10k1_midi_init(emu, midi, 0, "EMU10K1 MPU-401 (UART)");
353 int snd_emu10k1_audigy_midi(struct snd_emu10k1 *emu)
358 midi = &emu->midi;
359 err = emu10k1_midi_init(emu, midi, 0, "Audigy MPU-401 (UART)");
370 midi = &emu->midi2;
371 err = emu10k1_midi_init(emu, midi, 1, "Audigy MPU-401 #2");