diff options
author | Jared Suttles <jared.suttles@motorola.com> | 2009-08-18 21:31:58 -0500 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2009-08-21 10:57:42 -0400 |
commit | 34354a463eb72bb698d040d18c38b30c7b9a2f80 (patch) | |
tree | f62ddd6d48bdfce8ad08d7268e5862539b477202 /drivers/usb/gadget | |
parent | 6d4bb8098d30d078a771f57a46b3f748649f343f (diff) |
drivers: usb: gadget: Add "usb_mass_storage" platform driver.
This will be used for configuring vendor, product and release from board file.
Submitted on behalf of RaviKumar Vembu <ravi.v@motorola.com>
Signed-off-by: Jared Suttles <jared.suttles@motorola.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r-- | drivers/usb/gadget/f_mass_storage.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c index d3a70b209f7c..169ea59ba80d 100644 --- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -67,11 +67,13 @@ #include <linux/freezer.h> #include <linux/utsname.h> #include <linux/wakelock.h> +#include <linux/platform_device.h> #include <linux/usb_usual.h> #include <linux/usb/ch9.h> #include <linux/usb/composite.h> #include <linux/usb/gadget.h> +#include <linux/usb/android.h> #include "f_mass_storage.h" #include "gadget_chips.h" @@ -2851,6 +2853,32 @@ static void fsg_function_disable(struct usb_function *f) raise_exception(fsg, FSG_STATE_CONFIG_CHANGE); } +static int __init fsg_probe(struct platform_device *pdev) +{ + struct usb_mass_storage_platform_data *pdata = pdev->dev.platform_data; + struct fsg_dev *fsg = the_fsg; + + printk(KERN_INFO "fsg_probe pdata: %p\n", pdata); + + if (pdata) { + if (pdata->vendor) + fsg->vendor = pdata->vendor; + + if (pdata->product) + fsg->product = pdata->product; + + if (pdata->release) + fsg->release = pdata->release; + } + + return 0; +} + +static struct platform_driver fsg_platform_driver = { + .driver = { .name = "usb_mass_storage", }, + .probe = fsg_probe, +}; + int __init mass_storage_function_add(struct usb_composite_dev *cdev, struct usb_configuration *c, int nluns) { @@ -2877,6 +2905,10 @@ int __init mass_storage_function_add(struct usb_composite_dev *cdev, if (rc < 0) goto err_switch_dev_register; + rc = platform_driver_register(&fsg_platform_driver); + if (rc != 0) + goto err_platform_driver_register; + wake_lock_init(&the_fsg->wake_lock, WAKE_LOCK_SUSPEND, "usb_mass_storage"); @@ -2893,12 +2925,17 @@ int __init mass_storage_function_add(struct usb_composite_dev *cdev, if (rc != 0) goto err_usb_add_function; + return 0; err_usb_add_function: + platform_driver_unregister(&fsg_platform_driver); +err_platform_driver_register: switch_dev_unregister(&the_fsg->sdev); err_switch_dev_register: kref_put(&the_fsg->ref, fsg_release); return rc; } + + |