xref: /OK3568_Linux_fs/kernel/sound/pci/ctxfi/ctmixer.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /**
3*4882a593Smuzhiyun  * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * @File	ctmixer.h
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * @Brief
8*4882a593Smuzhiyun  * This file contains the definition of the mixer device functions.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * @Author	Liu Chun
11*4882a593Smuzhiyun  * @Date 	Mar 28 2008
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #ifndef CTMIXER_H
15*4882a593Smuzhiyun #define CTMIXER_H
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include "ctatc.h"
18*4882a593Smuzhiyun #include "ctresource.h"
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define INIT_VOL	0x1c00
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun enum MIXER_PORT_T {
23*4882a593Smuzhiyun 	MIX_WAVE_FRONT,
24*4882a593Smuzhiyun 	MIX_WAVE_REAR,
25*4882a593Smuzhiyun 	MIX_WAVE_CENTLFE,
26*4882a593Smuzhiyun 	MIX_WAVE_SURROUND,
27*4882a593Smuzhiyun 	MIX_SPDIF_OUT,
28*4882a593Smuzhiyun 	MIX_PCMO_FRONT,
29*4882a593Smuzhiyun 	MIX_MIC_IN,
30*4882a593Smuzhiyun 	MIX_LINE_IN,
31*4882a593Smuzhiyun 	MIX_SPDIF_IN,
32*4882a593Smuzhiyun 	MIX_PCMI_FRONT,
33*4882a593Smuzhiyun 	MIX_PCMI_REAR,
34*4882a593Smuzhiyun 	MIX_PCMI_CENTLFE,
35*4882a593Smuzhiyun 	MIX_PCMI_SURROUND,
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun 	NUM_MIX_PORTS
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* alsa mixer descriptor */
41*4882a593Smuzhiyun struct ct_mixer {
42*4882a593Smuzhiyun 	struct ct_atc *atc;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	void **amixers;		/* amixer resources for volume control */
45*4882a593Smuzhiyun 	void **sums;		/* sum resources for signal collection */
46*4882a593Smuzhiyun 	unsigned int switch_state; /* A bit-map to indicate state of switches */
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 	int (*get_output_ports)(struct ct_mixer *mixer, enum MIXER_PORT_T type,
49*4882a593Smuzhiyun 				  struct rsc **rleft, struct rsc **rright);
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	int (*set_input_left)(struct ct_mixer *mixer,
52*4882a593Smuzhiyun 			      enum MIXER_PORT_T type, struct rsc *rsc);
53*4882a593Smuzhiyun 	int (*set_input_right)(struct ct_mixer *mixer,
54*4882a593Smuzhiyun 			       enum MIXER_PORT_T type, struct rsc *rsc);
55*4882a593Smuzhiyun #ifdef CONFIG_PM_SLEEP
56*4882a593Smuzhiyun 	int (*resume)(struct ct_mixer *mixer);
57*4882a593Smuzhiyun #endif
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun int ct_alsa_mix_create(struct ct_atc *atc,
61*4882a593Smuzhiyun 		       enum CTALSADEVS device,
62*4882a593Smuzhiyun 		       const char *device_name);
63*4882a593Smuzhiyun int ct_mixer_create(struct ct_atc *atc, struct ct_mixer **rmixer);
64*4882a593Smuzhiyun int ct_mixer_destroy(struct ct_mixer *mixer);
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #endif /* CTMIXER_H */
67