Эх сурвалжийг харах

usb: gadget: nokia: convert to new interface of f_ecm

this will let us deprecate (and remove) the old interface.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Andrzej Pietrasiewicz 12 жил өмнө
parent
commit
b904d0811d

+ 1 - 0
drivers/usb/gadget/Kconfig

@@ -862,6 +862,7 @@ config USB_G_NOKIA
 	select USB_F_ACM
 	select USB_F_ACM
 	select USB_F_OBEX
 	select USB_F_OBEX
 	select USB_F_PHONET
 	select USB_F_PHONET
+	select USB_F_ECM
 	help
 	help
 	  The Nokia composite gadget provides support for acm, obex
 	  The Nokia composite gadget provides support for acm, obex
 	  and phonet in only one composite gadget driver.
 	  and phonet in only one composite gadget driver.

+ 35 - 31
drivers/usb/gadget/nokia.c

@@ -22,6 +22,7 @@
 #include "u_serial.h"
 #include "u_serial.h"
 #include "u_ether.h"
 #include "u_ether.h"
 #include "u_phonet.h"
 #include "u_phonet.h"
+#include "u_ecm.h"
 #include "gadget_chips.h"
 #include "gadget_chips.h"
 
 
 /* Defines */
 /* Defines */
@@ -29,20 +30,6 @@
 #define NOKIA_VERSION_NUM		0x0211
 #define NOKIA_VERSION_NUM		0x0211
 #define NOKIA_LONG_NAME			"N900 (PC-Suite Mode)"
 #define NOKIA_LONG_NAME			"N900 (PC-Suite Mode)"
 
 
-/*-------------------------------------------------------------------------*/
-
-/*
- * Kbuild is not very cooperative with respect to linking separately
- * compiled library objects into one module.  So for now we won't use
- * separate compilation ... ensuring init/exit sections work to shrink
- * the runtime footprint, and giving us at least some parts of what
- * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
- */
-#define USBF_ECM_INCLUDED
-#include "f_ecm.c"
-#include "u_ether.h"
-
-/*-------------------------------------------------------------------------*/
 USB_GADGET_COMPOSITE_OPTIONS();
 USB_GADGET_COMPOSITE_OPTIONS();
 
 
 USB_ETHERNET_MODULE_PARAMETERS();
 USB_ETHERNET_MODULE_PARAMETERS();
@@ -99,14 +86,14 @@ MODULE_LICENSE("GPL");
 /*-------------------------------------------------------------------------*/
 /*-------------------------------------------------------------------------*/
 static struct usb_function *f_acm_cfg1;
 static struct usb_function *f_acm_cfg1;
 static struct usb_function *f_acm_cfg2;
 static struct usb_function *f_acm_cfg2;
-static u8 host_mac[ETH_ALEN];
+static struct usb_function *f_ecm_cfg1;
+static struct usb_function *f_ecm_cfg2;
 static struct usb_function *f_obex1_cfg1;
 static struct usb_function *f_obex1_cfg1;
 static struct usb_function *f_obex2_cfg1;
 static struct usb_function *f_obex2_cfg1;
 static struct usb_function *f_obex1_cfg2;
 static struct usb_function *f_obex1_cfg2;
 static struct usb_function *f_obex2_cfg2;
 static struct usb_function *f_obex2_cfg2;
 static struct usb_function *f_phonet_cfg1;
 static struct usb_function *f_phonet_cfg1;
 static struct usb_function *f_phonet_cfg2;
 static struct usb_function *f_phonet_cfg2;
-static struct eth_dev *the_dev;
 
 
 
 
 static struct usb_configuration nokia_config_500ma_driver = {
 static struct usb_configuration nokia_config_500ma_driver = {
@@ -126,6 +113,7 @@ static struct usb_configuration nokia_config_100ma_driver = {
 };
 };
 
 
 static struct usb_function_instance *fi_acm;
 static struct usb_function_instance *fi_acm;
+static struct usb_function_instance *fi_ecm;
 static struct usb_function_instance *fi_obex1;
 static struct usb_function_instance *fi_obex1;
 static struct usb_function_instance *fi_obex2;
 static struct usb_function_instance *fi_obex2;
 static struct usb_function_instance *fi_phonet;
 static struct usb_function_instance *fi_phonet;
@@ -135,6 +123,7 @@ static int __init nokia_bind_config(struct usb_configuration *c)
 	struct usb_function *f_acm;
 	struct usb_function *f_acm;
 	struct usb_function *f_phonet = NULL;
 	struct usb_function *f_phonet = NULL;
 	struct usb_function *f_obex1 = NULL;
 	struct usb_function *f_obex1 = NULL;
+	struct usb_function *f_ecm;
 	struct usb_function *f_obex2 = NULL;
 	struct usb_function *f_obex2 = NULL;
 	int status = 0;
 	int status = 0;
 	int obex1_stat = 0;
 	int obex1_stat = 0;
@@ -165,6 +154,12 @@ static int __init nokia_bind_config(struct usb_configuration *c)
 		goto err_get_acm;
 		goto err_get_acm;
 	}
 	}
 
 
