OSDN Git Service

Add rtl8821ce driver version 5.5.2
[android-x86/external-kernel-drivers.git] / rtl8821ce / hal / halmac / halmac_88xx / halmac_8821c / halmac_api_8821c_sdio.c
1 /* #include "../halmac_88xx_cfg.h" */
2 #include "halmac_8821c_cfg.h"
3
4 /**
5  * halmac_mac_power_switch_8821c_sdio() - switch mac power
6  * @pHalmac_adapter : the adapter of halmac
7  * @halmac_power : power state
8  * Author : KaiYuan Chang/Ivan Lin
9  * Return : HALMAC_RET_STATUS
10  * More details of status code can be found in prototype document
11  */
12 HALMAC_RET_STATUS
13 halmac_mac_power_switch_8821c_sdio(
14         IN PHALMAC_ADAPTER pHalmac_adapter,
15         IN HALMAC_MAC_POWER     halmac_power
16 )
17 {
18         u8 interface_mask;
19         u8 value8;
20         u8 rpwm;
21         u32 imr_backup;
22         VOID *pDriver_adapter = NULL;
23         PHALMAC_API pHalmac_api;
24
25         if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
26                 return HALMAC_RET_ADAPTER_INVALID;
27
28         if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
29                 return HALMAC_RET_API_INVALID;
30
31         pDriver_adapter = pHalmac_adapter->pDriver_adapter;
32         pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
33
34         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]halmac_mac_power_switch_88xx_sdio halmac_power\n");
35         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]%x\n", halmac_power);
36         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]8821C pwr seq ver = %s\n", HALMAC_8821C_PWR_SEQ_VER);
37
38         interface_mask = HALMAC_PWR_INTF_SDIO_MSK;
39
40         pHalmac_adapter->rpwm_record = HALMAC_REG_READ_8(pHalmac_adapter, REG_SDIO_HRPWM1);
41
42         /* Check FW still exist or not */
43         if (0xC078 == HALMAC_REG_READ_16(pHalmac_adapter, REG_MCUFW_CTRL)) {
44                 /* Leave 32K */
45                 rpwm = (u8)((pHalmac_adapter->rpwm_record ^ BIT(7)) & 0x80);
46                 HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SDIO_HRPWM1, rpwm);
47         }
48
49         value8 = HALMAC_REG_READ_8(pHalmac_adapter, REG_CR);
50         if (0xEA == value8)
51                 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
52         else
53                 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
54
55         /*Check if power switch is needed*/
56         if (halmac_power == HALMAC_MAC_POWER_ON && pHalmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
57                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_WARN, "[WARN]halmac_mac_power_switch power state unchange!\n");
58                 return HALMAC_RET_PWR_UNCHANGE;
59         } else {
60                 imr_backup = HALMAC_REG_READ_32(pHalmac_adapter, REG_SDIO_HIMR);
61                 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, 0);
62
63                 if (HALMAC_MAC_POWER_OFF == halmac_power) {
64                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
65                                     interface_mask, halmac_8821c_card_disable_flow)) {
66                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "[ERR]Handle power off cmd error\n");
67                                 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
68                                 return HALMAC_RET_POWER_OFF_FAIL;
69                         }
70
71                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
72                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_UNDEFINE;
73                         pHalmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
74                         halmac_init_adapter_dynamic_para_88xx(pHalmac_adapter);
75                 } else {
76                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
77                                     interface_mask, halmac_8821c_card_enable_flow)) {
78                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "[ERR]Handle power on cmd error\n");
79                                 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
80                                 return HALMAC_RET_POWER_ON_FAIL;
81                         }
82
83                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
84                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
85                 }
86
87                 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
88         }
89
90         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]halmac_mac_power_switch_88xx_sdio <==========\n");
91
92         return HALMAC_RET_SUCCESS;
93 }
94
95 /**
96  * halmac_phy_cfg_8821c_sdio() - phy config
97  * @pHalmac_adapter : the adapter of halmac
98  * Author : KaiYuan Chang
99  * Return : HALMAC_RET_STATUS
100  * More details of status code can be found in prototype document
101  */
102 HALMAC_RET_STATUS
103 halmac_phy_cfg_8821c_sdio(
104         IN PHALMAC_ADAPTER pHalmac_adapter,
105         IN HALMAC_INTF_PHY_PLATFORM platform
106 )
107 {
108         VOID *pDriver_adapter = NULL;
109         PHALMAC_API pHalmac_api;
110
111         if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
112                 return HALMAC_RET_ADAPTER_INVALID;
113
114         if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
115                 return HALMAC_RET_API_INVALID;
116
117         halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_PHY_CFG);
118
119         pDriver_adapter = pHalmac_adapter->pDriver_adapter;
120         pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
121
122         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg ==========>\n");
123
124         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "sdio no phy\n");
125
126         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg <==========\n");
127
128         return HALMAC_RET_SUCCESS;
129 }
130
131 /**
132  * halmac_interface_integration_tuning_8821c_sdio() - sdio interface fine tuning
133  * @pHalmac_adapter : the adapter of halmac
134  * Author : Ivan
135  * Return : HALMAC_RET_STATUS
136  * More details of status code can be found in prototype document
137  */
138 HALMAC_RET_STATUS
139 halmac_interface_integration_tuning_8821c_sdio(
140         IN PHALMAC_ADAPTER pHalmac_adapter
141 )
142 {
143         return HALMAC_RET_SUCCESS;
144 }