]> git.karo-electronics.de Git - karo-tx-linux.git/blob - include/uapi/linux/mxc_asrc.h
ENGR00274286-2 mxc: asrc: Add asrc m2m driver
[karo-tx-linux.git] / include / uapi / linux / mxc_asrc.h
1 /*
2  * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved.
3  *
4  * The code contained herein is licensed under the GNU General Public
5  * License. You may obtain a copy of the GNU General Public License
6  * Version 2 or later at the following locations:
7  *
8  * http://www.opensource.org/licenses/gpl-license.html
9  * http://www.gnu.org/copyleft/gpl.html
10  *
11  * @file mxc_asrc.h
12  *
13  * @brief i.MX Asynchronous Sample Rate Converter
14  *
15  * @ingroup Audio
16  */
17
18 #ifndef __MXC_ASRC_UAPI_H__
19 #define __MXC_ASRC_UAPI_H__
20
21 #define ASRC_IOC_MAGIC          'C'
22
23 #define ASRC_REQ_PAIR           _IOWR(ASRC_IOC_MAGIC, 0, struct asrc_req)
24 #define ASRC_CONFIG_PAIR        _IOWR(ASRC_IOC_MAGIC, 1, struct asrc_config)
25 #define ASRC_RELEASE_PAIR       _IOW(ASRC_IOC_MAGIC, 2, enum asrc_pair_index)
26 #define ASRC_CONVERT            _IOW(ASRC_IOC_MAGIC, 3, struct asrc_convert_buffer)
27 #define ASRC_START_CONV         _IOW(ASRC_IOC_MAGIC, 4, enum asrc_pair_index)
28 #define ASRC_STOP_CONV          _IOW(ASRC_IOC_MAGIC, 5, enum asrc_pair_index)
29 #define ASRC_STATUS             _IOW(ASRC_IOC_MAGIC, 6, struct asrc_status_flags)
30 #define ASRC_FLUSH              _IOW(ASRC_IOC_MAGIC, 7, enum asrc_pair_index)
31
32 enum asrc_pair_index {
33         ASRC_UNVALID_PAIR = -1,
34         ASRC_PAIR_A = 0,
35         ASRC_PAIR_B = 1,
36         ASRC_PAIR_C = 2,
37 };
38
39 #define ASRC_PAIR_MAX_NUM       (ASRC_PAIR_C + 1)
40
41 enum asrc_inclk {
42         INCLK_NONE = 0x03,
43         INCLK_ESAI_RX = 0x00,
44         INCLK_SSI1_RX = 0x01,
45         INCLK_SSI2_RX = 0x02,
46         INCLK_SSI3_RX = 0x07,
47         INCLK_SPDIF_RX = 0x04,
48         INCLK_MLB_CLK = 0x05,
49         INCLK_PAD = 0x06,
50         INCLK_ESAI_TX = 0x08,
51         INCLK_SSI1_TX = 0x09,
52         INCLK_SSI2_TX = 0x0a,
53         INCLK_SSI3_TX = 0x0b,
54         INCLK_SPDIF_TX = 0x0c,
55         INCLK_ASRCK1_CLK = 0x0f,
56 };
57
58 enum asrc_outclk {
59         OUTCLK_NONE = 0x03,
60         OUTCLK_ESAI_TX = 0x00,
61         OUTCLK_SSI1_TX = 0x01,
62         OUTCLK_SSI2_TX = 0x02,
63         OUTCLK_SSI3_TX = 0x07,
64         OUTCLK_SPDIF_TX = 0x04,
65         OUTCLK_MLB_CLK = 0x05,
66         OUTCLK_PAD = 0x06,
67         OUTCLK_ESAI_RX = 0x08,
68         OUTCLK_SSI1_RX = 0x09,
69         OUTCLK_SSI2_RX = 0x0a,
70         OUTCLK_SSI3_RX = 0x0b,
71         OUTCLK_SPDIF_RX = 0x0c,
72         OUTCLK_ASRCK1_CLK = 0x0f,
73 };
74
75 enum asrc_word_width {
76         ASRC_WIDTH_24_BIT = 0,
77         ASRC_WIDTH_16_BIT = 1,
78         ASRC_WIDTH_8_BIT = 2,
79 };
80
81 struct asrc_config {
82         enum asrc_pair_index pair;
83         unsigned int channel_num;
84         unsigned int buffer_num;
85         unsigned int dma_buffer_size;
86         unsigned int input_sample_rate;
87         unsigned int output_sample_rate;
88         enum asrc_word_width input_word_width;
89         enum asrc_word_width output_word_width;
90         enum asrc_inclk inclk;
91         enum asrc_outclk outclk;
92 };
93
94 struct asrc_pair {
95         unsigned int start_channel;
96         unsigned int chn_num;
97         unsigned int chn_max;
98         unsigned int active;
99         unsigned int overload_error;
100 };
101
102 struct asrc_req {
103         unsigned int chn_num;
104         enum asrc_pair_index index;
105 };
106
107 struct asrc_querybuf {
108         unsigned int buffer_index;
109         unsigned int input_length;
110         unsigned int output_length;
111         unsigned long input_offset;
112         unsigned long output_offset;
113 };
114
115 struct asrc_convert_buffer {
116         void *input_buffer_vaddr;
117         void *output_buffer_vaddr;
118         unsigned int input_buffer_length;
119         unsigned int output_buffer_length;
120 };
121
122 struct asrc_buffer {
123         unsigned int index;
124         unsigned int length;
125         unsigned int output_last_length;
126         int buf_valid;
127 };
128
129 struct asrc_status_flags {
130         enum asrc_pair_index index;
131         unsigned int overload_error;
132 };
133
134 #define ASRC_BUF_NA     -35     /* ASRC DQ's buffer is NOT available */
135 #define ASRC_BUF_AV      35     /* ASRC DQ's buffer is available */
136 enum asrc_error_status {
137         ASRC_TASK_Q_OVERLOAD            = 0x01,
138         ASRC_OUTPUT_TASK_OVERLOAD       = 0x02,
139         ASRC_INPUT_TASK_OVERLOAD        = 0x04,
140         ASRC_OUTPUT_BUFFER_OVERFLOW     = 0x08,
141         ASRC_INPUT_BUFFER_UNDERRUN      = 0x10,
142 };
143 #endif/* __MXC_ASRC_UAPI_H__ */