On 09/17/2012 09:10 AM, Andrzej Pietrasiewicz wrote:
--- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -2994,26 +3121,41 @@ static struct usb_gadget_strings *fsg_strings_array[] = {
<snip>
- fsg->function.name = FSG_DRIVER_DESC; - fsg->function.strings = fsg_strings_array; - fsg->function.bind = fsg_bind; - fsg->function.unbind = fsg_unbind; - fsg->function.setup = fsg_setup; - fsg->function.set_alt = fsg_set_alt; - fsg->function.disable = fsg_disable; + fsg->function.name = FSG_DRIVER_DESC; + fsg->function.strings = fsg_strings_array; + fsg->function.bind = fsg_bind; + fsg->function.unbind = fsg_unbind; + fsg->function.setup = fsg_setup; + fsg->function.set_alt = fsg_set_alt; + fsg->function.disable = fsg_disable; + fsg->common = common;
Nothing happend here right? You just shifted it for no reason right? This and coding style fixes like
@@ -321,7 +507,7 @@ enum { #ifndef FSG_NO_OTG static struct usb_otg_descriptor fsg_otg_desc = { - .bLength = sizeof fsg_otg_desc, + .bLength = sizeof(fsg_otg_desc), .bDescriptorType = USB_DT_OTG, .bmAttributes = USB_OTG_SRP,
is something I don't want see because it is not part of the actual patch but random noise that makes me crazy.
@@ -639,6 +826,8 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename) unsigned int blkbits; unsigned int blksize; + configfs_depend_item(curlun->item.ci_group->cg_subsys,&curlun->item); + /* R/W if we can, R/O if we must */ ro = curlun->initially_ro; if (!ro) { @@ -722,6 +911,9 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename) out: fput(filp); + if (rc) + configfs_undepend_item(curlun->item.ci_group->cg_subsys, + &curlun->item); return rc; } @@ -762,132 +954,3 @@ static void store_cdrom_address(u8 *dest, int msf, u32 addr) /*-------------------------------------------------------------------------*/ - -static ssize_t fsg_show_ro(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - - return sprintf(buf, "%d\n", fsg_lun_is_open(curlun) - ? curlun->ro - : curlun->initially_ro); -} - -static ssize_t fsg_show_nofua(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - - return sprintf(buf, "%u\n", curlun->nofua); -} - -static ssize_t fsg_show_file(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - struct rw_semaphore *filesem = dev_get_drvdata(dev); - char *p; - ssize_t rc; - - down_read(filesem); - if (fsg_lun_is_open(curlun)) { /* Get the complete pathname */ - p = d_path(&curlun->filp->f_path, buf, PAGE_SIZE - 1); - if (IS_ERR(p)) - rc = PTR_ERR(p); - else { - rc = strlen(p); - memmove(buf, p, rc); - buf[rc] = '\n'; /* Add a newline */ - buf[++rc] = 0; - } - } else { /* No file, return 0 bytes */ - *buf = 0; - rc = 0; - } - up_read(filesem); - return rc; -} - - -static ssize_t fsg_store_ro(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) -{ - ssize_t rc; - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - struct rw_semaphore *filesem = dev_get_drvdata(dev); - unsigned ro; - - rc = kstrtouint(buf, 2,&ro); - if (rc) - return rc; - - /* - * Allow the write-enable status to change only while the - * backing file is closed. - */ - down_read(filesem); - if (fsg_lun_is_open(curlun)) { - LDBG(curlun, "read-only status change prevented\n"); - rc = -EBUSY; - } else { - curlun->ro = ro; - curlun->initially_ro = ro; - LDBG(curlun, "read-only status set to %d\n", curlun->ro); - rc = count; - } - up_read(filesem); - return rc; -} - -static ssize_t fsg_store_nofua(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - unsigned nofua; - int ret; - - ret = kstrtouint(buf, 2,&nofua); - if (ret) - return ret; - - /* Sync data when switching from async mode to sync */ - if (!nofua&& curlun->nofua) - fsg_lun_fsync_sub(curlun); - - curlun->nofua = nofua; - - return count; -} - -static ssize_t fsg_store_file(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) -{ - struct fsg_lun *curlun = fsg_lun_from_dev(dev); - struct rw_semaphore *filesem = dev_get_drvdata(dev); - int rc = 0; - - if (curlun->prevent_medium_removal&& fsg_lun_is_open(curlun)) { - LDBG(curlun, "eject attempt prevented\n"); - return -EBUSY; /* "Door is locked" */ - } - - /* Remove a trailing newline */ - if (count> 0&& buf[count-1] == '\n') - ((char *) buf)[count-1] = 0; /* Ugh! */ - - /* Load new medium */ - down_write(filesem); - if (count> 0&& buf[0]) { - /* fsg_lun_open() will close existing file if any. */ - rc = fsg_lun_open(curlun, buf); - if (rc == 0) - curlun->unit_attention_data = - SS_NOT_READY_TO_READY_TRANSITION; - } else if (fsg_lun_is_open(curlun)) { - fsg_lun_close(curlun); - curlun->unit_attention_data = SS_MEDIUM_NOT_PRESENT; - } - up_write(filesem); - return (rc< 0 ? rc : count); -} diff --git a/drivers/usb/gadget/usb_functions.c b/drivers/usb/gadget/usb_functions.c index ae15719..d0144a5 100644 --- a/drivers/usb/gadget/usb_functions.c +++ b/drivers/usb/gadget/usb_functions.c @@ -23,6 +23,7 @@ /* * Supported functions */ +#include "f_mass_storage.c" /*-------------------------------------------------------------------------*/ @@ -110,7 +111,14 @@ struct ufg_fn { bind_function_fn bind; }; +static struct ufg_fn f_mass_storage = { + .name = "f_mass_storage", + .make_group = alloc_fsg_common, + .bind = fsg_bind_function, +}; + static struct ufg_fn *available_functions[] = { + &f_mass_storage, NULL, };
Sebastian -- 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