xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/pwrseq.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright(c) 2009-2014  Realtek Corporation.*/
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __RTL92E_PWRSEQ_H__
5*4882a593Smuzhiyun #define __RTL92E_PWRSEQ_H__
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include "../pwrseqcmd.h"
8*4882a593Smuzhiyun /**
9*4882a593Smuzhiyun  *	Check document WM-20110607-Paul-RTL8192E_Power_Architecture-R02.vsd
10*4882a593Smuzhiyun  *	There are 6 HW Power States:
11*4882a593Smuzhiyun  *	0: POFF--Power Off
12*4882a593Smuzhiyun  *	1: PDN--Power Down
13*4882a593Smuzhiyun  *	2: CARDEMU--Card Emulation
14*4882a593Smuzhiyun  *	3: ACT--Active Mode
15*4882a593Smuzhiyun  *	4: LPS--Low Power State
16*4882a593Smuzhiyun  *	5: SUS--Suspend
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  *	The transision from different states are defined below
19*4882a593Smuzhiyun  *	TRANS_CARDEMU_TO_ACT
20*4882a593Smuzhiyun  *	TRANS_ACT_TO_CARDEMU
21*4882a593Smuzhiyun  *	TRANS_CARDEMU_TO_SUS
22*4882a593Smuzhiyun  *	TRANS_SUS_TO_CARDEMU
23*4882a593Smuzhiyun  *	TRANS_CARDEMU_TO_PDN
24*4882a593Smuzhiyun  *	TRANS_ACT_TO_LPS
25*4882a593Smuzhiyun  *	TRANS_LPS_TO_ACT
26*4882a593Smuzhiyun  *
27*4882a593Smuzhiyun  *	TRANS_END
28*4882a593Smuzhiyun  *	PWR SEQ Version: rtl8192E_PwrSeq_V09.h
29*4882a593Smuzhiyun  */
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define	RTL8192E_TRANS_CARDEMU_TO_ACT_STEPS	18
32*4882a593Smuzhiyun #define	RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS	18
33*4882a593Smuzhiyun #define	RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS	18
34*4882a593Smuzhiyun #define	RTL8192E_TRANS_SUS_TO_CARDEMU_STEPS	18
35*4882a593Smuzhiyun #define	RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS	18
36*4882a593Smuzhiyun #define	RTL8192E_TRANS_PDN_TO_CARDEMU_STEPS	18
37*4882a593Smuzhiyun #define	RTL8192E_TRANS_ACT_TO_LPS_STEPS		23
38*4882a593Smuzhiyun #define	RTL8192E_TRANS_LPS_TO_ACT_STEPS		23
39*4882a593Smuzhiyun #define	RTL8192E_TRANS_END_STEPS		1
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define RTL8192E_TRANS_CARDEMU_TO_ACT					\
42*4882a593Smuzhiyun 	/* format */							\
43*4882a593Smuzhiyun 	/* comments here */						\
44*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
45*4882a593Smuzhiyun 	/* disable HWPDN 0x04[15]=0*/					\
46*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
47*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(7), 0},			\
48*4882a593Smuzhiyun 	/* disable SW LPS 0x04[10]=0*/					\
49*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
50*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(2), 0},			\
51*4882a593Smuzhiyun 	/* disable WL suspend*/						\
52*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
53*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, (BIT(4)|BIT(3)), 0},		\
54*4882a593Smuzhiyun 	/* wait till 0x04[17] = 1    power ready*/			\
55*4882a593Smuzhiyun 	{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
56*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, BIT(1), BIT(1)},		\
57*4882a593Smuzhiyun 	/* release WLON reset  0x04[16]=1*/				\
58*4882a593Smuzhiyun 	{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
59*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), BIT(0)},		\
60*4882a593Smuzhiyun 	/* polling until return 0*/					\
61*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
62*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), BIT(0)},		\
63*4882a593Smuzhiyun 	/**/								\
64*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
65*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, BIT(0), 0},
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #define RTL8192E_TRANS_ACT_TO_CARDEMU					\
68*4882a593Smuzhiyun 	/* format */							\
69*4882a593Smuzhiyun 	/* comments here */						\
70*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
71*4882a593Smuzhiyun 	/*0x1F[7:0] = 0 turn off RF*/					\
72*4882a593Smuzhiyun 	{0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
73*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0},			\
74*4882a593Smuzhiyun 	/*0x4C[23]=0x4E[7]=0, switch DPDT_SEL_P output from register 0x65[2] */\
75*4882a593Smuzhiyun 	{0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
76*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(7), 0},			\
77*4882a593Smuzhiyun 	/*0x04[9] = 1 turn off MAC by HW state machine*/		\
78*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
79*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(1), BIT(1)},		\
80*4882a593Smuzhiyun 	/*wait till 0x04[9] = 0 polling until return 0 to disable*/	\
81*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
82*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, BIT(1), 0},
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #define RTL8192E_TRANS_CARDEMU_TO_SUS					\
85*4882a593Smuzhiyun 	/* format */							\
86*4882a593Smuzhiyun 	/* comments here */						\
87*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
88*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/		\
89*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,	\
90*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(4) | BIT(3), (BIT(4) | BIT(3))},\
91*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'01 enable WL suspend*/			\
92*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,			\
93*4882a593Smuzhiyun 	 PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC,	\
94*4882a593Smuzhiyun 	 PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)},				\
95*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/		\
96*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,	\
97*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(3) | BIT(4), BIT(3) | BIT(4)},\
98*4882a593Smuzhiyun 	/*Set SDIO suspend local register*/				\
99*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
100*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_WRITE, BIT(0), BIT(0)},		\
101*4882a593Smuzhiyun 	 /*wait power state to suspend*/				\
102*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
103*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_POLLING, BIT(1), 0},
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #define RTL8192E_TRANS_SUS_TO_CARDEMU					\
106*4882a593Smuzhiyun 	/* format */							\
107*4882a593Smuzhiyun 	/* comments here */						\
108*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
109*4882a593Smuzhiyun 	/*Set SDIO suspend local register*/				\
110*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
111*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_WRITE, BIT(0), 0},			\
112*4882a593Smuzhiyun 	/*wait power state to suspend*/					\
113*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
114*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_POLLING, BIT(1), BIT(1)},		\
115*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'00 disable WL suspend*/			\
116*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
117*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(3) | BIT(4), 0},
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #define RTL8192E_TRANS_CARDEMU_TO_CARDDIS				\
120*4882a593Smuzhiyun 	/* format */							\
121*4882a593Smuzhiyun 	/* comments here */						\
122*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
123*4882a593Smuzhiyun 	/*0x07=0x20 , SOP option to disable BG/MB*/			\
124*4882a593Smuzhiyun 	{0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
125*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0x20},			\
126*4882a593Smuzhiyun 	/*Unlock small LDO Register*/					\
127*4882a593Smuzhiyun 	{0x00CC, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
128*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(2), BIT(2)},		\
129*4882a593Smuzhiyun 	/*Disable small LDO*/						\
130*4882a593Smuzhiyun 	{0x0011, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
131*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), 0},			\
132*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'01 enable WL suspend*/			\
133*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,			\
134*4882a593Smuzhiyun 	 PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC,		\
135*4882a593Smuzhiyun 	 PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)},				\
136*4882a593Smuzhiyun 	/*0x04[10] = 1, enable SW LPS*/					\
137*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,	\
138*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(2), BIT(2)},		\
139*4882a593Smuzhiyun 	/*Set SDIO suspend local register*/				\
140*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
141*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_WRITE, BIT(0), BIT(0)},		\
142*4882a593Smuzhiyun 	/*wait power state to suspend*/					\
143*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
144*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_POLLING, BIT(1), 0},
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #define RTL8192E_TRANS_CARDDIS_TO_CARDEMU				\
147*4882a593Smuzhiyun 	/* format */							\
148*4882a593Smuzhiyun 	/* comments here */						\
149*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
150*4882a593Smuzhiyun 	/*Set SDIO suspend local register*/				\
151*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
152*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_WRITE, BIT(0), 0},			\
153*4882a593Smuzhiyun 	/*wait power state to suspend*/					\
154*4882a593Smuzhiyun 	{0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
155*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_POLLING, BIT(1), BIT(1)},		\
156*4882a593Smuzhiyun 	/*Enable small LDO*/						\
157*4882a593Smuzhiyun 	{0x0011, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
158*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), BIT(0)},		\
159*4882a593Smuzhiyun 	/*Lock small LDO Register*/					\
160*4882a593Smuzhiyun 	{0x00CC, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
161*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(2), 0},			\
162*4882a593Smuzhiyun 	/*0x04[12:11] = 2b'00 disable WL suspend*/			\
163*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
164*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(3) | BIT(4), 0},
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun #define RTL8192E_TRANS_CARDEMU_TO_PDN					\
167*4882a593Smuzhiyun 	/* format */							\
168*4882a593Smuzhiyun 	/* comments here */						\
169*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
170*4882a593Smuzhiyun 	/* 0x04[16] = 0*/						\
171*4882a593Smuzhiyun 	{0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
172*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), 0},			\
173*4882a593Smuzhiyun 	/* 0x04[15] = 1*/						\
174*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
175*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(7), BIT(7)},
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun #define RTL8192E_TRANS_PDN_TO_CARDEMU					\
178*4882a593Smuzhiyun 	/* format */							\
179*4882a593Smuzhiyun 	/* comments here */						\
180*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
181*4882a593Smuzhiyun 	/* 0x04[15] = 0*/						\
182*4882a593Smuzhiyun 	{0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
183*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(7), 0},
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun #define RTL8192E_TRANS_ACT_TO_LPS					\
186*4882a593Smuzhiyun 	/* format */							\
187*4882a593Smuzhiyun 	/* comments here */						\
188*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
189*4882a593Smuzhiyun 	/*PCIe DMA stop*/						\
190*4882a593Smuzhiyun 	{0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,	\
191*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0xFF},			\
192*4882a593Smuzhiyun 	/*Tx Pause*/							\
193*4882a593Smuzhiyun 	{0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
194*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0xFF},			\
195*4882a593Smuzhiyun 	/*Should be zero if no packet is transmitting*/			\
196*4882a593Smuzhiyun 	{0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
197*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, 0xFF, 0},			\
198*4882a593Smuzhiyun 	/*Should be zero if no packet is transmitting*/			\
199*4882a593Smuzhiyun 	{0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
200*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, 0xFF, 0},			\
201*4882a593Smuzhiyun 	/*Should be zero if no packet is transmitting*/			\
202*4882a593Smuzhiyun 	{0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
203*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, 0xFF, 0},			\
204*4882a593Smuzhiyun 	/*Should be zero if no packet is transmitting*/			\
205*4882a593Smuzhiyun 	{0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
206*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, 0xFF, 0},			\
207*4882a593Smuzhiyun 	/*CCK and OFDM are disabled,and clock are gated*/		\
208*4882a593Smuzhiyun 	{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
209*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(0), 0},			\
210*4882a593Smuzhiyun 	/*Delay 1us*/							\
211*4882a593Smuzhiyun 	{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
212*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},		\
213*4882a593Smuzhiyun 	/*Whole BB is reset*/						\
214*4882a593Smuzhiyun 	{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
215*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(1), 0},			\
216*4882a593Smuzhiyun 	/*Reset MAC TRX*/						\
217*4882a593Smuzhiyun 	{0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
218*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0x03},			\
219*4882a593Smuzhiyun 	/*check if removed later*/					\
220*4882a593Smuzhiyun 	{0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
221*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(1), 0},			\
222*4882a593Smuzhiyun 	/*When driver enter Sus/ Disable, enable LOP for BT*/		\
223*4882a593Smuzhiyun 	{0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
224*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0x00},			\
225*4882a593Smuzhiyun 	/*Respond TxOK to scheduler*/					\
226*4882a593Smuzhiyun 	{0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
227*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(5), BIT(5)},
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun #define RTL8192E_TRANS_LPS_TO_ACT					\
230*4882a593Smuzhiyun 	/* format */							\
231*4882a593Smuzhiyun 	/* comments here */						\
232*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
233*4882a593Smuzhiyun 	/*SDIO RPWM, For Repeatly In and out, Taggle bit should be changed*/\
234*4882a593Smuzhiyun 	{0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,	\
235*4882a593Smuzhiyun 	 PWR_BASEADDR_SDIO , PWR_CMD_WRITE, 0xFF, 0x84},		\
236*4882a593Smuzhiyun 	/*USB RPWM*/							\
237*4882a593Smuzhiyun 	{0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,	\
238*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0x84},			\
239*4882a593Smuzhiyun 	/*PCIe RPWM*/							\
240*4882a593Smuzhiyun 	{0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,	\
241*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0x84},			\
242*4882a593Smuzhiyun 	/*Delay*/							\
243*4882a593Smuzhiyun 	{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
244*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS},		\
245*4882a593Smuzhiyun 	/*0x08[4] = 0 switch TSF to 40M*/				\
246*4882a593Smuzhiyun 	{0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
247*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(4), 0},			\
248*4882a593Smuzhiyun 	/*Polling 0x109[7]=0  TSF in 40M*/				\
249*4882a593Smuzhiyun 	{0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
250*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_POLLING, BIT(7), 0},		\
251*4882a593Smuzhiyun 	/*0x101[1] = 1*/						\
252*4882a593Smuzhiyun 	{0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
253*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(1), BIT(1)},		\
254*4882a593Smuzhiyun 	/*0x100[7:0] = 0xFF  enable WMAC TRX*/				\
255*4882a593Smuzhiyun 	{0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
256*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0xFF},			\
257*4882a593Smuzhiyun 	/* 0x02[1:0] = 2b'11 enable BB macro*/				\
258*4882a593Smuzhiyun 	{0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
259*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, BIT(1) | BIT(0), BIT(1) | BIT(0)},\
260*4882a593Smuzhiyun 	/*0x522 = 0*/							\
261*4882a593Smuzhiyun 	{0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
262*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0},			\
263*4882a593Smuzhiyun 	/*Clear ISR*/							\
264*4882a593Smuzhiyun 	{0x013D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
265*4882a593Smuzhiyun 	 PWR_BASEADDR_MAC , PWR_CMD_WRITE, 0xFF, 0xFF},
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun #define RTL8192E_TRANS_END						\
268*4882a593Smuzhiyun 	/* format */							\
269*4882a593Smuzhiyun 	/* comments here */						\
270*4882a593Smuzhiyun 	/* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
271*4882a593Smuzhiyun 	{0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,	\
272*4882a593Smuzhiyun 	 0, PWR_CMD_END, 0, 0},
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_power_on_flow
275*4882a593Smuzhiyun 					[RTL8192E_TRANS_CARDEMU_TO_ACT_STEPS +
276*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
277*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_radio_off_flow
278*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
279*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
280*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_card_disable_flow
281*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
282*4882a593Smuzhiyun 					 RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS +
283*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
284*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_card_enable_flow
285*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
286*4882a593Smuzhiyun 					 RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS +
287*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
288*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_suspend_flow
289*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
290*4882a593Smuzhiyun 					 RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS +
291*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
292*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_resume_flow
293*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
294*4882a593Smuzhiyun 					 RTL8192E_TRANS_CARDEMU_TO_SUS_STEPS +
295*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
296*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_hwpdn_flow
297*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_CARDEMU_STEPS +
298*4882a593Smuzhiyun 					 RTL8192E_TRANS_CARDEMU_TO_PDN_STEPS +
299*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
300*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_enter_lps_flow
301*4882a593Smuzhiyun 					[RTL8192E_TRANS_ACT_TO_LPS_STEPS +
302*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
303*4882a593Smuzhiyun extern struct wlan_pwr_cfg rtl8192E_leave_lps_flow
304*4882a593Smuzhiyun 					[RTL8192E_TRANS_LPS_TO_ACT_STEPS +
305*4882a593Smuzhiyun 					 RTL8192E_TRANS_END_STEPS];
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun /* RTL8192EE Power Configuration CMDs for PCIe interface */
308*4882a593Smuzhiyun #define RTL8192E_NIC_PWR_ON_FLOW	rtl8192E_power_on_flow
309*4882a593Smuzhiyun #define RTL8192E_NIC_RF_OFF_FLOW	rtl8192E_radio_off_flow
310*4882a593Smuzhiyun #define RTL8192E_NIC_DISABLE_FLOW	rtl8192E_card_disable_flow
311*4882a593Smuzhiyun #define RTL8192E_NIC_ENABLE_FLOW	rtl8192E_card_enable_flow
312*4882a593Smuzhiyun #define RTL8192E_NIC_SUSPEND_FLOW	rtl8192E_suspend_flow
313*4882a593Smuzhiyun #define RTL8192E_NIC_RESUME_FLOW	rtl8192E_resume_flow
314*4882a593Smuzhiyun #define RTL8192E_NIC_PDN_FLOW		rtl8192E_hwpdn_flow
315*4882a593Smuzhiyun #define RTL8192E_NIC_LPS_ENTER_FLOW	rtl8192E_enter_lps_flow
316*4882a593Smuzhiyun #define RTL8192E_NIC_LPS_LEAVE_FLOW	rtl8192E_leave_lps_flow
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun #endif
319