static void cx88_ir_work(struct work_struct *work)
 {
        struct cx88_IR *ir = container_of(work, struct cx88_IR, work);
-       unsigned long timeout;
 
        cx88_ir_handle_key(ir);
-       timeout = jiffies + (ir->polling * HZ / 1000);
-       mod_timer(&ir->timer, timeout);
+       mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling));
 }
 
 static void cx88_ir_start(struct cx88_core *core, struct cx88_IR *ir)
 {
        if (ir->polling) {
+               setup_timer(&ir->timer, ir_timer, (unsigned long)ir);
                INIT_WORK(&ir->work, cx88_ir_work);
-               init_timer(&ir->timer);
-               ir->timer.function = ir_timer;
-               ir->timer.data = (unsigned long)ir;
                schedule_work(&ir->work);
        }
        if (ir->sampling) {