903 .send_sysex = midi_synth_send_sysex
904};
905
906static struct synth_operations *mpu401_synth_operations[MAX_MIDI_DEV];
907
908static struct midi_operations mpu401_midi_proto =
909{
910 .owner = THIS_MODULE,
911 .info = {"MPU-401 Midi", 0, MIDI_CAP_MPU401, SNDCARD_MPU401},
912 .in_info = {0},
913 .open = mpu401_open,
914 .close = mpu401_close,
915 .ioctl = mpu401_ioctl,
916 .outputc = mpu401_out,
917 .start_read = mpu401_start_read,
918 .end_read = mpu401_end_read,
919 .kick = mpu401_kick,
920 .buffer_status = mpu401_buffer_status,
921 .prefix_cmd = mpu401_prefix_cmd
922};
923
924static struct midi_operations mpu401_midi_operations[MAX_MIDI_DEV];
925
926static void mpu401_chk_version(int n, struct mpu_config *devc)
927{
928 int tmp;
929 unsigned long flags;
930
931 devc->version = devc->revision = 0;
932
933 spin_lock_irqsave(&devc->lock,flags);
934 if ((tmp = mpu_cmd(n, 0xAC, 0)) < 0)
935 {
936 spin_unlock_irqrestore(&devc->lock,flags);
937 return;
938 }
939 if ((tmp & 0xf0) > 0x20)
940 {
941 spin_unlock_irqrestore(&devc->lock,flags);
942 return;
943 }