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

Commit 6e342fc7 authored by Pavankumar Kondeti's avatar Pavankumar Kondeti Committed by Stephen Boyd
Browse files

USB: android: Provide sysfs file for enabling remote wakeup capability



USB device can specify remote wakeup capability in the configuration
descriptor.  Host may select remote wakeup feature before suspending
the device.  Remote wakeup capability is disabled by default in
android gadget.  Provide sysfs file for enabling remote wakeup capability.
User space can enable/disable this capability based on the selected
composition.  This will also allow testing suspend/resume chapter 9 tests
with remote wakeup enabled.

Change-Id: Ib24aa6c05ace697564ebe5940e62e8f65db4d7c3
Signed-off-by: default avatarPavankumar Kondeti <pkondeti@codeaurora.org>
parent 9ad1e0c0
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1144,6 +1144,32 @@ static int android_enable_function(struct android_dev *dev, char *name)
/*-------------------------------------------------------------------------*/
/* /sys/class/android_usb/android%d/ interface */

static ssize_t remote_wakeup_show(struct device *pdev,
		struct device_attribute *attr, char *buf)
{
	return snprintf(buf, PAGE_SIZE, "%d\n",
			!!(android_config_driver.bmAttributes &
				USB_CONFIG_ATT_WAKEUP));
}

static ssize_t remote_wakeup_store(struct device *pdev,
		struct device_attribute *attr, const char *buff, size_t size)
{
	int enable = 0;

	sscanf(buff, "%d", &enable);

	pr_debug("android_usb: %s remote wakeup\n",
			enable ? "enabling" : "disabling");

	if (enable)
		android_config_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
	else
		android_config_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;

	return size;
}

static ssize_t
functions_show(struct device *pdev, struct device_attribute *attr, char *buf)
{
@@ -1379,6 +1405,8 @@ static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, enable_show, enable_store);
static DEVICE_ATTR(pm_qos, S_IRUGO | S_IWUSR,
		pm_qos_show, pm_qos_store);
static DEVICE_ATTR(state, S_IRUGO, state_show, NULL);
static DEVICE_ATTR(remote_wakeup, S_IRUGO | S_IWUSR,
		remote_wakeup_show, remote_wakeup_store);

static struct device_attribute *android_usb_attributes[] = {
	&dev_attr_idVendor,
@@ -1394,6 +1422,7 @@ static struct device_attribute *android_usb_attributes[] = {
	&dev_attr_enable,
	&dev_attr_pm_qos,
	&dev_attr_state,
	&dev_attr_remote_wakeup,
	NULL
};