b94143b1b56322fd5a305edf0641e2c87637c999
[yamaha-mc1n2-audio.git] / include / yamaha-mc1n2-audio.h
1 /*
2  * Copyright (C) 2012 Paul Kocialkowski <contact@paulk.fr>
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #ifndef YAMAHA_MC1N2_AUDIO_H
19 #define YAMAHA_MC1N2_AUDIO_H
20
21 #include <system/audio.h>
22
23 #include "mc1n2.h"
24
25 /*
26 params_route = ptr
27 params_init = ptr
28
29
30
31 params_route[] = {
32         .device = ,
33         .ae_info = {
34         },
35         .path_info = {
36         },
37         .dac_info = {
38         },
39 };
40
41 => take from params_init and see next
42 */
43
44 struct yamaha_mc1n2_audio_params_init {
45         MCDRV_AE_INFO ae_info;
46         MCDRV_PATH_INFO path_info;
47         MCDRV_DAC_INFO dac_info;
48         MCDRV_ADC_INFO adc_info;
49         MCDRV_SP_INFO sp_info;
50         MCDRV_PDM_INFO pdm_info;
51         MCDRV_DNG_INFO dng_info;
52         MCDRV_SYSEQ_INFO syseq_info;
53 };
54
55 struct yamaha_mc1n2_audio_params_route {
56         audio_devices_t device;
57         audio_mode_t mode;
58
59         MCDRV_AE_INFO ae_info;
60         MCDRV_PATH_INFO path_info;
61         MCDRV_DAC_INFO dac_info;
62 };
63
64 struct yamaha_mc1n2_audio_params {
65         struct yamaha_mc1n2_audio_params_init *init;
66         struct yamaha_mc1n2_audio_params_route *routes;
67         int routes_count;
68 };
69
70 struct yamaha_mc1n2_audio_device_ops {
71         char *hw_node;
72         struct yamaha_mc1n2_audio_params params;
73 };
74
75 struct yamaha_mc1n2_audio_pdata {
76         char *name;
77         struct yamaha_mc1n2_audio_device_ops *ops;
78
79         audio_devices_t output_device;
80         audio_devices_t input_device;
81         audio_mode_t mode;
82
83         int output_state;
84         int input_state;
85 };
86
87 /*
88  * Platforms
89  */
90
91 extern struct yamaha_mc1n2_audio_pdata galaxys2_pdata;
92
93 /*
94  * Functions
95  */
96
97 // IOCTL
98 int yamaha_mc1n2_audio_ioctl(struct yamaha_mc1n2_audio_pdata *pdata,
99         int command, struct mc1n2_ctrl_args *hw_ctrl);
100 int yamaha_mc1n2_audio_ioctl_set_ctrl(struct yamaha_mc1n2_audio_pdata *pdata,
101         unsigned long command, void *data, unsigned long update_info);
102 int yamaha_mc1n2_audio_ioctl_notify(struct yamaha_mc1n2_audio_pdata *pdata,
103         unsigned long command);
104
105 // Routines
106 int yamaha_mc1n2_audio_init(struct yamaha_mc1n2_audio_pdata *pdata);
107 int yamaha_mc1n2_audio_output_start(struct yamaha_mc1n2_audio_pdata *pdata);
108 int yamaha_mc1n2_audio_output_stop(struct yamaha_mc1n2_audio_pdata *pdata);
109
110
111 // Values configuration
112 int yamaha_mc1n2_audio_set_route(struct yamaha_mc1n2_audio_pdata *pdata,
113         audio_devices_t device, audio_mode_t mode);
114 char *yamaha_mc1n2_audio_get_hw_node(struct yamaha_mc1n2_audio_pdata *pdata);
115
116 // Init/Deinit
117 int yamaha_mc1n2_audio_start(struct yamaha_mc1n2_audio_pdata **pdata_p,
118         char *device_name);
119 int yamaha_mc1n2_audio_stop(struct yamaha_mc1n2_audio_pdata *pdata);
120
121 #endif