huangcm
2025-04-26 bff3d3009b0d3a2be3ed92e4817fcabee9e76955
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*
 * sound\soc\sunxi\sunxi_mad.h
 * (C) Copyright 2018-2023
 * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
 * Wolfgang <qinzhenying@allwinnertech.com>
 *
 * some simple description for this code
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 */
 
#ifndef __SUNXI_MAD_H
#define __SUNXI_MAD_H
 
#include "sunxi-pcm.h"
 
struct sunxi_mad_priv {
    unsigned int mad_bind;
};
 
/*------------------MAD register definition--------------------*/
#define SUNXI_MAD_CTRL            0x00
#define SUNXI_MAD_SRAM_POINT        0x04
#define SUNXI_MAD_SRAM_SIZE        0x08
#define SUNXI_MAD_SRAM_RD_POINT        0x0C
#define SUNXI_MAD_RD_SIZE        0x10
#define SUNXI_MAD_SRAM_STORE_TH        0x14
#define SUNXI_MAD_SRAM_AHB1_TX_TH    0x18
#define SUNXI_MAD_SRAM_AHB1_RX_TH    0x1C
#define SUNXI_MAD_SRAM_WAKE_BACK_DATA    0x20
#define SUNXI_MAD_AD_PATH_SEL        0x24
#define SUNXI_MAD_LPSD_AD_SYNC_FC    0x28
#define SUNXI_MAD_LPSD_TH        0x2C
#define SUNXI_MAD_LPSD_RRUN        0x30
#define    SUNXI_MAD_LPSD_RSTOP        0x34
#define    SUNXI_MAD_LPSD_ECNT        0x38
#define SUNXI_MAD_SRAM_CH_MASK        0x3C
#define SUNXI_MAD_LPSD_CH_MASK        0x40
#define SUNXI_MAD_SRAM_SEC_REGION_REG    0x44
#define SUNXI_MAD_SRAM_PRE_DSIZE    0x48
#define SUNXI_MAD_DMA_TF_SIZE        0x4C
#define SUNXI_MAD_DMA_TF_LAST_SIZE    0x50
#define    SUNXI_MAD_INT_ST_CLR        0x60
#define    SUNXI_MAD_INT_MASK        0x64
#define    SUNXI_MAD_STA            0x68
#define    SUNXI_MAD_DEBUG            0x6C
 
 
/*SUNXI_MAD_CTRL: 0x00*/
#define AUDIO_DATA_SYNC_FRC        7
#define SRAM_RST            6
#define DMA_TYPE            5
#define DMA_EN                4
#define CPUS_RD_DONE            3
#define GO_ON_SLEEP            2
#define KEY_WORD_OK            1
#define MAD_EN                0
/* DMA type*/
#define DMA_TYPE_MASK            0x1
#define DMA_TYPE_IO            0x1
#define DMA_TYPE_MEM            0x0
 
/*SUNXI_MAD_SRAM_POINT: 0x04*/
#define MAD_SRAM_PONT            0
 
/*SUNXI_MAD_SRAM_SIZE: 0x08*/
#define MAD_SRAM_SIZE            0
 
/*SUNXI_MAD_SRAM_RD_POINT: 0x0C*/
#define MAD_SRAM_RD_POINT        0
 
/*SUNXI_MAD_SRAM_RD_SIZE(unit: half word): 0x10*/
#define MAD_SRAM_RD_SIZE        0
 
/*SUNXI_MAD_SRAM_STORE_TH(unit: half word): 0x14*/
#define MAD_SRAM_STORE_TH        0
 
/*SUNXI_MAD_SRAM_AHB1_TX_TH(unit: byte): 0x18*/
#define MAD_SRAM_AHB1_TX_TH        0
 
/*SUNXI_MAD_SRAM_AHB1_RX_TH(unit: byte): 0x1C*/
#define MAD_SRAM_AHB1_RX_TH        0
 
/*SUNXI_MAD_SRAM_WAKE_BACK_DATA(unit: frame): 0x20*/
#define MAD_SRAM_WAKE_BACK_DATA        0
 
/*SUNXI_MAD_AD_PATH_SEL: 0x24*/
#define MAD_AD_PATH_SEL            0
#define MAD_AD_PATH_SEL_MASK        0xF
/*MAD audio src sel*/
#define MAD_AD_PATH_NO_SRC        0x0
#define MAD_AD_PATH_I2S0_SRC        0x1
#define MAD_AD_PATH_CODEC_SRC        0x2
#define MAD_AD_PATH_DMIC_SRC        0x3
#define MAD_AD_PATH_I2S1_SRC        0x4
#define MAD_AD_PATH_I2S2_SRC        0x5
 
