Skip to content

Commit 145ec1f

Browse files
ossilatortiwai
authored andcommitted
ALSA: emu10k1: pull in some register definitions from kX-project
For documentation purposes and later use. Some pre-existing but (mostly) unused definitions were renamed for consistency. Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Link: https://lore.kernel.org/r/20230422161021.1143903-6-oswald.buddenhagen@gmx.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent ac9219d commit 145ec1f

2 files changed

Lines changed: 56 additions & 24 deletions

File tree

include/sound/emu10k1.h

Lines changed: 55 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
/* the relevant bits and zero to the other bits */
6262
#define IPR_P16V 0x80000000 /* Bit set when the CA0151 P16V chip wishes
6363
to interrupt */
64-
#define IPR_GPIOMSG 0x20000000 /* GPIO message interrupt (RE'd, still not sure
65-
which INTE bits enable it) */
64+
#define IPR_WATERMARK_REACHED 0x40000000
65+
#define IPR_A_GPIO 0x20000000 /* GPIO input pin change */
6666

6767
/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1) */
6868
#define IPR_A_MIDITRANSBUFEMPTY2 0x10000000 /* MIDI UART transmit buffer empty */
@@ -122,10 +122,14 @@
122122
/* behavior and possibly random segfaults and */
123123
/* lockups if enabled. */
124124

125+
#define INTE_A_GPIOENABLE 0x00040000 /* Enable GPIO input change interrupts */
126+
125127
/* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1) */
126128
#define INTE_A_MIDITXENABLE2 0x00020000 /* Enable MIDI transmit-buffer-empty interrupts */
127129
#define INTE_A_MIDIRXENABLE2 0x00010000 /* Enable MIDI receive-buffer-empty interrupts */
128130

131+
#define INTE_A_SPDIF_BUFFULL_ENABLE 0x00008000
132+
#define INTE_A_SPDIF_HALFBUFFULL_ENABLE 0x00004000
129133

130134
#define INTE_SAMPLERATETRACKER 0x00002000 /* Enable sample rate tracker interrupts */
131135
/* NOTE: This bit must always be enabled */
@@ -146,9 +150,10 @@
146150
#define WC 0x10 /* Wall Clock register */
147151
#define WC_SAMPLECOUNTER_MASK 0x03FFFFC0 /* Sample periods elapsed since reset */
148152
#define WC_SAMPLECOUNTER 0x14060010
149-
#define WC_CURRENTCHANNEL 0x0000003F /* Channel [0..63] currently being serviced */
153+
#define WC_CURRENTCHANNEL_MASK 0x0000003F /* Channel [0..63] currently being serviced */
150154
/* NOTE: Each channel takes 1/64th of a sample */
151155
/* period to be serviced. */
156+
#define WC_CURRENTCHANNEL 0x06000010
152157

153158
#define HCFG 0x14 /* Hardware config register */
154159
/* NOTE: There is no reason to use the legacy */
@@ -276,7 +281,7 @@
276281
/* NOTE: After the rate is changed, a maximum */
277282
/* of 1024 sample periods should be allowed */
278283
/* before the new rate is guaranteed accurate. */
279-
#define TIMER_RATE_MASK 0x000003ff /* Timer interrupt rate in sample periods */
284+
#define TIMER_RATE_MASK 0x03ff /* Timer interrupt rate in sample periods */
280285
/* 0 == 1024 periods, [1..4] are not useful */
281286

282287
#define AC97DATA 0x1c /* AC97 register set data register (16 bit) */
@@ -425,7 +430,7 @@
425430

426431
#define CCCA 0x08 /* Filter Q, interp. ROM, byte size, cur. addr register */
427432
#define CCCA_RESONANCE 0xf0000000 /* Lowpass filter resonance (Q) height */
428-
#define CCCA_INTERPROMMASK 0x0e000000 /* Selects passband of interpolation ROM */
433+
#define CCCA_INTERPROM_MASK 0x0e000000 /* Selects passband of interpolation ROM */
429434
/* 1 == full band, 7 == lowpass */
430435
/* ROM 0 is used when pitch shifting downward or less */
431436
/* then 3 semitones upward. Increasingly higher ROM */
@@ -487,7 +492,7 @@
487492
/* 0x8000-n == 666*n usec delay */
488493

