aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2010-06-25 11:28:30 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-06-25 11:28:30 -0700
commitc23087dad116bf3266e64605046361d985e7f493 (patch)
treeac685016c567fbe4c13a74d11413379554ee27f7 /usb
parente1e6cbaa48b0a9cc53d33cf1a9b5ffd9166bcc6f (diff)
downloadpatches-c23087dad116bf3266e64605046361d985e7f493.tar.gz
usb and staging and a firmware patch
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-gadget-f_mass_storage-added-eject-callback.patch16
-rw-r--r--usb/usb-gadget-f_mass_storage-dead-code-removed.patch2
-rw-r--r--usb/usb-gadget-f_mass_storage-fsg_add-renamed-to-fsg_bind_config.patch4
-rw-r--r--usb/usb-gadget-g_fs-code-cleanup.patch358
4 files changed, 369 insertions, 11 deletions
diff --git a/usb/usb-gadget-f_mass_storage-added-eject-callback.patch b/usb/usb-gadget-f_mass_storage-added-eject-callback.patch
index d659df76f5cec3..0f91194de7a046 100644
--- a/usb/usb-gadget-f_mass_storage-added-eject-callback.patch
+++ b/usb/usb-gadget-f_mass_storage-added-eject-callback.patch
@@ -58,7 +58,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/* Data shared by all the FSG instances. */
-@@ -369,8 +390,8 @@ struct fsg_common {
+@@ -368,8 +389,8 @@ struct fsg_common {
struct completion thread_notifier;
struct task_struct *thread_task;
@@ -69,7 +69,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/* Gadget's private data. */
void *private_data;
-@@ -394,12 +415,8 @@ struct fsg_config {
+@@ -393,12 +414,8 @@ struct fsg_config {
const char *lun_name_format;
const char *thread_name;
@@ -84,7 +84,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
/* Gadget's private data. */
void *private_data;
-@@ -435,6 +452,7 @@ static inline int __fsg_is_set(struct fs
+@@ -434,6 +451,7 @@ static inline int __fsg_is_set(struct fs
if (common->fsg)
return 1;
ERROR(common, "common->fsg is NULL in %s at %u\n", func, line);
@@ -92,7 +92,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
return 0;
}
-@@ -1393,43 +1411,55 @@ static int do_start_stop(struct fsg_comm
+@@ -1392,43 +1410,55 @@ static int do_start_stop(struct fsg_comm
} else if (!curlun->removable) {
curlun->sense_data = SS_INVALID_COMMAND;
return -EINVAL;
@@ -175,7 +175,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
-@@ -2654,7 +2684,8 @@ static int fsg_main_thread(void *common_
+@@ -2607,7 +2637,8 @@ static int fsg_main_thread(void *common_
common->thread_task = NULL;
spin_unlock_irq(&common->lock);
@@ -185,7 +185,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
struct fsg_lun *curlun = common->luns;
unsigned i = common->nluns;
-@@ -2730,6 +2761,7 @@ static struct fsg_common *fsg_common_ini
+@@ -2683,6 +2714,7 @@ static struct fsg_common *fsg_common_ini
common->free_storage_on_release = 0;
}
@@ -193,7 +193,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
common->private_data = cfg->private_data;
common->gadget = gadget;
-@@ -2851,7 +2883,6 @@ buffhds_first_it:
+@@ -2804,7 +2836,6 @@ buffhds_first_it:
/* Tell the thread to start working */
@@ -201,7 +201,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
common->thread_task =
kthread_create(fsg_main_thread, common,
OR(cfg->thread_name, "file-storage"));
-@@ -3148,8 +3179,8 @@ fsg_config_from_params(struct fsg_config
+@@ -3100,8 +3131,8 @@ fsg_config_from_params(struct fsg_config
cfg->product_name = 0;
cfg->release = 0xffff;
diff --git a/usb/usb-gadget-f_mass_storage-dead-code-removed.patch b/usb/usb-gadget-f_mass_storage-dead-code-removed.patch
index 25433abd9f3fcd..6b3c52efab12dc 100644
--- a/usb/usb-gadget-f_mass_storage-dead-code-removed.patch
+++ b/usb/usb-gadget-f_mass_storage-dead-code-removed.patch
@@ -29,7 +29,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
struct fsg_buffhd *next_buffhd_to_fill;
struct fsg_buffhd *next_buffhd_to_drain;
-@@ -624,8 +623,6 @@ static int fsg_setup(struct usb_function
+@@ -623,8 +622,6 @@ static int fsg_setup(struct usb_function
/* Respond with data/status */
req->length = min((u16)1, w_length);
diff --git a/usb/usb-gadget-f_mass_storage-fsg_add-renamed-to-fsg_bind_config.patch b/usb/usb-gadget-f_mass_storage-fsg_add-renamed-to-fsg_bind_config.patch
index d361f1f9bb74fd..0cbb4578dda2cf 100644
--- a/usb/usb-gadget-f_mass_storage-fsg_add-renamed-to-fsg_bind_config.patch
+++ b/usb/usb-gadget-f_mass_storage-fsg_add-renamed-to-fsg_bind_config.patch
@@ -23,7 +23,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
-@@ -3023,9 +3023,9 @@ static struct usb_gadget_strings *fsg_st
+@@ -2990,9 +2990,9 @@ static struct usb_gadget_strings *fsg_st
NULL,
};
@@ -36,7 +36,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
{
struct fsg_dev *fsg;
int rc;
-@@ -3072,6 +3072,13 @@ error_free_fsg:
+@@ -3024,6 +3024,13 @@ static int fsg_add(struct usb_composite_
return rc;
}
diff --git a/usb/usb-gadget-g_fs-code-cleanup.patch b/usb/usb-gadget-g_fs-code-cleanup.patch
new file mode 100644
index 00000000000000..3dc7363f30f6c5
--- /dev/null
+++ b/usb/usb-gadget-g_fs-code-cleanup.patch
@@ -0,0 +1,358 @@
+From m.nazarewicz@samsung.com Fri Jun 25 11:23:58 2010
+From: Michal Nazarewicz <m.nazarewicz@samsung.com>
+Date: Fri, 25 Jun 2010 16:29:27 +0200
+Subject: USB: gadget: g_fs: code cleanup
+To: linux-usb@vger.kernel.org
+Cc: David Brownell <dbrownell@users.sourceforge.net>, Kyungmin Park <kyungmin.park@samsung.com>, Marek Szyprowski <m.szyprowski@samsung.com>, linux-kernel@vger.kernel.org
+Message-ID: <b51342e058f33dc9d78491c1209d0e86d09ed9db.1276170819.git.m.nazarewicz@samsung.com>
+
+
+This commit cleans the g_fs gadget hopefully making it more
+readable. This is achieved by usage of the usb_string_ids_tab()
+function for batch string IDs registration as well as
+generalising configuration so that a single routine is
+used to add each configuration and bind interfaces. As an
+effect, the code is shorter and has fewer #ifdefs.
+
+Moreover, in some circumstances previous code #defined
+CONFIG_USB_FUNCTIONFS_GENERIC macro to prevent a situation
+where gadget with no configurations is built. This code removes
+the #define form source code and achieves the same effect using
+select in Kconfig.
+
+This patch also changes wording and names of the Kconfig options.
+
+Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com>
+Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/Kconfig | 23 +++--
+ drivers/usb/gadget/g_ffs.c | 174 ++++++++++++---------------------------------
+ 2 files changed, 60 insertions(+), 137 deletions(-)
+
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -714,6 +714,7 @@ config USB_GADGETFS
+ config USB_FUNCTIONFS
+ tristate "Function Filesystem (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
++ select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
+ help
+ The Function Filesystem (FunctioFS) lets one create USB
+ composite functions in user space in the same way as GadgetFS
+@@ -722,31 +723,31 @@ config USB_FUNCTIONFS
+ implemented in kernel space (for instance Ethernet, serial or
+ mass storage) and other are implemented in user space.
+
++ If you say "y" or "m" here you will be able what kind of
++ configurations the gadget will provide.
++
+ Say "y" to link the driver statically, or "m" to build
+ a dynamically linked module called "g_ffs".
+
+ config USB_FUNCTIONFS_ETH
+- bool "Include CDC ECM (Ethernet) function"
++ bool "Include configuration with CDC ECM (Ethernet)"
+ depends on USB_FUNCTIONFS && NET
+ help
+- Include an CDC ECM (Ethernet) funcion in the CDC ECM (Funcion)
+- Filesystem. If you also say "y" to the RNDIS query below the
+- gadget will have two configurations.
++ Include a configuration with CDC ECM funcion (Ethernet) and the
++ Funcion Filesystem.
+
+ config USB_FUNCTIONFS_RNDIS
+- bool "Include RNDIS (Ethernet) function"
++ bool "Include configuration with RNDIS (Ethernet)"
+ depends on USB_FUNCTIONFS && NET
+ help
+- Include an RNDIS (Ethernet) funcion in the Funcion Filesystem.
+- If you also say "y" to the CDC ECM query above the gadget will
+- have two configurations.
++ Include a configuration with RNDIS funcion (Ethernet) and the Filesystem.
+
+ config USB_FUNCTIONFS_GENERIC
+ bool "Include 'pure' configuration"
+- depends on USB_FUNCTIONFS && (USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS)
++ depends on USB_FUNCTIONFS
+ help
+- Include a configuration with FunctionFS and no Ethernet
+- configuration.
++ Include a configuration with the Function Filesystem alone with
++ no Ethernet interface.
+
+ config USB_FILE_STORAGE
+ tristate "File-backed Storage Gadget"
+--- a/drivers/usb/gadget/g_ffs.c
++++ b/drivers/usb/gadget/g_ffs.c
+@@ -32,12 +32,13 @@
+ # include "u_ether.c"
+
+ static u8 gfs_hostaddr[ETH_ALEN];
+-#else
+-# if !defined CONFIG_USB_FUNCTIONFS_GENERIC
+-# define CONFIG_USB_FUNCTIONFS_GENERIC
++# ifdef CONFIG_USB_FUNCTIONFS_ETH
++static int eth_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
+ # endif
++#else
+ # define gether_cleanup() do { } while (0)
+ # define gether_setup(gadget, hostaddr) ((int)0)
++# define gfs_hostaddr NULL
+ #endif
+
+ #include "f_fs.c"
+@@ -107,15 +108,7 @@ static const struct usb_descriptor_heade
+ enum {
+ GFS_STRING_MANUFACTURER_IDX,
+ GFS_STRING_PRODUCT_IDX,
+-#ifdef CONFIG_USB_FUNCTIONFS_RNDIS
+- GFS_STRING_RNDIS_CONFIG_IDX,
+-#endif
+-#ifdef CONFIG_USB_FUNCTIONFS_ETH
+- GFS_STRING_ECM_CONFIG_IDX,
+-#endif
+-#ifdef CONFIG_USB_FUNCTIONFS_GENERIC
+- GFS_STRING_GENERIC_CONFIG_IDX,
+-#endif
++ GFS_STRING_FIRST_CONFIG_IDX,
+ };
+
+ static char gfs_manufacturer[50];
+@@ -126,13 +119,13 @@ static struct usb_string gfs_strings[] =
+ [GFS_STRING_MANUFACTURER_IDX].s = gfs_manufacturer,
+ [GFS_STRING_PRODUCT_IDX].s = gfs_driver_desc,
+ #ifdef CONFIG_USB_FUNCTIONFS_RNDIS
+- [GFS_STRING_RNDIS_CONFIG_IDX].s = "FunctionFS + RNDIS",
++ { .s = "FunctionFS + RNDIS" },
+ #endif
+ #ifdef CONFIG_USB_FUNCTIONFS_ETH
+- [GFS_STRING_ECM_CONFIG_IDX].s = "FunctionFS + ECM",
++ { .s = "FunctionFS + ECM" },
+ #endif
+ #ifdef CONFIG_USB_FUNCTIONFS_GENERIC
+- [GFS_STRING_GENERIC_CONFIG_IDX].s = "FunctionFS",
++ { .s = "FunctionFS" },
+ #endif
+ { } /* end of list */
+ };
+@@ -146,59 +139,33 @@ static struct usb_gadget_strings *gfs_de
+ };
+
+
+-#ifdef CONFIG_USB_FUNCTIONFS_RNDIS
+-static int gfs_do_rndis_config(struct usb_configuration *c);
+
+-static struct usb_configuration gfs_rndis_config_driver = {
+- .label = "FunctionFS + RNDIS",
+- .bind = gfs_do_rndis_config,
+- .bConfigurationValue = 1,
+- /* .iConfiguration = DYNAMIC */
+- .bmAttributes = USB_CONFIG_ATT_SELFPOWER,
+-};
+-# define gfs_add_rndis_config(cdev) \
+- usb_add_config(cdev, &gfs_rndis_config_driver)
+-#else
+-# define gfs_add_rndis_config(cdev) 0
++struct gfs_configuration {
++ struct usb_configuration c;
++ int (*eth)(struct usb_configuration *c, u8 *ethaddr);
++} gfs_configurations[] = {
++#ifdef CONFIG_USB_FUNCTIONFS_RNDIS
++ {
++ .eth = rndis_bind_config,
++ },
+ #endif
+
+-
+ #ifdef CONFIG_USB_FUNCTIONFS_ETH
+-static int gfs_do_ecm_config(struct usb_configuration *c);
+-
+-static struct usb_configuration gfs_ecm_config_driver = {
+- .label = "FunctionFS + ECM",
+- .bind = gfs_do_ecm_config,
+- .bConfigurationValue = 1,
+- /* .iConfiguration = DYNAMIC */
+- .bmAttributes = USB_CONFIG_ATT_SELFPOWER,
+-};
+-# define gfs_add_ecm_config(cdev) \
+- usb_add_config(cdev, &gfs_ecm_config_driver)
+-#else
+-# define gfs_add_ecm_config(cdev) 0
++ {
++ .eth = eth_bind_config,
++ },
+ #endif
+
+-
+ #ifdef CONFIG_USB_FUNCTIONFS_GENERIC
+-static int gfs_do_generic_config(struct usb_configuration *c);
+-
+-static struct usb_configuration gfs_generic_config_driver = {
+- .label = "FunctionFS",
+- .bind = gfs_do_generic_config,
+- .bConfigurationValue = 2,
+- /* .iConfiguration = DYNAMIC */
+- .bmAttributes = USB_CONFIG_ATT_SELFPOWER,
+-};
+-# define gfs_add_generic_config(cdev) \
+- usb_add_config(cdev, &gfs_generic_config_driver)
+-#else
+-# define gfs_add_generic_config(cdev) 0
++ {
++ },
+ #endif
++};
+
+
+ static int gfs_bind(struct usb_composite_dev *cdev);
+ static int gfs_unbind(struct usb_composite_dev *cdev);
++static int gfs_do_config(struct usb_configuration *c);
+
+ static struct usb_composite_driver gfs_driver = {
+ .name = gfs_short_name,
+@@ -267,7 +234,7 @@ static int functionfs_check_dev_callback
+
+ static int gfs_bind(struct usb_composite_dev *cdev)
+ {
+- int ret;
++ int ret, i;
+
+ ENTER();
+
+@@ -284,57 +251,32 @@ static int gfs_bind(struct usb_composite
+ snprintf(gfs_manufacturer, sizeof gfs_manufacturer, "%s %s with %s",
+ init_utsname()->sysname, init_utsname()->release,
+ cdev->gadget->name);
+- ret = usb_string_id(cdev);
+- if (unlikely(ret < 0))
+- goto error;
+- gfs_strings[GFS_STRING_MANUFACTURER_IDX].id = ret;
+- gfs_dev_desc.iManufacturer = ret;
+
+- ret = usb_string_id(cdev);
++ ret = usb_string_ids_tab(cdev, gfs_strings);
+ if (unlikely(ret < 0))
+ goto error;
+- gfs_strings[GFS_STRING_PRODUCT_IDX].id = ret;
+- gfs_dev_desc.iProduct = ret;
+
+-#ifdef CONFIG_USB_FUNCTIONFS_RNDIS
+- ret = usb_string_id(cdev);
+- if (unlikely(ret < 0))
+- goto error;
+- gfs_strings[GFS_STRING_RNDIS_CONFIG_IDX].id = ret;
+- gfs_rndis_config_driver.iConfiguration = ret;
+-#endif
+-
+-#ifdef CONFIG_USB_FUNCTIONFS_ETH
+- ret = usb_string_id(cdev);
+- if (unlikely(ret < 0))
+- goto error;
+- gfs_strings[GFS_STRING_ECM_CONFIG_IDX].id = ret;
+- gfs_ecm_config_driver.iConfiguration = ret;
+-#endif
+-
+-#ifdef CONFIG_USB_FUNCTIONFS_GENERIC
+- ret = usb_string_id(cdev);
+- if (unlikely(ret < 0))
+- goto error;
+- gfs_strings[GFS_STRING_GENERIC_CONFIG_IDX].id = ret;
+- gfs_generic_config_driver.iConfiguration = ret;
+-#endif
++ gfs_dev_desc.iManufacturer = gfs_strings[GFS_STRING_MANUFACTURER_IDX].id;
++ gfs_dev_desc.iProduct = gfs_strings[GFS_STRING_PRODUCT_IDX].id;
+
+ ret = functionfs_bind(gfs_ffs_data, cdev);
+ if (unlikely(ret < 0))
+ goto error;
+
+- ret = gfs_add_rndis_config(cdev);
+- if (unlikely(ret < 0))
+- goto error_unbind;
++ for (i = 0; i < ARRAY_SIZE(gfs_configurations); ++i) {
++ struct gfs_configuration *c = gfs_configurations + i;
+
+- ret = gfs_add_ecm_config(cdev);
+- if (unlikely(ret < 0))
+- goto error_unbind;
++ ret = GFS_STRING_FIRST_CONFIG_IDX + i;
++ c->c.label = gfs_strings[ret].s;
++ c->c.iConfiguration = gfs_strings[ret].id;
++ c->c.bind = gfs_do_config;
++ c->c.bConfigurationValue = 1 + i;
++ c->c.bmAttributes = USB_CONFIG_ATT_SELFPOWER;
+
+- ret = gfs_add_generic_config(cdev);
+- if (unlikely(ret < 0))
+- goto error_unbind;
++ ret = usb_add_config(cdev, &c->c);
++ if (unlikely(ret < 0))
++ goto error_unbind;
++ }
+
+ return 0;
+
+@@ -368,10 +310,10 @@ static int gfs_unbind(struct usb_composi
+ }
+
+
+-static int __gfs_do_config(struct usb_configuration *c,
+- int (*eth)(struct usb_configuration *c, u8 *ethaddr),
+- u8 *ethaddr)
++static int gfs_do_config(struct usb_configuration *c)
+ {
++ struct gfs_configuration *gc =
++ container_of(c, struct gfs_configuration, c);
+ int ret;
+
+ if (WARN_ON(!gfs_ffs_data))
+@@ -382,8 +324,8 @@ static int __gfs_do_config(struct usb_co
+ c->bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+ }
+
+- if (eth) {
+- ret = eth(c, ethaddr);
++ if (gc->eth) {
++ ret = gc->eth(c, gfs_hostaddr);
+ if (unlikely(ret < 0))
+ return ret;
+ }
+@@ -406,32 +348,12 @@ static int __gfs_do_config(struct usb_co
+ return 0;
+ }
+
+-#ifdef CONFIG_USB_FUNCTIONFS_RNDIS
+-static int gfs_do_rndis_config(struct usb_configuration *c)
+-{
+- ENTER();
+-
+- return __gfs_do_config(c, rndis_bind_config, gfs_hostaddr);
+-}
+-#endif
+
+ #ifdef CONFIG_USB_FUNCTIONFS_ETH
+-static int gfs_do_ecm_config(struct usb_configuration *c)
++static int eth_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN])
+ {
+- ENTER();
+-
+- return __gfs_do_config(c,
+- can_support_ecm(c->cdev->gadget)
+- ? ecm_bind_config : geth_bind_config,
+- gfs_hostaddr);
+-}
+-#endif
+-
+-#ifdef CONFIG_USB_FUNCTIONFS_GENERIC
+-static int gfs_do_generic_config(struct usb_configuration *c)
+-{
+- ENTER();
+-
+- return __gfs_do_config(c, NULL, NULL);
++ return can_support_ecm(c->cdev->gadget)
++ ? ecm_bind_config(c, ethaddr)
++ : geth_bind_config(c, ethaddr);
+ }
+ #endif