#
# 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
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
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
# 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
# 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
#
# 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
#
# 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
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
# 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
# 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
#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)
#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;
#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>
},
};
+
+/*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
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
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/
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);
{
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;
source "drivers/usb/otg/Kconfig"
+source "drivers/usb/dwc_otg/Kconfig"
+
endif # USB_SUPPORT
obj-$(CONFIG_USB_ATM) += atm/
obj-$(CONFIG_USB_SPEEDTOUCH) += atm/
+obj-$(CONFIG_DWC_OTG) += dwc_otg/
+obj-$(CONFIG_USB_GADGET) += gadget/
#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;
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);
}
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;
} /* 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)
{
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;
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.
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
# 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
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;
{
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 */
int status;
int interfaceCount = 0;
u8 *dest;
-
/* write the config descriptor */
c = buf;
c->bLength = USB_DT_CONFIG_SIZE;
/* 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);
req->complete = composite_setup_complete;
req->length = USB_BUFSIZ;
gadget->ep0->driver_data = cdev;
-
switch (ctrl->bRequest) {
/* we handle all standard USB descriptors */
.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,
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)
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;
#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)
#define ASC(x) ((u8) ((x) >> 8))
#define ASCQ(x) ((u8) (x))
-
+static int usb_msc_connected; /*usb charge status*/
/*-------------------------------------------------------------------------*/
struct lun {
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;
+}
+
/*-------------------------------------------------------------------------*/
/*
/*-------------------------------------------------------------------------*/
+#if 0
static void invalidate_sub(struct lun *curlun)
{
struct file *filp = curlun->filp;
}
return 0;
}
-
+#endif
/*-------------------------------------------------------------------------*/
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:
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);
/*-------------------------------------------------------------------------*/
-
static void handle_exception(struct fsg_dev *fsg)
{
siginfo_t info;
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;
#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
return 0x24;
else if (gadget_is_r8a66597(gadget))
return 0x25;
+ else if (gadget_is_dwc_otg(gadget))
+ return 0x22;
return -ENOENT;
}
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");