expiry = HZ / 200;
 
        expiry = max(expiry, 1); /* don't let it be zero! */
-       dpcm->timer.expires = jiffies + expiry;
+       mod_timer(&dpcm->timer, jiffies + expiry);
        dpcm->respawn_timer = 1;
-       add_timer(&dpcm->timer);
 }
 
 static void snd_card_asihpi_pcm_timer_stop(struct snd_pcm_substream *substream)
            If internal and other stream playing, can't switch
        */
 
-       init_timer(&dpcm->timer);
-       dpcm->timer.data = (unsigned long) dpcm;
-       dpcm->timer.function = snd_card_asihpi_timer_function;
+       setup_timer(&dpcm->timer, snd_card_asihpi_timer_function,
+                   (unsigned long) dpcm);
        dpcm->substream = substream;
        runtime->private_data = dpcm;
        runtime->private_free = snd_card_asihpi_runtime_free;
        if (err)
                return -EIO;
 
-       init_timer(&dpcm->timer);
-       dpcm->timer.data = (unsigned long) dpcm;
-       dpcm->timer.function = snd_card_asihpi_timer_function;
+       setup_timer(&dpcm->timer, snd_card_asihpi_timer_function,
+                   (unsigned long) dpcm);
        dpcm->substream = substream;
        runtime->private_data = dpcm;
        runtime->private_free = snd_card_asihpi_runtime_free;