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

Commit 15c00787 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gadget: f_qdss: Allocate one string ID for all instances"

parents d421605b f6c09502
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -970,6 +970,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;
+19 −11
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
 * f_qdss.c -- QDSS function Driver
 *
 * Copyright (c) 2012-2018, 2020, The Linux Foundation. All rights reserved.

 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
@@ -423,11 +422,13 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
	qdss_data_intf_desc.bInterfaceNumber = iface;
	qdss->data_iface_id = iface;

	if (!qdss_string_defs[QDSS_DATA_IDX].id) {
		id = usb_string_id(c->cdev);
		if (id < 0)
			return id;
		qdss_string_defs[QDSS_DATA_IDX].id = id;
		qdss_data_intf_desc.iInterface = id;
	}

	if (qdss->debug_inface_enabled) {
		/* Allocate ctrl I/F */
@@ -438,12 +439,15 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
		}
		qdss_ctrl_intf_desc.bInterfaceNumber = iface;
		qdss->ctrl_iface_id = iface;

		if (!qdss_string_defs[QDSS_CTRL_IDX].id) {
			id = usb_string_id(c->cdev);
			if (id < 0)
				return id;
			qdss_string_defs[QDSS_CTRL_IDX].id = id;
			qdss_ctrl_intf_desc.iInterface = id;
		}
	}

	/* for non-accelerated path keep tx fifo size 1k */
	if (!strcmp(qdss->ch.name, USB_QDSS_CH_MDM))
@@ -526,6 +530,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);