aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/usb/line6/toneport.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sound/usb/line6/toneport.c b/sound/usb/line6/toneport.c
index 19bee725de00..325b07b98b3c 100644
--- a/sound/usb/line6/toneport.c
+++ b/sound/usb/line6/toneport.c
@@ -54,8 +54,8 @@ struct usb_line6_toneport {
54 /* Firmware version (x 100) */ 54 /* Firmware version (x 100) */
55 u8 firmware_version; 55 u8 firmware_version;
56 56
57 /* Timer for delayed PCM startup */ 57 /* Work for delayed PCM startup */
58 struct timer_list timer; 58 struct delayed_work pcm_work;
59 59
60 /* Device type */ 60 /* Device type */
61 enum line6_device_type type; 61 enum line6_device_type type;
@@ -241,9 +241,10 @@ static int snd_toneport_source_put(struct snd_kcontrol *kcontrol,
241 return 1; 241 return 1;
242} 242}
243 243
244static void toneport_start_pcm(struct timer_list *t) 244static void toneport_start_pcm(struct work_struct *work)
245{ 245{
246 struct usb_line6_toneport *toneport = from_timer(toneport, t, timer); 246 struct usb_line6_toneport *toneport =
247 container_of(work, struct usb_line6_toneport, pcm_work.work);
247 struct usb_line6 *line6 = &toneport->line6; 248 struct usb_line6 *line6 = &toneport->line6;
248 249
249 line6_pcm_acquire(line6->line6pcm, LINE6_STREAM_MONITOR, true); 250 line6_pcm_acquire(line6->line6pcm, LINE6_STREAM_MONITOR, true);
@@ -393,7 +394,8 @@ static int toneport_setup(struct usb_line6_toneport *toneport)
393 if (toneport_has_led(toneport)) 394 if (toneport_has_led(toneport))
394 toneport_update_led(toneport); 395 toneport_update_led(toneport);
395 396
396 mod_timer(&toneport->timer, jiffies + TONEPORT_PCM_DELAY * HZ); 397 schedule_delayed_work(&toneport->pcm_work,
398 msecs_to_jiffies(TONEPORT_PCM_DELAY * 1000));
397 return 0; 399 return 0;
398} 400}
399 401
@@ -405,7 +407,7 @@ static void line6_toneport_disconnect(struct usb_line6 *line6)
405 struct usb_line6_toneport *toneport = 407 struct usb_line6_toneport *toneport =
406 (struct usb_line6_toneport *)line6; 408 (struct usb_line6_toneport *)line6;
407 409
408 del_timer_sync(&toneport->timer); 410 cancel_delayed_work_sync(&toneport->pcm_work);
409 411
410 if (toneport_has_led(toneport)) 412 if (toneport_has_led(toneport))
411 toneport_remove_leds(toneport); 413 toneport_remove_leds(toneport);
@@ -422,7 +424,7 @@ static int toneport_init(struct usb_line6 *line6,
422 struct usb_line6_toneport *toneport = (struct usb_line6_toneport *) line6; 424 struct usb_line6_toneport *toneport = (struct usb_line6_toneport *) line6;
423 425
424 toneport->type = id->driver_info; 426 toneport->type = id->driver_info;
425 timer_setup(&toneport->timer, toneport_start_pcm, 0); 427 INIT_DELAYED_WORK(&toneport->pcm_work, toneport_start_pcm);
426 428
427 line6->disconnect = line6_toneport_disconnect; 429 line6->disconnect = line6_toneport_disconnect;
428 430