489494
#define ATKHLDV 0x11 /* Volume envelope hold and attack register */
490-
#define ATKHLDV_PHASE0 0x00008000 /* 0 = Begin attack phase */
495+
#define ATKHLDV_PHASE0_MASK 0x00008000 /* 0 = Begin attack phase */
491496
#define ATKHLDV_HOLDTIME_MASK 0x00007f00 /* Envelope hold time (127-n == n*88.2msec) */
492497
#define ATKHLDV_ATTACKTIME_MASK 0x0000007f /* Envelope attack time, log encoded */
493498
/* 0 = infinite, 1 = 10.9msec, ... 0x7f = 5.5msec */
@@ -510,7 +515,7 @@
510515
/* 0x8000-n == 666*n usec delay */
511516

512517
#define ATKHLDM 0x15 /* Modulation envelope hold and attack register */
513-
#define ATKHLDM_PHASE0 0x00008000 /* 0 = Begin attack phase */
518+
#define ATKHLDM_PHASE0_MASK 0x00008000 /* 0 = Begin attack phase */
514519
#define ATKHLDM_HOLDTIME 0x00007f00 /* Envelope hold time (127-n == n*42msec) */
515520
#define ATKHLDM_ATTACKTIME 0x0000007f /* Envelope attack time, log encoded */
516521
/* 0 = infinite, 1 = 11msec, ... 0x7f = 5.5msec */
@@ -839,34 +844,45 @@
839844
#define A_FXWC1 0x74 /* Selects 0x7f-0x60 for FX recording */
840845
#define A_FXWC2 0x75 /* Selects 0x9f-0x80 for FX recording */
841846

842-
/* Extended Hardware Control */
843-
#define A_SPDIF_SAMPLERATE 0x76 /* Set the sample rate of SPDIF output */
844-
#define A_SAMPLE_RATE 0x76 /* Various sample rate settings. */
845-
#define A_SAMPLE_RATE_NOT_USED 0x0ffc111e /* Bits that are not used and cannot be set. */
846-
#define A_SAMPLE_RATE_UNKNOWN 0xf0030001 /* Bits that can be set, but have unknown use. */
847+
#define A_EHC 0x76 /* Extended Hardware Control */
848+
849+
#define A_SPDIF_SAMPLERATE A_EHC /* Set the sample rate of SPDIF output */
847850
#define A_SPDIF_RATE_MASK 0x000000e0 /* Any other values for rates, just use 48000 */
848-
#define A_SPDIF_48000 0x00000000
851+
#define A_SPDIF_48000 0x00000000 /* kX calls this BYPASS */
849852
#define A_SPDIF_192000 0x00000020
850853
#define A_SPDIF_96000 0x00000040
851854
#define A_SPDIF_44100 0x00000080
855+
#define A_SPDIF_MUTED 0x000000c0
852856

853857
#define A_I2S_CAPTURE_RATE_MASK 0x00000e00 /* This sets the capture PCM rate, but it is */
854858
#define A_I2S_CAPTURE_48000 0x00000000 /* unclear if this sets the ADC rate as well. */
855859
#define A_I2S_CAPTURE_192000 0x00000200
856860
#define A_I2S_CAPTURE_96000 0x00000400
857861
#define A_I2S_CAPTURE_44100 0x00000800
858862

859-
#define A_PCM_RATE_MASK 0x0000e000 /* This sets the playback PCM rate on the P16V */
860-
#define A_PCM_48000 0x00000000
861-
#define A_PCM_192000 0x00002000
862-
#define A_PCM_96000 0x00004000
863-
#define A_PCM_44100 0x00008000
863+
#define A_EHC_SRC48_MASK 0x0000e000 /* This sets the playback PCM rate on the P16V */
864+
#define A_EHC_SRC48_BYPASS 0x00000000
865+
#define A_EHC_SRC48_192 0x00002000
866+
#define A_EHC_SRC48_96 0x00004000
867+
#define A_EHC_SRC48_44 0x00008000
868+
#define A_EHC_SRC48_MUTED 0x0000c000
869+
870+
#define A_EHC_P17V_TVM 0x00000001 /* Tank virtual memory mode */
871+
#define A_EHC_P17V_SEL0_MASK 0x00030000 /* Aka A_EHC_P16V_PB_RATE; 00: 48, 01: 44.1, 10: 96, 11: 192 */
872+
#define A_EHC_P17V_SEL1_MASK 0x000c0000
873+
#define A_EHC_P17V_SEL2_MASK 0x00300000
874+
#define A_EHC_P17V_SEL3_MASK 0x00c00000
875+
876+
#define A_EHC_ASYNC_BYPASS 0x80000000
864877

