* It simply triggers the common FDC handler code and arranges for further
  * polling.
  */
-static void mips_ejtag_fdc_tty_timer(unsigned long opaque)
+static void mips_ejtag_fdc_tty_timer(struct timer_list *t)
 {
-       struct mips_ejtag_fdc_tty *priv = (void *)opaque;
+       struct mips_ejtag_fdc_tty *priv = from_timer(priv, t, poll_timer);
 
        mips_ejtag_fdc_handle(priv);
        if (!priv->removing)
                raw_spin_unlock_irq(&priv->lock);
        } else {
                /* If we didn't get an usable IRQ, poll instead */
-               setup_pinned_timer(&priv->poll_timer, mips_ejtag_fdc_tty_timer,
-                           (unsigned long)priv);
+               timer_setup(&priv->poll_timer, mips_ejtag_fdc_tty_timer,
+                           TIMER_PINNED);
                priv->poll_timer.expires = jiffies + FDC_TTY_POLL;
                /*
                 * Always attach the timer to the right CPU. The channels are