}
 }
 
-static void if_usb_fw_timeo(unsigned long priv)
+static void if_usb_fw_timeo(struct timer_list *t)
 {
-       struct if_usb_card *cardp = (void *)priv;
+       struct if_usb_card *cardp = from_timer(cardp, t, fw_timeout);
 
        if (cardp->fwdnldover) {
                lbs_deb_usb("Download complete, no event. Assuming success\n");
        if (!cardp)
                goto error;
 
-       setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp);
+       timer_setup(&cardp->fw_timeout, if_usb_fw_timeo, 0);
        init_waitqueue_head(&cardp->fw_wq);
 
        cardp->udev = udev;
 
  *
  * @data: &struct lbs_private pointer
  */
-static void lbs_cmd_timeout_handler(unsigned long data)
+static void lbs_cmd_timeout_handler(struct timer_list *t)
 {
-       struct lbs_private *priv = (struct lbs_private *)data;
+       struct lbs_private *priv = from_timer(priv, t, command_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&priv->driver_lock, flags);
  *
  * @data: &struct lbs_private pointer
  */
-static void lbs_tx_lockup_handler(unsigned long data)
+static void lbs_tx_lockup_handler(struct timer_list *t)
 {
-       struct lbs_private *priv = (struct lbs_private *)data;
+       struct lbs_private *priv = from_timer(priv, t, tx_lockup_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&priv->driver_lock, flags);
  * @data:      &struct lbs_private pointer
  * returns:    N/A
  */
-static void auto_deepsleep_timer_fn(unsigned long data)
+static void auto_deepsleep_timer_fn(struct timer_list *t)
 {
-       struct lbs_private *priv = (struct lbs_private *)data;
+       struct lbs_private *priv = from_timer(priv, t, auto_deepsleep_timer);
 
        if (priv->is_activity_detected) {
                priv->is_activity_detected = 0;
        init_waitqueue_head(&priv->fw_waitq);
        mutex_init(&priv->lock);
 
-       setup_timer(&priv->command_timer, lbs_cmd_timeout_handler,
-               (unsigned long)priv);
-       setup_timer(&priv->tx_lockup_timer, lbs_tx_lockup_handler,
-               (unsigned long)priv);
-       setup_timer(&priv->auto_deepsleep_timer, auto_deepsleep_timer_fn,
-                       (unsigned long)priv);
+       timer_setup(&priv->command_timer, lbs_cmd_timeout_handler, 0);
+       timer_setup(&priv->tx_lockup_timer, lbs_tx_lockup_handler, 0);
+       timer_setup(&priv->auto_deepsleep_timer, auto_deepsleep_timer_fn, 0);
 
        INIT_LIST_HEAD(&priv->cmdfreeq);
        INIT_LIST_HEAD(&priv->cmdpendingq);
 
        lbtf_deb_leave(LBTF_DEB_USB);
 }
 
-static void if_usb_fw_timeo(unsigned long priv)
+static void if_usb_fw_timeo(struct timer_list *t)
 {
-       struct if_usb_card *cardp = (void *)priv;
+       struct if_usb_card *cardp = from_timer(cardp, t, fw_timeout);
 
        lbtf_deb_enter(LBTF_DEB_USB);
        if (!cardp->fwdnldover) {
        if (!cardp)
                goto error;
 
-       setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp);
+       timer_setup(&cardp->fw_timeout, if_usb_fw_timeo, 0);
        init_waitqueue_head(&cardp->fw_wq);
 
        cardp->udev = udev;
 
  *  This function handles the timeout of command sending.
  *  It will re-send the same command again.
  */
-static void command_timer_fn(unsigned long data)
+static void command_timer_fn(struct timer_list *t)
 {
-       struct lbtf_private *priv = (struct lbtf_private *)data;
+       struct lbtf_private *priv = from_timer(priv, t, command_timer);
        unsigned long flags;
        lbtf_deb_enter(LBTF_DEB_CMD);
 
        mutex_init(&priv->lock);
 
        priv->vif = NULL;
-       setup_timer(&priv->command_timer, command_timer_fn,
-               (unsigned long)priv);
+       timer_setup(&priv->command_timer, command_timer_fn, 0);
 
        INIT_LIST_HEAD(&priv->cmdfreeq);
        INIT_LIST_HEAD(&priv->cmdpendingq);