commit usb subsystem
author杨凯 <yk@rock-chips.com>
Thu, 3 Jun 2010 08:34:33 +0000 (08:34 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:35:22 +0000 (13:35 +0800)
19 files changed:
.config
Makefile
arch/arm/mach-rk2818/board-midsdk.c
arch/arm/mach-rk2818/devices.c
arch/arm/mach-rk2818/devices.h
drivers/Makefile
drivers/base/bus.c
drivers/base/platform.c
drivers/usb/Kconfig
drivers/usb/Makefile
drivers/usb/core/hub.c
drivers/usb/core/usb.c
drivers/usb/gadget/Kconfig
drivers/usb/gadget/android.c
drivers/usb/gadget/composite.c
drivers/usb/gadget/f_adb.c
drivers/usb/gadget/f_mass_storage.c
drivers/usb/gadget/gadget_chips.h
drivers/usb/storage/usb.c

diff --git a/.config b/.config
index 01ee91e4e4f76e8223305fc6272f846b4eae1a4a..c2fd971d7329002ffbcb022a91cd8ae7b38bfc1e 100644 (file)
--- a/.config
+++ b/.config
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.32.9
-# Fri May 28 08:07:09 2010
+# Thu Jun  3 16:12:45 2010
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -76,6 +76,7 @@ CONFIG_EMBEDDED=y
 CONFIG_UID16=y
 # CONFIG_SYSCTL_SYSCALL is not set
 CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
 CONFIG_HOTPLUG=y
 CONFIG_PRINTK=y
@@ -442,6 +443,8 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
 # CONFIG_FIRMWARE_IN_KERNEL is not set
 CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
 # CONFIG_CONNECTOR is not set
 CONFIG_MTD=y
@@ -687,6 +690,7 @@ CONFIG_TOUCHSCREEN_XPT2046_SPI=y
 # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI is not set
 # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
 # CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
 # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
 # CONFIG_TOUCHSCREEN_TSC2007 is not set
 # CONFIG_TOUCHSCREEN_W90X900 is not set
@@ -762,6 +766,7 @@ CONFIG_I2C1_RK2818=y
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_I2C_DEBUG_CHIP is not set
 CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
 CONFIG_SPI_MASTER=y
 
 #
@@ -783,6 +788,7 @@ CONFIG_SPIM_RK2818=y
 # CONFIG_PPS is not set
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
 CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
 # CONFIG_GPIO_SYSFS is not set
 
 #
@@ -821,7 +827,7 @@ CONFIG_POWER_SUPPLY=y
 # CONFIG_BATTERY_DS2782 is not set
 # CONFIG_BATTERY_BQ27x00 is not set
 # CONFIG_BATTERY_MAX17040 is not set
-CONFIG_BATTERY_RK2818=y
+# CONFIG_BATTERY_RK2818 is not set
 # CONFIG_HWMON is not set
 # CONFIG_THERMAL is not set
 # CONFIG_WATCHDOG is not set
@@ -988,7 +994,74 @@ CONFIG_SND_SOC_I2C_AND_SPI=y
 CONFIG_SND_SOC_WM8988=y
 # CONFIG_SOUND_PRIME is not set
 # CONFIG_HID_SUPPORT is not set
-# CONFIG_USB_SUPPORT is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+CONFIG_USB_GADGET_DWC_OTG=y
+CONFIG_USB_DWC_OTG=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_ANDROID=y
+# CONFIG_USB_ANDROID_ACM is not set
+# CONFIG_USB_ANDROID_ADB is not set
+CONFIG_USB_ANDROID_MASS_STORAGE=y
+# CONFIG_USB_ANDROID_RNDIS is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_DWC_OTG=y
+# CONFIG_DWC_OTG_DEBUG is not set
+# CONFIG_DWC_OTG_HOST_ONLY is not set
+CONFIG_DWC_OTG_DEVICE_ONLY=y
+# CONFIG_DWC_OTG_BOTH_HOST_SLAVE is not set
+# CONFIG_DWC_OTG_NORMAL_PREFERENCE is not set
+# CONFIG_DWC_OTG_HOST_PREFERENCE is not set
+CONFIG_DWC_OTG_DEVICE_PREFERENCE=y
 CONFIG_MMC=y
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_UNSAFE_RESUME is not set
@@ -1320,11 +1393,48 @@ CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
 # CONFIG_DEBUG_FS is not set
 # CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
 # CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
 # CONFIG_LATENCYTOP is not set
+# CONFIG_PAGE_POISONING is not set
 CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_TRACING_SUPPORT=y
 CONFIG_FTRACE=y
@@ -1342,8 +1452,13 @@ CONFIG_BRANCH_PROFILE_NONE=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
 CONFIG_ARM_UNWIND=y
 # CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
 
 #
 # Security options
index d7cf5448ee7b178015d736bb40a54578f5d1191b..1ac2d7f9a85977906a4a744bb0fbeac6da5291e4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -184,7 +184,7 @@ export KBUILD_BUILDHOST := $(SUBARCH)
 #CROSS_COMPILE ?=
 ARCH           ?= arm
 #CROSS_COMPILE :=/opt/android0320/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
-CROSS_COMPILE  ?=../toolchain/arm-eabi-4.4.0/bin/arm-eabi-
+CROSS_COMPILE  ?=../trunk/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
 
 # Architecture as present in compile.h
 UTS_MACHINE    := $(ARCH)
index a7dc2cf26d5f054715b7818f4c15b1c3b0a3717d..b38943470af1318fbb6ca0a17aa82d95f8e3dc8f 100644 (file)
@@ -430,6 +430,14 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_MTD_NAND_RK2818
        &rk2818_nand_device,
 #endif
+#ifdef CONFIG_DWC_OTG
+       &rk2818_device_dwc_otg,
+#endif
+#ifdef CONFIG_USB_ANDROID
+       &android_usb_device,
+       &usb_mass_storage_device,
+#endif
+
 };
 
 extern struct sys_timer rk2818_timer;
