summaryrefslogtreecommitdiff
path: root/bsp/allwinner/libraries/sunxi-hal/hal/source/sound/platform/sunxi-dmic.h
blob: 2377bc856072373f8e44485f94e14bd020504668 (plain)
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
/*
* Copyright (c) 2019-2025 Allwinner Technology Co., Ltd. ALL rights reserved.
*
* Allwinner is a trademark of Allwinner Technology Co.,Ltd., registered in
* the the people's Republic of China and other countries.
* All Allwinner Technology Co.,Ltd. trademarks are used with permission.
*
* DISCLAIMER
* THIRD PARTY LICENCES MAY BE REQUIRED TO IMPLEMENT THE SOLUTION/PRODUCT.
* IF YOU NEED TO INTEGRATE THIRD PARTY’S TECHNOLOGY (SONY, DTS, DOLBY, AVS OR MPEGLA, ETC.)
* IN ALLWINNERS’SDK OR PRODUCTS, YOU SHALL BE SOLELY RESPONSIBLE TO OBTAIN
* ALL APPROPRIATELY REQUIRED THIRD PARTY LICENCES.
* ALLWINNER SHALL HAVE NO WARRANTY, INDEMNITY OR OTHER OBLIGATIONS WITH RESPECT TO MATTERS
* COVERED UNDER ANY REQUIRED THIRD PARTY LICENSE.
* YOU ARE SOLELY RESPONSIBLE FOR YOUR USAGE OF THIRD PARTY’S TECHNOLOGY.
*
*
* THIS SOFTWARE IS PROVIDED BY ALLWINNER"AS IS" AND TO THE MAXIMUM EXTENT
* PERMITTED BY LAW, ALLWINNER EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION REGARDING
* THE TITLE, NON-INFRINGEMENT, ACCURACY, CONDITION, COMPLETENESS, PERFORMANCE
* OR MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
* IN NO EVENT SHALL ALLWINNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __SUNXI_DMIC_H_
#define __SUNXI_DMIC_H_

#include <aw_common.h>
#include <hal_clk.h>
#include <hal_reset.h>
#include <hal_gpio.h>
#include <sound/snd_core.h>
#include <sound/snd_pcm.h>
#include <sound/snd_io.h>

#define DMIC_NAME_LEN       (16)

/*------------------DMIC register definition--------------------*/
#define SUNXI_DMIC_EN           0x00
#define SUNXI_DMIC_SR           0x04
#define SUNXI_DMIC_CTR          0x08
#define SUNXI_DMIC_DATA         0x10
#define SUNXI_DMIC_INTC         0x14
#define SUNXI_DMIC_INTS         0x18
#define SUNXI_DMIC_FIFO_CTR     0x1c
#define SUNXI_DMIC_FIFO_STA     0x20
#define SUNXI_DMIC_CH_NUM       0x24
#define SUNXI_DMIC_CH_MAP       0x28
#define SUNXI_DMIC_CNT          0x2c
#define SUNXI_DMIC_DATA0_1_VOL      0x30
#define SUNXI_DMIC_DATA2_3_VOL      0x34
#define SUNXI_DMIC_HPF_CTRL     0x38
#define SUNXI_DMIC_HPF_COEF     0x3C
#define SUNXI_DMIC_HPF_GAIN     0x40
#define SUNXI_DMIC_REV          0x50

/*0x00:SUNXI_DMIC_EN*/
#define GLOBE_EN            8
#define DATA3_CHR_EN            7
#define DATA3_CHL_EN            6
#define DATA2_CHR_EN            5
#define DATA2_CHL_EN            4
#define DATA1_CHR_EN            3
#define DATA1_CHL_EN            2
#define DATA0_CHR_EN            1
#define DATA0_CHL_EN            0
#define DATA_CH_EN          0

/*SUNXI_DMIC_SR:0x04*/
#define DMIC_SR             0

