aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/gmidi.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2012-09-10 03:16:07 -0400
committerFelipe Balbi <balbi@ti.com>2012-09-10 09:43:24 -0400
commited9cbda63d45638b69ce62412e3a3c7b00644835 (patch)
tree37db67a0df54bb9d9fb26b9e8c043b21551a3830 /drivers/usb/gadget/gmidi.c
parent9c6d196d5aa35e07482f23c3e37755e7a82140e0 (diff)
usb: gadget: remove usb_gadget_controller_number()
The bcdDevice field is defined as |Device release number in binary-coded decimal in the USB 2.0 specification. We use this field to distinguish the UDCs from each other. In theory this could be used on the host side to apply certain quirks if the "special" UDC in combination with this gadget is used. This hasn't been done as far as I am aware. In practice it would be better to fix the UDC driver before shipping since a later release might not need this quirk anymore. There are some driver in tree (on the host side) which use the bcdDevice field to figure out special workarounds for a given firmware revision. This seems to make sense. Therefore this patch converts all gadgets (except a few) to use the kernel version instead a random 2 or 3 plus the UDC number. The few that don't report kernel's version are: - webcam This one reports always a version 0x10 so allow it to do so in future. - nokia This one reports always 0x211. The comment says that this gadget works only if the UDC supports altsettings so I added a check for this. - serial This one reports 0x2400 + UDC number. Since the gadget version is 2.4 this could make sense. Therefore bcdDevice is 0x2400 here. I also remove various gadget_is_<name> macros which are unused. The remaining few macros should be moved to feature / bug bitfield. Acked-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget/gmidi.c')
-rw-r--r--drivers/usb/gadget/gmidi.c16
1 files changed, 1 insertions, 15 deletions
diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c
index 4181524d1c4b..881aab86ae99 100644
--- a/drivers/usb/gadget/gmidi.c
+++ b/drivers/usb/gadget/gmidi.c
@@ -137,8 +137,7 @@ static int __init midi_bind_config(struct usb_configuration *c)
137 137
138static int __init midi_bind(struct usb_composite_dev *cdev) 138static int __init midi_bind(struct usb_composite_dev *cdev)
139{ 139{
140 struct usb_gadget *gadget = cdev->gadget; 140 int status;
141 int gcnum, status;
142 141
143 status = usb_string_ids_tab(cdev, strings_dev); 142 status = usb_string_ids_tab(cdev, strings_dev);
144 if (status < 0) 143 if (status < 0)
@@ -147,19 +146,6 @@ static int __init midi_bind(struct usb_composite_dev *cdev)
147 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 146 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
148 midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id; 147 midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id;
149 148
150 gcnum = usb_gadget_controller_number(gadget);
151 if (gcnum < 0) {
152 /* gmidi is so simple (no altsettings) that
153 * it SHOULD NOT have problems with bulk-capable hardware.
154 * so warn about unrecognized controllers, don't panic.
155 */
156 pr_warning("%s: controller '%s' not recognized\n",
157 __func__, gadget->name);
158 device_desc.bcdDevice = cpu_to_le16(0x9999);
159 } else {
160 device_desc.bcdDevice = cpu_to_le16(0x0200 + gcnum);
161 }
162
163 status = usb_add_config(cdev, &midi_config, midi_bind_config); 149 status = usb_add_config(cdev, &midi_config, midi_bind_config);
164 if (status < 0) 150 if (status < 0)
165 return status; 151 return status;