Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 325919
b: refs/heads/master
c: 7d16e8d
h: refs/heads/master
i:
  325917: 55f7433
  325915: d821be7
  325911: 181cf50
  325903: 25053bb
  325887: dbd92cc
v: v3
  • Loading branch information
Sebastian Andrzej Siewior authored and Felipe Balbi committed Sep 10, 2012
1 parent 5848601 commit 3073393
Show file tree
Hide file tree
Showing 19 changed files with 104 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3b4a3fc0ba83265c0bfcfdfc3416e65e47441747
refs/heads/master: 7d16e8d3eb704f5f6eb5a271d5758b495634e8e6
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/acm_ms.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#include "f_mass_storage.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

static struct usb_device_descriptor device_desc = {
.bLength = sizeof device_desc,
Expand Down Expand Up @@ -203,6 +204,7 @@ static int __init acm_ms_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto fail1;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
DRIVER_DESC);
fsg_common_put(&fsg_common);
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/usb/gadget/audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

#include <linux/kernel.h>
#include <linux/utsname.h>
#include <linux/usb/composite.h>

#include "gadget_chips.h"
#define DRIVER_DESC "Linux USB Audio Gadget"
Expand All @@ -28,6 +29,7 @@
* a "gcc --combine ... part1.c part2.c part3.c ... " build would.
*/
#include "composite.c"
USB_GADGET_COMPOSITE_OPTIONS();

/* string IDs are assigned dynamically */

Expand Down Expand Up @@ -174,6 +176,7 @@ static int __init audio_bind(struct usb_composite_dev *cdev)
status = usb_add_config(cdev, &audio_config_driver, audio_do_config);
if (status < 0)
goto fail;
usb_composite_overwrite_options(cdev, &coverwrite);

INFO(cdev, "%s, version: %s\n", DRIVER_DESC, DRIVER_VERSION);
return 0;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/cdc2.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#define CDC_PRODUCT_NUM 0xa4aa /* CDC Composite: ECM + ACM */

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

/*
* Kbuild is not very cooperative with respect to linking separately
Expand Down Expand Up @@ -204,6 +205,7 @@ static int __init cdc_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto fail1;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
DRIVER_DESC);

Expand Down
63 changes: 39 additions & 24 deletions trunk/drivers/usb/gadget/composite.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,6 @@
* published in the device descriptor, either numbers or strings or both.
* String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
*/

static ushort idVendor;
module_param(idVendor, ushort, S_IRUGO);
MODULE_PARM_DESC(idVendor, "USB Vendor ID");

static ushort idProduct;
module_param(idProduct, ushort, S_IRUGO);
MODULE_PARM_DESC(idProduct, "USB Product ID");

static ushort bcdDevice;
module_param(bcdDevice, ushort, S_IRUGO);
MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");

static char *iManufacturer;
module_param(iManufacturer, charp, S_IRUGO);
MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
Expand Down Expand Up @@ -1418,6 +1405,30 @@ static u8 override_id(struct usb_composite_dev *cdev, u8 *desc)
return *desc;
}

static void update_unchanged_dev_desc(struct usb_device_descriptor *new,
const struct usb_device_descriptor *old)
{
__le16 idVendor;
__le16 idProduct;
__le16 bcdDevice;

/*
* these variables may have been set in
* usb_composite_overwrite_options()
*/
idVendor = new->idVendor;
idProduct = new->idProduct;
bcdDevice = new->bcdDevice;

*new = *old;
if (idVendor)
new->idVendor = idVendor;
if (idProduct)
new->idProduct = idProduct;
if (bcdDevice)
new->bcdDevice = bcdDevice;
}

static struct usb_composite_driver *to_cdriver(struct usb_gadget_driver *gdrv)
{
return container_of(gdrv, struct usb_composite_driver, gadget_driver);
Expand Down Expand Up @@ -1473,17 +1484,7 @@ static int composite_bind(struct usb_gadget *gadget,
if (status < 0)
goto fail;

cdev->desc = *composite->dev;

/* standardized runtime overrides for device ID data */
if (idVendor)
cdev->desc.idVendor = cpu_to_le16(idVendor);

if (idProduct)
cdev->desc.idProduct = cpu_to_le16(idProduct);

if (bcdDevice)
cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
update_unchanged_dev_desc(&cdev->desc, composite->dev);

/* string overrides */
if (iManufacturer || !cdev->desc.iManufacturer) {
Expand Down Expand Up @@ -1686,3 +1687,17 @@ void usb_composite_setup_continue(struct usb_composite_dev *cdev)
spin_unlock_irqrestore(&cdev->lock, flags);
}

void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
struct usb_composite_overwrite *covr)
{
struct usb_device_descriptor *desc = &cdev->desc;

if (covr->idVendor)
desc->idVendor = cpu_to_le16(covr->idVendor);

if (covr->idProduct)
desc->idProduct = cpu_to_le16(covr->idProduct);

if (covr->bcdDevice)
desc->bcdDevice = cpu_to_le16(covr->bcdDevice);
}
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/ether.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ static inline bool has_rndis(void)
#include "u_ether.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

/* DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!!
* Instead: allocate your own, using normal USB-IF procedures.
Expand Down Expand Up @@ -363,6 +364,7 @@ static int __init eth_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto fail;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
DRIVER_DESC);

Expand Down
4 changes: 3 additions & 1 deletion trunk/drivers/usb/gadget/g_ffs.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ struct gfs_ffs_obj {
struct ffs_data *ffs_data;
};

USB_GADGET_COMPOSITE_OPTIONS();

static struct usb_device_descriptor gfs_dev_desc = {
.bLength = sizeof gfs_dev_desc,
.bDescriptorType = USB_DT_DEVICE,
Expand Down Expand Up @@ -377,7 +379,7 @@ static int gfs_bind(struct usb_composite_dev *cdev)
if (unlikely(ret < 0))
goto error_unbind;
}

usb_composite_overwrite_options(cdev, &coverwrite);
return 0;

error_unbind:
Expand Down
4 changes: 3 additions & 1 deletion trunk/drivers/usb/gadget/gmidi.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ MODULE_LICENSE("GPL v2");
static const char shortname[] = "g_midi";
static const char longname[] = "MIDI Gadget";

USB_GADGET_COMPOSITE_OPTIONS();

static int index = SNDRV_DEFAULT_IDX1;
module_param(index, int, S_IRUGO);
MODULE_PARM_DESC(index, "Index value for the USB MIDI Gadget adapter.");
Expand Down Expand Up @@ -163,7 +165,7 @@ static int __init midi_bind(struct usb_composite_dev *cdev)
status = usb_add_config(cdev, &midi_config, midi_bind_config);
if (status < 0)
return status;

usb_composite_overwrite_options(cdev, &coverwrite);
pr_info("%s\n", longname);
return 0;
}
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/hid.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ struct hidg_func_node {
static LIST_HEAD(hidg_func_list);

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

static struct usb_device_descriptor device_desc = {
.bLength = sizeof device_desc,
Expand Down Expand Up @@ -188,6 +189,7 @@ static int __init hid_bind(struct usb_composite_dev *cdev)
if (status < 0)
return status;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, DRIVER_DESC ", version: " DRIVER_VERSION "\n");

return 0;
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/usb/gadget/mass_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include "f_mass_storage.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

static struct usb_device_descriptor msg_device_desc = {
.bLength = sizeof msg_device_desc,
Expand Down Expand Up @@ -143,7 +144,7 @@ static int __init msg_bind(struct usb_composite_dev *cdev)
status = usb_add_config(cdev, &msg_config_driver, msg_do_config);
if (status < 0)
return status;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&cdev->gadget->dev,
DRIVER_DESC ", version: " DRIVER_VERSION "\n");
set_bit(0, &msg_registered);
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/usb/gadget/multi.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ MODULE_LICENSE("GPL");
#endif
#include "u_ether.c"


USB_GADGET_COMPOSITE_OPTIONS();

/***************************** Device Descriptor ****************************/

Expand Down Expand Up @@ -307,6 +307,7 @@ static int __ref multi_bind(struct usb_composite_dev *cdev)
status = cdc_config_register(cdev);
if (unlikely(status < 0))
goto fail2;
usb_composite_overwrite_options(cdev, &coverwrite);

/* we're done */
dev_info(&gadget->dev, DRIVER_DESC "\n");
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/ncm.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
#define CDC_PRODUCT_NUM 0xa4a1 /* Linux-USB Ethernet Gadget */

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

static struct usb_device_descriptor device_desc = {
.bLength = sizeof device_desc,
Expand Down Expand Up @@ -191,6 +192,7 @@ static int __init gncm_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto fail;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, "%s\n", DRIVER_DESC);

return 0;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/nokia.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#include "u_ether.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

#define NOKIA_VENDOR_ID 0x0421 /* Nokia */
#define NOKIA_PRODUCT_ID 0x01c8 /* Nokia Gadget */
Expand Down Expand Up @@ -197,6 +198,7 @@ static int __init nokia_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto err_usb;

usb_composite_overwrite_options(cdev, &coverwrite);
dev_info(&gadget->dev, "%s\n", NOKIA_LONG_NAME);

return 0;
Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/usb/gadget/printer.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
#include "composite.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

#define DRIVER_DESC "Printer Gadget"
#define DRIVER_VERSION "2007 OCT 06"
Expand Down Expand Up @@ -1265,6 +1266,9 @@ static int __init printer_bind(struct usb_composite_dev *cdev)
device_desc.iSerialNumber = strings[STRING_SERIALNUM].id;

ret = usb_add_config(cdev, &printer_cfg_driver, printer_bind_config);
if (ret)
return ret;
usb_composite_overwrite_options(cdev, &coverwrite);
return ret;
}

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
#include "u_serial.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

/* Thanks to NetChip Technologies for donating this product ID.
*
Expand Down Expand Up @@ -212,6 +213,7 @@ static int __init gs_bind(struct usb_composite_dev *cdev)
if (status < 0)
goto fail;

usb_composite_overwrite_options(cdev, &coverwrite);
INFO(cdev, "%s\n", GS_VERSION_NAME);

return 0;
Expand Down
5 changes: 5 additions & 0 deletions trunk/drivers/usb/gadget/tcm_usb_gadget.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

#include "tcm_usb_gadget.h"

USB_GADGET_COMPOSITE_OPTIONS();

static struct target_fabric_configfs *usbg_fabric_configfs;

static inline struct f_uas *to_f_uas(struct usb_function *f)
Expand Down Expand Up @@ -2437,6 +2439,9 @@ static int usb_target_bind(struct usb_composite_dev *cdev)

ret = usb_add_config(cdev, &usbg_config_driver,
usbg_cfg_bind);
if (ret)
return ret;
usb_composite_overwrite_options(cdev, &coverwrite);
return 0;
}

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/webcam.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "uvc_v4l2.c"
#include "f_uvc.c"

USB_GADGET_COMPOSITE_OPTIONS();
/* --------------------------------------------------------------------------
* Device descriptor
*/
Expand Down Expand Up @@ -370,6 +371,7 @@ webcam_bind(struct usb_composite_dev *cdev)
webcam_config_bind)) < 0)
goto error;

usb_composite_overwrite_options(cdev, &coverwrite);
INFO(cdev, "Webcam Video Gadget\n");
return 0;

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/usb/gadget/zero.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
#include "f_loopback.c"

/*-------------------------------------------------------------------------*/
USB_GADGET_COMPOSITE_OPTIONS();

#define DRIVER_VERSION "Cinco de Mayo 2008"

Expand Down Expand Up @@ -305,6 +306,7 @@ static int __init zero_bind(struct usb_composite_dev *cdev)
longname, gadget->name);
device_desc.bcdDevice = cpu_to_le16(0x9999);
}
usb_composite_overwrite_options(cdev, &coverwrite);

INFO(cdev, "%s, version: " DRIVER_VERSION "\n", longname);

Expand Down
24 changes: 24 additions & 0 deletions trunk/include/linux/usb/composite.h
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,30 @@ extern int usb_string_ids_tab(struct usb_composite_dev *c,
struct usb_string *str);
extern int usb_string_ids_n(struct usb_composite_dev *c, unsigned n);

/*
* Some systems will need runtime overrides for the product identifiers
* published in the device descriptor, either numbers or strings or both.
* String parameters are in UTF-8 (superset of ASCII's 7 bit characters).
*/
struct usb_composite_overwrite {
u16 idVendor;
u16 idProduct;
u16 bcdDevice;
};
#define USB_GADGET_COMPOSITE_OPTIONS() \
static struct usb_composite_overwrite coverwrite; \
\
module_param_named(idVendor, coverwrite.idVendor, ushort, S_IRUGO); \
MODULE_PARM_DESC(idVendor, "USB Vendor ID"); \
\
module_param_named(idProduct, coverwrite.idProduct, ushort, S_IRUGO); \
MODULE_PARM_DESC(idProduct, "USB Product ID"); \
\
module_param_named(bcdDevice, coverwrite.bcdDevice, ushort, S_IRUGO); \
MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)")

void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
struct usb_composite_overwrite *covr);

/* messaging utils */
#define DBG(d, fmt, args...) \
Expand Down

0 comments on commit 3073393

Please sign in to comment.