Lines Matching refs:rtwdev

13 static int rtw_ips_pwr_up(struct rtw_dev *rtwdev)  in rtw_ips_pwr_up()  argument
17 ret = rtw_core_start(rtwdev); in rtw_ips_pwr_up()
19 rtw_err(rtwdev, "leave idle state failed\n"); in rtw_ips_pwr_up()
21 rtw_set_channel(rtwdev); in rtw_ips_pwr_up()
22 clear_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags); in rtw_ips_pwr_up()
27 int rtw_enter_ips(struct rtw_dev *rtwdev) in rtw_enter_ips() argument
29 set_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags); in rtw_enter_ips()
31 rtw_coex_ips_notify(rtwdev, COEX_IPS_ENTER); in rtw_enter_ips()
33 rtw_core_stop(rtwdev); in rtw_enter_ips()
34 rtw_hci_link_ps(rtwdev, true); in rtw_enter_ips()
42 struct rtw_dev *rtwdev = data; in rtw_restore_port_cfg_iter() local
46 rtw_vif_port_config(rtwdev, rtwvif, config); in rtw_restore_port_cfg_iter()
49 int rtw_leave_ips(struct rtw_dev *rtwdev) in rtw_leave_ips() argument
53 rtw_hci_link_ps(rtwdev, false); in rtw_leave_ips()
55 ret = rtw_ips_pwr_up(rtwdev); in rtw_leave_ips()
57 rtw_err(rtwdev, "failed to leave ips state\n"); in rtw_leave_ips()
61 rtw_iterate_vifs_atomic(rtwdev, rtw_restore_port_cfg_iter, rtwdev); in rtw_leave_ips()
63 rtw_coex_ips_notify(rtwdev, COEX_IPS_LEAVE); in rtw_leave_ips()
68 void rtw_power_mode_change(struct rtw_dev *rtwdev, bool enter) in rtw_power_mode_change() argument
75 request = rtw_read8(rtwdev, rtwdev->hci.rpwm_addr); in rtw_power_mode_change()
76 confirm = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr); in rtw_power_mode_change()
88 rtw_write8(rtwdev, rtwdev->hci.rpwm_addr, request); in rtw_power_mode_change()
95 polling = rtw_read8(rtwdev, rtwdev->hci.cpwm_addr); in rtw_power_mode_change()
102 rtw_warn(rtwdev, "failed to leave deep PS, retry=%d\n", in rtw_power_mode_change()
116 static void __rtw_leave_lps_deep(struct rtw_dev *rtwdev) in __rtw_leave_lps_deep() argument
118 rtw_hci_deep_ps(rtwdev, false); in __rtw_leave_lps_deep()
121 static void rtw_fw_leave_lps_state_check(struct rtw_dev *rtwdev) in rtw_fw_leave_lps_state_check() argument
138 if (rtw_read32_mask(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN) == 0) in rtw_fw_leave_lps_state_check()
143 rtw_write32_mask(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN, 0); in rtw_fw_leave_lps_state_check()
144 rtw_warn(rtwdev, "firmware failed to restore hardware setting\n"); in rtw_fw_leave_lps_state_check()
147 static void rtw_leave_lps_core(struct rtw_dev *rtwdev) in rtw_leave_lps_core() argument
149 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in rtw_leave_lps_core()
156 rtw_hci_link_ps(rtwdev, false); in rtw_leave_lps_core()
157 rtw_fw_set_pwr_mode(rtwdev); in rtw_leave_lps_core()
158 rtw_fw_leave_lps_state_check(rtwdev); in rtw_leave_lps_core()
160 clear_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags); in rtw_leave_lps_core()
162 rtw_coex_lps_notify(rtwdev, COEX_LPS_DISABLE); in rtw_leave_lps_core()
165 static void __rtw_enter_lps_deep(struct rtw_dev *rtwdev) in __rtw_enter_lps_deep() argument
167 if (rtwdev->lps_conf.deep_mode == LPS_DEEP_MODE_NONE) in __rtw_enter_lps_deep()
170 if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) { in __rtw_enter_lps_deep()
171 rtw_dbg(rtwdev, RTW_DBG_PS, in __rtw_enter_lps_deep()
177 rtw_fw_set_pg_info(rtwdev); in __rtw_enter_lps_deep()
179 rtw_hci_deep_ps(rtwdev, true); in __rtw_enter_lps_deep()
182 static void rtw_enter_lps_core(struct rtw_dev *rtwdev) in rtw_enter_lps_core() argument
184 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in rtw_enter_lps_core()
191 rtw_coex_lps_notify(rtwdev, COEX_LPS_ENABLE); in rtw_enter_lps_core()
193 rtw_fw_set_pwr_mode(rtwdev); in rtw_enter_lps_core()
194 rtw_hci_link_ps(rtwdev, true); in rtw_enter_lps_core()
196 set_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags); in rtw_enter_lps_core()
199 static void __rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id) in __rtw_enter_lps() argument
201 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in __rtw_enter_lps()
203 if (test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) in __rtw_enter_lps()
209 rtw_enter_lps_core(rtwdev); in __rtw_enter_lps()
212 static void __rtw_leave_lps(struct rtw_dev *rtwdev) in __rtw_leave_lps() argument
214 struct rtw_lps_conf *conf = &rtwdev->lps_conf; in __rtw_leave_lps()
216 if (test_and_clear_bit(RTW_FLAG_LEISURE_PS_DEEP, rtwdev->flags)) { in __rtw_leave_lps()
217 rtw_dbg(rtwdev, RTW_DBG_PS, in __rtw_leave_lps()
219 __rtw_leave_lps_deep(rtwdev); in __rtw_leave_lps()
222 if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags)) in __rtw_leave_lps()
227 rtw_leave_lps_core(rtwdev); in __rtw_leave_lps()
230 void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id) in rtw_enter_lps() argument
232 lockdep_assert_held(&rtwdev->mutex); in rtw_enter_lps()
234 if (rtwdev->coex.stat.wl_force_lps_ctrl) in rtw_enter_lps()
237 __rtw_enter_lps(rtwdev, port_id); in rtw_enter_lps()
238 __rtw_enter_lps_deep(rtwdev); in rtw_enter_lps()
241 void rtw_leave_lps(struct rtw_dev *rtwdev) in rtw_leave_lps() argument
243 lockdep_assert_held(&rtwdev->mutex); in rtw_leave_lps()
245 __rtw_leave_lps_deep(rtwdev); in rtw_leave_lps()
246 __rtw_leave_lps(rtwdev); in rtw_leave_lps()
249 void rtw_leave_lps_deep(struct rtw_dev *rtwdev) in rtw_leave_lps_deep() argument
251 lockdep_assert_held(&rtwdev->mutex); in rtw_leave_lps_deep()
253 __rtw_leave_lps_deep(rtwdev); in rtw_leave_lps_deep()