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

Commit 93952956 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Felipe Balbi
Browse files

usb: gadget: move bind() callback back to struct usb_gadget_driver



This partly reverts 07a18bd7 ("usb gadget: don't save bind callback in
struct usb_composite_driver") and fixes new drivers. The section missmatch
problems was solved by whitelisting bind callback in modpost.

Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 03e42bd5
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1585,6 +1585,7 @@ composite_resume(struct usb_gadget *gadget)
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/


static struct usb_gadget_driver composite_driver = {
static struct usb_gadget_driver composite_driver = {
	.bind		= composite_bind,
	.unbind		= composite_unbind,
	.unbind		= composite_unbind,


	.setup		= composite_setup,
	.setup		= composite_setup,
@@ -1631,7 +1632,7 @@ int usb_composite_probe(struct usb_composite_driver *driver)
	composite_driver.max_speed = driver->max_speed;
	composite_driver.max_speed = driver->max_speed;
	composite = driver;
	composite = driver;


	return usb_gadget_probe_driver(&composite_driver, composite_bind);
	return usb_gadget_probe_driver(&composite_driver);
}
}


/**
/**
+2 −1
Original line number Original line Diff line number Diff line
@@ -405,6 +405,7 @@ static int dbgp_setup(struct usb_gadget *gadget,
static __refdata struct usb_gadget_driver dbgp_driver = {
static __refdata struct usb_gadget_driver dbgp_driver = {
	.function = "dbgp",
	.function = "dbgp",
	.max_speed = USB_SPEED_HIGH,
	.max_speed = USB_SPEED_HIGH,
	.bind = dbgp_bind,
	.unbind = dbgp_unbind,
	.unbind = dbgp_unbind,
	.setup = dbgp_setup,
	.setup = dbgp_setup,
	.disconnect = dbgp_disconnect,
	.disconnect = dbgp_disconnect,
@@ -416,7 +417,7 @@ static __refdata struct usb_gadget_driver dbgp_driver = {


static int __init dbgp_init(void)
static int __init dbgp_init(void)
{
{
	return usb_gadget_probe_driver(&dbgp_driver, dbgp_bind);
	return usb_gadget_probe_driver(&dbgp_driver);
}
}


static void __exit dbgp_exit(void)
static void __exit dbgp_exit(void)
+3 −1
Original line number Original line Diff line number Diff line
@@ -3606,6 +3606,7 @@ static void fsg_resume(struct usb_gadget *gadget)
static __refdata struct usb_gadget_driver		fsg_driver = {
static __refdata struct usb_gadget_driver		fsg_driver = {
	.max_speed	= USB_SPEED_SUPER,
	.max_speed	= USB_SPEED_SUPER,
	.function	= (char *) fsg_string_product,
	.function	= (char *) fsg_string_product,
	.bind		= fsg_bind,
	.unbind		= fsg_unbind,
	.unbind		= fsg_unbind,
	.disconnect	= fsg_disconnect,
	.disconnect	= fsg_disconnect,
	.setup		= fsg_setup,
	.setup		= fsg_setup,
@@ -3653,7 +3654,8 @@ static int __init fsg_init(void)
	if ((rc = fsg_alloc()) != 0)
	if ((rc = fsg_alloc()) != 0)
		return rc;
		return rc;
	fsg = the_fsg;
	fsg = the_fsg;
	if ((rc = usb_gadget_probe_driver(&fsg_driver, fsg_bind)) != 0)
	rc = usb_gadget_probe_driver(&fsg_driver);
	if (rc != 0)
		kref_put(&fsg->ref, fsg_release);
		kref_put(&fsg->ref, fsg_release);
	return rc;
	return rc;
}
}
+5 −2
Original line number Original line Diff line number Diff line
@@ -1758,6 +1758,7 @@ gadgetfs_suspend (struct usb_gadget *gadget)


static struct usb_gadget_driver gadgetfs_driver = {
static struct usb_gadget_driver gadgetfs_driver = {
	.function	= (char *) driver_desc,
	.function	= (char *) driver_desc,
	.bind		= gadgetfs_bind,
	.unbind		= gadgetfs_unbind,
	.unbind		= gadgetfs_unbind,
	.setup		= gadgetfs_setup,
	.setup		= gadgetfs_setup,
	.disconnect	= gadgetfs_disconnect,
	.disconnect	= gadgetfs_disconnect,
@@ -1780,6 +1781,7 @@ static int gadgetfs_probe (struct usb_gadget *gadget)


static struct usb_gadget_driver probe_driver = {
static struct usb_gadget_driver probe_driver = {
	.max_speed	= USB_SPEED_HIGH,
	.max_speed	= USB_SPEED_HIGH,
	.bind		= gadgetfs_probe,
	.unbind		= gadgetfs_nop,
	.unbind		= gadgetfs_nop,
	.setup		= (void *)gadgetfs_nop,
	.setup		= (void *)gadgetfs_nop,
	.disconnect	= gadgetfs_nop,
	.disconnect	= gadgetfs_nop,
@@ -1893,7 +1895,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
		gadgetfs_driver.max_speed = USB_SPEED_HIGH;
		gadgetfs_driver.max_speed = USB_SPEED_HIGH;
	else
	else
		gadgetfs_driver.max_speed = USB_SPEED_FULL;
		gadgetfs_driver.max_speed = USB_SPEED_FULL;
	value = usb_gadget_probe_driver(&gadgetfs_driver, gadgetfs_bind);

	value = usb_gadget_probe_driver(&gadgetfs_driver);
	if (value != 0) {
	if (value != 0) {
		kfree (dev->buf);
		kfree (dev->buf);
		dev->buf = NULL;
		dev->buf = NULL;
@@ -2032,7 +2035,7 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
		return -ESRCH;
		return -ESRCH;


	/* fake probe to determine $CHIP */
	/* fake probe to determine $CHIP */
	(void) usb_gadget_probe_driver(&probe_driver, gadgetfs_probe);
	usb_gadget_probe_driver(&probe_driver);
	if (!CHIP)
	if (!CHIP)
		return -ENODEV;
		return -ENODEV;


+4 −5
Original line number Original line Diff line number Diff line
@@ -311,13 +311,12 @@ EXPORT_SYMBOL_GPL(usb_del_gadget_udc);


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


int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
		int (*bind)(struct usb_gadget *))
{
{
	struct usb_udc		*udc = NULL;
	struct usb_udc		*udc = NULL;
	int			ret;
	int			ret;


	if (!driver || !bind || !driver->setup)
	if (!driver || !driver->bind || !driver->setup)
		return -EINVAL;
		return -EINVAL;


	mutex_lock(&udc_lock);
	mutex_lock(&udc_lock);
@@ -339,7 +338,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
	udc->dev.driver = &driver->driver;
	udc->dev.driver = &driver->driver;


	if (udc_is_newstyle(udc)) {
	if (udc_is_newstyle(udc)) {
		ret = bind(udc->gadget);
		ret = driver->bind(udc->gadget);
		if (ret)
		if (ret)
			goto err1;
			goto err1;
		ret = usb_gadget_udc_start(udc->gadget, driver);
		ret = usb_gadget_udc_start(udc->gadget, driver);
@@ -350,7 +349,7 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
		usb_gadget_connect(udc->gadget);
		usb_gadget_connect(udc->gadget);
	} else {
	} else {


		ret = usb_gadget_start(udc->gadget, driver, bind);
		ret = usb_gadget_start(udc->gadget, driver, driver->bind);
		if (ret)
		if (ret)
			goto err1;
			goto err1;


Loading