vbi->start[1] = 312;
        vbi->count[1] = 16;
 
-       init_timer(&vv->vbi_read_timeout);
+       timer_setup(&vv->vbi_read_timeout, NULL, 0);
 
        vv->ov_fb.capability = V4L2_FBUF_CAP_LIST_CLIPPING;
        vv->ov_fb.flags = V4L2_FBUF_FLAG_PRIMARY;
 
        spin_unlock_irqrestore(&dev->slock, flags);
 }
 
-static void vbi_read_timeout(unsigned long data)
+static void vbi_read_timeout(struct timer_list *t)
 {
-       struct file *file = (struct file*)data;
+       struct saa7146_vv *vv = from_timer(vv, t, vbi_read_timeout);
+       struct file *file = vv->vbi_read_timeout_file;
        struct saa7146_fh *fh = file->private_data;
        struct saa7146_dev *dev = fh->dev;
 
                            sizeof(struct saa7146_buf),
                            file, &dev->v4l2_lock);
 
-       vv->vbi_read_timeout.function = vbi_read_timeout;
-       vv->vbi_read_timeout.data = (unsigned long)file;
+       vv->vbi_read_timeout.function = (TIMER_FUNC_TYPE)vbi_read_timeout;
+       vv->vbi_read_timeout_file = file;
 
        /* initialize the brs */
        if ( 0 != (SAA7146_USE_PORT_B_FOR_VBI & dev->ext_vv_data->flags)) {
 
        struct saa7146_dmaqueue         vbi_dmaq;
        struct v4l2_vbi_format          vbi_fmt;
        struct timer_list               vbi_read_timeout;
+       struct file                     *vbi_read_timeout_file;
        /* vbi workaround interrupt queue */
        wait_queue_head_t               vbi_wq;
        int                             vbi_fieldcount;