OSDN Git Service

a5b3640c65e96a5caedbe118810341550ca30f73
[android-x86/external-kernel-drivers.git] / rtl8821ce / hal / halmac / halmac_88xx / halmac_8821c / halmac_api_8821c_usb.c
1 #include "../halmac_88xx_cfg.h"
2 #include "halmac_8821c_cfg.h"
3
4 /**
5  * halmac_mac_power_switch_8821c_usb() - switch mac power
6  * @pHalmac_adapter : the adapter of halmac
7  * @halmac_power : power state
8  * Author : KaiYuan Chang
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_usb(
14         IN PHALMAC_ADAPTER pHalmac_adapter,
15         IN HALMAC_MAC_POWER     halmac_power
16 )
17 {
18         u8 interface_mask;
19         u8 value8;
20         VOID *pDriver_adapter = NULL;
21         PHALMAC_API pHalmac_api;
22
23         if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
24                 return HALMAC_RET_ADAPTER_INVALID;
25
26         if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
27                 return HALMAC_RET_API_INVALID;
28
29         halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_MAC_POWER_SWITCH);
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, "halmac_mac_power_switch_88xx_usb halmac_power = %x ==========>\n", halmac_power);
35
36         interface_mask = HALMAC_PWR_INTF_USB_MSK;
37
38         value8 = HALMAC_REG_READ_8(pHalmac_adapter, REG_CR);
39         if (0xEA == value8) {
40                 pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
41         } else {
42                 if (BIT(0) == (HALMAC_REG_READ_8(pHalmac_adapter, REG_SYS_STATUS1 + 1) & BIT(0)))
43                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
44                 else
45                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
46         }
47
48         /*Check if power switch is needed*/
49         if (halmac_power == HALMAC_MAC_POWER_ON && pHalmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
50                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_WARN, "halmac_mac_power_switch power state unchange!\n");
51                 return HALMAC_RET_PWR_UNCHANGE;
52         } else {
53                 if (HALMAC_MAC_POWER_OFF == halmac_power) {
54                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
55                                     interface_mask, halmac_8821c_card_disable_flow)) {
56                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "Handle power off cmd error\n");
57                                 return HALMAC_RET_POWER_OFF_FAIL;
58                         }
59
60                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
61                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_UNDEFINE;
62                         pHalmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
63                         halmac_init_adapter_dynamic_para_88xx(pHalmac_adapter);
64                 } else {
65                         if (HALMAC_RET_SUCCESS != halmac_pwr_seq_parser_88xx(pHalmac_adapter, HALMAC_PWR_CUT_ALL_MSK, HALMAC_PWR_FAB_TSMC_MSK,
66                                     interface_mask, halmac_8821c_card_enable_flow)) {
67                                 PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_ERR, "Handle power on cmd error\n");
68                                 return HALMAC_RET_POWER_ON_FAIL;
69                         }
70
71                         HALMAC_REG_WRITE_8(pHalmac_adapter, REG_SYS_STATUS1 + 1, HALMAC_REG_READ_8(pHalmac_adapter, REG_SYS_STATUS1 + 1) & ~(BIT(0)));
72
73                         pHalmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
74                         pHalmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
75                 }
76         }
77
78         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_mac_power_switch_88xx_usb <==========\n");
79
80         return HALMAC_RET_SUCCESS;
81 }
82
83 /**
84  * halmac_phy_cfg_8821c_usb() - phy config
85  * @pHalmac_adapter : the adapter of halmac
86  * Author : KaiYuan Chang
87  * Return : HALMAC_RET_STATUS
88  * More details of status code can be found in prototype document
89  */
90 HALMAC_RET_STATUS
91 halmac_phy_cfg_8821c_usb(
92         IN PHALMAC_ADAPTER pHalmac_adapter,
93         IN HALMAC_INTF_PHY_PLATFORM platform
94 )
95 {
96         VOID *pDriver_adapter = NULL;
97         HALMAC_RET_STATUS status = HALMAC_RET_SUCCESS;
98         PHALMAC_API pHalmac_api;
99
100         if (HALMAC_RET_SUCCESS != halmac_adapter_validate(pHalmac_adapter))
101                 return HALMAC_RET_ADAPTER_INVALID;
102
103         if (HALMAC_RET_SUCCESS != halmac_api_validate(pHalmac_adapter))
104                 return HALMAC_RET_API_INVALID;
105
106         halmac_api_record_id_88xx(pHalmac_adapter, HALMAC_API_PHY_CFG);
107
108         pDriver_adapter = pHalmac_adapter->pDriver_adapter;
109         pHalmac_api = (PHALMAC_API)pHalmac_adapter->pHalmac_api;
110
111         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg ==========>\n");
112
113         status = halmac_parse_intf_phy_88xx(pHalmac_adapter, HALMAC_RTL8821C_USB2_PHY, platform, HAL_INTF_PHY_USB2);
114
115         if (HALMAC_RET_SUCCESS != status)
116                 return status;
117
118         status = halmac_parse_intf_phy_88xx(pHalmac_adapter, HALMAC_RTL8821C_USB3_PHY, platform, HAL_INTF_PHY_USB3);
119
120         if (HALMAC_RET_SUCCESS != status)
121                 return status;
122
123         PLATFORM_MSG_PRINT(pDriver_adapter, HALMAC_MSG_PWR, HALMAC_DBG_TRACE, "halmac_phy_cfg <==========\n");
124
125         return HALMAC_RET_SUCCESS;
126 }
127
128 /**
129  * halmac_interface_integration_tuning_8821c_usb() - usb interface fine tuning
130  * @pHalmac_adapter : the adapter of halmac
131  * Author : Ivan
132  * Return : HALMAC_RET_STATUS
133  * More details of status code can be found in prototype document
134  */
135 HALMAC_RET_STATUS
136 halmac_interface_integration_tuning_8821c_usb(
137         IN PHALMAC_ADAPTER pHalmac_adapter
138 )
139 {
140         return HALMAC_RET_SUCCESS;
141 }