1 /* #include "../halmac_88xx_cfg.h" */
2 #include "halmac_8821c_cfg.h"
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
13 halmac_mac_power_switch_8821c_sdio(
14 IN PHALMAC_ADAPTER pHalmac_adapter,
15 IN HALMAC_MAC_POWER halmac_power
22 VOID *pDriver_adapter = NULL;
23 PHALMAC_API pHalmac_api;
25 if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
26 return HALMAC_RET_ADAPTER_INVALID;
28 if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
29 return HALMAC_RET_API_INVALID;
31 pDriver_adapter = pHalmac_adapter->pDriver_adapter;
32 pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
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);
38 interface_mask = HALMAC_PWR_INTF_SDIO_MSK;
40 pHalmac_adapter->rpwm_record = HALMAC_REG_READ_8(pHalmac_adapter, REG_SDIO_HRPWM1);
42 /* Check FW still exist or not */
43 if (0xC078 == HALMAC_REG_READ_16(pHalmac_adapter, REG_MCUFW_CTRL)) {
45 rpwm = (u8)((pHalmac_adapter->rpwm_record ^ BIT(7)) & 0x80);
46 HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SDIO_HRPWM1, rpwm);
49 value8 = HALMAC_REG_READ_8(pHalmac_adapter, REG_CR);
51 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
53 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
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;
60 imr_backup = HALMAC_REG_READ_32(pHalmac_adapter, REG_SDIO_HIMR);
61 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, 0);
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;
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);
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;
83 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
84 pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
87 HALMAC_REG_WRITE_32(pHalmac_adapter, REG_SDIO_HIMR, imr_backup);
90 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "[TRACE]halmac_mac_power_switch_88xx_sdio <==========\n");
92 return HALMAC_RET_SUCCESS;
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
103 halmac_phy_cfg_8821c_sdio(
104 IN PHALMAC_ADAPTER pHalmac_adapter,
105 IN HALMAC_INTF_PHY_PLATFORM platform
108 VOID *pDriver_adapter = NULL;
109 PHALMAC_API pHalmac_api;
111 if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
112 return HALMAC_RET_ADAPTER_INVALID;
114 if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
115 return HALMAC_RET_API_INVALID;
117 halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_PHY_CFG);
119 pDriver_adapter = pHalmac_adapter->pDriver_adapter;
120 pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
122 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg ==========>\n");
124 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "sdio no phy\n");
126 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg <==========\n");
128 return HALMAC_RET_SUCCESS;
132 * halmac_interface_integration_tuning_8821c_sdio() - sdio interface fine tuning
133 * @pHalmac_adapter : the adapter of halmac
135 * Return : HALMAC_RET_STATUS
136 * More details of status code can be found in prototype document
139 halmac_interface_integration_tuning_8821c_sdio(
140 IN PHALMAC_ADAPTER pHalmac_adapter
143 return HALMAC_RET_SUCCESS;