865878
#define A_SRT3 0x77 /* I2S0 Sample Rate Tracker Status */
866879
#define A_SRT4 0x78 /* I2S1 Sample Rate Tracker Status */
867880
#define A_SRT5 0x79 /* I2S2 Sample Rate Tracker Status */
868881
/* - default to 0x01080000 on my audigy 2 ZS --rlrevell */
869882

883+
#define A_SRT_ESTSAMPLERATE 0x001fffff
884+
#define A_SRT_RATELOCKED 0x01000000
885+
870886
#define A_TTDA 0x7a /* Tank Table DMA Address */
871887
#define A_TTDD 0x7b /* Tank Table DMA Data */
872888

@@ -981,7 +997,7 @@
981997
#define EMU_HANA_WCLOCK_INT_44_1K 0x01
982998
#define EMU_HANA_WCLOCK_HANA_SPDIF_IN 0x02
983999
#define EMU_HANA_WCLOCK_HANA_ADAT_IN 0x03
984-
#define EMU_HANA_WCLOCK_SYNC_BNCN 0x04
1000+
#define EMU_HANA_WCLOCK_SYNC_BNC 0x04
9851001
#define EMU_HANA_WCLOCK_2ND_HANA 0x05
9861002
#define EMU_HANA_WCLOCK_SRC_RESERVED 0x06
9871003
#define EMU_HANA_WCLOCK_OFF 0x07 /* For testing, forces fallback to DEFCLOCK */
@@ -1010,10 +1026,10 @@
10101026
#define EMU_HANA_IRQ_DOCK_LOST 0x08
10111027

10121028
#define EMU_HANA_SPDIF_MODE 0x0a /* 00xxxxx 5 bits SPDIF MODE */
1013-
#define EMU_HANA_SPDIF_MODE_TX_COMSUMER 0x00
1029+
#define EMU_HANA_SPDIF_MODE_TX_CONSUMER 0x00
10141030
#define EMU_HANA_SPDIF_MODE_TX_PRO 0x01
10151031
#define EMU_HANA_SPDIF_MODE_TX_NOCOPY 0x02
1016-
#define EMU_HANA_SPDIF_MODE_RX_COMSUMER 0x00
1032+
#define EMU_HANA_SPDIF_MODE_RX_CONSUMER 0x00
10171033
#define EMU_HANA_SPDIF_MODE_RX_PRO 0x04
10181034
#define EMU_HANA_SPDIF_MODE_RX_NOCOPY 0x08
10191035
#define EMU_HANA_SPDIF_MODE_RX_INVALID 0x10
@@ -1025,8 +1041,12 @@
10251041
#define EMU_HANA_OPTICAL_OUT_ADAT 0x02
10261042

10271043
#define EMU_HANA_MIDI_IN 0x0c /* 000000x 1 bit Control MIDI */
1028-
#define EMU_HANA_MIDI_IN_FROM_HAMOA 0x00 /* HAMOA MIDI in to Alice 2 MIDI B */
1029-
#define EMU_HANA_MIDI_IN_FROM_DOCK 0x01 /* Audio Dock MIDI in to Alice 2 MIDI B */
1044+
#define EMU_HANA_MIDI_INA_FROM_HAMOA 0x01 /* HAMOA MIDI in to Alice 2 MIDI A */
1045+
#define EMU_HANA_MIDI_INA_FROM_DOCK1 0x02 /* Audio Dock-1 MIDI in to Alice 2 MIDI A */
1046+
#define EMU_HANA_MIDI_INA_FROM_DOCK2 0x03 /* Audio Dock-2 MIDI in to Alice 2 MIDI A */
1047+
#define EMU_HANA_MIDI_INB_FROM_HAMOA 0x08 /* HAMOA MIDI in to Alice 2 MIDI B */
1048+
#define EMU_HANA_MIDI_INB_FROM_DOCK1 0x10 /* Audio Dock-1 MIDI in to Alice 2 MIDI B */
1049+
#define EMU_HANA_MIDI_INB_FROM_DOCK2 0x18 /* Audio Dock-2 MIDI in to Alice 2 MIDI B */
10301050

10311051
#define EMU_HANA_DOCK_LEDS_1 0x0d /* 000xxxx 4 bit Audio Dock LEDs */
10321052
#define EMU_HANA_DOCK_LEDS_1_MIDI1 0x01 /* MIDI 1 LED on */
@@ -1119,6 +1139,10 @@
11191139

