1
2
3
4
5
6
7
8
9
10
11
12
13
14#include "halmac_8822b_cfg.h"
15
16
17
18
19
20
21
22
23
24enum halmac_ret_status
25halmac_mac_power_switch_8822b_sdio(struct halmac_adapter *halmac_adapter,
26 enum halmac_mac_power halmac_power)
27{
28 u8 interface_mask;
29 u8 value8;
30 u8 rpwm;
31 u32 imr_backup;
32 void *driver_adapter = NULL;
33 struct halmac_api *halmac_api;
34
35 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
36 return HALMAC_RET_ADAPTER_INVALID;
37
38 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
39 return HALMAC_RET_API_INVALID;
40
41 driver_adapter = halmac_adapter->driver_adapter;
42 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
43
44 HALMAC_RT_TRACE(
45 driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
46 "[TRACE]halmac_mac_power_switch_88xx_sdio==========>\n");
47 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
48 "[TRACE]halmac_power = %x ==========>\n", halmac_power);
49 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
50 "[TRACE]8822B pwr seq ver = %s\n",
51 HALMAC_8822B_PWR_SEQ_VER);
52
53 interface_mask = HALMAC_PWR_INTF_SDIO_MSK;
54
55 halmac_adapter->rpwm_record =
56 HALMAC_REG_READ_8(halmac_adapter, REG_SDIO_HRPWM1);
57
58
59 if (HALMAC_REG_READ_16(halmac_adapter, REG_MCUFW_CTRL) == 0xC078) {
60
61 rpwm = (u8)((halmac_adapter->rpwm_record ^ BIT(7)) & 0x80);
62 HALMAC_REG_WRITE_8(halmac_adapter, REG_SDIO_HRPWM1, rpwm);
63 }
64
65 value8 = HALMAC_REG_READ_8(halmac_adapter, REG_CR);
66 if (value8 == 0xEA)
67 halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
68 else
69 halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
70
71
72 if (halmac_power == HALMAC_MAC_POWER_ON &&
73 halmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
74 HALMAC_RT_TRACE(
75 driver_adapter, HALMAC_MSG_PWR, DBG_WARNING,
76 "[WARN]halmac_mac_power_switch power state unchange!\n");
77 return HALMAC_RET_PWR_UNCHANGE;
78 }
79
80 imr_backup = HALMAC_REG_READ_32(halmac_adapter, REG_SDIO_HIMR);
81 HALMAC_REG_WRITE_32(halmac_adapter, REG_SDIO_HIMR, 0);
82
83 if (halmac_power == HALMAC_MAC_POWER_OFF) {
84 if (halmac_pwr_seq_parser_88xx(
85 halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
86 HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
87 halmac_8822b_card_disable_flow) !=
88 HALMAC_RET_SUCCESS) {
89 pr_err("[ERR]Handle power off cmd error\n");
90 HALMAC_REG_WRITE_32(halmac_adapter, REG_SDIO_HIMR,
91 imr_backup);
92 return HALMAC_RET_POWER_OFF_FAIL;
93 }
94
95 halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
96 halmac_adapter->halmac_state.ps_state =
97 HALMAC_PS_STATE_UNDEFINE;
98 halmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
99 halmac_init_adapter_dynamic_para_88xx(halmac_adapter);
100 } else {
101 if (halmac_pwr_seq_parser_88xx(
102 halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
103 HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
104 halmac_8822b_card_enable_flow) !=
105 HALMAC_RET_SUCCESS) {
106 pr_err("[ERR]Handle power on cmd error\n");
107 HALMAC_REG_WRITE_32(halmac_adapter, REG_SDIO_HIMR,
108 imr_backup);
109 return HALMAC_RET_POWER_ON_FAIL;
110 }
111
112 halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
113 halmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
114 }
115
116 HALMAC_REG_WRITE_32(halmac_adapter, REG_SDIO_HIMR, imr_backup);
117
118 HALMAC_RT_TRACE(
119 driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
120 "[TRACE]halmac_mac_power_switch_88xx_sdio <==========\n");
121
122 return HALMAC_RET_SUCCESS;
123}
124
125
126
127
128
129
130
131
132enum halmac_ret_status
133halmac_phy_cfg_8822b_sdio(struct halmac_adapter *halmac_adapter,
134 enum halmac_intf_phy_platform platform)
135{
136 void *driver_adapter = NULL;
137 struct halmac_api *halmac_api;
138
139 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
140 return HALMAC_RET_ADAPTER_INVALID;
141
142 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
143 return HALMAC_RET_API_INVALID;
144
145 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_PHY_CFG);
146
147 driver_adapter = halmac_adapter->driver_adapter;
148 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
149
150 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
151 "halmac_phy_cfg ==========>\n");
152
153 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
154 "sdio no phy\n");
155
156 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
157 "halmac_phy_cfg <==========\n");
158
159 return HALMAC_RET_SUCCESS;
160}
161
162
163
164
165
166
167
168
169enum halmac_ret_status halmac_interface_integration_tuning_8822b_sdio(
170 struct halmac_adapter *halmac_adapter)
171{
172 return HALMAC_RET_SUCCESS;
173}
174