/*SUNXI_DMIC_CTR:0x08*/
#define DMICFDT             9
#define DMICDFEN            8
#define DATA3_LR_SWEEP_EN       7
#define DATA2_LR_SWEEP_EN       6
#define DATA1_LR_SWEEP_EN       5
#define DATA0_LR_SWEEP_EN       4
#define DMIC_OVERSAMPLE_RATE        0

/*SUNXI_DMIC_DATA:0x10*/
#define DMIC_DATA           0

/*SUNXI_DMIC_INTC:0x14*/
#define FIFO_DRQ_EN         2
#define FIFO_OVERRUN_IRQ_EN     1
#define DATA_IRQ_EN         0

/*SUNXI_DMIC_INTS:0x18*/
#define FIFO_OVERRUN_IRQ_PENDING    1
#define FIFO_DATA_IRQ_PENDING       0

/*SUNXI_DMIC_FIFO_CTR:0x1c*/
#define DMIC_FIFO_FLUSH         31
#define DMIC_FIFO_MODE          9
#define DMIC_SAMPLE_RESOLUTION      8
#define FIFO_TRG_LEVEL          0

/*SUNXI_DMIC_FIFO_STA:0x20*/
#define DMIC_DATA_CNT           0

/*SUNXI_DMIC_CH_NUM:0x24*/
#define DMIC_CH_NUM         0

/*SUNXI_DMIC_CH_MAP:0x28*/
#define DMIC_CH7_MAP            28
#define DMIC_CH6_MAP            24
#define DMIC_CH5_MAP            20
#define DMIC_CH4_MAP            16
#define DMIC_CH3_MAP            12
#define DMIC_CH2_MAP            8
#define DMIC_CH1_MAP            4
#define DMIC_CH0_MAP            0
#define DMIC_CHANMAP_DEFAULT        (0x76543210)
/*SUNXI_DMIC_CNT:0x2c*/
#define DMIC_CNT            0

/*SUNXI_DMIC_DATA0_1_VOL:0x30*/
#define DATA1L_VOL          24
#define DATA1R_VOL          16
#define DATA0L_VOL          8
#define DATA0R_VOL          0

/*SUNXI_DMIC_DATA2_3_VOL:0x34*/
#define DATA3L_VOL          24
#define DATA3R_VOL          16
#define DATA2L_VOL          8
#define DATA2R_VOL          0
#define DMIC_DEFAULT_VOL        0xB0B0B0B0

/*SUNXI_DMIC_HPF_EN_CTR:0x38*/
#define HPF_DATA3_CHR_EN        7
#define HPF_DATA3_CHL_EN        6
#define HPF_DATA2_CHR_EN        5
#define HPF_DATA2_CHL_EN        4
#define HPF_DATA1_CHR_EN        3
#define HPF_DATA1_CHL_EN        2
#define HPF_DATA0_CHR_EN        1
#define HPF_DATA0_CHL_EN        0

/*SUNXI_DMIC_HPF_COEF:0x3C*/
#define HPF_COEF            0

/*SUNXI_DMIC_HPF_GAIN:0x40*/
#define HPF_GAIN            0

#define SUNXI_DMIC_RATES (SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_KNOT)

typedef struct {
    gpio_pin_t gpio;
    unsigned int mux;
} dmic_gpio;

typedef struct {
    dmic_gpio clk;
    dmic_gpio din0;
    dmic_gpio din1;
    dmic_gpio din2;
    dmic_gpio din3;
} dmic_gpio_t;

struct dmic_rate {
    unsigned int samplerate;
    unsigned int rate_bit;
};

struct sunxi_dmic_info {
    struct sunxi_dma_params capture_dma_param;
    u32 chanmap;
    hal_clk_t pllclk;
    hal_clk_t moduleclk;
    hal_clk_t busclk;
    struct reset_control *rstclk;
};

/* aw1851 */
#ifdef CONFIG_ARCH_SUN8IW18P1
#include "platforms/dmic-sun8iw18.h"
#endif
/* aw1859 */
#ifdef CONFIG_ARCH_SUN8IW20
#include "platforms/dmic-sun8iw20.h"
#endif

#endif /* SUNXI_DMIC_H */