11201140
/* 0x30 - 0x3f Unused Read only registers */
11211141

1142+
// The meaning of this is not clear; kX-project just calls it "lock" in some info-only code.
1143+
#define EMU_HANA_LOCK_STS_LO 0x38 /* 0xxxxxx lower 6 bits */
1144+
#define EMU_HANA_LOCK_STS_HI 0x39 /* 0xxxxxx upper 6 bits */
1145+
11221146
/************************************************************************************************/
11231147
/* EMU1010 Audio Destinations */
11241148
/************************************************************************************************/
@@ -1257,8 +1281,12 @@
12571281
#define EMU_DST_DOCK_SPDIF_RIGHT2 0x011f /* Audio Dock SPDIF Right, 2nd or 96kHz */
12581282
#define EMU_DST_HANA_SPDIF_LEFT1 0x0200 /* Hana SPDIF Left, 1st or 48kHz only */
12591283
#define EMU_DST_HANA_SPDIF_LEFT2 0x0202 /* Hana SPDIF Left, 2nd or 96kHz */
1284+
#define EMU_DST_HANA_SPDIF_LEFT3 0x0204 /* Hana SPDIF Left, 3rd or 192kHz */
1285+
#define EMU_DST_HANA_SPDIF_LEFT4 0x0206 /* Hana SPDIF Left, 4th or 192kHz */
12601286
#define EMU_DST_HANA_SPDIF_RIGHT1 0x0201 /* Hana SPDIF Right, 1st or 48kHz only */
12611287
#define EMU_DST_HANA_SPDIF_RIGHT2 0x0203 /* Hana SPDIF Right, 2nd or 96kHz */
1288+
#define EMU_DST_HANA_SPDIF_RIGHT3 0x0205 /* Hana SPDIF Right, 3rd or 192kHz */
1289+
#define EMU_DST_HANA_SPDIF_RIGHT4 0x0207 /* Hana SPDIF Right, 4th or 192kHz */
12621290
#define EMU_DST_HAMOA_DAC_LEFT1 0x0300 /* Hamoa DAC Left, 1st or 48kHz only */
12631291
#define EMU_DST_HAMOA_DAC_LEFT2 0x0302 /* Hamoa DAC Left, 2nd or 96kHz */
12641292
#define EMU_DST_HAMOA_DAC_LEFT3 0x0304 /* Hamoa DAC Left, 3rd or 192kHz */
@@ -1409,8 +1437,12 @@
14091437
#define EMU_SRC_HANA_ADAT 0x0400 /* Hana ADAT 8 channel in +0 to +7 */
14101438
#define EMU_SRC_HANA_SPDIF_LEFT1 0x0500 /* Hana SPDIF Left, 1st or 48kHz only */
14111439
#define EMU_SRC_HANA_SPDIF_LEFT2 0x0502 /* Hana SPDIF Left, 2nd or 96kHz */
1440+
#define EMU_SRC_HANA_SPDIF_LEFT3 0x0504 /* Hana SPDIF Left, 3rd or 192kHz */
1441+
#define EMU_SRC_HANA_SPDIF_LEFT4 0x0506 /* Hana SPDIF Left, 4th or 192kHz */
14121442
#define EMU_SRC_HANA_SPDIF_RIGHT1 0x0501 /* Hana SPDIF Right, 1st or 48kHz only */
14131443
#define EMU_SRC_HANA_SPDIF_RIGHT2 0x0503 /* Hana SPDIF Right, 2nd or 96kHz */
1444+
#define EMU_SRC_HANA_SPDIF_RIGHT3 0x0505 /* Hana SPDIF Right, 3rd or 192kHz */
1445+
#define EMU_SRC_HANA_SPDIF_RIGHT4 0x0507 /* Hana SPDIF Right, 4th or 192kHz */
14141446

14151447
/* Additional inputs for 1616(M)/Microdock */
14161448

sound/pci/emu10k1/emu10k1_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1953,7 +1953,7 @@ static const unsigned char saved_regs[] = {
19531953
0xff /* end */
19541954
};
19551955
static const unsigned char saved_regs_audigy[] = {
1956-
A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_SAMPLE_RATE,
1956+
A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_EHC,
19571957
A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
19581958
0xff /* end */
19591959
};

0 commit comments

Comments
 (0)