index b2070d4398e0a17c0330049331f0ce8d312fb76d..981e6c564c422d4f8f43f80507539c28df570991 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/android_pmem.h>
+#include <linux/usb/android_composite.h>
 
 #include <mach/irqs.h>
 #include <mach/rk2818_iomap.h>
@@ -442,5 +443,139 @@ struct platform_device rk2818_nand_device = {
        },
        
 };
+
+/*DWC_OTG*/
+static struct resource dwc_otg_resource[] = {
+       {
+               .start = IRQ_NR_OTG,
+               .end   = IRQ_NR_OTG,
+               .flags = IORESOURCE_IRQ,
+       },
+       {
+               .start = RK2818_USBOTG_PHYS,
+               .end   = RK2818_USBOTG_PHYS + RK2818_USBOTG_SIZE - 1,
+               .flags = IORESOURCE_MEM,
+       },
+
+};
+
+struct platform_device rk2818_device_dwc_otg = {
+       .name             = "dwc_otg",
+       .id               = -1,
+       .num_resources    = ARRAY_SIZE(dwc_otg_resource),
+       .resource         = dwc_otg_resource,
+};
+
+static char *usb_functions_rockchip[] = {
+       "usb_mass_storage",
+};
+
+static char *usb_functions_rockchip_adb[] = {
+       "usb_mass_storage",
+       "adb",
+};
+
+static char *usb_functions_rndis_rockchip[] = {
+       "rndis",
+       "usb_mass_storage",
+};
+
+static char *usb_functions_rndis_rockchip_adb[] = {
+       "rndis",
+       "usb_mass_storage",
+       "adb",
+};
+
+#ifdef CONFIG_USB_ANDROID_DIAG
+static char *usb_functions_adb_diag[] = {
+       "usb_mass_storage",
+       "adb",
+       "diag",
+};
+#endif
+
+static char *usb_functions_all[] = {
+#ifdef CONFIG_USB_ANDROID_RNDIS
+       "rndis",
+#endif
+       "usb_mass_storage",
+#ifdef CONFIG_USB_ANDROID_ADB
+       "adb",
+#endif
+#ifdef CONFIG_USB_ANDROID_ACM
+       "acm",
+#endif
+#ifdef CONFIG_USB_ANDROID_DIAG
+       "diag",
+#endif
+};
+
+static struct android_usb_product usb_products[] = {
+       {
+               .product_id     = 0x2810,//0x0c02,//0x4e11,
+               .num_functions  = ARRAY_SIZE(usb_functions_rockchip),
+               .functions      = usb_functions_rockchip,
+       },
+       {
+               .product_id     = 0x4e12,
+               .num_functions  = ARRAY_SIZE(usb_functions_rockchip_adb),
+               .functions      = usb_functions_rockchip_adb,
+       },
+       {
+               .product_id     = 0x4e13,
+               .num_functions  = ARRAY_SIZE(usb_functions_rndis_rockchip),
+               .functions      = usb_functions_rndis_rockchip,
+       },
+       {
+               .product_id     = 0x4e14,
+               .num_functions  = ARRAY_SIZE(usb_functions_rndis_rockchip_adb),
+               .functions      = usb_functions_rndis_rockchip_adb,
+       },
+#ifdef CONFIG_USB_ANDROID_DIAG
+       {
+               .product_id     = 0x4e17,
+               .num_functions  = ARRAY_SIZE(usb_functions_adb_diag),
+               .functions      = usb_functions_adb_diag,
+       },
+#endif
+};
+
+static struct android_usb_platform_data android_usb_pdata = {
+       .vendor_id      = 0x2207,//0x0bb4,//0x18d1,
+       .product_id     = 0x2810,//0x4e11,
+       .version        = 0x0100,
+       .product_name           = "rk2818 sdk",
+       .manufacturer_name      = "RockChip",
+       .num_products = ARRAY_SIZE(usb_products),
+       .products = usb_products,
+       .num_functions = ARRAY_SIZE(usb_functions_all),
+       .functions = usb_functions_all,
+};
+
+//static 
+struct platform_device android_usb_device = {
+       .name   = "android_usb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &android_usb_pdata,
+       },
+};
+
+static struct usb_mass_storage_platform_data mass_storage_pdata = {
+       .nluns          = 2,
+       .vendor         = "RockChip",
+       .product        = "rk2818 sdk",
+       .release        = 0x0100,
+};
+
+//static 
+struct platform_device usb_mass_storage_device = {
+       .name   = "usb_mass_storage",
+       .id     = -1,
+       .dev    = {
+               .platform_data = &mass_storage_pdata,
+       },
+};
+
 #endif
 
