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

Commit f48cf80f authored by Fabien Chouteau's avatar Fabien Chouteau Committed by Greg Kroah-Hartman
Browse files

USB: Composite framework: Add suspended sysfs entry



This patch adds a sysfs entry (/sys/devices/platform/_UDC_/gadget/suspended) to
show the suspend state of an USB composite gadget.

Signed-off-by: default avatarFabien Chouteau <fabien.chouteau@barco.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 326b4810
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
What:		/sys/devices/platform/_UDC_/gadget/suspended
Date:		April 2010
Contact:	Fabien Chouteau <fabien.chouteau@barco.com>
Description:
		Show the suspend state of an USB composite gadget.
		1 -> suspended
		0 -> resumed

		(_UDC_ is the name of the USB Device Controller driver)
+21 −0
Original line number Diff line number Diff line
@@ -898,6 +898,18 @@ static void composite_disconnect(struct usb_gadget *gadget)

/*-------------------------------------------------------------------------*/

static ssize_t composite_show_suspended(struct device *dev,
					struct device_attribute *attr,
					char *buf)
{
	struct usb_gadget *gadget = dev_to_usb_gadget(dev);
	struct usb_composite_dev *cdev = get_gadget_data(gadget);

	return sprintf(buf, "%d\n", cdev->suspended);
}

static DEVICE_ATTR(suspended, 0444, composite_show_suspended, NULL);

static void /* __init_or_exit */
composite_unbind(struct usb_gadget *gadget)
{
@@ -944,6 +956,7 @@ composite_unbind(struct usb_gadget *gadget)
	}
	kfree(cdev);
	set_gadget_data(gadget, NULL);
	device_remove_file(&gadget->dev, &dev_attr_suspended);
	composite = NULL;
}

@@ -1036,6 +1049,10 @@ static int __init composite_bind(struct usb_gadget *gadget)
		string_override(composite->strings,
			cdev->desc.iSerialNumber, iSerialNumber);

	status = device_create_file(&gadget->dev, &dev_attr_suspended);
	if (status)
		goto fail;

	INFO(cdev, "%s ready\n", composite->name);
	return 0;

@@ -1064,6 +1081,8 @@ composite_suspend(struct usb_gadget *gadget)
	}
	if (composite->suspend)
		composite->suspend(cdev);

	cdev->suspended = 1;
}

static void
@@ -1084,6 +1103,8 @@ composite_resume(struct usb_gadget *gadget)
				f->resume(f);
		}
	}

	cdev->suspended = 0;
}

/*-------------------------------------------------------------------------*/
+1 −0
Original line number Diff line number Diff line
@@ -326,6 +326,7 @@ struct usb_composite_dev {

	/* private: */
	/* internals */
	unsigned int			suspended:1;
	struct usb_device_descriptor	desc;
	struct list_head		configs;
	struct usb_composite_driver	*driver;
+4 −0
Original line number Diff line number Diff line
@@ -494,6 +494,10 @@ static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
	{ dev_set_drvdata(&gadget->dev, data); }
static inline void *get_gadget_data(struct usb_gadget *gadget)
	{ return dev_get_drvdata(&gadget->dev); }
static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
{
	return container_of(dev, struct usb_gadget, dev);
}

/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
#define gadget_for_each_ep(tmp,gadget) \