diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-06-25 11:28:30 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-06-25 11:28:30 -0700 |
| commit | c23087dad116bf3266e64605046361d985e7f493 (patch) | |
| tree | ac685016c567fbe4c13a74d11413379554ee27f7 /usb | |
| parent | e1e6cbaa48b0a9cc53d33cf1a9b5ffd9166bcc6f (diff) | |
| download | patches-c23087dad116bf3266e64605046361d985e7f493.tar.gz | |
usb and staging and a firmware patch
Diffstat (limited to 'usb')
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 |