index 041467a3fc8424e6b36646d206f629d78f301ffa..1e624adeeb261d1349a57e8527cf91eca05cad7c 100644 (file)
@@ -41,4 +41,8 @@ extern struct platform_device rk2818_device_battery;
 extern struct platform_device rk2818_device_backlight;
 extern struct platform_device rk2818_device_dsp;
 extern struct platform_device rk2818_nand_device;
+extern struct platform_device rk2818_device_dwc_otg;
+extern struct platform_device android_usb_device;
+extern struct platform_device usb_mass_storage_device;
+
 #endif
index ab8070067fce709619ced726798daf3516f030c8..a66fbf89813043ef5958378a601a268dc58a3cdc 100644 (file)
@@ -63,10 +63,9 @@ obj-$(CONFIG_PARIDE)                 += block/paride/
 obj-$(CONFIG_TC)               += tc/
 obj-$(CONFIG_UWB)              += uwb/
 obj-$(CONFIG_USB_OTG_UTILS)    += usb/otg/
-obj-$(CONFIG_USB)              += usb/
+obj-$(CONFIG_USB_SUPPORT)      += usb/
 obj-$(CONFIG_USB_MUSB_HDRC)    += usb/musb/
 obj-$(CONFIG_PCI)              += usb/
-obj-$(CONFIG_USB_GADGET)       += usb/gadget/
 obj-$(CONFIG_SERIO)            += input/serio/
 obj-$(CONFIG_GAMEPORT)         += input/gameport/
 obj-$(CONFIG_INPUT)            += input/
index 63c143e54a5783656d9f0208acd3c9c4166ec4e2..57bc944028c8189b81accd518f0066d128685f62 100644 (file)
@@ -673,7 +673,10 @@ int bus_add_driver(struct device_driver *drv)
        if (drv->bus->p->drivers_autoprobe) {
                error = driver_attach(drv);
                if (error)
+               {
+                       printk(KERN_ERR "driver_attach failed\n");
                        goto out_unregister;
+               }
        }
        klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
        module_add_driver(drv->owner, drv);
index 4fa954b07ac4ada384d27ffba6b293c22651febd..b93b443d2c6cacb8238b8acc76a51cc58c3dfae0 100644 (file)
@@ -607,7 +607,6 @@ static int platform_match(struct device *dev, struct device_driver *drv)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct platform_driver *pdrv = to_platform_driver(drv);
-
        /* match against the id table first */
        if (pdrv->id_table)
                return platform_match_id(pdrv->id_table, pdev) != NULL;
index 240750881d28d0a8c2d5c3d5a10312c701afe83b..a45993026f36675739887eaa1167518af0cbeed7 100644 (file)
@@ -157,4 +157,6 @@ source "drivers/usb/gadget/Kconfig"
 
 source "drivers/usb/otg/Kconfig"
 
