• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/sound/pci/emu10k1/

Lines Matching defs:midi

75 static void do_emu10k1_midi_interrupt(struct snd_emu10k1 *emu, struct snd_emu10k1_midi *midi, unsigned int status)
79 if (midi->rmidi == NULL) {
80 snd_emu10k1_intr_disable(emu, midi->tx_enable | midi->rx_enable);
84 spin_lock(&midi->input_lock);
85 if ((status & midi->ipr_rx) && mpu401_input_avail(emu, midi)) {
86 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) {
87 mpu401_clear_rx(emu, midi);
89 byte = mpu401_read_data(emu, midi);
90 if (midi->substream_input)
91 snd_rawmidi_receive(midi->substream_input, &byte, 1);
94 spin_unlock(&midi->input_lock);
96 spin_lock(&midi->output_lock);
97 if ((status & midi->ipr_tx) && mpu401_output_ready(emu, midi)) {
98 if (midi->substream_output &&
99 snd_rawmidi_transmit(midi->substream_output, &byte, 1) == 1) {
100 mpu401_write_data(emu, midi, byte);
102 snd_emu10k1_intr_disable(emu, midi->tx_enable);
105 spin_unlock(&midi->output_lock);
110 do_emu10k1_midi_interrupt(emu, &emu->midi, status);
118 static int snd_emu10k1_midi_cmd(struct snd_emu10k1 * emu, struct snd_emu10k1_midi *midi, unsigned char cmd, int ack)
123 spin_lock_irqsave(&midi->input_lock, flags);
124 mpu401_write_data(emu, midi, 0x00);
125 /* mpu401_clear_rx(emu, midi); */
127 mpu401_write_cmd(emu, midi, cmd);
132 if (mpu401_input_avail(emu, midi)) {
133 if (mpu401_read_data(emu, midi) == MPU401_ACK)
137 if (!ok && mpu401_read_data(emu, midi) == MPU401_ACK)
142 spin_unlock_irqrestore(&midi->input_lock, flags);
146 mpu401_read_stat(emu, midi),
147 mpu401_read_data(emu, midi));
156 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
159 emu = midi->emu;
162 spin_lock_irqsave(&midi->open_lock, flags);
163 midi->midi_mode |= EMU10K1_MIDI_MODE_INPUT;
164 midi->substream_input = substream;
165 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT)) {
166 spin_unlock_irqrestore(&midi->open_lock, flags);
167 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1))
169 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1))
172 spin_unlock_irqrestore(&midi->open_lock, flags);
183 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
186 emu = midi->emu;
189 spin_lock_irqsave(&midi->open_lock, flags);
190 midi->midi_mode |= EMU10K1_MIDI_MODE_OUTPUT;
191 midi->substream_output = substream;
192 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) {
193 spin_unlock_irqrestore(&midi->open_lock, flags);
194 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 1))
196 if (snd_emu10k1_midi_cmd(emu, midi, MPU401_ENTER_UART, 1))
199 spin_unlock_irqrestore(&midi->open_lock, flags);
210 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
214 emu = midi->emu;
217 spin_lock_irqsave(&midi->open_lock, flags);
218 snd_emu10k1_intr_disable(emu, midi->rx_enable);
219 midi->midi_mode &= ~EMU10K1_MIDI_MODE_INPUT;
220 midi->substream_input = NULL;
221 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT)) {
222 spin_unlock_irqrestore(&midi->open_lock, flags);
223 err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0);
225 spin_unlock_irqrestore(&midi->open_lock, flags);
233 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
237 emu = midi->emu;
240 spin_lock_irqsave(&midi->open_lock, flags);
241 snd_emu10k1_intr_disable(emu, midi->tx_enable);
242 midi->midi_mode &= ~EMU10K1_MIDI_MODE_OUTPUT;
243 midi->substream_output = NULL;
244 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_INPUT)) {
245 spin_unlock_irqrestore(&midi->open_lock, flags);
246 err = snd_emu10k1_midi_cmd(emu, midi, MPU401_RESET, 0);
248 spin_unlock_irqrestore(&midi->open_lock, flags);
256 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
257 emu = midi->emu;
262 snd_emu10k1_intr_enable(emu, midi->rx_enable);
264 snd_emu10k1_intr_disable(emu, midi->rx_enable);
270 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)substream->rmidi->private_data;
273 emu = midi->emu;
282 spin_lock_irqsave(&midi->output_lock, flags);
284 if (mpu401_output_ready(emu, midi)) {
285 if (!(midi->midi_mode & EMU10K1_MIDI_MODE_OUTPUT) ||
288 spin_unlock_irqrestore(&midi->output_lock, flags);
291 mpu401_write_data(emu, midi, byte);
297 spin_unlock_irqrestore(&midi->output_lock, flags);
298 snd_emu10k1_intr_enable(emu, midi->tx_enable);
300 snd_emu10k1_intr_disable(emu, midi->tx_enable);
324 struct snd_emu10k1_midi *midi = (struct snd_emu10k1_midi *)rmidi->private_data;
325 midi->interrupt = NULL;
326 midi->rmidi = NULL;
329 static int __devinit emu10k1_midi_init(struct snd_emu10k1 *emu, struct snd_emu10k1_midi *midi, int device, char *name)
336 midi->emu = emu;
337 spin_lock_init(&midi->open_lock);
338 spin_lock_init(&midi->input_lock);
339 spin_lock_init(&midi->output_lock);
346 rmidi->private_data = midi;
348 midi->rmidi = rmidi;
354 struct snd_emu10k1_midi *midi = &emu->midi;
357 if ((err = emu10k1_midi_init(emu, midi, 0, "EMU10K1 MPU-401 (UART)")) < 0)
360 midi->tx_enable = INTE_MIDITXENABLE;
361 midi->rx_enable = INTE_MIDIRXENABLE;
362 midi->port = MUDATA;
363 midi->ipr_tx = IPR_MIDITRANSBUFEMPTY;
364 midi->ipr_rx = IPR_MIDIRECVBUFEMPTY;
365 midi->interrupt = snd_emu10k1_midi_interrupt;
371 struct snd_emu10k1_midi *midi;
374 midi = &emu->midi;
375 if ((err = emu10k1_midi_init(emu, midi, 0, "Audigy MPU-401 (UART)")) < 0)
378 midi->tx_enable = INTE_MIDITXENABLE;
379 midi->rx_enable = INTE_MIDIRXENABLE;
380 midi->port = A_MUDATA1;
381 midi->ipr_tx = IPR_MIDITRANSBUFEMPTY;
382 midi->ipr_rx = IPR_MIDIRECVBUFEMPTY;
383 midi->interrupt = snd_emu10k1_midi_interrupt;
385 midi = &emu->midi2;
386 if ((err = emu10k1_midi_init(emu, midi, 1, "Audigy MPU-401 #2")) < 0)
389 midi->tx_enable = INTE_A_MIDITXENABLE2;
390 midi->rx_enable = INTE_A_MIDIRXENABLE2;
391 midi->port = A_MUDATA2;
392 midi->ipr_tx = IPR_A_MIDITRANSBUFEMPTY2;
393 midi->ipr_rx = IPR_A_MIDIRECVBUFEMPTY2;
394 midi->interrupt = snd_emu10k1_midi_interrupt2;