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