staging: usb: gadget: Add Configurable Composite Gadget driver
authorMike Lockwood <lockwood@android.com>
Wed, 16 May 2012 10:34:37 +0000 (12:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 May 2012 12:31:42 +0000 (05:31 -0700)
commit332bb43f7c4baea2a0dce7ae2c078c55e14d37b5
treeb9fbda6e36bf69ad6b27e8269fbc0c0ec98f0748
parent3a2300385f601fbd8aed67555a1a3fef5b3d4d10
staging: usb: gadget: Add Configurable Composite Gadget driver

The Configurable Gadget driver is a composite driver that allows
userspace to change at runtime the list of functions enabled in
its configuration and to configure these functions. It supports
multiple functions: acm, rndis, and mass storage.

It is usually controlled by a daemon that changes the configuration
based on user settings. For example, rndis is enabled when the user
enables sharing the phone data connection.

As an example on how to use it, the following shell commands will
make the gadget disconnect from the host and make it be re-enumerated
as a composite with 1 rndis and 2 acm interfaces, and a different
product id:

echo 0       > /sys/class/ccg_usb/ccg0/enable
echo rndis,acm > /sys/class/ccg_usb/ccg0/functions
echo 2       > /sys/class/ccg_usb/ccg0/f_acm/instances
echo -n 0x2d01 > /sys/module/g_ccg/parameters/idProduct
echo 1       > /sys/class/ccg_usb/ccg0/enable

The driver requires a gadget controller that supports software
control of the D+ pullup and the controller driver must support
disabling the pullup during composite_bind.

Signed-off-by: Mike Lockwood <lockwood@android.com>
Signed-off-by: Benoit Goby <benoit@android.com>
[import from android.c, implement review comments, remove adb,mtp,ptp,accessory]
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/ccg/Kconfig [new file with mode: 0644]
drivers/staging/ccg/Makefile [new file with mode: 0644]
drivers/staging/ccg/TODO [new file with mode: 0644]
drivers/staging/ccg/ccg.c [new file with mode: 0644]
drivers/staging/ccg/sysfs-class-ccg_usb [new file with mode: 0644]