Skip to content

hack: suspend: usb: option: add reset_resume callback

Currently to be the same as resume(). This will just avoid re-enumeration of the modem device on every system resume.

This exists only because the usb core will re-enumerate any device whos' driver doesn't have reset_resume() implemented. A call trace:

Jun 23 11:15:43 pureos kernel:  usb_serial_disconnect+0x58/0x180 [usbserial]
Jun 23 11:15:43 pureos kernel:  usb_unbind_interface+0x84/0x290 [usbcore]
Jun 23 11:15:43 pureos kernel:  device_remove+0x78/0x90
Jun 23 11:15:43 pureos kernel:  device_release_driver_internal+0x1e4/0x250
Jun 23 11:15:43 pureos kernel:  device_release_driver+0x24/0x30
Jun 23 11:15:43 pureos kernel:  usb_forced_unbind_intf+0xac/0xd4 [usbcore]
Jun 23 11:15:43 pureos kernel:  unbind_marked_interfaces.isra.0+0x5c/0x80 [usbcore]
Jun 23 11:15:43 pureos kernel:  usb_resume+0x78/0x8c [usbcore]
Jun 23 11:15:43 pureos kernel:  usb_dev_resume+0x20/0x30 [usbcore]
Jun 23 11:15:43 pureos kernel:  dpm_run_callback+0x60/0x1f0
Jun 23 11:15:43 pureos kernel:  device_resume+0x9c/0x1f4

where usb_resume_inteface() sets needs_binding here https://elixir.bootlin.com/linux/latest/source/drivers/usb/core/driver.c#L1353 because of no reset_resume() implementation.

This hack is even suggested in some modems' application notes as can be found in discussion here https://invent.kde.org/teams/plasma-mobile/issues/-/issues/3#note_218386

Edited by Martin Kepplinger

Merge request reports