+source "drivers/usb/dwc_otg/Kconfig"
+
 endif # USB_SUPPORT
index be3c9b80bc9fb1bfda456f77fc9e83b681ca4dec..57acba509cadcb0eb0742511ede298e86b85181b 100644 (file)
@@ -44,3 +44,5 @@ obj-y                         += early/
 
 obj-$(CONFIG_USB_ATM)          += atm/
 obj-$(CONFIG_USB_SPEEDTOUCH)   += atm/
+obj-$(CONFIG_DWC_OTG)           += dwc_otg/
+obj-$(CONFIG_USB_GADGET)       += gadget/
index 1a7d54b7745e2c41feb57d3ba7b2329b9ba664f4..1f747c68b545b378842bf7c2e3e9cff0e9703d2a 100644 (file)
@@ -37,6 +37,9 @@
 #endif
 #endif
 
+// cmy@091222: ¼Ç¼Host¶Ë¿ÚËùÁ¬½ÓµÄÉ豸
+static struct usb_device *g_usb_device = 0;
+
 struct usb_hub {
        struct device           *intfdev;       /* the "interface" device */
        struct usb_device       *hdev;
@@ -1577,6 +1580,17 @@ void usb_disconnect(struct usb_device **pdev)
        spin_unlock_irq(&device_state_lock);
 
        usb_stop_pm(udev);
+    
+    // cmy: ²»´¦ÀíhubÉ豸
+    if(USB_CLASS_HUB != udev->descriptor.bDeviceClass)
+    {
+        if(udev == g_usb_device)
+            g_usb_device = 0;
+
+#ifdef CONFIG_ANDROID_POWER
+        android_unlock_suspend(&hub_suspend_lock);
+#endif
+    }
 
        put_device(&udev->dev);
 }
@@ -1780,6 +1794,14 @@ int usb_new_device(struct usb_device *udev)
                dev_err(&udev->dev, "can't device_add, error %d\n", err);
                goto fail;
        }
+    // cmy: ÔÚÆô¶¯Ê±×Ô¶¯»áÌí¼Ólm0µÄhubÉ豸£¬²»Ðè¼Ç¼£¬²»ÐèÉÏËø
+    if(USB_CLASS_HUB != udev->descriptor.bDeviceClass)
+    {
+        g_usb_device = udev;
+#ifdef CONFIG_ANDROID_POWER
+        android_lock_suspend(&hub_suspend_lock);
+#endif
+    }
 
        (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
        return err;
@@ -3359,6 +3381,16 @@ loop:
 
         } /* end while (1) */
 }
+// cmy@091222: µ±¿ªHost¶Ë¿ÚËùÁ¬½ÓµÄÉ豸£¬¹©host/slaveÇл»ÓÃ
+void hub_disconnect_device()
+{
+    if(g_usb_device)
+    {
+        struct usb_hub *hub = hdev_to_hub(g_usb_device->parent);
+        // cmy: ¶Ï¿ªÉ豸Á¬½Ó
+       hub_port_connect_change(hub, 1, 0, 0x2);
+    }
+}
 
 static int hub_thread(void *__unused)
 {
index 52e5e31cdea76b224c14c72923c201a23d858c89..774a2a142599df7d9d7f3d63d861c4a0d88cc76c 100644 (file)
@@ -1075,7 +1075,7 @@ static int __init usb_init(void)
                pr_info("%s: USB support disabled\n", usbcore_name);
                return 0;
        }
-
+       printk("usb_init, usbcore,everest\n");
        retval = usb_debugfs_init();
        if (retval)
                goto out;
index 717e17f7b6f1b64dddbcff5192b130e2d56d8759..47cc0dbc42486b6c258a8113da0a4e6b7f06f387 100644 (file)
@@ -112,6 +112,7 @@ config      USB_GADGET_SELECTED
 choice
        prompt "USB Peripheral Controller"
        depends on USB_GADGET
+       default USB_GADGET_DWC_OTG      
        help
           A USB device uses a controller to talk to its host.
           Systems should have only one such upstream link.
@@ -504,6 +505,18 @@ config USB_LANGWELL
        default USB_GADGET
        select USB_GADGET_SELECTED
 
