Refactor timer management functions to use rwnx_timer_delete and rwnx_timer_delete_sync for better compatibility with kernel version 6.17.0 and above. This change ensures consistent timer handling across various components in the AIC8800 driver.
This commit is contained in:
parent
772a90e391
commit
2f1b1cd315
6 changed files with 113 additions and 21 deletions
|
|
@ -527,7 +527,7 @@ static void aicwf_sdio_bus_stop(struct device *dev)
|
||||||
|
|
||||||
aicwf_sdio_pwrctl_timer(sdiodev, 0);
|
aicwf_sdio_pwrctl_timer(sdiodev, 0);
|
||||||
if(timer_pending(&sdiodev->rwnx_hw->p2p_alive_timer)){
|
if(timer_pending(&sdiodev->rwnx_hw->p2p_alive_timer)){
|
||||||
ret = del_timer(&sdiodev->rwnx_hw->p2p_alive_timer);}
|
ret = rwnx_timer_delete(&sdiodev->rwnx_hw->p2p_alive_timer);}
|
||||||
sdio_dbg("%s\n",__func__);
|
sdio_dbg("%s\n",__func__);
|
||||||
if (sdiodev->pwrctl_tsk) {
|
if (sdiodev->pwrctl_tsk) {
|
||||||
complete(&sdiodev->pwrctrl_trgg);
|
complete(&sdiodev->pwrctrl_trgg);
|
||||||
|
|
@ -1080,7 +1080,7 @@ void aicwf_sdio_pwrctl_timer(struct aic_sdio_dev *sdiodev, uint duration)
|
||||||
spin_lock_bh(&sdiodev->pwrctl_lock);
|
spin_lock_bh(&sdiodev->pwrctl_lock);
|
||||||
if (!duration) {
|
if (!duration) {
|
||||||
if (timer_pending(&sdiodev->timer))
|
if (timer_pending(&sdiodev->timer))
|
||||||
del_timer_sync(&sdiodev->timer);
|
rwnx_timer_delete_sync(&sdiodev->timer);
|
||||||
} else {
|
} else {
|
||||||
sdiodev->active_duration = duration;
|
sdiodev->active_duration = duration;
|
||||||
timeout = msecs_to_jiffies(sdiodev->active_duration);
|
timeout = msecs_to_jiffies(sdiodev->active_duration);
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ void tcp_ack_deinit(struct rwnx_hw *priv)
|
||||||
drop_msg = NULL;
|
drop_msg = NULL;
|
||||||
|
|
||||||
write_seqlock_bh(&ack_m->ack_info[i].seqlock);
|
write_seqlock_bh(&ack_m->ack_info[i].seqlock);
|
||||||
del_timer(&ack_m->ack_info[i].timer);
|
rwnx_timer_delete(&ack_m->ack_info[i].timer);
|
||||||
drop_msg = ack_m->ack_info[i].msgbuf;
|
drop_msg = ack_m->ack_info[i].msgbuf;
|
||||||
ack_m->ack_info[i].msgbuf = NULL;
|
ack_m->ack_info[i].msgbuf = NULL;
|
||||||
write_sequnlock_bh(&ack_m->ack_info[i].seqlock);
|
write_sequnlock_bh(&ack_m->ack_info[i].seqlock);
|
||||||
|
|
@ -375,7 +375,7 @@ int tcp_ack_handle(struct msg_buf *new_msgbuf,
|
||||||
//printk("%lx \n",ack_info->msgbuf);
|
//printk("%lx \n",ack_info->msgbuf);
|
||||||
drop_msg = ack_info->msgbuf;
|
drop_msg = ack_info->msgbuf;
|
||||||
ack_info->msgbuf = NULL;
|
ack_info->msgbuf = NULL;
|
||||||
del_timer(&ack_info->timer);
|
rwnx_timer_delete(&ack_info->timer);
|
||||||
}else{
|
}else{
|
||||||
//printk("msgbuf is NULL \n");
|
//printk("msgbuf is NULL \n");
|
||||||
}
|
}
|
||||||
|
|
@ -409,7 +409,7 @@ int tcp_ack_handle(struct msg_buf *new_msgbuf,
|
||||||
atomic_read(&ack_m->max_drop_cnt)))) {
|
atomic_read(&ack_m->max_drop_cnt)))) {
|
||||||
ack_info->drop_cnt = 0;
|
ack_info->drop_cnt = 0;
|
||||||
ack_info->in_send_msg = new_msgbuf;
|
ack_info->in_send_msg = new_msgbuf;
|
||||||
del_timer(&ack_info->timer);
|
rwnx_timer_delete(&ack_info->timer);
|
||||||
} else {
|
} else {
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ack_info->msgbuf = new_msgbuf;
|
ack_info->msgbuf = new_msgbuf;
|
||||||
|
|
@ -472,7 +472,7 @@ int tcp_ack_handle_new(struct msg_buf *new_msgbuf,
|
||||||
ack_info->drop_cnt = 0;
|
ack_info->drop_cnt = 0;
|
||||||
//send_msg = new_msgbuf;
|
//send_msg = new_msgbuf;
|
||||||
ack_info->in_send_msg = new_msgbuf;
|
ack_info->in_send_msg = new_msgbuf;
|
||||||
del_timer(&ack_info->timer);
|
rwnx_timer_delete(&ack_info->timer);
|
||||||
}else{
|
}else{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ack_info->msgbuf = new_msgbuf;
|
ack_info->msgbuf = new_msgbuf;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dmapool.h>
|
#include <linux/dmapool.h>
|
||||||
|
#include <linux/timer.h>
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
#include <net/cfg80211.h>
|
#include <net/cfg80211.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
@ -50,6 +51,47 @@
|
||||||
#include "aic_br_ext.h"
|
#include "aic_br_ext.h"
|
||||||
#endif /* CONFIG_BR_SUPPORT */
|
#endif /* CONFIG_BR_SUPPORT */
|
||||||
|
|
||||||
|
#ifndef from_timer
|
||||||
|
#define from_timer(var, timer, field) timer_container_of(var, timer, field)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline int rwnx_timer_delete(struct timer_list *timer)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
return timer_delete(timer);
|
||||||
|
#else
|
||||||
|
return del_timer(timer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int rwnx_timer_delete_sync(struct timer_list *timer)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
return timer_delete_sync(timer);
|
||||||
|
#else
|
||||||
|
return del_timer_sync(timer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool rwnx_rx_spurious_frame(struct net_device *dev, const u8 *addr, gfp_t gfp)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
return cfg80211_rx_spurious_frame(dev, addr, -1, gfp);
|
||||||
|
#else
|
||||||
|
return cfg80211_rx_spurious_frame(dev, addr, gfp);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool rwnx_rx_unexpected_4addr_frame(struct net_device *dev, const u8 *addr,
|
||||||
|
gfp_t gfp)
|
||||||
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
return cfg80211_rx_unexpected_4addr_frame(dev, addr, -1, gfp);
|
||||||
|
#else
|
||||||
|
return cfg80211_rx_unexpected_4addr_frame(dev, addr, gfp);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#define WPI_HDR_LEN 18
|
#define WPI_HDR_LEN 18
|
||||||
#define WPI_PN_LEN 16
|
#define WPI_PN_LEN 16
|
||||||
#define WPI_PN_OFST 2
|
#define WPI_PN_OFST 2
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
|
|
||||||
#include <linux/wireless.h>
|
#include <linux/wireless.h>
|
||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
|
|
@ -2434,7 +2435,7 @@ static int rwnx_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wde
|
||||||
#if 0
|
#if 0
|
||||||
if (rwnx_vif == rwnx_hw->p2p_dev_vif) {
|
if (rwnx_vif == rwnx_hw->p2p_dev_vif) {
|
||||||
if (timer_pending(&rwnx_hw->p2p_alive_timer)) {
|
if (timer_pending(&rwnx_hw->p2p_alive_timer)) {
|
||||||
del_timer_sync(&rwnx_hw->p2p_alive_timer);
|
rwnx_timer_delete_sync(&rwnx_hw->p2p_alive_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -2677,7 +2678,7 @@ static void rwnx_cfgp2p_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev
|
||||||
if (rwnx_vif == rwnx_hw->p2p_dev_vif) {
|
if (rwnx_vif == rwnx_hw->p2p_dev_vif) {
|
||||||
rwnx_hw->is_p2p_alive = 0;
|
rwnx_hw->is_p2p_alive = 0;
|
||||||
if (timer_pending(&rwnx_hw->p2p_alive_timer)) {
|
if (timer_pending(&rwnx_hw->p2p_alive_timer)) {
|
||||||
del_timer_sync(&rwnx_hw->p2p_alive_timer);
|
rwnx_timer_delete_sync(&rwnx_hw->p2p_alive_timer);
|
||||||
}
|
}
|
||||||
if (rwnx_vif->up) {
|
if (rwnx_vif->up) {
|
||||||
rwnx_send_remove_if(rwnx_hw, rwnx_vif->vif_index, true);
|
rwnx_send_remove_if(rwnx_hw, rwnx_vif->vif_index, true);
|
||||||
|
|
@ -4084,7 +4085,7 @@ static int rwnx_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
|
||||||
rwnx_vif->ap.start = false;
|
rwnx_vif->ap.start = false;
|
||||||
aicwf_nl_hook_deinit(rwnx_vif->ap.band, rwnx_vif->rwnx_hw->iface_idx);
|
aicwf_nl_hook_deinit(rwnx_vif->ap.band, rwnx_vif->rwnx_hw->iface_idx);
|
||||||
if (timer_pending(&rwnx_vif->steer_timer))
|
if (timer_pending(&rwnx_vif->steer_timer))
|
||||||
del_timer_sync(&rwnx_vif->steer_timer);
|
rwnx_timer_delete_sync(&rwnx_vif->steer_timer);
|
||||||
cancel_work_sync(&rwnx_vif->steer_work);
|
cancel_work_sync(&rwnx_vif->steer_work);
|
||||||
flush_workqueue(rwnx_vif->rsp_wq);
|
flush_workqueue(rwnx_vif->rsp_wq);
|
||||||
destroy_workqueue(rwnx_vif->rsp_wq);
|
destroy_workqueue(rwnx_vif->rsp_wq);
|
||||||
|
|
@ -4312,6 +4313,30 @@ static int rwnx_cfg80211_set_tx_power(struct wiphy *wiphy,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
static int rwnx_cfg80211_set_wiphy_params_mlo(struct wiphy *wiphy, int radio_idx, u32 changed)
|
||||||
|
{
|
||||||
|
(void)radio_idx;
|
||||||
|
return rwnx_cfg80211_set_wiphy_params(wiphy, changed);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rwnx_cfg80211_set_tx_power_mlo(struct wiphy *wiphy,
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
|
struct wireless_dev *wdev,
|
||||||
|
#endif
|
||||||
|
int radio_idx,
|
||||||
|
enum nl80211_tx_power_setting type,
|
||||||
|
int mbm)
|
||||||
|
{
|
||||||
|
(void)radio_idx;
|
||||||
|
return rwnx_cfg80211_set_tx_power(wiphy,
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
|
wdev,
|
||||||
|
#endif
|
||||||
|
type, mbm);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @set_power_mgmt: set the power save to one of those two modes:
|
* @set_power_mgmt: set the power save to one of those two modes:
|
||||||
|
|
@ -6207,9 +6232,19 @@ static struct cfg80211_ops rwnx_cfg80211_ops = {
|
||||||
.set_monitor_channel = rwnx_cfg80211_set_monitor_channel,
|
.set_monitor_channel = rwnx_cfg80211_set_monitor_channel,
|
||||||
.probe_client = rwnx_cfg80211_probe_client,
|
.probe_client = rwnx_cfg80211_probe_client,
|
||||||
// .mgmt_frame_register = rwnx_cfg80211_mgmt_frame_register,
|
// .mgmt_frame_register = rwnx_cfg80211_mgmt_frame_register,
|
||||||
.set_wiphy_params = rwnx_cfg80211_set_wiphy_params,
|
.set_wiphy_params =
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
rwnx_cfg80211_set_wiphy_params_mlo,
|
||||||
|
#else
|
||||||
|
rwnx_cfg80211_set_wiphy_params,
|
||||||
|
#endif
|
||||||
.set_txq_params = rwnx_cfg80211_set_txq_params,
|
.set_txq_params = rwnx_cfg80211_set_txq_params,
|
||||||
.set_tx_power = rwnx_cfg80211_set_tx_power,
|
.set_tx_power =
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
|
||||||
|
rwnx_cfg80211_set_tx_power_mlo,
|
||||||
|
#else
|
||||||
|
rwnx_cfg80211_set_tx_power,
|
||||||
|
#endif
|
||||||
// .get_tx_power = rwnx_cfg80211_get_tx_power,
|
// .get_tx_power = rwnx_cfg80211_get_tx_power,
|
||||||
.set_power_mgmt = rwnx_cfg80211_set_power_mgmt,
|
.set_power_mgmt = rwnx_cfg80211_set_power_mgmt,
|
||||||
.get_station = rwnx_cfg80211_get_station,
|
.get_station = rwnx_cfg80211_get_station,
|
||||||
|
|
@ -9011,7 +9046,7 @@ void rwnx_cfg80211_deinit(struct rwnx_hw *rwnx_hw)
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_PWR
|
#ifdef CONFIG_DYNAMIC_PWR
|
||||||
if(timer_pending(&rwnx_hw->pwrloss_timer)){
|
if(timer_pending(&rwnx_hw->pwrloss_timer)){
|
||||||
del_timer_sync(&rwnx_hw->pwrloss_timer);}
|
rwnx_timer_delete_sync(&rwnx_hw->pwrloss_timer);}
|
||||||
cancel_work_sync(&rwnx_hw->pwrloss_work);
|
cancel_work_sync(&rwnx_hw->pwrloss_work);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -9020,7 +9055,7 @@ void rwnx_cfg80211_deinit(struct rwnx_hw *rwnx_hw)
|
||||||
list_for_each_entry(defrag_ctrl, &rwnx_hw->defrag_list, list) {
|
list_for_each_entry(defrag_ctrl, &rwnx_hw->defrag_list, list) {
|
||||||
list_del_init(&defrag_ctrl->list);
|
list_del_init(&defrag_ctrl->list);
|
||||||
if (timer_pending(&defrag_ctrl->defrag_timer))
|
if (timer_pending(&defrag_ctrl->defrag_timer))
|
||||||
del_timer_sync(&defrag_ctrl->defrag_timer);
|
rwnx_timer_delete_sync(&defrag_ctrl->defrag_timer);
|
||||||
dev_kfree_skb(defrag_ctrl->skb);
|
dev_kfree_skb(defrag_ctrl->skb);
|
||||||
kfree(defrag_ctrl);
|
kfree(defrag_ctrl);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1585,7 +1585,7 @@ int reord_flush_tid(struct aicwf_rx_priv *rx_priv, struct sk_buff *skb, u8 tid)
|
||||||
preorder_ctrl->enable = false;
|
preorder_ctrl->enable = false;
|
||||||
spin_unlock_irqrestore(&preorder_ctrl->reord_list_lock, flags);
|
spin_unlock_irqrestore(&preorder_ctrl->reord_list_lock, flags);
|
||||||
if (timer_pending(&preorder_ctrl->reord_timer))
|
if (timer_pending(&preorder_ctrl->reord_timer))
|
||||||
ret = del_timer_sync(&preorder_ctrl->reord_timer);
|
ret = rwnx_timer_delete_sync(&preorder_ctrl->reord_timer);
|
||||||
cancel_work_sync(&preorder_ctrl->reord_timer_work);
|
cancel_work_sync(&preorder_ctrl->reord_timer_work);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1611,7 +1611,7 @@ void reord_deinit_sta(struct aicwf_rx_priv* rx_priv, struct reord_ctrl_info *reo
|
||||||
if(preorder_ctrl->enable){
|
if(preorder_ctrl->enable){
|
||||||
preorder_ctrl->enable = false;
|
preorder_ctrl->enable = false;
|
||||||
if (timer_pending(&preorder_ctrl->reord_timer)) {
|
if (timer_pending(&preorder_ctrl->reord_timer)) {
|
||||||
ret = del_timer_sync(&preorder_ctrl->reord_timer);
|
ret = rwnx_timer_delete_sync(&preorder_ctrl->reord_timer);
|
||||||
}
|
}
|
||||||
cancel_work_sync(&preorder_ctrl->reord_timer_work);
|
cancel_work_sync(&preorder_ctrl->reord_timer_work);
|
||||||
}
|
}
|
||||||
|
|
@ -2021,7 +2021,7 @@ int reord_process_unit(struct recv_msdu *pframe, struct aicwf_rx_priv *rx_priv,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(timer_pending(&preorder_ctrl->reord_timer)) {
|
if(timer_pending(&preorder_ctrl->reord_timer)) {
|
||||||
ret = del_timer(&preorder_ctrl->reord_timer);
|
ret = rwnx_timer_delete(&preorder_ctrl->reord_timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2352,7 +2352,7 @@ check_len_update:
|
||||||
hdr = (struct ieee80211_hdr *)(skb->data + msdu_offset);
|
hdr = (struct ieee80211_hdr *)(skb->data + msdu_offset);
|
||||||
rwnx_vif = rwnx_rx_get_vif(rwnx_hw, hw_rxhdr->flags_vif_idx);
|
rwnx_vif = rwnx_rx_get_vif(rwnx_hw, hw_rxhdr->flags_vif_idx);
|
||||||
if (rwnx_vif) {
|
if (rwnx_vif) {
|
||||||
cfg80211_rx_spurious_frame(rwnx_vif->ndev, hdr->addr2, GFP_ATOMIC);
|
rwnx_rx_spurious_frame(rwnx_vif->ndev, hdr->addr2, GFP_ATOMIC);
|
||||||
}
|
}
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
@ -2547,7 +2547,7 @@ check_len_update:
|
||||||
skb_tmp = defrag_info->skb;
|
skb_tmp = defrag_info->skb;
|
||||||
list_del_init(&defrag_info->list);
|
list_del_init(&defrag_info->list);
|
||||||
if (timer_pending(&defrag_info->defrag_timer)) {
|
if (timer_pending(&defrag_info->defrag_timer)) {
|
||||||
ret = del_timer(&defrag_info->defrag_timer);
|
ret = rwnx_timer_delete(&defrag_info->defrag_timer);
|
||||||
}
|
}
|
||||||
kfree(defrag_info);
|
kfree(defrag_info);
|
||||||
spin_unlock_bh(&rwnx_hw->defrag_lock);
|
spin_unlock_bh(&rwnx_hw->defrag_lock);
|
||||||
|
|
@ -2598,8 +2598,8 @@ check_len_update:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hw_rxhdr->flags_is_4addr && !rwnx_vif->use_4addr) {
|
if (hw_rxhdr->flags_is_4addr && !rwnx_vif->use_4addr) {
|
||||||
cfg80211_rx_unexpected_4addr_frame(rwnx_vif->ndev,
|
rwnx_rx_unexpected_4addr_frame(rwnx_vif->ndev,
|
||||||
sta->mac_addr, GFP_ATOMIC);
|
sta->mac_addr, GFP_ATOMIC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,18 +11,33 @@
|
||||||
|
|
||||||
struct wakeup_source *rwnx_wakeup_init(const char *name)
|
struct wakeup_source *rwnx_wakeup_init(const char *name)
|
||||||
{
|
{
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)
|
||||||
|
return wakeup_source_register(NULL, name);
|
||||||
|
#else
|
||||||
struct wakeup_source *ws;
|
struct wakeup_source *ws;
|
||||||
|
|
||||||
ws = wakeup_source_create(name);
|
ws = wakeup_source_create(name);
|
||||||
|
if (!ws)
|
||||||
|
return NULL;
|
||||||
wakeup_source_add(ws);
|
wakeup_source_add(ws);
|
||||||
return ws;
|
return ws;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void rwnx_wakeup_deinit(struct wakeup_source *ws)
|
void rwnx_wakeup_deinit(struct wakeup_source *ws)
|
||||||
{
|
{
|
||||||
if (ws && ws->active)
|
if (!ws)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ws->active)
|
||||||
__pm_relax(ws);
|
__pm_relax(ws);
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)
|
||||||
|
wakeup_source_unregister(ws);
|
||||||
|
#else
|
||||||
wakeup_source_remove(ws);
|
wakeup_source_remove(ws);
|
||||||
wakeup_source_destroy(ws);
|
wakeup_source_destroy(ws);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wakeup_source *rwnx_wakeup_register(struct device *dev, const char *name)
|
struct wakeup_source *rwnx_wakeup_register(struct device *dev, const char *name)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue