summaryrefslogtreecommitdiff
path: root/patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch')
-rw-r--r--patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch199
1 files changed, 199 insertions, 0 deletions
diff --git a/patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch b/patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch
new file mode 100644
index 00000000000..9a1dc1d5a9a
--- /dev/null
+++ b/patches.tizen/1087-Revert-usb-gadget-multi-convert-to-new-interface-of-.patch
@@ -0,0 +1,199 @@
+From e56fa297b2eccb2ca8c36bdddc375c7adf4f8c2d Mon Sep 17 00:00:00 2001
+From: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
+Date: Tue, 14 Jan 2014 14:26:23 +0100
+Subject: [PATCH 1087/1302] Revert "usb/gadget: multi: convert to new interface
+ of f_rndis"
+
+This reverts commit 341030a348bb6faa52e0b69a3ba17f827aae2af2.
+
+Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
+---
+ drivers/usb/gadget/Kconfig | 3 +-
+ drivers/usb/gadget/multi.c | 73 +++++++++++++++-------------------------------
+ 2 files changed, 24 insertions(+), 52 deletions(-)
+
+diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
+index 9a67faf..33ba3ec 100644
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -1060,6 +1060,7 @@ config USB_G_MULTI
+ select USB_LIBCOMPOSITE
+ select USB_U_SERIAL
+ select USB_U_ETHER
++ select USB_U_RNDIS
+ select USB_F_ACM
+ select USB_U_MS
+ help
+@@ -1080,8 +1081,6 @@ config USB_G_MULTI
+ config USB_G_MULTI_RNDIS
+ bool "RNDIS + CDC Serial + Storage configuration"
+ depends on USB_G_MULTI
+- select USB_U_RNDIS
+- select USB_F_RNDIS
+ default y
+ help
+ This option enables a configuration with RNDIS, CDC Serial and
+diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c
+index be62bea..0d1d132 100644
+--- a/drivers/usb/gadget/multi.c
++++ b/drivers/usb/gadget/multi.c
+@@ -47,7 +47,8 @@ MODULE_LICENSE("GPL");
+
+ #include "u_ecm.h"
+ #ifdef USB_ETH_RNDIS
+-# include "u_rndis.h"
++# define USB_FRNDIS_INCLUDED
++# include "f_rndis.c"
+ # include "rndis.h"
+ #endif
+ #include "u_ether.h"
+@@ -151,13 +152,14 @@ FSG_MODULE_PARAMETERS(/* no prefix */, fsg_mod_data);
+ static struct fsg_common fsg_common;
+
+ static struct usb_function_instance *fi_acm;
++static struct eth_dev *the_dev;
+
+ /********** RNDIS **********/
+
+ #ifdef USB_ETH_RNDIS
+-static struct usb_function_instance *fi_rndis;
++static u8 host_mac[ETH_ALEN];
++
+ static struct usb_function *f_acm_rndis;
+-static struct usb_function *f_rndis;
+
+ static __init int rndis_do_config(struct usb_configuration *c)
+ {
+@@ -168,19 +170,13 @@ static __init int rndis_do_config(struct usb_configuration *c)
+ c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+ }
+
+- f_rndis = usb_get_function(fi_rndis);
+- if (IS_ERR(f_rndis))
+- return PTR_ERR(f_rndis);
+-
+- ret = usb_add_function(c, f_rndis);
++ ret = rndis_bind_config(c, host_mac, the_dev);
+ if (ret < 0)
+- goto err_func_rndis;
++ return ret;
+
+ f_acm_rndis = usb_get_function(fi_acm);
+- if (IS_ERR(f_acm_rndis)) {
+- ret = PTR_ERR(f_acm_rndis);
+- goto err_func_acm;
+- }
++ if (IS_ERR(f_acm_rndis))
++ return PTR_ERR(f_acm_rndis);
+
+ ret = usb_add_function(c, f_acm_rndis);
+ if (ret)
+@@ -195,10 +191,6 @@ err_fsg:
+ usb_remove_function(c, f_acm_rndis);
+ err_conf:
+ usb_put_function(f_acm_rndis);
+-err_func_acm:
+- usb_remove_function(c, f_rndis);
+-err_func_rndis:
+- usb_put_function(f_rndis);
+ return ret;
+ }
+
+@@ -308,14 +300,11 @@ static int __ref multi_bind(struct usb_composite_dev *cdev)
+ #ifdef CONFIG_USB_G_MULTI_CDC
+ struct f_ecm_opts *ecm_opts;
+ #endif
+-#ifdef USB_ETH_RNDIS
+- struct f_rndis_opts *rndis_opts;
+-#endif
+ int status;
+
+ if (!can_support_ecm(cdev->gadget)) {
+ dev_err(&gadget->dev, "controller '%s' not usable\n",
+- gadget->name);
++ gadget->name);
+ return -EINVAL;
+ }
+
+@@ -331,38 +320,26 @@ static int __ref multi_bind(struct usb_composite_dev *cdev)
+ pr_info("using host ethernet address: %s", host_addr);
+ if (!gether_set_dev_addr(ecm_opts->net, dev_addr))
+ pr_info("using self ethernet address: %s", dev_addr);
+-#endif
+
+-#ifdef USB_ETH_RNDIS
+- fi_rndis = usb_get_function_instance("rndis");
+- if (IS_ERR(fi_rndis)) {
+- status = PTR_ERR(fi_rndis);
+- goto fail;
+- }
++ the_dev = netdev_priv(ecm_opts->net);
+
+- rndis_opts = container_of(fi_rndis, struct f_rndis_opts, func_inst);
++#elif defined USB_ETH_RNDIS
+
+- gether_set_qmult(rndis_opts->net, qmult);
+- if (!gether_set_host_addr(rndis_opts->net, host_addr))
+- pr_info("using host ethernet address: %s", host_addr);
+- if (!gether_set_dev_addr(rndis_opts->net, dev_addr))
+- pr_info("using self ethernet address: %s", dev_addr);
++ /* set up network link layer */
++ the_dev = gether_setup(cdev->gadget, dev_addr, host_addr, host_mac,
++ qmult);
++ if (IS_ERR(the_dev))
++ return PTR_ERR(the_dev);
+ #endif
+
+ #if (defined CONFIG_USB_G_MULTI_CDC && defined USB_ETH_RNDIS)
+- /*
+- * If both ecm and rndis are selected then:
+- * 1) rndis borrows the net interface from ecm
+- * 2) since the interface is shared it must not be bound
+- * twice - in ecm's _and_ rndis' binds, so do it here.
+- */
+ gether_set_gadget(ecm_opts->net, cdev->gadget);
+ status = gether_register_netdev(ecm_opts->net);
+ if (status)
+ goto fail0;
+-
+- rndis_borrow_net(fi_rndis, ecm_opts->net);
+ ecm_opts->bound = true;
++
++ gether_get_host_addr_u8(ecm_opts->net, host_mac);
+ #endif
+
+ /* set up serial link layer */
+@@ -411,12 +388,10 @@ fail2:
+ fail1:
+ usb_put_function_instance(fi_acm);
+ fail0:
+-#ifdef USB_ETH_RNDIS
+- usb_put_function_instance(fi_rndis);
+-fail:
+-#endif
+ #ifdef CONFIG_USB_G_MULTI_CDC
+ usb_put_function_instance(fi_ecm);
++#else
++ gether_cleanup(the_dev);
+ #endif
+ return status;
+ }
+@@ -430,13 +405,11 @@ static int __exit multi_unbind(struct usb_composite_dev *cdev)
+ usb_put_function(f_acm_rndis);
+ #endif
+ usb_put_function_instance(fi_acm);
+-#ifdef USB_ETH_RNDIS
+- usb_put_function(f_rndis);
+- usb_put_function_instance(fi_rndis);
+-#endif
+ #ifdef CONFIG_USB_G_MULTI_CDC
+ usb_put_function(f_ecm);
+ usb_put_function_instance(fi_ecm);
++#else
++ gether_cleanup(the_dev);
+ #endif
+ return 0;
+ }
+--
+1.8.3.2
+