+config USB_GADGET_DWC_OTG
+        boolean "Synopsys DWC OTG Controller"
+        select USB_GADGET_DUALSPEED
+        help
+           This driver provides USB Device Controller support for the
+           Synopsys DesignWare USB OTG Core used on the Rockchip RK28.
+
+config USB_DWC_OTG
+        tristate
+        depends on USB_GADGET_DWC_OTG
+        default USB_GADGET
+        select USB_GADGET_SELECTED
 
 #
 # LAST -- dummy/emulated controller
@@ -555,9 +568,9 @@ config USB_GADGET_DUALSPEED
 # USB Gadget Drivers
 #
 choice
-       tristate "USB Gadget Drivers"
+       bool "USB Gadget Drivers"
        depends on USB_GADGET && USB_GADGET_SELECTED
-       default USB_ETH
+       default USB_ANDROID
        help
          A Linux "Gadget Driver" talks to the USB Peripheral Controller
          driver through the abstract "gadget" API.  Some other operating
index 3c4d44d663c0c79909a1436cabe76818137bb1e5..dab0620e94e75433e4b96f13ca6bfce6256177f7 100644 (file)
@@ -54,8 +54,8 @@ MODULE_VERSION("1.0");
 static const char longname[] = "Gadget Android";
 
 /* Default vendor and product IDs, overridden by platform data */
