summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorAndrzej Pietrasiewicz <andrzej.p@samsung.com>2015-03-03 09:52:19 (GMT)
committerFelipe Balbi <balbi@ti.com>2015-03-10 20:33:37 (GMT)
commita844715d2fc44adc2da17f90b34cc0d0c1e81596 (patch)
tree381e935e9c7ffe59f81b9a479eb1d235d86cc724 /drivers/usb/gadget
parentd82cd82edb98d727c6a0804a6e271e3081559404 (diff)
downloadlinux-a844715d2fc44adc2da17f90b34cc0d0c1e81596.tar.xz
usb: gadget: printer: call gprinter_setup() from gadget's bind
Call gprinter_setup() from gadget's bind instead of module's init. Call gprinter_cleaup() corerspondingly. This detaches printer function's logic from legacy printer gadget's implementation. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/legacy/printer.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
index 83cea9a5c..b7889b1 100644
--- a/drivers/usb/gadget/legacy/printer.c
+++ b/drivers/usb/gadget/legacy/printer.c
@@ -1330,45 +1330,47 @@ static int __init printer_bind(struct usb_composite_dev *cdev)
{
int ret;
+ ret = gprinter_setup();
+ if (ret)
+ return ret;
+
ret = usb_string_ids_tab(cdev, strings);
- if (ret < 0)
+ if (ret < 0) {
+ gprinter_cleanup();
return ret;
+ }
device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
- if (ret)
+ if (ret) {
+ gprinter_cleanup();
return ret;
+ }
usb_composite_overwrite_options(cdev, &coverwrite);
return ret;
}
+static int __exit printer_unbind(struct usb_composite_dev *cdev)
+{
+ gprinter_cleanup();
+ return 0;
+}
+
static __refdata struct usb_composite_driver printer_driver = {
.name = shortname,
.dev = &device_desc,
.strings = dev_strings,
.max_speed = USB_SPEED_SUPER,
.bind = printer_bind,
+ .unbind = printer_unbind,
};
static int __init
init(void)
{
- int status;
-
- status = gprinter_setup();
- if (status)
- return status;
-
- status = usb_composite_probe(&printer_driver);
- if (status) {
- class_destroy(usb_gadget_class);
- unregister_chrdev_region(g_printer_devno, 1);
- pr_err("usb_gadget_probe_driver %x\n", status);
- }
-
- return status;
+ return usb_composite_probe(&printer_driver);
}
module_init(init);
@@ -1377,7 +1379,6 @@ cleanup(void)
{
mutex_lock(&usb_printer_gadget.lock_printer_io);
usb_composite_unregister(&printer_driver);
- gprinter_cleanup();
mutex_unlock(&usb_printer_gadget.lock_printer_io);
}
module_exit(cleanup);