... so that timer_del_sync() in the destructor can be called safely at any time. Also move the mod_timer() call in toneport_setup(), which is a bit clearer place.
Signed-off-by: Takashi Iwai tiwai@suse.de --- sound/usb/line6/toneport.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c index e5669bd3233a..fb6d5e1e2ade 100644 --- a/sound/usb/line6/toneport.c +++ b/sound/usb/line6/toneport.c @@ -360,6 +360,8 @@ static void toneport_setup(struct usb_line6_toneport *toneport)
if (toneport_has_led(toneport->type)) toneport_update_led(&usbdev->dev); + + mod_timer(&toneport->timer, jiffies + TONEPORT_PCM_DELAY * HZ); }
/* @@ -390,6 +392,9 @@ static int toneport_init(struct usb_interface *interface, int err; struct usb_line6_toneport *toneport = (struct usb_line6_toneport *) line6;
+ setup_timer(&toneport->timer, toneport_start_pcm, + (unsigned long)toneport); + line6->disconnect = line6_toneport_disconnect;
/* initialize PCM subsystem: */ @@ -435,10 +440,6 @@ static int toneport_init(struct usb_interface *interface,
toneport_setup(toneport);
- setup_timer(&toneport->timer, toneport_start_pcm, - (unsigned long)toneport); - mod_timer(&toneport->timer, jiffies + TONEPORT_PCM_DELAY * HZ); - /* register audio system: */ return snd_card_register(line6->card); }