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