Lines Matching refs:chip
37 static int enable_midi_input(struct echoaudio *chip, char enable)
39 dev_dbg(chip->card->dev, "enable_midi_input(%d)\n", enable);
41 if (wait_handshake(chip))
45 chip->mtc_state = MIDI_IN_STATE_NORMAL;
46 chip->comm_page->flags |=
49 chip->comm_page->flags &=
52 clear_handshake(chip);
53 return send_vector(chip, DSP_VC_UPDATE_FLAGS);
60 static int write_midi(struct echoaudio *chip, u8 *data, int bytes)
65 if (wait_handshake(chip))
69 if (! (get_dsp_register(chip, CHI32_STATUS_REG) & CHI32_STATUS_REG_HF4))
72 chip->comm_page->midi_output[0] = bytes;
73 memcpy(&chip->comm_page->midi_output[1], data, bytes);
74 chip->comm_page->midi_out_free_count = 0;
75 clear_handshake(chip);
76 send_vector(chip, DSP_VC_MIDI_WRITE);
77 dev_dbg(chip->card->dev, "write_midi: %d\n", bytes);
90 static inline int mtc_process_data(struct echoaudio *chip, short midi_byte)
92 switch (chip->mtc_state) {
95 chip->mtc_state = MIDI_IN_STATE_TS_HIGH;
98 chip->mtc_state = MIDI_IN_STATE_TS_LOW;
102 chip->mtc_state = MIDI_IN_STATE_F1_DATA;
106 chip->mtc_state = MIDI_IN_STATE_NORMAL;
116 static int midi_service_irq(struct echoaudio *chip)
121 count = le16_to_cpu(chip->comm_page->midi_input[0]);
130 midi_byte = le16_to_cpu(chip->comm_page->midi_input[i]);
138 if (mtc_process_data(chip, midi_byte) == MIDI_IN_SKIP_DATA)
141 chip->midi_buffer[received++] = (u8)midi_byte;
156 struct echoaudio *chip = substream->rmidi->private_data;
158 chip->midi_in = substream;
167 struct echoaudio *chip = substream->rmidi->private_data;
169 if (up != chip->midi_input_enabled) {
170 spin_lock_irq(&chip->lock);
171 enable_midi_input(chip, up);
172 spin_unlock_irq(&chip->lock);
173 chip->midi_input_enabled = up;
181 struct echoaudio *chip = substream->rmidi->private_data;
183 chip->midi_in = NULL;
191 struct echoaudio *chip = substream->rmidi->private_data;
193 chip->tinuse = 0;
194 chip->midi_full = 0;
195 chip->midi_out = substream;
203 struct echoaudio *chip = from_timer(chip, t, timer);
211 spin_lock_irqsave(&chip->lock, flags);
212 chip->midi_full = 0;
213 if (!snd_rawmidi_transmit_empty(chip->midi_out)) {
214 bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf,
216 dev_dbg(chip->card->dev, "Try to send %d bytes...\n", bytes);
217 sent = write_midi(chip, buf, bytes);
219 dev_err(chip->card->dev,
223 chip->midi_full = 1;
225 dev_dbg(chip->card->dev, "%d bytes sent\n", sent);
226 snd_rawmidi_transmit_ack(chip->midi_out, sent);
230 dev_dbg(chip->card->dev, "Full\n");
232 chip->midi_full = 1;
237 if (!snd_rawmidi_transmit_empty(chip->midi_out) && chip->tinuse) {
241 mod_timer(&chip->timer, jiffies + (time * HZ + 999) / 1000);
242 dev_dbg(chip->card->dev,
245 spin_unlock_irqrestore(&chip->lock, flags);
253 struct echoaudio *chip = substream->rmidi->private_data;
255 dev_dbg(chip->card->dev, "snd_echo_midi_output_trigger(%d)\n", up);
256 spin_lock_irq(&chip->lock);
258 if (!chip->tinuse) {
259 timer_setup(&chip->timer, snd_echo_midi_output_write,
261 chip->tinuse = 1;
264 if (chip->tinuse) {
265 chip->tinuse = 0;
266 spin_unlock_irq(&chip->lock);
267 del_timer_sync(&chip->timer);
268 dev_dbg(chip->card->dev, "Timer removed\n");
272 spin_unlock_irq(&chip->lock);
274 if (up && !chip->midi_full)
275 snd_echo_midi_output_write(&chip->timer);
282 struct echoaudio *chip = substream->rmidi->private_data;
284 chip->midi_out = NULL;
306 struct echoaudio *chip)
310 err = snd_rawmidi_new(card, card->shortname, 0, 1, 1, &chip->rmidi);
314 strcpy(chip->rmidi->name, card->shortname);
315 chip->rmidi->private_data = chip;
317 snd_rawmidi_set_ops(chip->rmidi, SNDRV_RAWMIDI_STREAM_INPUT,
319 snd_rawmidi_set_ops(chip->rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT,
322 chip->rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT |