[PATCH v5 07/15] usb/gadget: f_mass_storage: create fsg_common_set_cdev for use in fsg_common_init

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



fsg_common_init is a lengthy function. Factor a portion of it out.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxx>
Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
---
 drivers/usb/gadget/f_mass_storage.c |   52 +++++++++++++++++++++--------------
 drivers/usb/gadget/f_mass_storage.h |    3 ++
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 39f7f1f..61952b6 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -2800,6 +2800,35 @@ void fsg_common_set_private_data(struct fsg_common *common, void *priv)
 	common->private_data = priv;
 }
 
+int fsg_common_set_cdev(struct fsg_common *common,
+			 struct usb_composite_dev *cdev, bool can_stall)
+{
+	struct usb_string *us;
+	int rc;
+
+	common->gadget = cdev->gadget;
+	common->ep0 = cdev->gadget->ep0;
+	common->ep0req = cdev->req;
+	common->cdev = cdev;
+
+	us = usb_gstrings_attach(cdev, fsg_strings_array,
+				 ARRAY_SIZE(fsg_strings));
+	if (IS_ERR(us)) {
+		rc = PTR_ERR(us);
+		return rc;
+	}
+	fsg_intf_desc.iInterface = us[FSG_STRING_INTERFACE].id;
+
+	/*
+	 * Some peripheral controllers are known not to be able to
+	 * halt bulk endpoints correctly.  If one of them is present,
+	 * disable stalls.
+	 */
+	common->can_stall = can_stall && !(gadget_is_at91(common->gadget));
+
+	return 0;
+}
+
 #define MAX_LUN_NAME_LEN 80
 
 struct fsg_common *fsg_common_init(struct fsg_common *common,
@@ -2809,7 +2838,6 @@ struct fsg_common *fsg_common_init(struct fsg_common *common,
 	struct usb_gadget *gadget = cdev->gadget;
 	struct fsg_lun **curlun_it;
 	struct fsg_lun_config *lcfg;
-	struct usb_string *us;
 	int nluns, i, rc;
 	char *pathbuf;
 
@@ -2830,19 +2858,9 @@ struct fsg_common *fsg_common_init(struct fsg_common *common,
 	fsg_common_set_ops(common, cfg->ops);
 	fsg_common_set_private_data(common, cfg->private_data);
 
-	common->gadget = gadget;
-	common->ep0 = gadget->ep0;
-	common->ep0req = cdev->req;
-	common->cdev = cdev;
-
-	us = usb_gstrings_attach(cdev, fsg_strings_array,
-				 ARRAY_SIZE(fsg_strings));
-	if (IS_ERR(us)) {
-		rc = PTR_ERR(us);
+	rc = fsg_common_set_cdev(common, cdev, cfg->can_stall);
+	if (rc)
 		goto error_release;
-	}
-	fsg_intf_desc.iInterface = us[FSG_STRING_INTERFACE].id;
-
 
 	rc = fsg_common_set_nluns(common, cfg->nluns);
 	if (rc)
@@ -2924,14 +2942,6 @@ struct fsg_common *fsg_common_init(struct fsg_common *common,
 				     : "File-Stor Gadget"),
 		 i);
 
-	/*
-	 * Some peripheral controllers are known not to be able to
-	 * halt bulk endpoints correctly.  If one of them is present,
-	 * disable stalls.
-	 */
-	common->can_stall = cfg->can_stall &&
-		!(gadget_is_at91(common->gadget));
-
 
 	/* Tell the thread to start working */
 	common->thread_task =
diff --git a/drivers/usb/gadget/f_mass_storage.h b/drivers/usb/gadget/f_mass_storage.h
index 3be09a1..547a5c6 100644
--- a/drivers/usb/gadget/f_mass_storage.h
+++ b/drivers/usb/gadget/f_mass_storage.h
@@ -111,6 +111,9 @@ void fsg_common_set_ops(struct fsg_common *common,
 
 void fsg_common_set_private_data(struct fsg_common *common, void *priv);
 
+int fsg_common_set_cdev(struct fsg_common *common,
+			struct usb_composite_dev *cdev, bool can_stall);
+
 void fsg_common_remove_lun(struct fsg_lun *lun, bool sysfs);
 
 void fsg_common_remove_luns(struct fsg_common *common);
-- 
1.7.0.4

--
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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux