xref: /linux/sound/usb/6fire/control.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2c6d43ba8STorsten Schenk /*
3c6d43ba8STorsten Schenk  * Linux driver for TerraTec DMX 6Fire USB
4c6d43ba8STorsten Schenk  *
5c6d43ba8STorsten Schenk  * Author:	Torsten Schenk <torsten.schenk@zoho.com>
6c6d43ba8STorsten Schenk  * Created:	Jan 01, 2011
7c6d43ba8STorsten Schenk  * Copyright:	(C) Torsten Schenk
8c6d43ba8STorsten Schenk  */
9c6d43ba8STorsten Schenk 
10c6d43ba8STorsten Schenk #ifndef USB6FIRE_CONTROL_H
11c6d43ba8STorsten Schenk #define USB6FIRE_CONTROL_H
12c6d43ba8STorsten Schenk 
13c6d43ba8STorsten Schenk #include "common.h"
14c6d43ba8STorsten Schenk 
15c6d43ba8STorsten Schenk enum {
16c6d43ba8STorsten Schenk 	CONTROL_MAX_ELEMENTS = 32
17c6d43ba8STorsten Schenk };
18c6d43ba8STorsten Schenk 
192475b0d4STorsten Schenk enum {
202475b0d4STorsten Schenk 	CONTROL_RATE_44KHZ,
212475b0d4STorsten Schenk 	CONTROL_RATE_48KHZ,
222475b0d4STorsten Schenk 	CONTROL_RATE_88KHZ,
232475b0d4STorsten Schenk 	CONTROL_RATE_96KHZ,
242475b0d4STorsten Schenk 	CONTROL_RATE_176KHZ,
252475b0d4STorsten Schenk 	CONTROL_RATE_192KHZ,
262475b0d4STorsten Schenk 	CONTROL_N_RATES
272475b0d4STorsten Schenk };
282475b0d4STorsten Schenk 
29c6d43ba8STorsten Schenk struct control_runtime {
302475b0d4STorsten Schenk 	int (*update_streaming)(struct control_runtime *rt);
312475b0d4STorsten Schenk 	int (*set_rate)(struct control_runtime *rt, int rate);
322475b0d4STorsten Schenk 	int (*set_channels)(struct control_runtime *rt, int n_analog_out,
332475b0d4STorsten Schenk 		int n_analog_in, bool spdif_out, bool spdif_in);
342475b0d4STorsten Schenk 
35c6d43ba8STorsten Schenk 	struct sfire_chip *chip;
36c6d43ba8STorsten Schenk 
37c6d43ba8STorsten Schenk 	struct snd_kcontrol *element[CONTROL_MAX_ELEMENTS];
38c6d43ba8STorsten Schenk 	bool opt_coax_switch;
39c6d43ba8STorsten Schenk 	bool line_phono_switch;
402475b0d4STorsten Schenk 	bool digital_thru_switch;
412475b0d4STorsten Schenk 	bool usb_streaming;
42f90ffbf3STorsten Schenk 	u8 output_vol[6];
43f90ffbf3STorsten Schenk 	u8 ovol_updated;
44d97c735aSTorsten Schenk 	u8 output_mute;
4506bb4e74STorsten Schenk 	s8 input_vol[2];
4606bb4e74STorsten Schenk 	u8 ivol_updated;
47c6d43ba8STorsten Schenk };
48c6d43ba8STorsten Schenk 
4987f9796aSBill Pemberton int usb6fire_control_init(struct sfire_chip *chip);
50c6d43ba8STorsten Schenk void usb6fire_control_abort(struct sfire_chip *chip);
51c6d43ba8STorsten Schenk void usb6fire_control_destroy(struct sfire_chip *chip);
52c6d43ba8STorsten Schenk #endif /* USB6FIRE_CONTROL_H */
53c6d43ba8STorsten Schenk 
54