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

Commit 379c49c8 authored by Manu Gautam's avatar Manu Gautam Committed by Hemant Kumar
Browse files

USB: f_fs: Disable USB LPM on bus_suspend with ADB



ADB function is mainly used for debugging, hence it is
not expected to allow USB LPM followed by system suspend
in device bus suspend. Driver also doesn't handle
usb_ep_dequeue failure in LPM when adbd is interrupted
by signal as buffer is left queued to the hardware after
usb_ep_dequeue failure and can cause memory corruption.

Change-Id: Ib89c80318dcdd0dbb35d122a2ab77fb61f83518e
Signed-off-by: default avatarManu Gautam <mgautam@codeaurora.org>
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
parent 8d28f47e
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -3461,9 +3461,11 @@ static int ffs_func_set_alt(struct usb_function *f,

	ffs->func = func;
	ret = ffs_func_eps_enable(func);
	if (likely(ret >= 0))
	if (likely(ret >= 0)) {
		ffs_event_add(ffs, FUNCTIONFS_ENABLE);

		/* Disable USB LPM later on bus_suspend */
		usb_gadget_autopm_get_async(ffs->gadget);
	}
	ffs_log("exit: ret %d", ret);

	return ret;
@@ -3471,8 +3473,13 @@ static int ffs_func_set_alt(struct usb_function *f,

static void ffs_func_disable(struct usb_function *f)
{
	struct ffs_function *func = ffs_func_from_usb(f);
	struct ffs_data *ffs = func->ffs;

	ffs_log("enter");
	ffs_func_set_alt(f, 0, (unsigned)-1);
	/* matching put to allow LPM on disconnect */
	usb_gadget_autopm_put_async(ffs->gadget);
	ffs_log("exit");
}