1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
3  *
4  * Copyright(c) 2016  Realtek Corporation.
5  *
6  * Contact Information:
7  * wlanfae <wlanfae@realtek.com>
8  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
9  * Hsinchu 300, Taiwan.
10  *
11  * Larry Finger <Larry.Finger@lwfinger.net>
12  *
13  *****************************************************************************/
14 #include "../halmac_88xx_cfg.h"
15 #include "halmac_8822b_cfg.h"
16 
17 /**
18  * halmac_mac_power_switch_8822b_usb() - switch mac power
19  * @halmac_adapter : the adapter of halmac
20  * @halmac_power : power state
21  * Author : KaiYuan Chang
22  * Return : enum halmac_ret_status
23  * More details of status code can be found in prototype document
24  */
25 enum halmac_ret_status
halmac_mac_power_switch_8822b_usb(struct halmac_adapter * halmac_adapter,enum halmac_mac_power halmac_power)26 halmac_mac_power_switch_8822b_usb(struct halmac_adapter *halmac_adapter,
27 				  enum halmac_mac_power halmac_power)
28 {
29 	u8 interface_mask;
30 	u8 value8;
31 	void *driver_adapter = NULL;
32 	struct halmac_api *halmac_api;
33 
34 	if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
35 		return HALMAC_RET_ADAPTER_INVALID;
36 
37 	if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
38 		return HALMAC_RET_API_INVALID;
39 
40 	halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_MAC_POWER_SWITCH);
41 
42 	driver_adapter = halmac_adapter->driver_adapter;
43 	halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
44 
45 	HALMAC_RT_TRACE(
46 		driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
47 		"halmac_mac_power_switch_88xx_usb halmac_power = %x ==========>\n",
48 		halmac_power);
49 
50 	interface_mask = HALMAC_PWR_INTF_USB_MSK;
51 
52 	value8 = HALMAC_REG_READ_8(halmac_adapter, REG_CR);
53 	if (value8 == 0xEA) {
54 		halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
55 	} else {
56 		if (BIT(0) ==
57 		    (HALMAC_REG_READ_8(halmac_adapter, REG_SYS_STATUS1 + 1) &
58 		     BIT(0)))
59 			halmac_adapter->halmac_state.mac_power =
60 				HALMAC_MAC_POWER_OFF;
61 		else
62 			halmac_adapter->halmac_state.mac_power =
63 				HALMAC_MAC_POWER_ON;
64 	}
65 
66 	/*Check if power switch is needed*/
67 	if (halmac_power == HALMAC_MAC_POWER_ON &&
68 	    halmac_adapter->halmac_state.mac_power == HALMAC_MAC_POWER_ON) {
69 		HALMAC_RT_TRACE(
70 			driver_adapter, HALMAC_MSG_PWR, DBG_WARNING,
71 			"halmac_mac_power_switch power state unchange!\n");
72 		return HALMAC_RET_PWR_UNCHANGE;
73 	}
74 	if (halmac_power == HALMAC_MAC_POWER_OFF) {
75 		if (halmac_pwr_seq_parser_88xx(
76 			    halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
77 			    HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
78 			    halmac_8822b_card_disable_flow) !=
79 		    HALMAC_RET_SUCCESS) {
80 			pr_err("Handle power off cmd error\n");
81 			return HALMAC_RET_POWER_OFF_FAIL;
82 		}
83 
84 		halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_OFF;
85 		halmac_adapter->halmac_state.ps_state =
86 			HALMAC_PS_STATE_UNDEFINE;
87 		halmac_adapter->halmac_state.dlfw_state = HALMAC_DLFW_NONE;
88 		halmac_init_adapter_dynamic_para_88xx(halmac_adapter);
89 	} else {
90 		if (halmac_pwr_seq_parser_88xx(
91 			    halmac_adapter, HALMAC_PWR_CUT_ALL_MSK,
92 			    HALMAC_PWR_FAB_TSMC_MSK, interface_mask,
93 			    halmac_8822b_card_enable_flow) !=
94 		    HALMAC_RET_SUCCESS) {
95 			pr_err("Handle power on cmd error\n");
96 			return HALMAC_RET_POWER_ON_FAIL;
97 		}
98 
99 		HALMAC_REG_WRITE_8(
100 			halmac_adapter, REG_SYS_STATUS1 + 1,
101 			HALMAC_REG_READ_8(halmac_adapter, REG_SYS_STATUS1 + 1) &
102 				~(BIT(0)));
103 
104 		halmac_adapter->halmac_state.mac_power = HALMAC_MAC_POWER_ON;
105 		halmac_adapter->halmac_state.ps_state = HALMAC_PS_STATE_ACT;
106 	}
107 
108 	HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
109 			"halmac_mac_power_switch_88xx_usb <==========\n");
110 
111 	return HALMAC_RET_SUCCESS;
112 }
113 
114 /**
115  * halmac_phy_cfg_8822b_usb() - phy config
116  * @halmac_adapter : the adapter of halmac
117  * Author : KaiYuan Chang
118  * Return : enum halmac_ret_status
119  * More details of status code can be found in prototype document
120  */
121 enum halmac_ret_status
halmac_phy_cfg_8822b_usb(struct halmac_adapter * halmac_adapter,enum halmac_intf_phy_platform platform)122 halmac_phy_cfg_8822b_usb(struct halmac_adapter *halmac_adapter,
123 			 enum halmac_intf_phy_platform platform)
124 {
125 	void *driver_adapter = NULL;
126 	enum halmac_ret_status status = HALMAC_RET_SUCCESS;
127 	struct halmac_api *halmac_api;
128 
129 	if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
130 		return HALMAC_RET_ADAPTER_INVALID;
131 
132 	if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
133 		return HALMAC_RET_API_INVALID;
134 
135 	halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_PHY_CFG);
136 
137 	driver_adapter = halmac_adapter->driver_adapter;
138 	halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
139 
140 	HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
141 			"halmac_phy_cfg ==========>\n");
142 
143 	status = halmac_parse_intf_phy_88xx(halmac_adapter,
144 					    HALMAC_RTL8822B_USB2_PHY, platform,
145 					    HAL_INTF_PHY_USB2);
146 
147 	if (status != HALMAC_RET_SUCCESS)
148 		return status;
149 
150 	status = halmac_parse_intf_phy_88xx(halmac_adapter,
151 					    HALMAC_RTL8822B_USB3_PHY, platform,
152 					    HAL_INTF_PHY_USB3);
153 
154 	if (status != HALMAC_RET_SUCCESS)
155 		return status;
156 
157 	HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_PWR, DBG_DMESG,
158 			"halmac_phy_cfg <==========\n");
159 
160 	return HALMAC_RET_SUCCESS;
161 }
162 
163 /**
164  * halmac_interface_integration_tuning_8822b_usb() - usb interface fine tuning
165  * @halmac_adapter : the adapter of halmac
166  * Author : Ivan
167  * Return : enum halmac_ret_status
168  * More details of status code can be found in prototype document
169  */
halmac_interface_integration_tuning_8822b_usb(struct halmac_adapter * halmac_adapter)170 enum halmac_ret_status halmac_interface_integration_tuning_8822b_usb(
171 	struct halmac_adapter *halmac_adapter)
172 {
173 	return HALMAC_RET_SUCCESS;
174 }
175