1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *
4  * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
5  */
6 
7 enum E_IN84 {
8 	E_FADER_0 = 0,
9 	E_FADER_1,
10 	E_FADER_2,
11 	E_FADER_3,
12 	E_FADER_4,
13 	E_FADER_5,
14 	E_FADER_6,
15 	E_FADER_7,
16 	E_FADER_M,
17 	E_TRANSPORT,
18 	E_MODIFIER = 10,
19 	E_FILTER_SELECT,
20 	E_SELECT,
21 	E_MUTE,
22 
23 	E_SWITCH   = 15,
24 	E_WHEEL_GAIN,
25 	E_WHEEL_FREQ,
26 	E_WHEEL_Q,
27 	E_WHEEL_PAN,
28 	E_WHEEL    = 20
29 };
30 
31 #define T_RECORD   1
32 #define T_PLAY     2
33 #define T_STOP     4
34 #define T_F_FWD    8
35 #define T_REW   0x10
36 #define T_SOLO  0x20
37 #define T_REC   0x40
38 #define T_NULL  0x80
39 
40 
41 struct us428_ctls {
42 	unsigned char	fader[9];
43 	unsigned char	transport;
44 	unsigned char	modifier;
45 	unsigned char	filters_elect;
46 	unsigned char	select;
47 	unsigned char	mute;
48 	unsigned char	unknown;
49 	unsigned char	wswitch;
50 	unsigned char	wheel[5];
51 };
52 
53 struct us428_set_byte {
54 	unsigned char offset,
55 		value;
56 };
57 
58 enum {
59 	ELT_VOLUME = 0,
60 	ELT_LIGHT
61 };
62 
63 struct usx2y_volume {
64 	unsigned char channel,
65 		lh,
66 		ll,
67 		rh,
68 		rl;
69 };
70 
71 struct us428_lights {
72 	struct us428_set_byte light[7];
73 };
74 
75 struct us428_p4out {
76 	char type;
77 	union {
78 		struct usx2y_volume vol;
79 		struct us428_lights lights;
80 	} val;
81 };
82 
83 #define N_US428_CTL_BUFS 16
84 #define N_US428_P4OUT_BUFS 16
85 struct us428ctls_sharedmem {
86 	struct us428_ctls	ctl_snapshot[N_US428_CTL_BUFS];
87 	int			ctl_snapshot_differs_at[N_US428_CTL_BUFS];
88 	int			ctl_snapshot_last, ctl_snapshot_red;
89 	struct us428_p4out	p4out[N_US428_P4OUT_BUFS];
90 	int			p4out_last, p4out_sent;
91 };
92 
93 #define US428_SHAREDMEM_PAGES	PAGE_ALIGN(sizeof(struct us428ctls_sharedmem))
94