#ifndef __SOUND_OPL3_H
#define __SOUND_OPL3_H
#include <sound/core.h>
#include <sound/hwdep.h>
#include <sound/timer.h>
#include <sound/seq_midi_emul.h>
#include <sound/seq_oss.h>
#include <sound/seq_oss_legacy.h>
#include <sound/seq_device.h>
#include <sound/asound_fm.h>
#define OPL3_REG_TEST …
#define OPL3_ENABLE_WAVE_SELECT …
#define OPL3_REG_TIMER1 …
#define OPL3_REG_TIMER2 …
#define OPL3_REG_TIMER_CONTROL …
#define OPL3_IRQ_RESET …
#define OPL3_TIMER1_MASK …
#define OPL3_TIMER2_MASK …
#define OPL3_TIMER1_START …
#define OPL3_TIMER2_START …
#define OPL3_REG_CONNECTION_SELECT …
#define OPL3_LEFT_4OP_0 …
#define OPL3_LEFT_4OP_1 …
#define OPL3_LEFT_4OP_2 …
#define OPL3_RIGHT_4OP_0 …
#define OPL3_RIGHT_4OP_1 …
#define OPL3_RIGHT_4OP_2 …
#define OPL3_REG_MODE …
#define OPL3_OPL3_ENABLE …
#define OPL3_OPL4_ENABLE …
#define OPL3_REG_KBD_SPLIT …
#define OPL3_COMPOSITE_SINE_WAVE_MODE …
#define OPL3_KEYBOARD_SPLIT …
#define OPL3_REG_PERCUSSION …
#define OPL3_TREMOLO_DEPTH …
#define OPL3_VIBRATO_DEPTH …
#define OPL3_PERCUSSION_ENABLE …
#define OPL3_BASSDRUM_ON …
#define OPL3_SNAREDRUM_ON …
#define OPL3_TOMTOM_ON …
#define OPL3_CYMBAL_ON …
#define OPL3_HIHAT_ON …
#define OPL3_REG_AM_VIB …
#define OPL3_TREMOLO_ON …
#define OPL3_VIBRATO_ON …
#define OPL3_SUSTAIN_ON …
#define OPL3_KSR …
#define OPL3_MULTIPLE_MASK …
#define OPL3_REG_KSL_LEVEL …
#define OPL3_KSL_MASK …
#define OPL3_TOTAL_LEVEL_MASK …
#define OPL3_REG_ATTACK_DECAY …
#define OPL3_ATTACK_MASK …
#define OPL3_DECAY_MASK …
#define OPL3_REG_SUSTAIN_RELEASE …
#define OPL3_SUSTAIN_MASK …
#define OPL3_RELEASE_MASK …
#define OPL3_REG_WAVE_SELECT …
#define OPL3_WAVE_SELECT_MASK …
#define OPL3_REG_FNUM_LOW …
#define OPL3_REG_KEYON_BLOCK …
#define OPL3_KEYON_BIT …
#define OPL3_BLOCKNUM_MASK …
#define OPL3_FNUM_HIGH_MASK …
#define OPL3_REG_FEEDBACK_CONNECTION …
#define OPL3_FEEDBACK_MASK …
#define OPL3_CONNECTION_BIT …
#define OPL3_STEREO_BITS …
#define OPL3_VOICE_TO_LEFT …
#define OPL3_VOICE_TO_RIGHT …
#define OPL3_LEFT …
#define OPL3_RIGHT …
#define OPL3_HW_AUTO …
#define OPL3_HW_OPL2 …
#define OPL3_HW_OPL3 …
#define OPL3_HW_OPL3_SV …
#define OPL3_HW_OPL3_CS …
#define OPL3_HW_OPL3_FM801 …
#define OPL3_HW_OPL3_CS4281 …
#define OPL3_HW_OPL4 …
#define OPL3_HW_OPL4_ML …
#define OPL3_HW_MASK …
#define MAX_OPL2_VOICES …
#define MAX_OPL3_VOICES …
struct snd_opl3;
struct fm_operator { … } __packed;
struct fm_instrument { … };
#define FM_PATCH_OPL2 …
#define FM_PATCH_OPL3 …
struct fm_patch { … };
struct snd_opl3_voice { … };
struct snd_opl3 { … };
void snd_opl3_interrupt(struct snd_hwdep * hw);
int snd_opl3_new(struct snd_card *card, unsigned short hardware,
struct snd_opl3 **ropl3);
int snd_opl3_init(struct snd_opl3 *opl3);
int snd_opl3_create(struct snd_card *card,
unsigned long l_port, unsigned long r_port,
unsigned short hardware,
int integrated,
struct snd_opl3 ** opl3);
int snd_opl3_timer_new(struct snd_opl3 * opl3, int timer1_dev, int timer2_dev);
int snd_opl3_hwdep_new(struct snd_opl3 * opl3, int device, int seq_device,
struct snd_hwdep ** rhwdep);
int snd_opl3_open(struct snd_hwdep * hw, struct file *file);
int snd_opl3_ioctl(struct snd_hwdep * hw, struct file *file,
unsigned int cmd, unsigned long arg);
int snd_opl3_release(struct snd_hwdep * hw, struct file *file);
void snd_opl3_reset(struct snd_opl3 * opl3);
#if IS_ENABLED(CONFIG_SND_SEQUENCER)
long snd_opl3_write(struct snd_hwdep *hw, const char __user *buf, long count,
loff_t *offset);
int snd_opl3_load_patch(struct snd_opl3 *opl3,
int prog, int bank, int type,
const char *name,
const unsigned char *ext,
const unsigned char *data);
struct fm_patch *snd_opl3_find_patch(struct snd_opl3 *opl3, int prog, int bank,
int create_patch);
void snd_opl3_clear_patches(struct snd_opl3 *opl3);
#else
#define snd_opl3_write …
static inline void snd_opl3_clear_patches(struct snd_opl3 *opl3) {}
#endif
#endif