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

Commit ed26eedd authored by Devdutt Patnaik's avatar Devdutt Patnaik
Browse files

usb: f_gsi: Report Function Remote Wake capabilities



Add support for sending Function Wake capabilities in
response to GET_STATUS from the host. GET_STATUS addressed
to an Interface allows the device to report if it is capable
of doing a Function Remote Wake. Windows8 MBIM hosts request this
information before enabling Suspend in SS mode.

CRs-Fixed: 966352
Change-Id: Ic73ab794b6b3e70733c0362785ec601c6610a3e6
Signed-off-by: default avatarDevdutt Patnaik <dpatnaik@codeaurora.org>
parent a8371783
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/kernel.h>
#include <linux/usb/usb_ctrl_qti.h>
#include <linux/etherdevice.h>
#include <linux/usb/composite.h>
#include <linux/debugfs.h>
#include <linux/ipa_usb.h>
#include "f_gsi.h"
@@ -2228,6 +2229,14 @@ static void gsi_resume(struct usb_function *f)
	log_event_dbg("%s: completed", __func__);
}

static int gsi_get_status(struct usb_function *f)
{
	unsigned remote_wakeup_en_status = f->func_wakeup_allowed ? 1 : 0;

	return (remote_wakeup_en_status << FUNC_WAKEUP_ENABLE_SHIFT) |
		(1 << FUNC_WAKEUP_CAPABLE_SHIFT);
}

static int gsi_func_suspend(struct usb_function *f, u8 options)
{
	bool func_wakeup_allowed;
@@ -2855,6 +2864,7 @@ int gsi_bind_config(struct usb_configuration *c, enum ipa_usb_teth_prot prot_id)
	gsi->function.setup = gsi_setup;
	gsi->function.disable = gsi_disable;
	gsi->function.suspend = gsi_suspend;
	gsi->function.get_status = gsi_get_status;
	gsi->function.func_suspend = gsi_func_suspend;
	gsi->function.resume = gsi_resume;