*     Queue data for transmission if possible and then kick off the
  *     transfer.
  */
-static void ifx_spi_io(unsigned long data)
+static void ifx_spi_io(struct tasklet_struct *t)
 {
        int retval;
-       struct ifx_spi_device *ifx_dev = (struct ifx_spi_device *) data;
+       struct ifx_spi_device *ifx_dev = from_tasklet(ifx_dev, t,
+                                                     io_work_tasklet);
 
        if (!test_and_set_bit(IFX_SPI_STATE_IO_IN_PROGRESS, &ifx_dev->flags) &&
                test_bit(IFX_SPI_STATE_IO_AVAILABLE, &ifx_dev->flags)) {
        init_waitqueue_head(&ifx_dev->mdm_reset_wait);
 
        spi_set_drvdata(spi, ifx_dev);
-       tasklet_init(&ifx_dev->io_work_tasklet, ifx_spi_io,
-                                               (unsigned long)ifx_dev);
+       tasklet_setup(&ifx_dev->io_work_tasklet, ifx_spi_io);
 
        set_bit(IFX_SPI_STATE_PRESENT, &ifx_dev->flags);