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> | |
24 | ||
25 | /* Define the descriptor of a summation node resource */ | |
26 | struct sum { | |
27 | struct rsc rsc; /* Basic resource info */ | |
28 | unsigned char idx[8]; | |
29 | }; | |
30 | ||
31 | /* Define sum resource request description info */ | |
32 | struct sum_desc { | |
33 | unsigned int msr; | |
34 | }; | |
35 | ||
36 | struct sum_mgr { | |
37 | struct rsc_mgr mgr; /* Basic resource manager info */ | |
38 | spinlock_t mgr_lock; | |
39 | ||
40 | /* request one sum resource */ | |
41 | int (*get_sum)(struct sum_mgr *mgr, | |
42 | const struct sum_desc *desc, struct sum **rsum); | |
43 | /* return one sum resource */ | |
44 | int (*put_sum)(struct sum_mgr *mgr, struct sum *sum); | |
45 | }; | |
46 | ||
47 | /* Constructor and destructor of daio resource manager */ | |
48 | int sum_mgr_create(void *hw, struct sum_mgr **rsum_mgr); | |
49 | int sum_mgr_destroy(struct sum_mgr *sum_mgr); | |
50 | ||
51 | /* Define the descriptor of a amixer resource */ | |
52 | struct amixer_rsc_ops; | |
53 | ||
54 | struct amixer { | |
55 | struct rsc rsc; /* Basic resource info */ | |
56 | unsigned char idx[8]; | |
57 | struct rsc *input; /* pointer to a resource acting as source */ | |
58 | struct sum *sum; /* Put amixer output to this summation node */ | |
59 | struct amixer_rsc_ops *ops; /* AMixer specific operations */ | |
60 | }; | |
61 | ||
62 | struct amixer_rsc_ops { | |
63 | int (*set_input)(struct amixer *amixer, struct rsc *rsc); | |
64 | int (*set_scale)(struct amixer *amixer, unsigned int scale); | |
65 | int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv); | |
66 | int (*set_sum)(struct amixer *amixer, struct sum *sum); | |
67 | int (*commit_write)(struct amixer *amixer); | |
68 | /* Only for interleaved recording */ | |
69 | int (*commit_raw_write)(struct amixer *amixer); | |
70 | int (*setup)(struct amixer *amixer, struct rsc *input, | |
71 | unsigned int scale, struct sum *sum); | |
72 | int (*get_scale)(struct amixer *amixer); | |
73 | }; | |
74 | ||
75 | /* Define amixer resource request description info */ | |
76 | struct amixer_desc { | |
77 | unsigned int msr; | |
78 | }; | |
79 | ||
80 | struct amixer_mgr { | |
81 | struct rsc_mgr mgr; /* Basic resource manager info */ | |
82 | spinlock_t mgr_lock; | |
83 | ||
84 | /* request one amixer resource */ | |
85 | int (*get_amixer)(struct amixer_mgr *mgr, | |
86 | const struct amixer_desc *desc, | |
87 | struct amixer **ramixer); | |
88 | /* return one amixer resource */ | |
89 | int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer); | |
90 | }; | |
91 | ||
92 | /* Constructor and destructor of amixer resource manager */ | |
93 | int amixer_mgr_create(void *hw, struct amixer_mgr **ramixer_mgr); | |
94 | int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr); | |
95 | ||
96 | #endif /* CTAMIXER_H */ |