/*SUNXI_MAD_LPSD_AD_SYNC_FC: 0x28*/
#define MAD_LPSD_AD_SYNC_FC        0
#define MAD_LPSD_AD_SYNC_FC_DEF        0X20
 
/*SUNXI_MAD_LPSD_TH: 0x2C*/
#define MAD_LPSD_TH            0
 
/*SUNXI_MAD_LPSD_RRUN: 0x30*/
#define MAD_LPSD_RRUN            0
 
/*SUNXI_MAD_LPSD_RSTOP: 0x34*/
#define MAD_LPSD_RSTOP            0
 
/*SUNXI_MAD_LPSD_ECNT: 0x38*/
#define MAD_LPSD_ECNT            0
 
/*SUNXI_MAD_SRAM_CH_MASK: 0x3C*/
#define MAD_CH_CHANGE_EN        30
#define MAD_CH_COM_NUM            26
#define MAD_AD_SRC_CH_NUM        21
#define MAD_SRAM_CH_NUM            16
#define MAD_SRAM_CH_MASK        0
 
#define MAD_SRAM_CH_NUM_MASK    0x1F
 
/*MAD channel change sel*/
#define MAD_CH_COM_NUM_MASK        0xF
#define MAD_CH_COM_NON            0x0
#define MAD_CH_COM_2CH_TO_4CH        0x1
#define MAD_CH_COM_2CH_TO_6CH        0x2
#define MAD_CH_COM_2CH_TO_8CH        0x3
#define MAD_CH_COM_4CH_TO_6CH        0x4
#define MAD_CH_COM_4CH_TO_8CH        0x5
 
/*SUNXI_MAD_LPSD_CH_MASK: 0x40*/
#define MAD_LPSD_DCBLOCK_EN        20
#define MAD_LPSD_CH_NUM            16
#define MAD_LPSD_CH_MASK        0
/*LPSD receive 0/1 audio channel mask*/
#define MAD_LPSD_CH_NUM_MASK        0xF
/*LPSD AUDIO channel num sel*/
#define MAD_LPSD_CH_NUM_NON        0x0
#define MAD_LPSD_CH_NUM_1CH        0x1
 
/*SUNXI_MAD_SRAM_SEC_REGION: 0x44*/
#define MAD_SRAM_SEC_REGION        0
 
/*SUNXI_MAD_SRAM_PRE_DATA_SIZE(unit: half word): 0x48*/
#define MAD_SRAM_PRE_DATA_SIZE        0
 
/*SUNXI_MAD_DMA_TF_SIZE: 0x4C*/
#define MAD_DMA_TF_SIZE            0
 
/*SUNXI_MAD_DMA_TF_LAST_SIZE: 0x50*/
#define MAD_DMA_TF_LAST_SIZE        0
 
/*SUNXI_MAD_INT_ST_CLR: 0x60*/
#define DATA_REQ_INT            1
#define WAKE_INT            0
 
/*SUNXI_MAD_INT_MASK: 0x64*/
#define DATA_REQ_INT_MASK        1
#define MAD_REQ_INT_MASK        0
 
/*SUNXI_MAD_STATE_REG: 0x68*/
#define MAD_LPSD_STAT            8
#define MAD_STATE            4
#define MAD_SRAM_FULL            2
#define MAD_SRAM_EMPTY            1
#define MAD_RUN                0
/*MAD STATE(read only)*/
#define MAD_STATE_IDLE            0x0
#define MAD_STATE_WAIT            0x1
#define MAD_STATE_RUN            0x2
#define MAD_STATE_NORMAL        0x4
 
/*SUNXI_MAD_DEBUG: 0x6C*/
#define MAD_CFG_ERR            4
#define MAD_SRAM_FULL_ERR        3
#define MAD_SRAM_EMPTY_ERR        2
#define DATA_SRAM_ADDR_ERR        1
#define MAD_SRAM_SEC_ERR        0
/*MAD_CFG_ERR mask*/
#define MAD_CFG_ERR_MASK        0x3
 
extern void sunxi_mad_init(void);
extern void sunxi_sram_dma_config(struct sunxi_dma_params *capture_dma_param);
extern int sunxi_mad_hw_params(unsigned int mad_channels, unsigned int sample_rate);
extern int sunxi_mad_audio_source_sel(unsigned int path_sel, unsigned int enable);
extern int sunxi_mad_suspend_external(unsigned int lpsd_chan_sel,
   unsigned int mad_standby_chan_sel);
extern int sunxi_mad_resume_external(unsigned int mad_standby_chan_sel,
   unsigned int audio_src_chan_num);
extern void mad_dma_en(unsigned int en);
#endif /* SUNXI_MAD_H */