summaryrefslogtreecommitdiff
path: root/bsp/allwinner/libraries/sunxi-hal/hal/source/sound/platform/sunxi-spdif.h
blob: b7723fc9dee341bc1726d3838cfc76067cf0b832 (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
193
194
195
196
197
198
199
/*
* 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_SPDIF_H_
#define __SUNXI_SPDIF_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 SUNXI_SPDIF_DEBUG_REG*/

#define SPDIF_NAME_LEN      (16)

/*------------------SPDIF register definition--------------------*/
#define SUNXI_SPDIF_CTL     0x00
#define SUNXI_SPDIF_TXCFG   0x04
#define SUNXI_SPDIF_RXCFG   0x08
#define SUNXI_SPDIF_INT_STA (0x0C)
#define SUNXI_SPDIF_RXFIFO  0x10
#define SUNXI_SPDIF_FIFO_CTL    0x14
#define SUNXI_SPDIF_FIFO_STA    0x18
#define SUNXI_SPDIF_INT     0x1C
#define SUNXI_SPDIF_TXFIFO  (0x20)
#define SUNXI_SPDIF_TXCNT   0x24
#define SUNXI_SPDIF_RXCNT   0x28
#define SUNXI_SPDIF_TXCH_STA0   0x2C
#define SUNXI_SPDIF_TXCH_STA1   0x30
#define SUNXI_SPDIF_RXCH_STA0   0x34
#define SUNXI_SPDIF_RXCH_STA1   0x38

/* SUNXI_SPDIF_CTL register */
#define CTL_RESET       0
#define CTL_GEN_EN      1
#define CTL_LOOP_EN     2
#define CTL_RESET_RX        0

/* SUNXI_SPDIF_TXCFG register */
#define TXCFG_TXEN      0
/* Chan status generated form TX_CHSTA */
#define TXCFG_CHAN_STA_EN   1
#define TXCFG_SAMPLE_BIT    2
#define TXCFG_CLK_DIV_RATIO 4
#define TXCFG_DATA_TYPE     16
/* Only valid in PCM mode */
#define TXCFG_ASS       17
#define TXCFG_SINGLE_MOD    31

/* SUNXI_SPDIF_RXCFG register */
#define RXCFG_RXEN      0
#define RXCFG_CHSR_CP       1
#define RXCFG_CHST_SRC      3
#define RXCFG_LOCK_FLAG     4

/* SUNXI_SPDIF_FIFO_CTL register */
#define FIFO_CTL_RXOM       0
#define FIFO_CTL_TXIM       2
#define FIFO_CTL_RXTL       4
#define FIFO_CTL_TXTL       12
#define FIFO_CTL_FRX        29
#define FIFO_CTL_FTX        30
#define FIFO_CTL_HUBEN      31
#define CTL_TXTL_MASK       0xFF
#define CTL_TXTL_DEFAULT    0x40
#define CTL_RXTL_MASK       0x7F
#define CTL_RXTL_DEFAULT    0x20

/* SUNXI_SPDIF_FIFO_STA register */
#define FIFO_STA_RXA_CNT    0
#define FIFO_STA_RXA        15
#define FIFO_STA_TXA_CNT    16
#define FIFO_STA_TXE        31

/* SUNXI_SPDIF_INT register */
#define INT_RXAIEN      0
#define INT_RXOIEN      1
#define INT_RXDRQEN     2
#define INT_TXEIEN      4
#define INT_TXOIEN      5
#define INT_TXUIEN      6
#define INT_TXDRQEN     7
#define INT_RXPAREN     16
#define INT_RXUNLOCKEN      17
#define INT_RXLOCKEN        18

/* SUNXI_SPDIF_INT_STA  */
#define INT_STA_RXA     0
#define INT_STA_RXO     1
#define INT_STA_TXE     4
#define INT_STA_TXO     5
#define INT_STA_TXU     6
#define INT_STA_RXPAR       16
#define INT_STA_RXUNLOCK    17
#define INT_STA_RXLOCK      18

/* SUNXI_SPDIF_TXCH_STA0 register */
#define TXCHSTA0_PRO        0
#define TXCHSTA0_AUDIO      1
#define TXCHSTA0_CP     2
#define TXCHSTA0_EMPHASIS   3
#define TXCHSTA0_MODE       6
#define TXCHSTA0_CATACOD    8
#define TXCHSTA0_SRCNUM     16
#define TXCHSTA0_CHNUM      20
#define TXCHSTA0_SAMFREQ    24
#define TXCHSTA0_CLK        28

/* SUNXI_SPDIF_TXCH_STA1 register */
#define TXCHSTA1_MAXWORDLEN 0
#define TXCHSTA1_SAMWORDLEN 1
#define TXCHSTA1_ORISAMFREQ 4
#define TXCHSTA1_CGMSA      8

/* SUNXI_SPDIF_RXCH_STA0 register */
#define RXCHSTA0_PRO        0
#define RXCHSTA0_AUDIO      1
#define RXCHSTA0_CP     2
#define RXCHSTA0_EMPHASIS   3
#define RXCHSTA0_MODE       6
#define RXCHSTA0_CATACOD    8
#define RXCHSTA0_SRCNUM     16
#define RXCHSTA0_CHNUM      20
#define RXCHSTA0_SAMFREQ    24
#define RXCHSTA0_CLK        28

/* SUNXI_SPDIF_RXCH_STA1 register */
#define RXCHSTA1_MAXWORDLEN 0
#define RXCHSTA1_SAMWORDLEN 1
#define RXCHSTA1_ORISAMFREQ 4
#define RXCHSTA1_CGMSA      8

#define SUNXI_SPDIF_RATES (SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT)

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

typedef struct {
//  spdif_gpio clk;
    spdif_gpio out;
    spdif_gpio in;
} spdif_gpio_t;

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

struct sunxi_spdif_info {
    struct sunxi_dma_params playback_dma_param;
    struct sunxi_dma_params capture_dma_param;
    hal_clk_t pllclk;
    hal_clk_t moduleclk;
    hal_clk_t busclk;
    struct reset_control *rstclk;
    hal_clk_t pllclk1;
    hal_clk_t pllclk1_div;
    hal_clk_t moduleclk_rx;
};

/* aw1859 */
#ifdef CONFIG_ARCH_SUN8IW20
#include "platforms/spdif-sun8iw20.h"
#endif

#endif /* __SUNXI_SPDIF_H_ */