add_timer(&fei->timer);
 }
 
-static void channel_swdemux_tsklet(unsigned long data)
+static void channel_swdemux_tsklet(struct tasklet_struct *t)
 {
-       struct channel_info *channel = (struct channel_info *)data;
+       struct channel_info *channel = from_tasklet(channel, t, tsklet);
        struct c8sectpfei *fei;
        unsigned long wp, rp;
        int pos, num_packets, n, size;
 
                dev_dbg(fei->dev, "Starting channel=%p\n", channel);
 
-               tasklet_init(&channel->tsklet, channel_swdemux_tsklet,
-                            (unsigned long) channel);
+               tasklet_setup(&channel->tsklet, channel_swdemux_tsklet);
 
                /* Reset the internal inputblock sram pointers */
                writel(channel->fifo,
        writel(tsin->back_buffer_busaddr, tsin->irec + DMA_PRDS_BUSRP_TP(0));
 
        /* initialize tasklet */
-       tasklet_init(&tsin->tsklet, channel_swdemux_tsklet,
-               (unsigned long) tsin);
+       tasklet_setup(&tsin->tsklet, channel_swdemux_tsklet);
 
        return 0;