xref: /OK3568_Linux_fs/kernel/sound/pci/ctxfi/ctamixer.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	ctamixer.h
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * @Brief
8*4882a593Smuzhiyun  * This file contains the definition of the Audio Mixer
9*4882a593Smuzhiyun  * resource management object.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * @Author	Liu Chun
12*4882a593Smuzhiyun  * @Date 	May 21 2008
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifndef CTAMIXER_H
16*4882a593Smuzhiyun #define CTAMIXER_H
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include "ctresource.h"
19*4882a593Smuzhiyun #include <linux/spinlock.h>
20*4882a593Smuzhiyun #include <sound/core.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* Define the descriptor of a summation node resource */
23*4882a593Smuzhiyun struct sum {
24*4882a593Smuzhiyun 	struct rsc rsc;		/* Basic resource info */
25*4882a593Smuzhiyun 	unsigned char idx[8];
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* Define sum resource request description info */
29*4882a593Smuzhiyun struct sum_desc {
30*4882a593Smuzhiyun 	unsigned int msr;
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun struct sum_mgr {
34*4882a593Smuzhiyun 	struct rsc_mgr mgr;	/* Basic resource manager info */
35*4882a593Smuzhiyun 	struct snd_card *card;	/* pointer to this card */
36*4882a593Smuzhiyun 	spinlock_t mgr_lock;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	 /* request one sum resource */
39*4882a593Smuzhiyun 	int (*get_sum)(struct sum_mgr *mgr,
40*4882a593Smuzhiyun 			const struct sum_desc *desc, struct sum **rsum);
41*4882a593Smuzhiyun 	/* return one sum resource */
42*4882a593Smuzhiyun 	int (*put_sum)(struct sum_mgr *mgr, struct sum *sum);
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun /* Constructor and destructor of daio resource manager */
46*4882a593Smuzhiyun int sum_mgr_create(struct hw *hw, struct sum_mgr **rsum_mgr);
47*4882a593Smuzhiyun int sum_mgr_destroy(struct sum_mgr *sum_mgr);
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun /* Define the descriptor of a amixer resource */
50*4882a593Smuzhiyun struct amixer_rsc_ops;
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun struct amixer {
53*4882a593Smuzhiyun 	struct rsc rsc;		/* Basic resource info */
54*4882a593Smuzhiyun 	unsigned char idx[8];
55*4882a593Smuzhiyun 	struct rsc *input;	/* pointer to a resource acting as source */
56*4882a593Smuzhiyun 	struct sum *sum;	/* Put amixer output to this summation node */
57*4882a593Smuzhiyun 	const struct amixer_rsc_ops *ops;	/* AMixer specific operations */
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun struct amixer_rsc_ops {
61*4882a593Smuzhiyun 	int (*set_input)(struct amixer *amixer, struct rsc *rsc);
62*4882a593Smuzhiyun 	int (*set_scale)(struct amixer *amixer, unsigned int scale);
63*4882a593Smuzhiyun 	int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv);
64*4882a593Smuzhiyun 	int (*set_sum)(struct amixer *amixer, struct sum *sum);
65*4882a593Smuzhiyun 	int (*commit_write)(struct amixer *amixer);
66*4882a593Smuzhiyun 	/* Only for interleaved recording */
67*4882a593Smuzhiyun 	int (*commit_raw_write)(struct amixer *amixer);
68*4882a593Smuzhiyun 	int (*setup)(struct amixer *amixer, struct rsc *input,
69*4882a593Smuzhiyun 			unsigned int scale, struct sum *sum);
70*4882a593Smuzhiyun 	int (*get_scale)(struct amixer *amixer);
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* Define amixer resource request description info */
74*4882a593Smuzhiyun struct amixer_desc {
75*4882a593Smuzhiyun 	unsigned int msr;
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun struct amixer_mgr {
79*4882a593Smuzhiyun 	struct rsc_mgr mgr;	/* Basic resource manager info */
80*4882a593Smuzhiyun 	struct snd_card *card;	/* pointer to this card */
81*4882a593Smuzhiyun 	spinlock_t mgr_lock;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	 /* request one amixer resource */
84*4882a593Smuzhiyun 	int (*get_amixer)(struct amixer_mgr *mgr,
85*4882a593Smuzhiyun 			  const struct amixer_desc *desc,
86*4882a593Smuzhiyun 			  struct amixer **ramixer);
87*4882a593Smuzhiyun 	/* return one amixer resource */
88*4882a593Smuzhiyun 	int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer);
89*4882a593Smuzhiyun };
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /* Constructor and destructor of amixer resource manager */
92*4882a593Smuzhiyun int amixer_mgr_create(struct hw *hw, struct amixer_mgr **ramixer_mgr);
93*4882a593Smuzhiyun int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr);
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun #endif /* CTAMIXER_H */
96