xref: /openbmc/linux/sound/pci/ca0106/ca_midi.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*1a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
28a5afd29SJames Courtier-Dutton /*
38a5afd29SJames Courtier-Dutton  *  Copyright 10/16/2005 Tilman Kranz <tilde@tk-sls.de>
48a5afd29SJames Courtier-Dutton  *  Creative Audio MIDI, for the CA0106 Driver
58a5afd29SJames Courtier-Dutton  *  Version: 0.0.1
68a5afd29SJames Courtier-Dutton  *
78a5afd29SJames Courtier-Dutton  *  Changelog:
88a5afd29SJames Courtier-Dutton  *    See ca_midi.c
98a5afd29SJames Courtier-Dutton  */
108a5afd29SJames Courtier-Dutton 
118a5afd29SJames Courtier-Dutton #include <linux/spinlock.h>
128a5afd29SJames Courtier-Dutton #include <sound/rawmidi.h>
138a5afd29SJames Courtier-Dutton #include <sound/mpu401.h>
148a5afd29SJames Courtier-Dutton 
158a5afd29SJames Courtier-Dutton #define CA_MIDI_MODE_INPUT	MPU401_MODE_INPUT
168a5afd29SJames Courtier-Dutton #define CA_MIDI_MODE_OUTPUT	MPU401_MODE_OUTPUT
178a5afd29SJames Courtier-Dutton 
18e4a3d145STakashi Iwai struct snd_ca_midi {
198a5afd29SJames Courtier-Dutton 
20e4a3d145STakashi Iwai 	struct snd_rawmidi *rmidi;
21e4a3d145STakashi Iwai 	struct snd_rawmidi_substream *substream_input;
22e4a3d145STakashi Iwai 	struct snd_rawmidi_substream *substream_output;
238a5afd29SJames Courtier-Dutton 
248a5afd29SJames Courtier-Dutton 	void *dev_id;
258a5afd29SJames Courtier-Dutton 
268a5afd29SJames Courtier-Dutton 	spinlock_t input_lock;
278a5afd29SJames Courtier-Dutton 	spinlock_t output_lock;
288a5afd29SJames Courtier-Dutton 	spinlock_t open_lock;
298a5afd29SJames Courtier-Dutton 
308a5afd29SJames Courtier-Dutton 	unsigned int channel;
318a5afd29SJames Courtier-Dutton 
328a5afd29SJames Courtier-Dutton 	unsigned int midi_mode;
338a5afd29SJames Courtier-Dutton 	int port;
348a5afd29SJames Courtier-Dutton 	int tx_enable, rx_enable;
358a5afd29SJames Courtier-Dutton 	int ipr_tx, ipr_rx;
368a5afd29SJames Courtier-Dutton 
378a5afd29SJames Courtier-Dutton 	int input_avail, output_ready;
388a5afd29SJames Courtier-Dutton 	int ack, reset, enter_uart;
398a5afd29SJames Courtier-Dutton 
40e4a3d145STakashi Iwai 	void (*interrupt)(struct snd_ca_midi *midi, unsigned int status);
41e4a3d145STakashi Iwai 	void (*interrupt_enable)(struct snd_ca_midi *midi, int intr);
42e4a3d145STakashi Iwai 	void (*interrupt_disable)(struct snd_ca_midi *midi, int intr);
438a5afd29SJames Courtier-Dutton 
44e4a3d145STakashi Iwai 	unsigned char (*read)(struct snd_ca_midi *midi, int idx);
45e4a3d145STakashi Iwai 	void (*write)(struct snd_ca_midi *midi, int data, int idx);
468a5afd29SJames Courtier-Dutton 
478a5afd29SJames Courtier-Dutton 	/* get info from dev_id */
48e4a3d145STakashi Iwai 	struct snd_card *(*get_dev_id_card)(void *dev_id);
498a5afd29SJames Courtier-Dutton 	int (*get_dev_id_port)(void *dev_id);
508a5afd29SJames Courtier-Dutton };
518a5afd29SJames Courtier-Dutton 
52e4a3d145STakashi Iwai int ca_midi_init(void *card, struct snd_ca_midi *midi, int device, char *name);
53