-#define VENDOR_ID              0x18D1
-#define PRODUCT_ID             0x0001
+#define VENDOR_ID              0x2207//0x18D1
+#define PRODUCT_ID             0x2810
 
 struct android_dev {
        struct usb_composite_dev *cdev;
@@ -150,7 +150,7 @@ static int __init android_bind_config(struct usb_configuration *c)
 {
        struct android_dev *dev = _android_dev;
 
-       printk(KERN_DEBUG "android_bind_config\n");
+       printk("android_bind_config\n");
        dev->config = c;
 
        /* bind our functions if they have all registered */
index 08bcecbb934cc890d5273855bf83db13da1309b8..11e17a60a43fe0f5e9e7d5c2f4d3123ce7f49b5b 100644 (file)
@@ -281,7 +281,6 @@ static int config_buf(struct usb_configuration *config,
        int                             status;
        int                             interfaceCount = 0;
        u8 *dest;
-
        /* write the config descriptor */
        c = buf;
        c->bLength = USB_DT_CONFIG_SIZE;
@@ -532,11 +531,12 @@ int __init usb_add_config(struct usb_composite_dev *cdev,
        /* Prevent duplicate configuration identifiers */
        list_for_each_entry(c, &cdev->configs, list) {
                if (c->bConfigurationValue == config->bConfigurationValue) {
+                       printk("usb_add_config, already configed,everest\n");
                        status = -EBUSY;
                        goto done;
                }
        }
-
+       printk("usb_add_config, add and bind,everest\n");
        config->cdev = cdev;
        list_add_tail(&config->list, &cdev->configs);
 
@@ -760,7 +760,6 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
        req->complete = composite_setup_complete;
        req->length = USB_BUFSIZ;
        gadget->ep0->driver_data = cdev;
-
        switch (ctrl->bRequest) {
 
        /* we handle all standard USB descriptors */
@@ -1139,7 +1138,7 @@ static struct usb_gadget_driver composite_driver = {
        .speed          = USB_SPEED_HIGH,
 
        .bind           = composite_bind,
-       .unbind         = __exit_p(composite_unbind),
+       .unbind         = composite_unbind,//__exit_p(composite_unbind),
 
        .setup          = composite_setup,
        .disconnect     = composite_disconnect,
index 301300e04cab7e08e3c3ab0e997ba2d4d7f9ff31..df3604d34b6c39c276ba995ad839796507f51588 100644 (file)
@@ -486,7 +486,6 @@ adb_function_bind(struct usb_configuration *c, struct usb_function *f)
 
        dev->cdev = cdev;
        DBG(cdev, "adb_function_bind dev: %p\n", dev);
-
        /* allocate interface ID(s) */
        id = usb_interface_id(c, f);
        if (id < 0)
@@ -613,7 +612,7 @@ static int adb_bind_config(struct usb_configuration *c)
        dev->function.disable = adb_function_disable;
 
        /* start disabled */
-       dev->function.hidden = 1;
+       dev->function.hidden = 0;
 
        /* _adb_dev must be set before calling usb_gadget_register_driver */
        _adb_dev = dev;
index 72a6a1087aaaf18f5a5681c0ddf927d51f6b91e0..289553b964c4e95605cc05c81f6b6ff66392677c 100644 (file)
@@ -76,8 +76,7 @@
 
 #include "gadget_chips.h"
 
-
-#define BULK_BUFFER_SIZE           4096
+#define BULK_BUFFER_SIZE           16384 * 4//4096
 
 /* flush after every 4 meg of writes to avoid excessive block level caching */
 #define MAX_UNFLUSHED_BYTES (4 * 1024 * 1024)
@@ -222,7 +221,7 @@ struct bulk_cs_wrap {
 #define ASC(x)         ((u8) ((x) >> 8))
 #define ASCQ(x)                ((u8) (x))
 
-
+static  int usb_msc_connected; /*usb charge status*/
 /*-------------------------------------------------------------------------*/
 
 struct lun {
@@ -467,6 +466,20 @@ static void put_be32(u8 *buf, u32 val)
        buf[3] = val & 0xff;
 }
 
+static void set_msc_connect_flag( int connected )
+{
+       //GPIOSetPinLevel(CHARGE_OK_PIN,GPIO_LOW);
+    printk("set usb_msc_connect status = %d 20100520\n" , connected);  
+    if( usb_msc_connected == connected )
+            return;
+       usb_msc_connected = connected;//usb mass storage is ok
+}
+
+int get_msc_connect_flag( void )
+{
+       return usb_msc_connected;
+}
+
 /*-------------------------------------------------------------------------*/
 
 /*
@@ -1133,6 +1146,7 @@ static int do_synchronize_cache(struct fsg_dev *fsg)
 
 /*-------------------------------------------------------------------------*/
 
+#if 0
 static void invalidate_sub(struct lun *curlun)
 {
        struct file     *filp = curlun->filp;
@@ -1238,7 +1252,7 @@ static int do_verify(struct fsg_dev *fsg)
        }
        return 0;
 }
-
+#endif
 
 /*-------------------------------------------------------------------------*/
 
@@ -1961,7 +1975,7 @@ static int do_scsi_command(struct fsg_dev *fsg)
                if ((reply = check_command(fsg, 10, DATA_DIR_NONE,
                                (1<<1) | (0xf<<2) | (3<<7), 1,
                                "VERIFY")) == 0)
-                       reply = do_verify(fsg);
+                       reply = 0;//do_verify(fsg);//zyf 20100302
                break;
 
        case SC_WRITE_6:
@@ -2274,6 +2288,8 @@ static int do_set_config(struct fsg_dev *fsg, u8 new_config)
                fsg->config = new_config;
                if ((rc = do_set_interface(fsg, 0)) != 0)
                        fsg->config = 0;        // Reset on errors
+               else
+                       set_msc_connect_flag( 1 );
        }
 
        switch_set_state(&fsg->sdev, new_config);
@@ -2283,7 +2299,6 @@ static int do_set_config(struct fsg_dev *fsg, u8 new_config)
 
 
 /*-------------------------------------------------------------------------*/
-
 static void handle_exception(struct fsg_dev *fsg)
 {
        siginfo_t               info;
@@ -2951,7 +2966,7 @@ int mass_storage_bind_config(struct usb_configuration *c)
        int             rc;
        struct fsg_dev  *fsg;
 
-       printk(KERN_INFO "mass_storage_bind_config\n");
+       printk("mass_storage_bind_config\n");
        rc = fsg_alloc();
        if (rc)
                return rc;
index f2d270b202f257229cb9120005b7ec3af223191a..06124950fa44bb704a4174d923455138e3745e40 100644 (file)
 #define        gadget_is_r8a66597(g)   0
 #endif
 
+#ifdef CONFIG_USB_GADGET_DWC_OTG
+#define gadget_is_dwc_otg(g)    !strcmp("dwc_otg_pcd", (g)->name)
+#else
+#define gadget_is_dwc_otg(g)    0
+#endif
+
 
 /**
  * usb_gadget_controller_number - support bcdDevice id convention
@@ -247,6 +253,8 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
                return 0x24;
        else if (gadget_is_r8a66597(gadget))
                return 0x25;
+       else if (gadget_is_dwc_otg(gadget))
+               return 0x22;
        return -ENOENT;
 }
 
index 33197fa22715d5e3b6100dbbfa78a842fcf6d3cc..7c8f64d842f2d4d1da65424abd76de00d98aaf48 100644 (file)
@@ -74,7 +74,7 @@ MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
 MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
 MODULE_LICENSE("GPL");
 
-static unsigned int delay_use = 5;
+static unsigned int delay_use = 1;
 module_param(delay_use, uint, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");