Hi friends,
I have a DM3730 based board, similar to Beagle-XM. I'm running 2.6.37 from Devkit 2.1 gingerbread on it. I've started exploring the USB-OTG functionality of the board.
a) USB-OTG host mode (ie: my board is the host, and plugging in things like thumb drives)
- I believe in this mode, the 5th pin, USB ID is grounded by the adapter which is a 5-pin male to 4-pin female adapter. Came with DM355 kit from TI.
- It seems to work fine.
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
b_idle
- then plug in the adapter and a usb stick
[ 1016.683441] usb 2-1: new high speed USB device using musb-hdrc and address 2
[ 1016.833068] usb 2-1: device v0204 p6025 is not supported
[ 1016.838623] usb 2-1: New USB device found, idVendor=0204, idProduct=6025
[ 1016.845642] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1016.853088] usb 2-1: Product: Flash Disk
[ 1016.857177] usb 2-1: SerialNumber: 260853000A8C3205
[ 1016.865661] usb 2-1: selecting invalid altsetting 1
[ 1016.871276] scsi0 : usb-storage 2-1:1.0
[ 1017.879577] scsi 0:0:0:0: Direct-Access Flash Disk 5.00 PQ: 0 ANSI: 2
[ 1017.893493] sd 0:0:0:0: [sda] 2009088 512-byte logical blocks: (1.02 GB/981 MiB)
[ 1017.901641] sd 0:0:0:0: [sda] Write Protect is off
[ 1017.906707] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1017.916717] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1017.923919] sda: sda1
[ 1017.931091] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1017.937500] sd 0:0:0:0: [sda] Attached SCSI removable disk
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
a_host
So host mode looks good.
b) client mode
- our board is powered from mains so doesn't depended on VBUS from USB-OTG
I'm using a 5-pin male to 4-pin male cable (which I tested works fine with a Beagleboard).
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
b_idle
- plug in the cable connected to same PC that was tested to work with beagleboard
- no change seen
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
b_idle
- try to force it to be client, no effect
root@localhost:/# echo client > /sys/devices/platform/musb-omap2430.0/musb-hdrc.
0/mode
sh: write error: Invalid argument
root@localhost:/# echo a_client > /sys/devices/platform/musb-omap2430.0/musb-hdr
c.0/mode
sh: write error: Invalid argument
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/mode
b_idle
root@localhost:/# cat /sys/devices/platform/musb-omap2430.0/musb-hdrc.0/vbus
Vbus off, timeout 1100
Seems like there is a problem with my board (or possibly with my software) that is causing USB client mode not to work. Since client mode works, my guess is that the problem would have to do with the ID pin. But is there a way I can tell software to force into client mode? I would welcome any debug advice or suggestions.
Thanks,
jayakumar
ps: I checked my config settings and board setup, seem right:
rowboat-android$ egrep -i musb kernel/.config
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_TUSB6010_GLUE is not set
CONFIG_USB_MUSB_OMAP2PLUS_GLUE=y
# CONFIG_USB_MUSB_AM35X_GLUE is not set
# CONFIG_USB_MUSB_DAVINCI is not set
# CONFIG_USB_MUSB_DA8XX is not set
# CONFIG_USB_MUSB_TUSB6010 is not set
CONFIG_USB_MUSB_OMAP2PLUS=y
# CONFIG_USB_MUSB_AM35X is not set
# CONFIG_USB_MUSB_TI81XX is not set
# CONFIG_USB_MUSB_BLACKFIN is not set
# CONFIG_USB_MUSB_UX500 is not set
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_PERIPHERAL is not set
CONFIG_USB_MUSB_OTG=y
CONFIG_USB_GADGET_MUSB_HDRC=y
CONFIG_USB_MUSB_HDRC_HCD=y
# CONFIG_MUSB_PIO_ONLY is not set
CONFIG_MUSB_USE_SYSTEM_DMA_WORKAROUND=y
CONFIG_USB_MUSB_DEBUG=y
rowboat-android$ egrep -i android kernel/.config
CONFIG_ANDROID_PARANOID_NETWORK=y
CONFIG_ANDROID_PMEM=y
CONFIG_USB_ANDROID=y
# CONFIG_USB_ANDROID_ACM is not set
CONFIG_USB_ANDROID_ADB=y
CONFIG_USB_ANDROID_MASS_STORAGE=y
CONFIG_USB_ANDROID_MTP=y
# CONFIG_USB_ANDROID_RNDIS is not set
# Android
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_LOGGER=y
CONFIG_ANDROID_RAM_CONSOLE=y
CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION=y
CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_DATA_SIZE=128
CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_ECC_SIZE=16
CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE=8
CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_POLYNOMIAL=0x11d
# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
CONFIG_ANDROID_TIMED_OUTPUT=y
CONFIG_ANDROID_TIMED_GPIO=y
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_ULPI,
.mode = MUSB_OTG,
.power = 100,
};