瀏覽代碼

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>
Andrzej Pietrasiewicz 10 年之前
父節點
當前提交
a844715d2f
共有 1 個文件被更改,包括 18 次插入17 次删除
  1. 18 17
      drivers/usb/gadget/legacy/printer.c

+ 18 - 17
drivers/usb/gadget/legacy/printer.c

@@ -1330,45 +1330,47 @@ static int __init printer_bind(struct usb_composite_dev *cdev)
 {
 {
 	int ret;
 	int ret;
 
 
+	ret = gprinter_setup();
+	if (ret)
+		return ret;
+
 	ret = usb_string_ids_tab(cdev, strings);
 	ret = usb_string_ids_tab(cdev, strings);
-	if (ret < 0)
+	if (ret < 0) {
+		gprinter_cleanup();
 		return ret;
 		return ret;
+	}
 	device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
 	device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
 	device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
 	device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
 	device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
 
 
 	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
 	ret = usb_add_config(cdev, &printer_cfg_driver, printer_do_config);
-	if (ret)
+	if (ret) {
+		gprinter_cleanup();
 		return ret;
 		return ret;
+	}
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	usb_composite_overwrite_options(cdev, &coverwrite);
 	return ret;
 	return ret;
 }
 }
 
 
+static int __exit printer_unbind(struct usb_composite_dev *cdev)
+{
+	gprinter_cleanup();
+	return 0;
+}
+
 static __refdata struct usb_composite_driver printer_driver = {
 static __refdata struct usb_composite_driver printer_driver = {
 	.name           = shortname,
 	.name           = shortname,
 	.dev            = &device_desc,
 	.dev            = &device_desc,
 	.strings        = dev_strings,
 	.strings        = dev_strings,
 	.max_speed      = USB_SPEED_SUPER,
 	.max_speed      = USB_SPEED_SUPER,
 	.bind		= printer_bind,
 	.bind		= printer_bind,
+	.unbind		= printer_unbind,
 };
 };
 
 
 static int __init
 static int __init
 init(void)
 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);
 module_init(init);
 
 
@@ -1377,7 +1379,6 @@ cleanup(void)
 {
 {
 	mutex_lock(&usb_printer_gadget.lock_printer_io);
 	mutex_lock(&usb_printer_gadget.lock_printer_io);
 	usb_composite_unregister(&printer_driver);
 	usb_composite_unregister(&printer_driver);
-	gprinter_cleanup();
 	mutex_unlock(&usb_printer_gadget.lock_printer_io);
 	mutex_unlock(&usb_printer_gadget.lock_printer_io);
 }
 }
 module_exit(cleanup);
 module_exit(cleanup);