Loading Documentation/devicetree/bindings/arm/msm/wil6210.txt +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ Optional properties: - clocks : List of phandle and clock specifier pairs - clock-names : List of clock input name strings sorted in the same order as the clocks property. - qcom,keep_radio_on_during_sleep: Boolean flag to indicate if to suspend to d3hot instead of turning off the device Example: wil6210: qcom,wil6210 { Loading @@ -56,5 +58,6 @@ Example: clocks = <&clock_gcc clk_rf_clk3>, <&clock_gcc clk_rf_clk3_pin>; clock-names = "rf_clk3_clk", "rf_clk3_pin_clk"; qcom,keep_radio_on_during_sleep; }; drivers/net/wireless/ath/wil6210/cfg80211.c +38 −0 Original line number Diff line number Diff line Loading @@ -1666,6 +1666,42 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy, return wil_ps_update(wil, ps_profile); } static int wil_cfg80211_suspend(struct wiphy *wiphy, struct cfg80211_wowlan *wow) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); int rc; /* Setting the wakeup trigger based on wow is TBD */ if (test_bit(wil_status_suspended, wil->status)) { wil_dbg_pm(wil, "trying to suspend while suspended\n"); return 0; } rc = wil_can_suspend(wil, false); if (rc) goto out; wil_dbg_pm(wil, "suspending\n"); wil_p2p_stop_discovery(wil); wil_abort_scan(wil, true); out: return rc; } static int wil_cfg80211_resume(struct wiphy *wiphy) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); wil_dbg_pm(wil, "resuming\n"); return 0; } static struct cfg80211_ops wil_cfg80211_ops = { .add_virtual_intf = wil_cfg80211_add_iface, .del_virtual_intf = wil_cfg80211_del_iface, Loading Loading @@ -1697,6 +1733,8 @@ static struct cfg80211_ops wil_cfg80211_ops = { .start_p2p_device = wil_cfg80211_start_p2p_device, .stop_p2p_device = wil_cfg80211_stop_p2p_device, .set_power_mgmt = wil_cfg80211_set_power_mgmt, .suspend = wil_cfg80211_suspend, .resume = wil_cfg80211_resume, }; static void wil_wiphy_init(struct wiphy *wiphy) Loading drivers/net/wireless/ath/wil6210/debugfs.c +49 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,10 @@ static ssize_t wil_read_file_ioblob(struct file *file, char __user *user_buf, void *buf; size_t ret; if (test_bit(wil_status_suspending, wil_blob->wil->status) || test_bit(wil_status_suspended, wil_blob->wil->status)) return 0; if (pos < 0) return -EINVAL; Loading Loading @@ -1610,6 +1614,49 @@ static const struct file_operations fops_fw_version = { .llseek = seq_lseek, }; /*---------suspend_stats---------*/ static ssize_t wil_write_suspend_stats(struct file *file, const char __user *buf, size_t len, loff_t *ppos) { struct wil6210_priv *wil = file->private_data; memset(&wil->suspend_stats, 0, sizeof(wil->suspend_stats)); return len; } static ssize_t wil_read_suspend_stats(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { struct wil6210_priv *wil = file->private_data; static char text[400]; int n; n = snprintf(text, sizeof(text), "Suspend statistics:\n" "successful suspends:%ld failed suspends:%ld\n" "successful resumes:%ld failed resumes:%ld\n" "rejected by host:%ld rejected by device:%ld\n", wil->suspend_stats.successful_suspends, wil->suspend_stats.failed_suspends, wil->suspend_stats.successful_resumes, wil->suspend_stats.failed_resumes, wil->suspend_stats.rejected_by_host, wil->suspend_stats.rejected_by_device); n = min_t(int, n, sizeof(text)); return simple_read_from_buffer(user_buf, count, ppos, text, n); } static const struct file_operations fops_suspend_stats = { .read = wil_read_suspend_stats, .write = wil_write_suspend_stats, .open = simple_open, }; /*----------------*/ static void wil6210_debugfs_init_blobs(struct wil6210_priv *wil, struct dentry *dbg) Loading Loading @@ -1662,6 +1709,7 @@ static const struct { {"led_blink_time", 0644, &fops_led_blink_time}, {"fw_capabilities", 0444, &fops_fw_capabilities}, {"fw_version", 0444, &fops_fw_version}, {"suspend_stats", 0644, &fops_suspend_stats}, }; static void wil6210_debugfs_init_files(struct wil6210_priv *wil, Loading Loading @@ -1708,6 +1756,7 @@ static const struct dbg_off dbg_wil_off[] = { WIL_FIELD(discovery_mode, 0644, doff_u8), WIL_FIELD(chip_revision, 0444, doff_u8), WIL_FIELD(abft_len, 0644, doff_u8), WIL_FIELD(wakeup_trigger, 0644, doff_u8), {}, }; Loading drivers/net/wireless/ath/wil6210/interrupt.c +6 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,12 @@ static irqreturn_t wil6210_thread_irq(int irq, void *cookie) wil6210_unmask_irq_pseudo(wil); if (wil->suspend_resp_rcvd) { wil_dbg_irq(wil, "set suspend_resp_comp to true\n"); wil->suspend_resp_comp = true; wake_up_interruptible(&wil->wq); } return IRQ_HANDLED; } Loading drivers/net/wireless/ath/wil6210/main.c +6 −1 Original line number Diff line number Diff line Loading @@ -579,6 +579,9 @@ int wil_priv_init(struct wil6210_priv *wil) wil->ps_profile = WMI_PS_PROFILE_TYPE_DEFAULT; wil->wakeup_trigger = WMI_WAKEUP_TRIGGER_UCAST | WMI_WAKEUP_TRIGGER_BCAST; return 0; out_wmi_wq: Loading @@ -589,9 +592,11 @@ out_wmi_wq: void wil6210_bus_request(struct wil6210_priv *wil, u32 kbps) { if (wil->platform_ops.bus_request) if (wil->platform_ops.bus_request) { wil->bus_request_kbps = kbps; wil->platform_ops.bus_request(wil->platform_handle, kbps); } } /** * wil6210_disconnect - disconnect one connection Loading Loading
Documentation/devicetree/bindings/arm/msm/wil6210.txt +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ Optional properties: - clocks : List of phandle and clock specifier pairs - clock-names : List of clock input name strings sorted in the same order as the clocks property. - qcom,keep_radio_on_during_sleep: Boolean flag to indicate if to suspend to d3hot instead of turning off the device Example: wil6210: qcom,wil6210 { Loading @@ -56,5 +58,6 @@ Example: clocks = <&clock_gcc clk_rf_clk3>, <&clock_gcc clk_rf_clk3_pin>; clock-names = "rf_clk3_clk", "rf_clk3_pin_clk"; qcom,keep_radio_on_during_sleep; };
drivers/net/wireless/ath/wil6210/cfg80211.c +38 −0 Original line number Diff line number Diff line Loading @@ -1666,6 +1666,42 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy, return wil_ps_update(wil, ps_profile); } static int wil_cfg80211_suspend(struct wiphy *wiphy, struct cfg80211_wowlan *wow) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); int rc; /* Setting the wakeup trigger based on wow is TBD */ if (test_bit(wil_status_suspended, wil->status)) { wil_dbg_pm(wil, "trying to suspend while suspended\n"); return 0; } rc = wil_can_suspend(wil, false); if (rc) goto out; wil_dbg_pm(wil, "suspending\n"); wil_p2p_stop_discovery(wil); wil_abort_scan(wil, true); out: return rc; } static int wil_cfg80211_resume(struct wiphy *wiphy) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); wil_dbg_pm(wil, "resuming\n"); return 0; } static struct cfg80211_ops wil_cfg80211_ops = { .add_virtual_intf = wil_cfg80211_add_iface, .del_virtual_intf = wil_cfg80211_del_iface, Loading Loading @@ -1697,6 +1733,8 @@ static struct cfg80211_ops wil_cfg80211_ops = { .start_p2p_device = wil_cfg80211_start_p2p_device, .stop_p2p_device = wil_cfg80211_stop_p2p_device, .set_power_mgmt = wil_cfg80211_set_power_mgmt, .suspend = wil_cfg80211_suspend, .resume = wil_cfg80211_resume, }; static void wil_wiphy_init(struct wiphy *wiphy) Loading
drivers/net/wireless/ath/wil6210/debugfs.c +49 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,10 @@ static ssize_t wil_read_file_ioblob(struct file *file, char __user *user_buf, void *buf; size_t ret; if (test_bit(wil_status_suspending, wil_blob->wil->status) || test_bit(wil_status_suspended, wil_blob->wil->status)) return 0; if (pos < 0) return -EINVAL; Loading Loading @@ -1610,6 +1614,49 @@ static const struct file_operations fops_fw_version = { .llseek = seq_lseek, }; /*---------suspend_stats---------*/ static ssize_t wil_write_suspend_stats(struct file *file, const char __user *buf, size_t len, loff_t *ppos) { struct wil6210_priv *wil = file->private_data; memset(&wil->suspend_stats, 0, sizeof(wil->suspend_stats)); return len; } static ssize_t wil_read_suspend_stats(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { struct wil6210_priv *wil = file->private_data; static char text[400]; int n; n = snprintf(text, sizeof(text), "Suspend statistics:\n" "successful suspends:%ld failed suspends:%ld\n" "successful resumes:%ld failed resumes:%ld\n" "rejected by host:%ld rejected by device:%ld\n", wil->suspend_stats.successful_suspends, wil->suspend_stats.failed_suspends, wil->suspend_stats.successful_resumes, wil->suspend_stats.failed_resumes, wil->suspend_stats.rejected_by_host, wil->suspend_stats.rejected_by_device); n = min_t(int, n, sizeof(text)); return simple_read_from_buffer(user_buf, count, ppos, text, n); } static const struct file_operations fops_suspend_stats = { .read = wil_read_suspend_stats, .write = wil_write_suspend_stats, .open = simple_open, }; /*----------------*/ static void wil6210_debugfs_init_blobs(struct wil6210_priv *wil, struct dentry *dbg) Loading Loading @@ -1662,6 +1709,7 @@ static const struct { {"led_blink_time", 0644, &fops_led_blink_time}, {"fw_capabilities", 0444, &fops_fw_capabilities}, {"fw_version", 0444, &fops_fw_version}, {"suspend_stats", 0644, &fops_suspend_stats}, }; static void wil6210_debugfs_init_files(struct wil6210_priv *wil, Loading Loading @@ -1708,6 +1756,7 @@ static const struct dbg_off dbg_wil_off[] = { WIL_FIELD(discovery_mode, 0644, doff_u8), WIL_FIELD(chip_revision, 0444, doff_u8), WIL_FIELD(abft_len, 0644, doff_u8), WIL_FIELD(wakeup_trigger, 0644, doff_u8), {}, }; Loading
drivers/net/wireless/ath/wil6210/interrupt.c +6 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,12 @@ static irqreturn_t wil6210_thread_irq(int irq, void *cookie) wil6210_unmask_irq_pseudo(wil); if (wil->suspend_resp_rcvd) { wil_dbg_irq(wil, "set suspend_resp_comp to true\n"); wil->suspend_resp_comp = true; wake_up_interruptible(&wil->wq); } return IRQ_HANDLED; } Loading
drivers/net/wireless/ath/wil6210/main.c +6 −1 Original line number Diff line number Diff line Loading @@ -579,6 +579,9 @@ int wil_priv_init(struct wil6210_priv *wil) wil->ps_profile = WMI_PS_PROFILE_TYPE_DEFAULT; wil->wakeup_trigger = WMI_WAKEUP_TRIGGER_UCAST | WMI_WAKEUP_TRIGGER_BCAST; return 0; out_wmi_wq: Loading @@ -589,9 +592,11 @@ out_wmi_wq: void wil6210_bus_request(struct wil6210_priv *wil, u32 kbps) { if (wil->platform_ops.bus_request) if (wil->platform_ops.bus_request) { wil->bus_request_kbps = kbps; wil->platform_ops.bus_request(wil->platform_handle, kbps); } } /** * wil6210_disconnect - disconnect one connection Loading