Lines Matching refs:rtwdev

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