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