2 * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved.
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:
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
13 * @brief i.MX Asynchronous Sample Rate Converter
18 #ifndef __MXC_ASRC_UAPI_H__
19 #define __MXC_ASRC_UAPI_H__
21 #define ASRC_IOC_MAGIC 'C'
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)
32 enum asrc_pair_index {
33 ASRC_UNVALID_PAIR = -1,
39 #define ASRC_PAIR_MAX_NUM (ASRC_PAIR_C + 1)
47 INCLK_SPDIF_RX = 0x04,
54 INCLK_SPDIF_TX = 0x0c,
55 INCLK_ASRCK1_CLK = 0x0f,
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,
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,
75 enum asrc_word_width {
76 ASRC_WIDTH_24_BIT = 0,
77 ASRC_WIDTH_16_BIT = 1,
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;
95 unsigned int start_channel;
99 unsigned int overload_error;
103 unsigned int chn_num;
104 enum asrc_pair_index index;
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;
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;
125 unsigned int output_last_length;
129 struct asrc_status_flags {
130 enum asrc_pair_index index;
131 unsigned int overload_error;
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,
143 #endif/* __MXC_ASRC_UAPI_H__ */