mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 14:13:01 -04:00
usb: gadget: f_gsi: Handle IPA remote wakeup notification properly
Upon bus suspend when IPA requests for usb remote wake up, it is not allowing enough time for the host to wakeup from U3. IPA is continuously trying to wakeup the host and eventually resets the bus. Fix this issue by adding a flag to check the status of usb remote wakeup and ignores the request from IPA if it is in progress. Change-Id: Id55928b7f5d3ae7f282a3b8db44949d396db0ddd Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
This commit is contained in:
parent
73db1046f1
commit
b3295b2c12
2 changed files with 13 additions and 3 deletions
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -149,6 +149,8 @@ static int gsi_wakeup_host(struct f_gsi *gsi)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
gsi->rwake_inprogress = true;
|
||||
|
||||
/*
|
||||
* In Super-Speed mode, remote wakeup is not allowed for suspended
|
||||
* functions which have been disallowed by the host to issue Function
|
||||
|
|
@ -171,6 +173,9 @@ static int gsi_wakeup_host(struct f_gsi *gsi)
|
|||
else if (ret)
|
||||
log_event_err("wakeup failed. ret=%d.", ret);
|
||||
|
||||
if (ret)
|
||||
gsi->rwake_inprogress = false;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -455,7 +460,8 @@ static int ipa_usb_notify_cb(enum ipa_usb_notify_event event,
|
|||
break;
|
||||
|
||||
case IPA_USB_REMOTE_WAKEUP:
|
||||
gsi_wakeup_host(gsi);
|
||||
if (!gsi->rwake_inprogress)
|
||||
gsi_wakeup_host(gsi);
|
||||
break;
|
||||
|
||||
case IPA_USB_SUSPEND_COMPLETED:
|
||||
|
|
@ -2662,6 +2668,8 @@ static void gsi_resume(struct usb_function *f)
|
|||
gsi->params->state = RNDIS_DATA_INITIALIZED;
|
||||
}
|
||||
|
||||
gsi->rwake_inprogress = false;
|
||||
|
||||
post_event(&gsi->d_port, EVT_RESUMED);
|
||||
queue_delayed_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _F_GSI_H
|
||||
|
|
@ -283,6 +283,8 @@ struct f_gsi {
|
|||
void *ipc_log_ctxt;
|
||||
bool rmnet_dtr_status;
|
||||
|
||||
bool rwake_inprogress;
|
||||
|
||||
/* To test remote wakeup using debugfs */
|
||||
struct timer_list gsi_rw_timer;
|
||||
u8 debugfs_rw_timer_enable;
|
||||
|
|
|
|||
Loading…
Reference in a new issue