diff options
Diffstat (limited to '0003-toneport-fixes.patch')
| -rw-r--r-- | 0003-toneport-fixes.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/0003-toneport-fixes.patch b/0003-toneport-fixes.patch new file mode 100644 index 00000000000000..4bc8ab38570295 --- /dev/null +++ b/0003-toneport-fixes.patch @@ -0,0 +1,61 @@ +From e2c743d1f900135c3e560cd9ea1647e4a1ebce7a Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +Date: Wed, 23 Jan 2019 11:01:46 +0100 +Subject: [PATCH 3/3] toneport fixes + +--- + sound/usb/line6/toneport.c | 23 +++++++++++++++++------ + 1 file changed, 17 insertions(+), 6 deletions(-) + +--- a/sound/usb/line6/toneport.c ++++ b/sound/usb/line6/toneport.c +@@ -365,16 +365,21 @@ static bool toneport_has_source_select(s + /* + Setup Toneport device. + */ +-static void toneport_setup(struct usb_line6_toneport *toneport) ++static int toneport_setup(struct usb_line6_toneport *toneport) + { +- u32 ticks; ++ u32 *ticks; + struct usb_line6 *line6 = &toneport->line6; + struct usb_device *usbdev = line6->usbdev; + ++ ticks = kmalloc(sizeof(*ticks), GFP_KERNEL); ++ if (!ticks) ++ return -ENOMEM; ++ + /* sync time on device with host: */ + /* note: 32-bit timestamps overflow in year 2106 */ +- ticks = (u32)ktime_get_real_seconds(); +- line6_write_data(line6, 0x80c6, &ticks, 4); ++ *ticks = (u32)ktime_get_real_seconds(); ++ line6_write_data(line6, 0x80c6, ticks, 4); ++ kfree(ticks); + + /* enable device: */ + toneport_send_cmd(usbdev, 0x0301, 0x0000); +@@ -451,7 +456,9 @@ static int toneport_init(struct usb_line + return err; + } + +- toneport_setup(toneport); ++ err = toneport_setup(toneport); ++ if (err) ++ return err; + + /* register audio system: */ + return snd_card_register(line6->card); +@@ -463,7 +470,11 @@ static int toneport_init(struct usb_line + */ + static int toneport_reset_resume(struct usb_interface *interface) + { +- toneport_setup(usb_get_intfdata(interface)); ++ int err; ++ ++ err = toneport_setup(usb_get_intfdata(interface)); ++ if (err) ++ return err; + return line6_resume(interface); + } + #endif |
