usb: gadget: udc-core: allow udc class register gadget device
Currently all UDC drivers are calling device_register() before calling usb_add_gadget_udc(). In order to avoid code duplication, we can allow udc-core.c register that device. However that would become a really large patch, so to cope with the meanwhile and allow us to write bite-sized patches, we're adding a flag which will be set by UDC driver once it removes the code for registering the gadget device. Once all are converted, the new flag will be removed. Reviewed-by: Tomasz Figa <tomasz.figa@gmail.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
		
					parent
					
						
							
								7eaf8f2a7d
							
						
					
				
			
			
				commit
				
					
						f07bd56bbd
					
				
			
		
					 2 changed files with 23 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -173,6 +173,14 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
 | 
			
		|||
	if (!udc)
 | 
			
		||||
		goto err1;
 | 
			
		||||
 | 
			
		||||
	if (gadget->register_my_device) {
 | 
			
		||||
		dev_set_name(&gadget->dev, "gadget");
 | 
			
		||||
 | 
			
		||||
		ret = device_register(&gadget->dev);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			goto err2;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	device_initialize(&udc->dev);
 | 
			
		||||
	udc->dev.release = usb_udc_release;
 | 
			
		||||
	udc->dev.class = udc_class;
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +188,7 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
 | 
			
		|||
	udc->dev.parent = parent;
 | 
			
		||||
	ret = dev_set_name(&udc->dev, "%s", kobject_name(&parent->kobj));
 | 
			
		||||
	if (ret)
 | 
			
		||||
		goto err2;
 | 
			
		||||
		goto err3;
 | 
			
		||||
 | 
			
		||||
	udc->gadget = gadget;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,18 +197,22 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
 | 
			
		|||
 | 
			
		||||
	ret = device_add(&udc->dev);
 | 
			
		||||
	if (ret)
 | 
			
		||||
		goto err3;
 | 
			
		||||
		goto err4;
 | 
			
		||||
 | 
			
		||||
	mutex_unlock(&udc_lock);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
err3:
 | 
			
		||||
 | 
			
		||||
err4:
 | 
			
		||||
	list_del(&udc->list);
 | 
			
		||||
	mutex_unlock(&udc_lock);
 | 
			
		||||
 | 
			
		||||
err2:
 | 
			
		||||
err3:
 | 
			
		||||
	put_device(&udc->dev);
 | 
			
		||||
 | 
			
		||||
err2:
 | 
			
		||||
	if (gadget->register_my_device)
 | 
			
		||||
		put_device(&gadget->dev);
 | 
			
		||||
err1:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -254,6 +266,9 @@ found:
 | 
			
		|||
 | 
			
		||||
	kobject_uevent(&udc->dev.kobj, KOBJ_REMOVE);
 | 
			
		||||
	device_unregister(&udc->dev);
 | 
			
		||||
 | 
			
		||||
	if (gadget->register_my_device)
 | 
			
		||||
		device_unregister(&gadget->dev);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(usb_del_gadget_udc);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -494,6 +494,9 @@ struct usb_gadget_ops {
 | 
			
		|||
 *	only supports HNP on a different root port.
 | 
			
		||||
 * @b_hnp_enable: OTG device feature flag, indicating that the A-Host
 | 
			
		||||
 *	enabled HNP support.
 | 
			
		||||
 * @register_my_device: Flag telling udc-core that UDC driver didn't
 | 
			
		||||
 *	register the gadget device to the driver model. Temporary until
 | 
			
		||||
 *	all UDC drivers are fixed up properly.
 | 
			
		||||
 * @name: Identifies the controller hardware type.  Used in diagnostics
 | 
			
		||||
 *	and sometimes configuration.
 | 
			
		||||
 * @dev: Driver model state for this abstract device.
 | 
			
		||||
| 
						 | 
				
			
			@ -531,6 +534,7 @@ struct usb_gadget {
 | 
			
		|||
	unsigned			b_hnp_enable:1;
 | 
			
		||||
	unsigned			a_hnp_support:1;
 | 
			
		||||
	unsigned			a_alt_hnp_support:1;
 | 
			
		||||
	unsigned			register_my_device:1;
 | 
			
		||||
	const char			*name;
 | 
			
		||||
	struct device			dev;
 | 
			
		||||
	unsigned			out_epnum;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue