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

Commit 80835495 authored by Vijayavardhan Vennapusa's avatar Vijayavardhan Vennapusa
Browse files

USB: u_bam_data: Call msm_ep_unconfig() in stop_rndis_ipa()



Host rndis driver sends control request to enable/disable flow control
on device side as part of driver unstal/install. This flow control
calls stop/start rndis_ipa which results in disconnect_work/connect_work
being executed. As part of stop rndis_ipa(), it needs to call
msm_ep_unconfig() to change ep file operations, otherwise DBM endpoint
configuration will not happen when start rndis_ipa() is called. This might
lead to NOC error or ip address not assigned after new driver installation.
Fix this by calling msm_ep_unconfig() during stop rndis_ipa().

Change-Id: I86e0a49075d84d727c028568b931bf5a3649c13a
Signed-off-by: default avatarVijayavardhan Vennapusa <vvreddy@codeaurora.org>
parent cfd42c3b
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -823,11 +823,6 @@ static void rndis_qc_suspend(struct usb_function *f)
		 */
		rndis_flow_control(rndis->config, true);
		pr_debug("%s(): Disconnecting\n", __func__);
		if (rndis->xport == USB_GADGET_XPORT_BAM2BAM_IPA &&
			gadget_is_dwc3(f->config->cdev->gadget)) {
			msm_ep_unconfig(rndis->port.out_ep);
			msm_ep_unconfig(rndis->port.in_ep);
		}
	}

	bam_data_suspend(&rndis->bam_port, rndis->port_num, USB_FUNC_RNDIS,
+10 −0
Original line number Diff line number Diff line
@@ -1288,6 +1288,7 @@ void u_bam_data_stop_rndis_ipa(void)
	int port_num;
	struct bam_data_port *port;
	struct bam_data_ch_info *d;
	unsigned long flags;

	pr_debug("%s\n", __func__);

@@ -1305,6 +1306,15 @@ void u_bam_data_stop_rndis_ipa(void)
		rndis_ipa_reset_trigger();
		bam_data_stop_endless_tx(port);
		bam_data_stop_endless_rx(port);
		if (gadget_is_dwc3(port->gadget)) {
			spin_lock_irqsave(&port->port_lock, flags);
			/* check if USB cable is disconnected or not */
			if (port->port_usb) {
				msm_ep_unconfig(port->port_usb->in);
				msm_ep_unconfig(port->port_usb->out);
			}
			spin_unlock_irqrestore(&port->port_lock, flags);
		}
		queue_work(bam_data_wq, &port->disconnect_w);
	}
}