+	f_ecm = usb_get_function(fi_ecm);
+	if (IS_ERR(f_ecm)) {
+		status = PTR_ERR(f_ecm);
+		goto err_get_ecm;
+	}
+
 	if (!IS_ERR_OR_NULL(f_phonet)) {
 	if (!IS_ERR_OR_NULL(f_phonet)) {
 		phonet_stat = usb_add_function(c, f_phonet);
 		phonet_stat = usb_add_function(c, f_phonet);
 		if (phonet_stat)
 		if (phonet_stat)
@@ -187,18 +182,20 @@ static int __init nokia_bind_config(struct usb_configuration *c)
 	if (status)
 	if (status)
 		goto err_conf;
 		goto err_conf;
 
 
-	status = ecm_bind_config(c, host_mac, the_dev);
+	status = usb_add_function(c, f_ecm);
 	if (status) {
 	if (status) {
 		pr_debug("could not bind ecm config %d\n", status);
 		pr_debug("could not bind ecm config %d\n", status);
 		goto err_ecm;
 		goto err_ecm;
 	}
 	}
 	if (c == &nokia_config_500ma_driver) {
 	if (c == &nokia_config_500ma_driver) {
 		f_acm_cfg1 = f_acm;
 		f_acm_cfg1 = f_acm;
+		f_ecm_cfg1 = f_ecm;
 		f_phonet_cfg1 = f_phonet;
 		f_phonet_cfg1 = f_phonet;
 		f_obex1_cfg1 = f_obex1;
 		f_obex1_cfg1 = f_obex1;
 		f_obex2_cfg1 = f_obex2;
 		f_obex2_cfg1 = f_obex2;
 	} else {
 	} else {
 		f_acm_cfg2 = f_acm;
 		f_acm_cfg2 = f_acm;
+		f_ecm_cfg2 = f_ecm;
 		f_phonet_cfg2 = f_phonet;
 		f_phonet_cfg2 = f_phonet;
 		f_obex1_cfg2 = f_obex1;
 		f_obex1_cfg2 = f_obex1;
 		f_obex2_cfg2 = f_obex2;
 		f_obex2_cfg2 = f_obex2;
@@ -214,6 +211,8 @@ err_conf:
 		usb_remove_function(c, f_obex1);
 		usb_remove_function(c, f_obex1);
 	if (!phonet_stat)
 	if (!phonet_stat)
 		usb_remove_function(c, f_phonet);
 		usb_remove_function(c, f_phonet);
+	usb_put_function(f_ecm);
+err_get_ecm:
 	usb_put_function(f_acm);
 	usb_put_function(f_acm);
 err_get_acm:
 err_get_acm:
 	if (!IS_ERR_OR_NULL(f_obex2))
 	if (!IS_ERR_OR_NULL(f_obex2))
@@ -230,13 +229,6 @@ static int __init nokia_bind(struct usb_composite_dev *cdev)
 	struct usb_gadget	*gadget = cdev->gadget;
 	struct usb_gadget	*gadget = cdev->gadget;
 	int			status;
 	int			status;
 
 
-	the_dev = gether_setup(cdev->gadget, dev_addr, host_addr, host_mac,
-			       qmult);
-	if (IS_ERR(the_dev)) {
-		status = PTR_ERR(the_dev);
-		goto err_ether;
-	}
-
 	status = usb_string_ids_tab(cdev, strings_dev);
 	status = usb_string_ids_tab(cdev, strings_dev);
 	if (status < 0)
 	if (status < 0)
 		goto err_usb;
 		goto err_usb;
@@ -246,8 +238,10 @@ static int __init nokia_bind(struct usb_composite_dev *cdev)
 	nokia_config_500ma_driver.iConfiguration = status;
 	nokia_config_500ma_driver.iConfiguration = status;
 	nokia_config_100ma_driver.iConfiguration = status;
 	nokia_config_100ma_driver.iConfiguration = status;
 
 
-	if (!gadget_supports_altsettings(gadget))
+	if (!gadget_supports_altsettings(gadget)) {
+		status = -ENODEV;
 		goto err_usb;
 		goto err_usb;
+	}
 
 
 	fi_phonet = usb_get_function_instance("phonet");
 	fi_phonet = usb_get_function_instance("phonet");
 	if (IS_ERR(fi_phonet))
 	if (IS_ERR(fi_phonet))
@@ -262,14 +256,22 @@ static int __init nokia_bind(struct usb_composite_dev *cdev)
 		pr_debug("could not find obex function 2\n");
 		pr_debug("could not find obex function 2\n");
 
 
 	fi_acm = usb_get_function_instance("acm");
 	fi_acm = usb_get_function_instance("acm");
-	if (IS_ERR(fi_acm))
+	if (IS_ERR(fi_acm)) {
+		status = PTR_ERR(fi_acm);
 		goto err_obex2_inst;
 		goto err_obex2_inst;
+	}
+
+	fi_ecm = usb_get_function_instance("ecm");
+	if (IS_ERR(fi_ecm)) {
+		status = PTR_ERR(fi_ecm);
+		goto err_acm_inst;
+	}
 
 
 	/* finally register the configuration */
 	/* finally register the configuration */
 	status = usb_add_config(cdev, &nokia_config_500ma_driver,
 	status = usb_add_config(cdev, &nokia_config_500ma_driver,
 			nokia_bind_config);
 			nokia_bind_config);
 	if (status < 0)
 	if (status < 0)
-		goto err_acm_inst;
+		goto err_ecm_inst;
 
 
 	status = usb_add_config(cdev, &nokia_config_100ma_driver,
 	status = usb_add_config(cdev, &nokia_config_100ma_driver,
 			nokia_bind_config);
 			nokia_bind_config);
@@ -289,6 +291,9 @@ err_put_cfg1:
 		usb_put_function(f_obex2_cfg1);
 		usb_put_function(f_obex2_cfg1);
 	if (!IS_ERR_OR_NULL(f_phonet_cfg1))
 	if (!IS_ERR_OR_NULL(f_phonet_cfg1))
 		usb_put_function(f_phonet_cfg1);
 		usb_put_function(f_phonet_cfg1);
+	usb_put_function(f_ecm_cfg1);
+err_ecm_inst:
+	usb_put_function_instance(fi_ecm);
 err_acm_inst:
 err_acm_inst:
 	usb_put_function_instance(fi_acm);
 	usb_put_function_instance(fi_acm);
 err_obex2_inst:
 err_obex2_inst:
@@ -299,8 +304,6 @@ err_obex2_inst:
 	if (!IS_ERR(fi_phonet))
 	if (!IS_ERR(fi_phonet))
 		usb_put_function_instance(fi_phonet);
 		usb_put_function_instance(fi_phonet);
 err_usb:
 err_usb:
-	gether_cleanup(the_dev);
-err_ether:
 	return status;
 	return status;
 }
 }
 
 
@@ -320,7 +323,10 @@ static int __exit nokia_unbind(struct usb_composite_dev *cdev)
 		usb_put_function(f_phonet_cfg2);
 		usb_put_function(f_phonet_cfg2);
 	usb_put_function(f_acm_cfg1);
 	usb_put_function(f_acm_cfg1);
 	usb_put_function(f_acm_cfg2);
 	usb_put_function(f_acm_cfg2);
+	usb_put_function(f_ecm_cfg1);
+	usb_put_function(f_ecm_cfg2);
 
 
+	usb_put_function_instance(fi_ecm);
 	if (!IS_ERR(fi_obex2))
 	if (!IS_ERR(fi_obex2))
 		usb_put_function_instance(fi_obex2);
 		usb_put_function_instance(fi_obex2);
 	if (!IS_ERR(fi_obex1))
 	if (!IS_ERR(fi_obex1))
@@ -329,8 +335,6 @@ static int __exit nokia_unbind(struct usb_composite_dev *cdev)
 		usb_put_function_instance(fi_phonet);
 		usb_put_function_instance(fi_phonet);
 	usb_put_function_instance(fi_acm);
 	usb_put_function_instance(fi_acm);
 
 
-	gether_cleanup(the_dev);
-
 	return 0;
 	return 0;
 }
 }