catc->stats_vals[index >> 1] = data;
 }
 
-static void catc_stats_timer(unsigned long data)
+static void catc_stats_timer(struct timer_list *t)
 {
-       struct catc *catc = (void *) data;
+       struct catc *catc = from_timer(catc, t, timer);
        int i;
 
        for (i = 0; i < 8; i++)
        spin_lock_init(&catc->tx_lock);
        spin_lock_init(&catc->ctrl_lock);
 
-       setup_timer(&catc->timer, catc_stats_timer, (long)catc);
+       timer_setup(&catc->timer, catc_stats_timer, 0);
 
        catc->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL);
        catc->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
 
        .ndo_vlan_rx_kill_vid   = lan78xx_vlan_rx_kill_vid,
 };
 
-static void lan78xx_stat_monitor(unsigned long param)
+static void lan78xx_stat_monitor(struct timer_list *t)
 {
-       struct lan78xx_net *dev;
-
-       dev = (struct lan78xx_net *)param;
+       struct lan78xx_net *dev = from_timer(dev, t, stat_monitor);
 
        lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE);
 }
        netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES;
        netdev->ethtool_ops = &lan78xx_ethtool_ops;
 
-       dev->stat_monitor.function = lan78xx_stat_monitor;
-       dev->stat_monitor.data = (unsigned long)dev;
        dev->delta = 1;
-       init_timer(&dev->stat_monitor);
+       timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0);
 
        mutex_init(&dev->stats.access_lock);
 
 
 #define SIERRA_NET_LSI_UMTS_DS_STATUS_LEN \
        (SIERRA_NET_LSI_UMTS_DS_LEN - SIERRA_NET_LSI_COMMON_LEN)
 
-/* Forward definitions */
-static void sierra_sync_timer(unsigned long syncdata);
-
 /* Our own net device operations structure */
 static const struct net_device_ops sierra_net_device_ops = {
        .ndo_open               = usbnet_open,
                        "Send SYNC failed, status %d\n", status);
 
        /* Now, start a timer and make sure we get the Restart Indication */
-       priv->sync_timer.function = sierra_sync_timer;
-       priv->sync_timer.data = (unsigned long) dev;
        priv->sync_timer.expires = jiffies + SIERRA_NET_SYNCDELAY;
        add_timer(&priv->sync_timer);
 }
 /*
  * Sync Retransmit Timer Handler. On expiry, kick the work queue
  */
-static void sierra_sync_timer(unsigned long syncdata)
+static void sierra_sync_timer(struct timer_list *t)
 {
-       struct usbnet *dev = (struct usbnet *)syncdata;
+       struct sierra_net_data *priv = from_timer(priv, t, sync_timer);
+       struct usbnet *dev = priv->usbnet;
 
        dev_dbg(&dev->udev->dev, "%s", __func__);
        /* Kick the tasklet */
        INIT_WORK(&priv->sierra_net_kevent, sierra_net_kevent);
 
        /* Only need to do this once */
-       init_timer(&priv->sync_timer);
+       timer_setup(&priv->sync_timer, sierra_sync_timer, 0);
 
        /* verify fw attributes */
        status = sierra_net_get_fw_attr(dev, &fwattr);