summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorJared Suttles <jared.suttles@motorola.com>2009-08-18 21:31:58 -0500
committerMike Lockwood <lockwood@android.com>2009-08-21 10:57:42 -0400
commit34354a463eb72bb698d040d18c38b30c7b9a2f80 (patch)
treef62ddd6d48bdfce8ad08d7268e5862539b477202 /drivers/usb/gadget
parent6d4bb8098d30d078a771f57a46b3f748649f343f (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.c37
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;
}
+
+