Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3b28f9a authored by Elson Roy Serrao's avatar Elson Roy Serrao Committed by Sriharsha Allenki
Browse files

usb: gadget: Reset string ids upon unbind



String ids for qdss,cdev and gsi based interfaces
are re-used even though the device re-enumerates.
This is causing string id sequence mismatch and resulting
in adb using the string id of qdss interface. Reset the
string ids for these functions in their respective unbind
calls to fix this issue.

Change-Id: Ia9b196734a99ccc2e8c35073ec4e535755774c16
Signed-off-by: default avatarElson Roy Serrao <eserrao@codeaurora.org>
parent be1961a6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -898,6 +898,9 @@ static void usb_cser_unbind(struct usb_configuration *c, struct usb_function *f)
{
	struct f_cdev *port = func_to_port(f);

	/* Reset string id */
	cser_string_defs[0].id = 0;

	usb_free_all_descriptors(f);
	usb_cser_free_req(port->port_usb.notify, port->port_usb.notify_req);
}
+7 −0
Original line number Diff line number Diff line
@@ -3359,6 +3359,13 @@ static void gsi_unbind(struct usb_configuration *c, struct usb_function *f)
	drain_workqueue(gsi->d_port.ipa_usb_wq);
	ipa_usb_deinit_teth_prot((enum ipa_usb_teth_prot)gsi->prot_id);

	/* Reset string ids */
	rndis_gsi_string_defs[0].id = 0;
	ecm_gsi_string_defs[0].id   = 0;
	rmnet_gsi_string_defs[0].id = 0;
	mbim_gsi_string_defs[0].id  = 0;
	qdss_gsi_string_defs[0].id  = 0;

skip_ipa_dinit:
	if (gsi->prot_id == USB_PROT_RNDIS_IPA) {
		gsi->d_port.sm_state = STATE_UNINITIALIZED;
+4 −0
Original line number Diff line number Diff line
@@ -526,6 +526,10 @@ static void qdss_unbind(struct usb_configuration *c, struct usb_function *f)

	flush_workqueue(qdss->wq);

	/* Reset string ids */
	qdss_string_defs[QDSS_DATA_IDX].id = 0;
	qdss_string_defs[QDSS_CTRL_IDX].id = 0;

	qdss->debug_inface_enabled = 0;

	clear_eps(f);