172 lines
4.4 KiB
C
172 lines
4.4 KiB
C
/*
|
|
* Copyright 2008-2014 Freescale Semiconductor, Inc. All Rights Reserved.
|
|
*
|
|
* The code contained herein is licensed under the GNU General Public
|
|
* License. You may obtain a copy of the GNU General Public License
|
|
* Version 2 or later at the following locations:
|
|
*
|
|
* http://www.opensource.org/licenses/gpl-license.html
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file mxc_asrc.h
|
|
*
|
|
* @brief i.MX Asynchronous Sample Rate Converter
|
|
*
|
|
* @ingroup Audio
|
|
*/
|
|
|
|
#ifndef __MXC_ASRC_UAPI_H__
|
|
#define __MXC_ASRC_UAPI_H__
|
|
|
|
#define ASRC_IOC_MAGIC 'C'
|
|
|
|
#define ASRC_REQ_PAIR _IOWR(ASRC_IOC_MAGIC, 0, struct asrc_req)
|
|
#define ASRC_CONFIG_PAIR _IOWR(ASRC_IOC_MAGIC, 1, struct asrc_config)
|
|
#define ASRC_RELEASE_PAIR _IOW(ASRC_IOC_MAGIC, 2, enum asrc_pair_index)
|
|
#define ASRC_CONVERT _IOW(ASRC_IOC_MAGIC, 3, struct asrc_convert_buffer)
|
|
#define ASRC_START_CONV _IOW(ASRC_IOC_MAGIC, 4, enum asrc_pair_index)
|
|
#define ASRC_STOP_CONV _IOW(ASRC_IOC_MAGIC, 5, enum asrc_pair_index)
|
|
#define ASRC_STATUS _IOW(ASRC_IOC_MAGIC, 6, struct asrc_status_flags)
|
|
#define ASRC_FLUSH _IOW(ASRC_IOC_MAGIC, 7, enum asrc_pair_index)
|
|
|
|
enum asrc_pair_index {
|
|
ASRC_INVALID_PAIR = -1,
|
|
ASRC_PAIR_A = 0,
|
|
ASRC_PAIR_B = 1,
|
|
ASRC_PAIR_C = 2,
|
|
};
|
|
|
|
#define ASRC_PAIR_MAX_NUM (ASRC_PAIR_C + 1)
|
|
|
|
enum asrc_inclk {
|
|
INCLK_NONE = 0x03,
|
|
INCLK_ESAI_RX = 0x00,
|
|
INCLK_SSI1_RX = 0x01,
|
|
INCLK_SSI2_RX = 0x02,
|
|
INCLK_SSI3_RX = 0x07,
|
|
INCLK_SPDIF_RX = 0x04,
|
|
INCLK_MLB_CLK = 0x05,
|
|
INCLK_PAD = 0x06,
|
|
INCLK_ESAI_TX = 0x08,
|
|
INCLK_SSI1_TX = 0x09,
|
|
INCLK_SSI2_TX = 0x0a,
|
|
INCLK_SSI3_TX = 0x0b,
|
|
INCLK_SPDIF_TX = 0x0c,
|
|
INCLK_ASRCK1_CLK = 0x0f,
|
|
/* imx8 */
|
|
INCLK_AUD_PLL_DIV_CLK0 = 0x10,
|
|
INCLK_AUD_PLL_DIV_CLK1 = 0x11,
|
|
INCLK_AUD_CLK0 = 0x12,
|
|
INCLK_AUD_CLK1 = 0x13,
|
|
INCLK_ESAI0_RX_CLK = 0x14,
|
|
INCLK_ESAI0_TX_CLK = 0x15,
|
|
INCLK_SPDIF0_RX = 0x16,
|
|
INCLK_SPDIF1_RX = 0x17,
|
|
INCLK_SAI0_RX_BCLK = 0x18,
|
|
INCLK_SAI0_TX_BCLK = 0x19,
|
|
INCLK_SAI1_RX_BCLK = 0x1a,
|
|
INCLK_SAI1_TX_BCLK = 0x1b,
|
|
INCLK_SAI2_RX_BCLK = 0x1c,
|
|
INCLK_SAI3_RX_BCLK = 0x1d,
|
|
INCLK_ASRC0_MUX_CLK = 0x1e,
|
|
|
|
INCLK_ESAI1_RX_CLK = 0x20,
|
|
INCLK_ESAI1_TX_CLK = 0x21,
|
|
INCLK_SAI6_TX_BCLK = 0x22,
|
|
INCLK_HDMI_RX_SAI0_RX_BCLK = 0x24,
|
|
INCLK_HDMI_TX_SAI0_TX_BCLK = 0x25,
|
|
};
|
|
|
|
enum asrc_outclk {
|
|
OUTCLK_NONE = 0x03,
|
|
OUTCLK_ESAI_TX = 0x00,
|
|
OUTCLK_SSI1_TX = 0x01,
|
|
OUTCLK_SSI2_TX = 0x02,
|
|
OUTCLK_SSI3_TX = 0x07,
|
|
OUTCLK_SPDIF_TX = 0x04,
|
|
OUTCLK_MLB_CLK = 0x05,
|
|
OUTCLK_PAD = 0x06,
|
|
OUTCLK_ESAI_RX = 0x08,
|
|
OUTCLK_SSI1_RX = 0x09,
|
|
OUTCLK_SSI2_RX = 0x0a,
|
|
OUTCLK_SSI3_RX = 0x0b,
|
|
OUTCLK_SPDIF_RX = 0x0c,
|
|
OUTCLK_ASRCK1_CLK = 0x0f,
|
|
|
|
/* imx8 */
|
|
OUTCLK_AUD_PLL_DIV_CLK0 = 0x10,
|
|
OUTCLK_AUD_PLL_DIV_CLK1 = 0x11,
|
|
OUTCLK_AUD_CLK0 = 0x12,
|
|
OUTCLK_AUD_CLK1 = 0x13,
|
|
OUTCLK_ESAI0_RX_CLK = 0x14,
|
|
OUTCLK_ESAI0_TX_CLK = 0x15,
|
|
OUTCLK_SPDIF0_RX = 0x16,
|
|
OUTCLK_SPDIF1_RX = 0x17,
|
|
OUTCLK_SAI0_RX_BCLK = 0x18,
|
|
OUTCLK_SAI0_TX_BCLK = 0x19,
|
|
OUTCLK_SAI1_RX_BCLK = 0x1a,
|
|
OUTCLK_SAI1_TX_BCLK = 0x1b,
|
|
OUTCLK_SAI2_RX_BCLK = 0x1c,
|
|
OUTCLK_SAI3_RX_BCLK = 0x1d,
|
|
OUTCLK_ASRCO_MUX_CLK = 0x1e,
|
|
|
|
OUTCLK_ESAI1_RX_CLK = 0x20,
|
|
OUTCLK_ESAI1_TX_CLK = 0x21,
|
|
OUTCLK_SAI6_TX_BCLK = 0x22,
|
|
OUTCLK_HDMI_RX_SAI0_RX_BCLK = 0x24,
|
|
OUTCLK_HDMI_TX_SAI0_TX_BCLK = 0x25,
|
|
};
|
|
|
|
enum asrc_word_width {
|
|
ASRC_WIDTH_24_BIT = 0,
|
|
ASRC_WIDTH_16_BIT = 1,
|
|
ASRC_WIDTH_8_BIT = 2,
|
|
};
|
|
|
|
struct asrc_config {
|
|
enum asrc_pair_index pair;
|
|
unsigned int channel_num;
|
|
unsigned int buffer_num;
|
|
unsigned int dma_buffer_size;
|
|
unsigned int input_sample_rate;
|
|
unsigned int output_sample_rate;
|
|
enum asrc_word_width input_word_width;
|
|
enum asrc_word_width output_word_width;
|
|
enum asrc_inclk inclk;
|
|
enum asrc_outclk outclk;
|
|
};
|
|
|
|
struct asrc_req {
|
|
unsigned int chn_num;
|
|
enum asrc_pair_index index;
|
|
};
|
|
|
|
struct asrc_querybuf {
|
|
unsigned int buffer_index;
|
|
unsigned int input_length;
|
|
unsigned int output_length;
|
|
unsigned long input_offset;
|
|
unsigned long output_offset;
|
|
};
|
|
|
|
struct asrc_convert_buffer {
|
|
void *input_buffer_vaddr;
|
|
void *output_buffer_vaddr;
|
|
unsigned int input_buffer_length;
|
|
unsigned int output_buffer_length;
|
|
};
|
|
|
|
struct asrc_status_flags {
|
|
enum asrc_pair_index index;
|
|
unsigned int overload_error;
|
|
};
|
|
|
|
enum asrc_error_status {
|
|
ASRC_TASK_Q_OVERLOAD = 0x01,
|
|
ASRC_OUTPUT_TASK_OVERLOAD = 0x02,
|
|
ASRC_INPUT_TASK_OVERLOAD = 0x04,
|
|
ASRC_OUTPUT_BUFFER_OVERFLOW = 0x08,
|
|
ASRC_INPUT_BUFFER_UNDERRUN = 0x10,
|
|
};
|
|
#endif/* __MXC_ASRC_UAPI_H__ */
|