162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_cienum E_IN84 {
862306a36Sopenharmony_ci	E_FADER_0 = 0,
962306a36Sopenharmony_ci	E_FADER_1,
1062306a36Sopenharmony_ci	E_FADER_2,
1162306a36Sopenharmony_ci	E_FADER_3,
1262306a36Sopenharmony_ci	E_FADER_4,
1362306a36Sopenharmony_ci	E_FADER_5,
1462306a36Sopenharmony_ci	E_FADER_6,
1562306a36Sopenharmony_ci	E_FADER_7,
1662306a36Sopenharmony_ci	E_FADER_M,
1762306a36Sopenharmony_ci	E_TRANSPORT,
1862306a36Sopenharmony_ci	E_MODIFIER = 10,
1962306a36Sopenharmony_ci	E_FILTER_SELECT,
2062306a36Sopenharmony_ci	E_SELECT,
2162306a36Sopenharmony_ci	E_MUTE,
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	E_SWITCH   = 15,
2462306a36Sopenharmony_ci	E_WHEEL_GAIN,
2562306a36Sopenharmony_ci	E_WHEEL_FREQ,
2662306a36Sopenharmony_ci	E_WHEEL_Q,
2762306a36Sopenharmony_ci	E_WHEEL_PAN,
2862306a36Sopenharmony_ci	E_WHEEL    = 20
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define T_RECORD   1
3262306a36Sopenharmony_ci#define T_PLAY     2
3362306a36Sopenharmony_ci#define T_STOP     4
3462306a36Sopenharmony_ci#define T_F_FWD    8
3562306a36Sopenharmony_ci#define T_REW   0x10
3662306a36Sopenharmony_ci#define T_SOLO  0x20
3762306a36Sopenharmony_ci#define T_REC   0x40
3862306a36Sopenharmony_ci#define T_NULL  0x80
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct us428_ctls {
4262306a36Sopenharmony_ci	unsigned char	fader[9];
4362306a36Sopenharmony_ci	unsigned char	transport;
4462306a36Sopenharmony_ci	unsigned char	modifier;
4562306a36Sopenharmony_ci	unsigned char	filters_elect;
4662306a36Sopenharmony_ci	unsigned char	select;
4762306a36Sopenharmony_ci	unsigned char	mute;
4862306a36Sopenharmony_ci	unsigned char	unknown;
4962306a36Sopenharmony_ci	unsigned char	wswitch;
5062306a36Sopenharmony_ci	unsigned char	wheel[5];
5162306a36Sopenharmony_ci};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cistruct us428_set_byte {
5462306a36Sopenharmony_ci	unsigned char offset,
5562306a36Sopenharmony_ci		value;
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cienum {
5962306a36Sopenharmony_ci	ELT_VOLUME = 0,
6062306a36Sopenharmony_ci	ELT_LIGHT
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_cistruct usx2y_volume {
6462306a36Sopenharmony_ci	unsigned char channel,
6562306a36Sopenharmony_ci		lh,
6662306a36Sopenharmony_ci		ll,
6762306a36Sopenharmony_ci		rh,
6862306a36Sopenharmony_ci		rl;
6962306a36Sopenharmony_ci};
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_cistruct us428_lights {
7262306a36Sopenharmony_ci	struct us428_set_byte light[7];
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cistruct us428_p4out {
7662306a36Sopenharmony_ci	char type;
7762306a36Sopenharmony_ci	union {
7862306a36Sopenharmony_ci		struct usx2y_volume vol;
7962306a36Sopenharmony_ci		struct us428_lights lights;
8062306a36Sopenharmony_ci	} val;
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci#define N_US428_CTL_BUFS 16
8462306a36Sopenharmony_ci#define N_US428_P4OUT_BUFS 16
8562306a36Sopenharmony_cistruct us428ctls_sharedmem {
8662306a36Sopenharmony_ci	struct us428_ctls	ctl_snapshot[N_US428_CTL_BUFS];
8762306a36Sopenharmony_ci	int			ctl_snapshot_differs_at[N_US428_CTL_BUFS];
8862306a36Sopenharmony_ci	int			ctl_snapshot_last, ctl_snapshot_red;
8962306a36Sopenharmony_ci	struct us428_p4out	p4out[N_US428_P4OUT_BUFS];
9062306a36Sopenharmony_ci	int			p4out_last, p4out_sent;
9162306a36Sopenharmony_ci};
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#define US428_SHAREDMEM_PAGES	PAGE_ALIGN(sizeof(struct us428ctls_sharedmem))
94