struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        /* <1> timer */
-       setup_timer(&rtlpriv->works.watchdog_timer,
-                   rtl_watch_dog_timer_callback, (unsigned long)hw);
-       setup_timer(&rtlpriv->works.dualmac_easyconcurrent_retrytimer,
-                   rtl_easy_concurrent_retrytimer_callback, (unsigned long)hw);
+       timer_setup(&rtlpriv->works.watchdog_timer,
+                   rtl_watch_dog_timer_callback, 0);
+       timer_setup(&rtlpriv->works.dualmac_easyconcurrent_retrytimer,
+                   rtl_easy_concurrent_retrytimer_callback, 0);
        /* <2> work queue */
        rtlpriv->works.hw = hw;
        rtlpriv->works.rtl_wq = alloc_workqueue("%s", 0, 0, rtlpriv->cfg->name);
        rtl_scan_list_expire(hw);
 }
 
-void rtl_watch_dog_timer_callback(unsigned long data)
+void rtl_watch_dog_timer_callback(struct timer_list *t)
 {
-       struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_priv *rtlpriv = from_timer(rtlpriv, t, works.watchdog_timer);
+       struct ieee80211_hw *hw = rtlpriv->hw;
 
        queue_delayed_work(rtlpriv->works.rtl_wq,
                           &rtlpriv->works.watchdog_wq, 0);
        rtl_c2hcmd_launcher(hw, 1);
 }
 
-void rtl_easy_concurrent_retrytimer_callback(unsigned long data)
+void rtl_easy_concurrent_retrytimer_callback(struct timer_list *t)
 {
-       struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_priv *rtlpriv =
+               from_timer(rtlpriv, t, works.dualmac_easyconcurrent_retrytimer);
+       struct ieee80211_hw *hw = rtlpriv->hw;
        struct rtl_priv *buddy_priv = rtlpriv->buddy_priv;
 
        if (!buddy_priv)
 
 void rtl_init_rfkill(struct ieee80211_hw *hw);
 void rtl_deinit_rfkill(struct ieee80211_hw *hw);
 
-void rtl_watch_dog_timer_callback(unsigned long data);
+void rtl_watch_dog_timer_callback(struct timer_list *t);
 void rtl_deinit_deferred_work(struct ieee80211_hw *hw);
 
 bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx);
 u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie);
 void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len);
 u8 rtl_tid_to_ac(u8 tid);
-void rtl_easy_concurrent_retrytimer_callback(unsigned long data);
+void rtl_easy_concurrent_retrytimer_callback(struct timer_list *t);
 extern struct rtl_global_var rtl_global_var;
 void rtl_phy_scan_operation_backup(struct ieee80211_hw *hw, u8 operation);
 bool rtl_check_beacon_key(struct ieee80211_hw *hw, void *data,
 
        mutex_lock(&rtlpriv->locks.conf_mutex);
        err = rtlpriv->intf_ops->adapter_start(hw);
        if (!err)
-               rtl_watch_dog_timer_callback((unsigned long)hw);
+               rtl_watch_dog_timer_callback(&rtlpriv->works.watchdog_timer);
        mutex_unlock(&rtlpriv->locks.conf_mutex);
        return err;
 }
 
 
 void ODM_sleep_us(u32 us) { usleep_range(us, us + 1); }
 
-void odm_set_timer(struct phy_dm_struct *dm, struct timer_list *timer,
-                  u32 ms_delay)
-{
-       mod_timer(timer, jiffies + msecs_to_jiffies(ms_delay));
-}
-
-void odm_initialize_timer(struct phy_dm_struct *dm, struct timer_list *timer,
-                         void *call_back_func, void *context,
-                         const char *sz_id)
-{
-       init_timer(timer);
-       timer->function = call_back_func;
-       timer->data = (unsigned long)dm;
-       /*mod_timer(timer, jiffies+RTL_MILISECONDS_TO_JIFFIES(10));     */
-}
-
-void odm_cancel_timer(struct phy_dm_struct *dm, struct timer_list *timer)
-{
-       del_timer(timer);
-}
-
-void odm_release_timer(struct phy_dm_struct *dm, struct timer_list *timer) {}
-
 static u8 phydm_trans_h2c_id(struct phy_dm_struct *dm, u8 phydm_h2c_id)
 {
        u8 platform_h2c_id = phydm_h2c_id;
 
 
 void ODM_sleep_us(u32 us);
 
-void odm_set_timer(struct phy_dm_struct *dm, struct timer_list *timer,
-                  u32 ms_delay);
-
-void odm_initialize_timer(struct phy_dm_struct *dm, struct timer_list *timer,
-                         void *call_back_func, void *context,
-                         const char *sz_id);
-
-void odm_cancel_timer(struct phy_dm_struct *dm, struct timer_list *timer);
-
-void odm_release_timer(struct phy_dm_struct *dm, struct timer_list *timer);
-
 /*
  * ODM FW relative API.
  */
 
        rtlpriv->cfg->ops->enable_interrupt(hw);
 
        /*<enable timer> */
-       rtl_watch_dog_timer_callback((unsigned long)hw);
+       rtl_watch_dog_timer_callback(&rtlpriv->works.watchdog_timer);
 
        return true;
 }