162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci#ifndef __SOUND_EMU8000_REG_H 362306a36Sopenharmony_ci#define __SOUND_EMU8000_REG_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * Register operations for the EMU8000 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 1999 Steve Ratcliffe 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Based on awe_wave.c by Takashi Iwai 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* 1362306a36Sopenharmony_ci * Data port addresses relative to the EMU base. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci#define EMU8000_DATA0(e) ((e)->port1) 1662306a36Sopenharmony_ci#define EMU8000_DATA1(e) ((e)->port2) 1762306a36Sopenharmony_ci#define EMU8000_DATA2(e) ((e)->port2+2) 1862306a36Sopenharmony_ci#define EMU8000_DATA3(e) ((e)->port3) 1962306a36Sopenharmony_ci#define EMU8000_PTR(e) ((e)->port3+2) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * Make a command from a register and channel. 2362306a36Sopenharmony_ci */ 2462306a36Sopenharmony_ci#define EMU8000_CMD(reg, chan) ((reg)<<5 | (chan)) 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * Commands to read and write the EMU8000 registers. 2862306a36Sopenharmony_ci * These macros should be used for all register accesses. 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_ci#define EMU8000_CPF_READ(emu, chan) \ 3162306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(0, (chan))) 3262306a36Sopenharmony_ci#define EMU8000_PTRX_READ(emu, chan) \ 3362306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(1, (chan))) 3462306a36Sopenharmony_ci#define EMU8000_CVCF_READ(emu, chan) \ 3562306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(2, (chan))) 3662306a36Sopenharmony_ci#define EMU8000_VTFT_READ(emu, chan) \ 3762306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(3, (chan))) 3862306a36Sopenharmony_ci#define EMU8000_PSST_READ(emu, chan) \ 3962306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(6, (chan))) 4062306a36Sopenharmony_ci#define EMU8000_CSL_READ(emu, chan) \ 4162306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(7, (chan))) 4262306a36Sopenharmony_ci#define EMU8000_CCCA_READ(emu, chan) \ 4362306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(0, (chan))) 4462306a36Sopenharmony_ci#define EMU8000_HWCF4_READ(emu) \ 4562306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 9)) 4662306a36Sopenharmony_ci#define EMU8000_HWCF5_READ(emu) \ 4762306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 10)) 4862306a36Sopenharmony_ci#define EMU8000_HWCF6_READ(emu) \ 4962306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 13)) 5062306a36Sopenharmony_ci#define EMU8000_SMALR_READ(emu) \ 5162306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 20)) 5262306a36Sopenharmony_ci#define EMU8000_SMARR_READ(emu) \ 5362306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 21)) 5462306a36Sopenharmony_ci#define EMU8000_SMALW_READ(emu) \ 5562306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 22)) 5662306a36Sopenharmony_ci#define EMU8000_SMARW_READ(emu) \ 5762306a36Sopenharmony_ci snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 23)) 5862306a36Sopenharmony_ci#define EMU8000_SMLD_READ(emu) \ 5962306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 26)) 6062306a36Sopenharmony_ci#define EMU8000_SMRD_READ(emu) \ 6162306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 26)) 6262306a36Sopenharmony_ci#define EMU8000_WC_READ(emu) \ 6362306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 27)) 6462306a36Sopenharmony_ci#define EMU8000_HWCF1_READ(emu) \ 6562306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 29)) 6662306a36Sopenharmony_ci#define EMU8000_HWCF2_READ(emu) \ 6762306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 30)) 6862306a36Sopenharmony_ci#define EMU8000_HWCF3_READ(emu) \ 6962306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 31)) 7062306a36Sopenharmony_ci#define EMU8000_INIT1_READ(emu, chan) \ 7162306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(2, (chan))) 7262306a36Sopenharmony_ci#define EMU8000_INIT2_READ(emu, chan) \ 7362306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(2, (chan))) 7462306a36Sopenharmony_ci#define EMU8000_INIT3_READ(emu, chan) \ 7562306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(3, (chan))) 7662306a36Sopenharmony_ci#define EMU8000_INIT4_READ(emu, chan) \ 7762306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(3, (chan))) 7862306a36Sopenharmony_ci#define EMU8000_ENVVOL_READ(emu, chan) \ 7962306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(4, (chan))) 8062306a36Sopenharmony_ci#define EMU8000_DCYSUSV_READ(emu, chan) \ 8162306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(5, (chan))) 8262306a36Sopenharmony_ci#define EMU8000_ENVVAL_READ(emu, chan) \ 8362306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(6, (chan))) 8462306a36Sopenharmony_ci#define EMU8000_DCYSUS_READ(emu, chan) \ 8562306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(7, (chan))) 8662306a36Sopenharmony_ci#define EMU8000_ATKHLDV_READ(emu, chan) \ 8762306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(4, (chan))) 8862306a36Sopenharmony_ci#define EMU8000_LFO1VAL_READ(emu, chan) \ 8962306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(5, (chan))) 9062306a36Sopenharmony_ci#define EMU8000_ATKHLD_READ(emu, chan) \ 9162306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(6, (chan))) 9262306a36Sopenharmony_ci#define EMU8000_LFO2VAL_READ(emu, chan) \ 9362306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(7, (chan))) 9462306a36Sopenharmony_ci#define EMU8000_IP_READ(emu, chan) \ 9562306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(0, (chan))) 9662306a36Sopenharmony_ci#define EMU8000_IFATN_READ(emu, chan) \ 9762306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(1, (chan))) 9862306a36Sopenharmony_ci#define EMU8000_PEFE_READ(emu, chan) \ 9962306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(2, (chan))) 10062306a36Sopenharmony_ci#define EMU8000_FMMOD_READ(emu, chan) \ 10162306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(3, (chan))) 10262306a36Sopenharmony_ci#define EMU8000_TREMFRQ_READ(emu, chan) \ 10362306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(4, (chan))) 10462306a36Sopenharmony_ci#define EMU8000_FM2FRQ2_READ(emu, chan) \ 10562306a36Sopenharmony_ci snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(5, (chan))) 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#define EMU8000_CPF_WRITE(emu, chan, val) \ 10962306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(0, (chan)), (val)) 11062306a36Sopenharmony_ci#define EMU8000_PTRX_WRITE(emu, chan, val) \ 11162306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(1, (chan)), (val)) 11262306a36Sopenharmony_ci#define EMU8000_CVCF_WRITE(emu, chan, val) \ 11362306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(2, (chan)), (val)) 11462306a36Sopenharmony_ci#define EMU8000_VTFT_WRITE(emu, chan, val) \ 11562306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(3, (chan)), (val)) 11662306a36Sopenharmony_ci#define EMU8000_PSST_WRITE(emu, chan, val) \ 11762306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(6, (chan)), (val)) 11862306a36Sopenharmony_ci#define EMU8000_CSL_WRITE(emu, chan, val) \ 11962306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(7, (chan)), (val)) 12062306a36Sopenharmony_ci#define EMU8000_CCCA_WRITE(emu, chan, val) \ 12162306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(0, (chan)), (val)) 12262306a36Sopenharmony_ci#define EMU8000_HWCF4_WRITE(emu, val) \ 12362306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 9), (val)) 12462306a36Sopenharmony_ci#define EMU8000_HWCF5_WRITE(emu, val) \ 12562306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 10), (val)) 12662306a36Sopenharmony_ci#define EMU8000_HWCF6_WRITE(emu, val) \ 12762306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 13), (val)) 12862306a36Sopenharmony_ci/* this register is not documented */ 12962306a36Sopenharmony_ci#define EMU8000_HWCF7_WRITE(emu, val) \ 13062306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 14), (val)) 13162306a36Sopenharmony_ci#define EMU8000_SMALR_WRITE(emu, val) \ 13262306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 20), (val)) 13362306a36Sopenharmony_ci#define EMU8000_SMARR_WRITE(emu, val) \ 13462306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 21), (val)) 13562306a36Sopenharmony_ci#define EMU8000_SMALW_WRITE(emu, val) \ 13662306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 22), (val)) 13762306a36Sopenharmony_ci#define EMU8000_SMARW_WRITE(emu, val) \ 13862306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 23), (val)) 13962306a36Sopenharmony_ci#define EMU8000_SMLD_WRITE(emu, val) \ 14062306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 26), (val)) 14162306a36Sopenharmony_ci#define EMU8000_SMRD_WRITE(emu, val) \ 14262306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 26), (val)) 14362306a36Sopenharmony_ci#define EMU8000_WC_WRITE(emu, val) \ 14462306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 27), (val)) 14562306a36Sopenharmony_ci#define EMU8000_HWCF1_WRITE(emu, val) \ 14662306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 29), (val)) 14762306a36Sopenharmony_ci#define EMU8000_HWCF2_WRITE(emu, val) \ 14862306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 30), (val)) 14962306a36Sopenharmony_ci#define EMU8000_HWCF3_WRITE(emu, val) \ 15062306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 31), (val)) 15162306a36Sopenharmony_ci#define EMU8000_INIT1_WRITE(emu, chan, val) \ 15262306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(2, (chan)), (val)) 15362306a36Sopenharmony_ci#define EMU8000_INIT2_WRITE(emu, chan, val) \ 15462306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(2, (chan)), (val)) 15562306a36Sopenharmony_ci#define EMU8000_INIT3_WRITE(emu, chan, val) \ 15662306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(3, (chan)), (val)) 15762306a36Sopenharmony_ci#define EMU8000_INIT4_WRITE(emu, chan, val) \ 15862306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(3, (chan)), (val)) 15962306a36Sopenharmony_ci#define EMU8000_ENVVOL_WRITE(emu, chan, val) \ 16062306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(4, (chan)), (val)) 16162306a36Sopenharmony_ci#define EMU8000_DCYSUSV_WRITE(emu, chan, val) \ 16262306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(5, (chan)), (val)) 16362306a36Sopenharmony_ci#define EMU8000_ENVVAL_WRITE(emu, chan, val) \ 16462306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(6, (chan)), (val)) 16562306a36Sopenharmony_ci#define EMU8000_DCYSUS_WRITE(emu, chan, val) \ 16662306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(7, (chan)), (val)) 16762306a36Sopenharmony_ci#define EMU8000_ATKHLDV_WRITE(emu, chan, val) \ 16862306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(4, (chan)), (val)) 16962306a36Sopenharmony_ci#define EMU8000_LFO1VAL_WRITE(emu, chan, val) \ 17062306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(5, (chan)), (val)) 17162306a36Sopenharmony_ci#define EMU8000_ATKHLD_WRITE(emu, chan, val) \ 17262306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(6, (chan)), (val)) 17362306a36Sopenharmony_ci#define EMU8000_LFO2VAL_WRITE(emu, chan, val) \ 17462306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(7, (chan)), (val)) 17562306a36Sopenharmony_ci#define EMU8000_IP_WRITE(emu, chan, val) \ 17662306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(0, (chan)), (val)) 17762306a36Sopenharmony_ci#define EMU8000_IFATN_WRITE(emu, chan, val) \ 17862306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(1, (chan)), (val)) 17962306a36Sopenharmony_ci#define EMU8000_PEFE_WRITE(emu, chan, val) \ 18062306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(2, (chan)), (val)) 18162306a36Sopenharmony_ci#define EMU8000_FMMOD_WRITE(emu, chan, val) \ 18262306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(3, (chan)), (val)) 18362306a36Sopenharmony_ci#define EMU8000_TREMFRQ_WRITE(emu, chan, val) \ 18462306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(4, (chan)), (val)) 18562306a36Sopenharmony_ci#define EMU8000_FM2FRQ2_WRITE(emu, chan, val) \ 18662306a36Sopenharmony_ci snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(5, (chan)), (val)) 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci#define EMU8000_0080_WRITE(emu, chan, val) \ 18962306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(4, (chan)), (val)) 19062306a36Sopenharmony_ci#define EMU8000_00A0_WRITE(emu, chan, val) \ 19162306a36Sopenharmony_ci snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(5, (chan)), (val)) 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci#endif /* __SOUND_EMU8000_REG_H */ 194