On Mon, 4 Oct 2010, Felipe Balbi wrote: > this class will be used to abstract away > several of the duplicated operations scatered > among the USB gadget controller drivers. > > Later, we can add an atomic notifer to tell > interested drivers about what's happening > with the controller. Notifications such as > suspend, resume, enumerated, etc will be > useful, at a minimum, for implementing > usb charger detection. Why is this implemented in terms of a udc class device? Why not just associate the attributes with the controller device itself? Is this for the uevents? I've never really understood the point of class devices. > +/** > + * usb_add_udc - adds a new udc to the udc class driver list > + * @parent: the parent device to this udc. Usually the controller > + * driver's device. > + * @udc: the udc to be added to the list > + * > + * Returns zero on success, negative errno otherwise. > + */ > +int usb_add_udc(struct device *parent, struct usb_udc *udc) > +{ > + struct device *dev; > + unsigned long flags; > + int ret; > + > + if (!udc->gadget || !udc->gadget->ops || > + !udc->gadget->ops->start) { > + dev_dbg(parent, "unitializaed gadget\n"); > + return -EINVAL; > + } > + > + dev_vdbg(parent, "registering UDC\n"); > + > + dev = kzalloc(sizeof(*dev), GFP_KERNEL); > + if (!dev) { > + ret = -ENOMEM; > + goto err1; > + } > + > + spin_lock_irqsave(&udc_lock, flags); > + > + device_initialize(dev); > + > + dev->class = udc_class; > + dev->type = &udc_device_type; > + dev->parent = parent; > + dev->release = usb_udc_release; > + dev_set_drvdata(dev, udc); > + udc->dev = dev; > + udc->gadget->dev.parent = udc->dev; > + udc->gadget->dev.release = usb_udc_nop_release; This causes problems with dummy-hcd. It actually needs to do something when the gadget device is released. Why not embed the gadget and the device node directly in the usb_udc structure, instead of just putting pointers there? Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html