From: 杨凯 Date: Thu, 3 Jun 2010 08:34:33 +0000 (+0000) Subject: commit usb subsystem X-Git-Tag: firefly_0821_release~11418 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c0b96edc1aff6c4df33f5b273410850613a0f25d;p=firefly-linux-kernel-4.4.55.git commit usb subsystem --- diff --git a/.config b/.config index 01ee91e4e4f7..c2fd971d7329 100644 --- 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 diff --git a/Makefile b/Makefile index d7cf5448ee7b..1ac2d7f9a859 100644 --- 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) diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c index a7dc2cf26d5f..b38943470af1 100644 --- a/arch/arm/mach-rk2818/board-midsdk.c +++ b/arch/arm/mach-rk2818/board-midsdk.c @@ -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; diff --git a/arch/arm/mach-rk2818/devices.c b/arch/arm/mach-rk2818/devices.c index b2070d4398e0..981e6c564c42 100644 --- a/arch/arm/mach-rk2818/devices.c +++ b/arch/arm/mach-rk2818/devices.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -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 diff --git a/arch/arm/mach-rk2818/devices.h b/arch/arm/mach-rk2818/devices.h index 041467a3fc84..1e624adeeb26 100644 --- a/arch/arm/mach-rk2818/devices.h +++ b/arch/arm/mach-rk2818/devices.h @@ -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 diff --git a/drivers/Makefile b/drivers/Makefile index ab8070067fce..a66fbf898130 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -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/ diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 63c143e54a57..57bc944028c8 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c @@ -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); diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 4fa954b07ac4..b93b443d2c6c 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -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; diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index 240750881d28..a45993026f36 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -157,4 +157,6 @@ source "drivers/usb/gadget/Kconfig" source "drivers/usb/otg/Kconfig" +source "drivers/usb/dwc_otg/Kconfig" + endif # USB_SUPPORT diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index be3c9b80bc9f..57acba509cad 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -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/ diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 1a7d54b7745e..1f747c68b545 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -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) { diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 52e5e31cdea7..774a2a142599 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -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; diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 717e17f7b6f1..47cc0dbc4248 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -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 diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c index 3c4d44d663c0..dab0620e94e7 100644 --- a/drivers/usb/gadget/android.c +++ b/drivers/usb/gadget/android.c @@ -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 */ diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 08bcecbb934c..11e17a60a43f 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -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, diff --git a/drivers/usb/gadget/f_adb.c b/drivers/usb/gadget/f_adb.c index 301300e04cab..df3604d34b6c 100644 --- a/drivers/usb/gadget/f_adb.c +++ b/drivers/usb/gadget/f_adb.c @@ -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; diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c index 72a6a1087aaa..289553b964c4 100644 --- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -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; diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h index f2d270b202f2..06124950fa44 100644 --- a/drivers/usb/gadget/gadget_chips.h +++ b/drivers/usb/gadget/gadget_chips.h @@ -179,6 +179,12 @@ #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; } diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 33197fa22715..7c8f64d842f2 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -74,7 +74,7 @@ MODULE_AUTHOR("Matthew Dharm "); 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");