1 /******************************************************************************
2  * Copyright (c) 2022 Telink Semiconductor (Shanghai) Co., Ltd. ("TELINK")
3  * All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************/
18 
19 /********************************************************************************************************
20  * @file	usb_reg.h
21  *
22  * @brief	This is the header file for B91
23  *
24  * @author	Driver Group
25  *
26  *******************************************************************************************************/
27 #ifndef USB_REG_H
28 #define USB_REG_H
29 #include "../sys.h"
30 
31 /*******************************      usb registers: 0x100800      ******************************/
32 #define reg_ctrl_ep_ptr			REG_ADDR8(0x100800)
33 #define reg_ctrl_ep_dat			REG_ADDR8(0x100801)
34 #define reg_ctrl_ep_ctrl		REG_ADDR8(0x100802)
35 enum{
36 	FLD_EP_DAT_ACK  = 			BIT(0),
37 	FLD_EP_DAT_STALL =			BIT(1),
38 	FLD_EP_STA_ACK = 			BIT(2),
39 	FLD_EP_STA_STALL = 			BIT(3),
40 };
41 
42 #define reg_ctrl_ep_irq_sta		REG_ADDR8(0x100803)
43 enum{
44 	FLD_CTRL_EP_IRQ_TRANS  = 	BIT_RNG(0,3),
45 	FLD_CTRL_EP_IRQ_SETUP  =	BIT(4),
46 	FLD_CTRL_EP_IRQ_DATA  =		BIT(5),
47 	FLD_CTRL_EP_IRQ_STA  = 		BIT(6),
48 	FLD_CTRL_EP_IRQ_INTF  = 	BIT(7),
49 };
50 
51 #define reg_ctrl_ep_irq_mode	REG_ADDR8(0x100804)
52 enum{
53 	FLD_CTRL_EP_AUTO_ADDR = 	BIT(0),
54 	FLD_CTRL_EP_AUTO_CFG =		BIT(1),
55 	FLD_CTRL_EP_AUTO_INTF =		BIT(2),
56 	FLD_CTRL_EP_AUTO_STA =		BIT(3),
57 	FLD_CTRL_EP_AUTO_SYN =		BIT(4),
58 	FLD_CTRL_EP_AUTO_DESC =		BIT(5),
59 	FLD_CTRL_EP_AUTO_FEAT =		BIT(6),
60 	FLD_CTRL_EP_AUTO_STD =		BIT(7),
61 };
62 
63 #define reg_usb_ctrl			REG_ADDR8(0x100805)
64 enum{
65 	FLD_USB_CTRL_AUTO_CLK = 	BIT(0),
66 	FLD_USB_CTRL_LOW_SPD = 		BIT(1),
67 	FLD_USB_CTRL_LOW_JITT =		BIT(2),
68 	FLD_USB_CTRL_TST_MODE = 	BIT(3),
69 };
70 
71 #define reg_usb_cycl_cali		REG_ADDR16(0x100806)
72 #define reg_usb_cych_cali		REG_ADDR16(0x100807)
73 #define reg_usb_mdev			REG_ADDR8(0x10080a)
74 enum{
75 	FLD_USB_MDEV_SELF_PWR = 	BIT(0),
76 	FLD_USB_MDEV_SUSP_STA = 	BIT(1),
77 	FLD_USB_MDEV_WAKE_FEA = 	BIT(2),
78 	FLD_USB_MDEV_VEND_CMD = 	BIT(3),
79 	FLD_USB_MDEV_VEND_DIS = 	BIT(4),
80 };
81 
82 #define reg_usb_host_conn		REG_ADDR8(0x10080b)
83 #define reg_usb_sups_cyc_cali	REG_ADDR8(0x10080c)
84 #define reg_usb_intf_alt		REG_ADDR8(0x10080d)
85 #define reg_usb_edp_en			REG_ADDR8(0x10080e)
86 typedef enum{
87 	FLD_USB_EDP8_EN 		= 	BIT(0),	// printer
88 	FLD_USB_EDP1_EN 		= 	BIT(1),	// keyboard
89 	FLD_USB_EDP2_EN 		= 	BIT(2),	// mouse
90 	FLD_USB_EDP3_EN 		= 	BIT(3),
91 	FLD_USB_EDP4_EN 		= 	BIT(4),
92 	FLD_USB_EDP5_EN 		= 	BIT(5),	// printer
93 	FLD_USB_EDP6_EN 		= 	BIT(6),	// audio
94 	FLD_USB_EDP7_EN 		= 	BIT(7),	// audio
95 }usb_ep_en_e;
96 
97 #define reg_usb_irq_mask		REG_ADDR8(0x10080f)
98 enum{
99 	FLD_USB_IRQ_RESET_MASK   = 	BIT(0),
100 	FLD_USB_IRQ_250US_MASK 	 = 	BIT(1),
101 	FLD_USB_IRQ_SUSPEND_MASK = 	BIT(2),
102 	FLD_USB_IRQ_RESET_LVL	 = 	BIT(3),
103 	FLD_USB_IRQ_250US_LVL	 = 	BIT(4),
104 	FLD_USB_IRQ_RESET_O 	 = 	BIT(5),
105 	FLD_USB_IRQ_250US_O		 = 	BIT(6),
106 	FLD_USB_IRQ_SUSPEND_O	 = 	BIT(7),
107 };
108 
109 #define reg_usb_ep8123_ptr		REG_ADDR32(0x100810)
110 #define reg_usb_ep8_ptr			REG_ADDR8(0x100810)
111 #define reg_usb_ep1_ptr			REG_ADDR8(0x100811)
112 #define reg_usb_ep2_ptr			REG_ADDR8(0x100812)
113 #define reg_usb_ep3_ptr			REG_ADDR8(0x100813)
114 #define reg_usb_ep4567_ptr		REG_ADDR32(0x100814)
115 #define reg_usb_ep4_ptr			REG_ADDR8(0x100814)
116 #define reg_usb_ep5_ptr			REG_ADDR8(0x100815)
117 #define reg_usb_ep6_ptr			REG_ADDR8(0x100816)
118 #define reg_usb_ep7_ptr			REG_ADDR8(0x100817)
119 #define reg_usb_ep_ptr(i)		REG_ADDR8(0x100810+((i) & 0x07))
120 
121 #define reg_usb_ep8123_dat		REG_ADDR32(0x100818)
122 #define reg_usb_ep8_dat			REG_ADDR8(0x100818)
123 #define reg_usb_ep1_dat			REG_ADDR8(0x100819)
124 #define reg_usb_ep2_dat			REG_ADDR8(0x10081a)
125 #define reg_usb_ep3_dat			REG_ADDR8(0x10081b)
126 #define reg_usb_ep4567_dat		REG_ADDR32(0x10081c)
127 #define reg_usb_ep4_dat			REG_ADDR8(0x10081c)
128 #define reg_usb_ep5_dat			REG_ADDR8(0x10081d)
129 #define reg_usb_ep6_dat			REG_ADDR8(0x10081e)
130 #define reg_usb_ep7_dat			REG_ADDR8(0x10081f)
131 #define reg_usb_ep_dat(i)		REG_ADDR8(0x100818+((i) & 0x07))
132 
133 #define reg_usb_ep8_ctrl		REG_ADDR8(0x100820)
134 #define reg_usb_ep1_ctrl		REG_ADDR8(0x100821)
135 #define reg_usb_ep2_ctrl		REG_ADDR8(0x100822)
136 #define reg_usb_ep3_ctrl		REG_ADDR8(0x100823)
137 #define reg_usb_ep4_ctrl		REG_ADDR8(0x100824)
138 #define reg_usb_ep5_ctrl		REG_ADDR8(0x100825)
139 #define reg_usb_ep6_ctrl		REG_ADDR8(0x100826)
140 #define reg_usb_ep7_ctrl		REG_ADDR8(0x100827)
141 #define reg_usb_ep_ctrl(i)		REG_ADDR8(0x100820+((i) & 0x07))
142 
143 enum{
144 	FLD_USB_EP_BUSY = 			BIT(0),
145 	FLD_USB_EP_STALL =			BIT(1),
146 	FLD_USB_EP_DAT0 =			BIT(2),
147 	FLD_USB_EP_DAT1 =			BIT(3),
148 	FLD_USB_EP_MONO =			BIT(6),
149 	FLD_USB_EP_EOF_ISO =		BIT(7),
150 };
151 
152 #define reg_usb_ep8123_buf_addr	REG_ADDR32(0x100828)
153 #define reg_usb_ep8_buf_addr	REG_ADDR8(0x100828)
154 #define reg_usb_ep1_buf_addr	REG_ADDR8(0x100829)
155 #define reg_usb_ep2_buf_addr	REG_ADDR8(0x10082a)
156 #define reg_usb_ep3_buf_addr	REG_ADDR8(0x10082b)
157 #define reg_usb_ep4567_buf_addr	REG_ADDR32(0x10082c)
158 #define reg_usb_ep4_buf_addr	REG_ADDR8(0x10082c)
159 #define reg_usb_ep5_buf_addr	REG_ADDR8(0x10082d)
160 #define reg_usb_ep6_buf_addr	REG_ADDR8(0x10082e)
161 #define reg_usb_ep7_buf_addr	REG_ADDR8(0x10082f)
162 #define reg_usb_ep_buf_addr(i)	REG_ADDR8(0x100828+((i) & 0x07))
163 
164 
165 #define reg_usb_ram_ctrl		REG_ADDR8(0x100830)
166 
167 enum{
168 	FLD_USB_CEN_PWR_DN =		BIT(0),
169 	FLD_USB_CLK_PWR_DN =		BIT(1),
170 	FLD_USB_WEN_PWR_DN =		BIT(3),
171 	FLD_USB_CEN_FUNC =			BIT(4),
172 };
173 
174 #define reg_usb_iso_mode		REG_ADDR8(0x100838)
175 
176 #define reg_usb_ep_irq_status	REG_ADDR8(0x100839)
177 #define reg_usb_ep_irq_mask		REG_ADDR8(0x10083a)
178 typedef enum{
179 	FLD_USB_EDP8_IRQ 		= 	BIT(0),
180 	FLD_USB_EDP1_IRQ 		= 	BIT(1),
181 	FLD_USB_EDP2_IRQ 		= 	BIT(2),
182 	FLD_USB_EDP3_IRQ 		= 	BIT(3),
183 	FLD_USB_EDP4_IRQ 		= 	BIT(4),
184 	FLD_USB_EDP5_IRQ 		= 	BIT(5),
185 	FLD_USB_EDP6_IRQ 		= 	BIT(6),
186 	FLD_USB_EDP7_IRQ 		= 	BIT(7),
187 }usb_ep_irq_e ;
188 
189 
190 #define reg_usb_ep8_send_max	REG_ADDR8(0x10083b)
191 #define reg_usb_ep8_send_thre	REG_ADDR8(0x10083c)
192 #define reg_usb_ep8_fifo_mode	REG_ADDR8(0x10083d)
193 enum{
194 	FLD_USB_ENP8_FIFO_MODE =	BIT(0),
195 	FLD_USB_ENP8_FULL_FLAG =	BIT(1),
196 };
197 
198 #define reg_usb_ep_max_size		REG_ADDR8(0x10083e)
199 #define reg_usb_ep_tick			REG_ADDR8(0x10083f)
200 
201 #define reg_usb_mic_dat0		REG_ADDR16(0x1800)
202 #define reg_usb_mic_dat1		REG_ADDR16(0x1802)
203 
204 #endif
205