GNU Linux-libre 4.14.294-gnu1
[releases.git] / drivers / staging / rtlwifi / halmac / halmac_88xx / halmac_8822b / halmac_8822b_pwr_seq.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2016  Realtek Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * The full GNU General Public License is included in this distribution in the
15  * file called LICENSE.
16  *
17  * Contact Information:
18  * wlanfae <wlanfae@realtek.com>
19  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20  * Hsinchu 300, Taiwan.
21  *
22  * Larry Finger <Larry.Finger@lwfinger.net>
23  *
24  *****************************************************************************/
25 #include "../halmac_88xx_cfg.h"
26 #include "halmac_8822b_cfg.h"
27
28 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_CARDEMU_TO_ACT[] = {
29         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
30         {0x0012, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
31          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
32          BIT(1), 0}, /*SWR OCP = SWR OCP = 010 1382.40*/
33         {0x0012, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
34          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
35          BIT(0), BIT(0)}, /*SWR OCP = 010 1382.40 */
36         {0x0020, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
37          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
38          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(0),
39          BIT(0)}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/
40         {0x0001, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
41          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
42          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_DELAY, 1,
43          HALMAC_PWRSEQ_DELAY_MS}, /*Delay 1ms*/
44         {0x0000, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
45          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
46          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(5),
47          0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/
48         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
49          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
50          (BIT(4) | BIT(3) | BIT(2)),
51          0}, /* disable SW LPS 0x04[10]=0 and WLSUS_EN 0x04[12:11]=0*/
52         {0x0075, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
53          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
54          BIT(0), BIT(0)}, /* Disable USB suspend */
55         {0x0006, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
56          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
57          HALMAC_PWR_CMD_POLLING, BIT(1),
58          BIT(1)}, /* wait till 0x04[17] = 1    power ready*/
59         {0x0075, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
60          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
61          BIT(0), 0}, /* Enable USB suspend */
62         {0xFF1A, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
63          HALMAC_PWR_INTF_USB_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
64          0xFF, 0}, /*0xFF1A = 0 to release resume signals*/
65         {0x0006, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
66          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
67          BIT(0), BIT(0)}, /* release WLON reset  0x04[16]=1*/
68         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
69          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
70          BIT(7), 0}, /* disable HWPDN 0x04[15]=0*/
71         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
72          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
73          (BIT(4) | BIT(3)), 0}, /* disable WL suspend*/
74         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
75          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
76          BIT(0), BIT(0)}, /* polling until return 0*/
77         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
78          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
79          HALMAC_PWR_CMD_POLLING, BIT(0), 0},
80         {0x0020, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
81          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
82          BIT(3), BIT(3)}, /*Enable XTAL_CLK*/
83         {0x10A8, HALMAC_PWR_CUT_C_MSK, HALMAC_PWR_FAB_ALL_MSK,
84          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
85          0xFF, 0}, /*NFC pad enabled*/
86         {0x10A9, HALMAC_PWR_CUT_C_MSK, HALMAC_PWR_FAB_ALL_MSK,
87          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
88          0xFF, 0xef}, /*NFC pad enabled*/
89         {0x10AA, HALMAC_PWR_CUT_C_MSK, HALMAC_PWR_FAB_ALL_MSK,
90          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
91          0xFF, 0x0c}, /*NFC pad enabled*/
92         {0x0068, HALMAC_PWR_CUT_C_MSK, HALMAC_PWR_FAB_ALL_MSK,
93          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
94          HALMAC_PWR_CMD_WRITE, BIT(4), BIT(4)}, /*SDIO pad power down disabled*/
95         {0x0029, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
96          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
97          0xFF, 0xF9}, /*PLL seting*/
98         {0x0024, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
99          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
100          BIT(2), 0}, /*Improve TX EVM of CH13 and some 5G channles */
101         {0x0074, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
102          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
103          BIT(5), BIT(5)}, /*PCIE WAKE# enabled*/
104         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
105          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
106 };
107
108 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_ACT_TO_CARDEMU[] = {
109         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
110         {0x0003, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
111          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
112          HALMAC_PWR_CMD_WRITE, BIT(2), 0}, /*0x02[10] = 0 Disable MCU Core*/
113         {0x0093, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
114          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
115          BIT(3), 0}, /*LPS option 0x93[3]=0 , SWR PFM*/
116         {0x001F, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
117          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
118          0xFF, 0}, /*0x1F[7:0] = 0 turn off RF*/
119         {0x00EF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
120          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
121          0xFF, 0}, /*0xEF[7:0] = 0 turn off RF*/
122         {0xFF1A, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
123          HALMAC_PWR_INTF_USB_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
124          0xFF, 0x30}, /*0xFF1A = 0x30 to block resume signals*/
125         {0x0049, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
126          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
127          BIT(1), 0}, /*Enable rising edge triggering interrupt*/
128         {0x0006, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
129          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
130          BIT(0), BIT(0)}, /* release WLON reset  0x04[16]=1*/
131         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
132          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
133          BIT(1), 0}, /* Whole BB is reset */
134         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
135          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
136          BIT(1), BIT(1)}, /*0x04[9] = 1 turn off MAC by HW state machine*/
137         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
138          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
139          HALMAC_PWR_CMD_POLLING, BIT(1),
140          0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/
141         {0x0020, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
142          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
143          BIT(3), 0}, /* XTAL_CLK gated*/
144         {0x0000, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
145          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
146          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(5),
147          BIT(5)}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/
148         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
149          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
150 };
151
152 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_CARDEMU_TO_SUS[] = {
153         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
154         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
155          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
156          BIT(4) | BIT(3),
157          (BIT(4) | BIT(3))}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/
158         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
159          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
160          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(3) | BIT(4),
161          BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/
162         {0x0007, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
163          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
164          HALMAC_PWR_CMD_WRITE, 0xFF,
165          0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/
166         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
167          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
168          BIT(3) | BIT(4),
169          BIT(3) | BIT(4)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/
170         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
171          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
172          HALMAC_PWR_CMD_WRITE, BIT(0),
173          BIT(0)}, /*Set SDIO suspend local register*/
174         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
175          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
176          HALMAC_PWR_CMD_POLLING, BIT(1), 0}, /*wait power state to suspend*/
177         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
178          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
179 };
180
181 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_SUS_TO_CARDEMU[] = {
182         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
183         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
184          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
185          BIT(3) | BIT(7), 0}, /*clear suspend enable and power down enable*/
186         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
187          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
188          HALMAC_PWR_CMD_WRITE, BIT(0), 0}, /*Set SDIO suspend local register*/
189         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
190          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
191          HALMAC_PWR_CMD_POLLING, BIT(1),
192          BIT(1)}, /*wait power state to suspend*/
193         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
194          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
195          BIT(3) | BIT(4), 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
196         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
197          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
198 };
199
200 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_CARDEMU_TO_CARDDIS[] = {
201         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
202         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
203          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
204          HALMAC_PWR_CMD_WRITE, BIT(7),
205          BIT(7)}, /*suspend enable and power down enable*/
206         {0x0007, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
207          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
208          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, 0xFF,
209          0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/
210         {0x0067, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
211          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
212          BIT(5), 0}, /*0x67[5]=0 , BIT_PAPE_WLBT_SEL*/
213         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
214          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_SDIO_MSK,
215          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(3) | BIT(4),
216          BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/
217         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
218          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
219          BIT(2), BIT(2)}, /*0x04[10] = 1, enable SW LPS*/
220         {0x004A, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
221          HALMAC_PWR_INTF_USB_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
222          BIT(0), 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/
223         {0x0067, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
224          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
225          HALMAC_PWR_CMD_WRITE, BIT(5),
226          0}, /* 0: BT PAPE control ; 1: WL BB LNAON control*/
227         {0x0067, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
228          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
229          HALMAC_PWR_CMD_WRITE, BIT(4),
230          0}, /* 0: BT GPIO[11:10] control  ; 1: WL BB LNAON control*/
231         {0x004F, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
232          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
233          HALMAC_PWR_CMD_WRITE, BIT(0), 0}, /* 0: BT Control*/
234         {0x0067, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
235          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
236          HALMAC_PWR_CMD_WRITE, BIT(1),
237          0}, /* turn off BT_3DD_SYNC_B and BT_GPIO[18] */
238         {0x0046, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
239          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
240          HALMAC_PWR_CMD_WRITE, BIT(6), BIT(6)}, /* GPIO[6] : Output mode*/
241         {0x0067, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
242          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
243          HALMAC_PWR_CMD_WRITE, BIT(2), 0}, /* turn off BT_GPIO[16] */
244         {0x0046, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
245          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
246          HALMAC_PWR_CMD_WRITE, BIT(7), BIT(7)}, /* GPIO[7] : Output mode*/
247         {0x0062, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
248          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_MAC,
249          HALMAC_PWR_CMD_WRITE, BIT(4), BIT(4)}, /* GPIO[12] : Output mode */
250         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
251          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
252          HALMAC_PWR_CMD_WRITE, BIT(0),
253          BIT(0)}, /*Set SDIO suspend local register*/
254         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
255          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
256          HALMAC_PWR_CMD_POLLING, BIT(1), 0}, /*wait power state to suspend*/
257         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
258          HALMAC_PWR_INTF_USB_MSK | HALMAC_PWR_INTF_PCI_MSK,
259          HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE, BIT(1),
260          0}, /*0x90[1]=0 , disable 32k clock*/
261         {0x0044, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
262          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
263          HALMAC_PWR_CMD_WRITE, 0xFF,
264          0}, /*0x90[1]=0 , disable 32k clock by indirect access*/
265         {0x0040, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
266          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
267          HALMAC_PWR_CMD_WRITE, 0xFF,
268          0x90}, /*0x90[1]=0 , disable 32k clock by indirect access*/
269         {0x0041, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
270          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
271          HALMAC_PWR_CMD_WRITE, 0xFF,
272          0x00}, /*0x90[1]=0 , disable 32k clock by indirect access*/
273         {0x0042, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
274          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
275          HALMAC_PWR_CMD_WRITE, 0xFF,
276          0x04}, /*0x90[1]=0 , disable 32k clock by indirect access*/
277         {0x0081, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
278          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
279          BIT(7), 0}, /*0x80[15]clean fw init ready bit*/
280         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
281          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
282 };
283
284 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_CARDDIS_TO_CARDEMU[] = {
285         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
286         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
287          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
288          HALMAC_PWR_CMD_WRITE, BIT(0), 0}, /*Set SDIO suspend local register*/
289         {0x0086, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
290          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
291          HALMAC_PWR_CMD_POLLING, BIT(1),
292          BIT(1)}, /*wait power state to suspend*/
293         {0x004A, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
294          HALMAC_PWR_INTF_USB_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
295          BIT(0), 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/
296         {0x0005, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
297          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
298          BIT(3) | BIT(4) | BIT(7),
299          0}, /*clear suspend enable and power down enable*/
300         {0x0301, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
301          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
302          0xFF, 0},
303         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
304          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
305 };
306
307 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_ACT_TO_LPS[] = {
308         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
309         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
310          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
311          BIT(2), BIT(2)}, /*Enable 32k calibration and thermal meter*/
312         {0x0199, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
313          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
314          BIT(3), BIT(3)}, /*Register write data of 32K calibration*/
315         {0x019B, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
316          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
317          BIT(7), BIT(7)}, /*Enable 32k calibration reg write*/
318         {0x1138, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
319          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
320          BIT(0) | BIT(1), BIT(0) | BIT(1)}, /*set RPWM IMR*/
321         {0x0194, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
322          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
323          BIT(0), BIT(0)}, /* enable 32K CLK*/
324         {0x0093, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
325          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
326          0xFF, 0x42}, /* LPS Option MAC OFF enable*/
327         {0x0092, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
328          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
329          0xFF, 0x20}, /* LPS Option  Enable memory to deep sleep mode*/
330         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
331          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
332          BIT(1), BIT(1)}, /* enable reg use 32K CLK*/
333         {0x0301, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
334          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
335          0xFF, 0xFF}, /*PCIe DMA stop*/
336         {0x0522, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
337          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
338          0xFF, 0xFF}, /*Tx Pause*/
339         {0x05F8, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
340          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
341          HALMAC_PWR_CMD_POLLING, 0xFF,
342          0}, /*Should be zero if no packet is transmitting*/
343         {0x05F9, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
344          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
345          HALMAC_PWR_CMD_POLLING, 0xFF,
346          0}, /*Should be zero if no packet is transmitting*/
347         {0x05FA, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
348          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
349          HALMAC_PWR_CMD_POLLING, 0xFF,
350          0}, /*Should be zero if no packet is transmitting*/
351         {0x05FB, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
352          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
353          HALMAC_PWR_CMD_POLLING, 0xFF,
354          0}, /*Should be zero if no packet is transmitting*/
355         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
356          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
357          BIT(0), 0}, /*CCK and OFDM are disabled,and clock are gated*/
358         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
359          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_DELAY,
360          0, HALMAC_PWRSEQ_DELAY_US}, /*Delay 1us*/
361         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
362          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
363          BIT(1), 0}, /*Whole BB is reset*/
364         {0x0100, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
365          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
366          0xFF, 0x3F}, /*Reset MAC TRX*/
367         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
368          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
369          BIT(1), 0}, /*check if removed later*/
370         {0x0553, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
371          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
372          BIT(5), BIT(5)}, /*Respond TxOK to scheduler*/
373         {0x0008, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
374          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
375          BIT(4), BIT(4)}, /* switch TSF clock to 32K*/
376         {0x0109, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
377          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
378          HALMAC_PWR_CMD_POLLING, BIT(7),
379          BIT(7)}, /*Polling 0x109[7]=0  TSF in 40M*/
380         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
381          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
382          BIT(0), BIT(0)}, /* enable WL_LPS_EN*/
383         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
384          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
385 };
386
387 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_ACT_TO_DEEP_LPS[] = {
388         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
389         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
390          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
391          BIT(2), BIT(2)}, /*Enable 32k calibration and thermal meter*/
392         {0x0199, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
393          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
394          BIT(3), BIT(3)}, /*Register write data of 32K calibration*/
395         {0x019B, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
396          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
397          BIT(7), BIT(7)}, /*Enable 32k calibration reg write*/
398         {0x1138, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
399          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
400          BIT(0) | BIT(1), BIT(0) | BIT(1)}, /*set RPWM IMR*/
401         {0x0194, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
402          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
403          BIT(0), BIT(0)}, /* enable 32K CLK*/
404         {0x0093, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
405          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
406          0xFF, 0x40}, /* LPS Option MAC OFF enable*/
407         {0x0092, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
408          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
409          0xFF, 0x20}, /* LPS Option  Enable memory to deep sleep mode*/
410         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
411          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
412          BIT(1), BIT(1)}, /* enable reg use 32K CLK*/
413         {0x0301, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
414          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
415          0xFF, 0xFF}, /*PCIe DMA stop*/
416         {0x0522, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
417          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
418          0xFF, 0xFF}, /*Tx Pause*/
419         {0x05F8, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
420          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
421          HALMAC_PWR_CMD_POLLING, 0xFF,
422          0}, /*Should be zero if no packet is transmitting*/
423         {0x05F9, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
424          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
425          HALMAC_PWR_CMD_POLLING, 0xFF,
426          0}, /*Should be zero if no packet is transmitting*/
427         {0x05FA, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
428          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
429          HALMAC_PWR_CMD_POLLING, 0xFF,
430          0}, /*Should be zero if no packet is transmitting*/
431         {0x05FB, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
432          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
433          HALMAC_PWR_CMD_POLLING, 0xFF,
434          0}, /*Should be zero if no packet is transmitting*/
435         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
436          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
437          BIT(0), 0}, /*CCK and OFDM are disabled,and clock are gated*/
438         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
439          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_DELAY,
440          0, HALMAC_PWRSEQ_DELAY_US}, /*Delay 1us*/
441         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
442          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
443          BIT(1), 0}, /*Whole BB is reset*/
444         {0x0100, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
445          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
446          0xFF, 0x3F}, /*Reset MAC TRX*/
447         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
448          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
449          BIT(1), 0}, /*check if removed later*/
450         {0x0553, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
451          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
452          BIT(5), BIT(5)}, /*Respond TxOK to scheduler*/
453         {0x0008, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
454          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
455          BIT(4), BIT(4)}, /* switch TSF clock to 32K*/
456         {0x0109, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
457          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
458          HALMAC_PWR_CMD_POLLING, BIT(7),
459          BIT(7)}, /*Polling 0x109[7]=1  TSF in 32K*/
460         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
461          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
462          BIT(0), BIT(0)}, /* enable WL_LPS_EN*/
463         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
464          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
465 };
466
467 static struct halmac_wl_pwr_cfg_ HALMAC_RTL8822B_TRANS_LPS_TO_ACT[] = {
468         /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value } */
469         {0x0080, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
470          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
471          HALMAC_PWR_CMD_WRITE, BIT(7), BIT(7)}, /*SDIO RPWM*/
472         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
473          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_DELAY,
474          0, HALMAC_PWRSEQ_DELAY_MS}, /*Delay*/
475         {0x0080, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
476          HALMAC_PWR_INTF_SDIO_MSK, HALMAC_PWR_BASEADDR_SDIO,
477          HALMAC_PWR_CMD_WRITE, BIT(7), 0}, /*SDIO RPWM*/
478         {0xFE58, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
479          HALMAC_PWR_INTF_USB_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
480          0xFF, 0x84}, /*USB RPWM*/
481         {0x0361, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
482          HALMAC_PWR_INTF_PCI_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
483          0xFF, 0x84}, /*PCIe RPWM*/
484         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
485          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_DELAY,
486          0, HALMAC_PWRSEQ_DELAY_MS}, /*Delay*/
487         {0x0008, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
488          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
489          BIT(4), 0}, /* switch TSF to 40M*/
490         {0x0109, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
491          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC,
492          HALMAC_PWR_CMD_POLLING, BIT(7), 0}, /*Polling 0x109[7]=0  TSF in 40M*/
493         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
494          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
495          BIT(1), BIT(1)},
496         {0x0100, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
497          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
498          0xFF, 0xFF}, /*nable WMAC TRX*/
499         {0x0002, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
500          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
501          BIT(1) | BIT(0), BIT(1) | BIT(0)}, /*nable BB macro*/
502         {0x0522, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
503          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
504          0xFF, 0},
505         {0x113C, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
506          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
507          0xFF, 0x03}, /*clear RPWM INT*/
508         {0x0124, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
509          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
510          0xFF, 0xFF}, /*clear FW INT*/
511         {0x0125, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
512          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
513          0xFF, 0xFF}, /*clear FW INT*/
514         {0x0126, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
515          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
516          0xFF, 0xFF}, /*clear FW INT*/
517         {0x0127, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
518          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
519          0xFF, 0xFF}, /*clear FW INT*/
520         {0x0090, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
521          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
522          BIT(1), 0}, /* disable reg use 32K CLK*/
523         {0x0101, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
524          HALMAC_PWR_INTF_ALL_MSK, HALMAC_PWR_BASEADDR_MAC, HALMAC_PWR_CMD_WRITE,
525          BIT(2), 0}, /*disable 32k calibration and thermal meter*/
526         {0xFFFF, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_ALL_MSK,
527          HALMAC_PWR_INTF_ALL_MSK, 0, HALMAC_PWR_CMD_END, 0, 0},
528 };
529
530 /* Card Enable Array */
531 struct halmac_wl_pwr_cfg_ *halmac_8822b_card_enable_flow[] = {
532         HALMAC_RTL8822B_TRANS_CARDDIS_TO_CARDEMU,
533         HALMAC_RTL8822B_TRANS_CARDEMU_TO_ACT, NULL};
534
535 /* Card Disable Array */
536 struct halmac_wl_pwr_cfg_ *halmac_8822b_card_disable_flow[] = {
537         HALMAC_RTL8822B_TRANS_ACT_TO_CARDEMU,
538         HALMAC_RTL8822B_TRANS_CARDEMU_TO_CARDDIS, NULL};
539
540 /* Suspend Array */
541 struct halmac_wl_pwr_cfg_ *halmac_8822b_suspend_flow[] = {
542         HALMAC_RTL8822B_TRANS_ACT_TO_CARDEMU,
543         HALMAC_RTL8822B_TRANS_CARDEMU_TO_SUS, NULL};
544
545 /* Resume Array */
546 struct halmac_wl_pwr_cfg_ *halmac_8822b_resume_flow[] = {
547         HALMAC_RTL8822B_TRANS_SUS_TO_CARDEMU,
548         HALMAC_RTL8822B_TRANS_CARDEMU_TO_ACT, NULL};
549
550 /* HWPDN Array - HW behavior */
551 struct halmac_wl_pwr_cfg_ *halmac_8822b_hwpdn_flow[] = {NULL};
552
553 /* Enter LPS - FW behavior */
554 struct halmac_wl_pwr_cfg_ *halmac_8822b_enter_lps_flow[] = {
555         HALMAC_RTL8822B_TRANS_ACT_TO_LPS, NULL};
556
557 /* Enter Deep LPS - FW behavior */
558 struct halmac_wl_pwr_cfg_ *halmac_8822b_enter_deep_lps_flow[] = {
559         HALMAC_RTL8822B_TRANS_ACT_TO_DEEP_LPS, NULL};
560
561 /* Leave LPS -FW behavior */
562 struct halmac_wl_pwr_cfg_ *halmac_8822b_leave_lps_flow[] = {
563         HALMAC_RTL8822B_TRANS_LPS_TO_ACT, NULL};