[PATCH] drivers/usb/input: convert to dynamic input_dev allocation
Input: convert drivers/iusb/input to dynamic input_dev allocation This is required for input_dev sysfs integration Signed-off-by: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3c42f0c3dd
commit
c5b7c7c395
@@ -1619,8 +1619,8 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
struct hid_descriptor *hdesc;
|
||||
struct hid_device *hid;
|
||||
unsigned quirks = 0, rsize = 0;
|
||||
char *buf, *rdesc;
|
||||
int n, insize = 0;
|
||||
char *rdesc;
|
||||
int n, len, insize = 0;
|
||||
|
||||
for (n = 0; hid_blacklist[n].idVendor; n++)
|
||||
if ((hid_blacklist[n].idVendor == le16_to_cpu(dev->descriptor.idVendor)) &&
|
||||
@@ -1630,10 +1630,11 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
if (quirks & HID_QUIRK_IGNORE)
|
||||
return NULL;
|
||||
|
||||
if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) && ((!interface->desc.bNumEndpoints) ||
|
||||
usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
|
||||
dbg("class descriptor not present\n");
|
||||
return NULL;
|
||||
if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) &&
|
||||
(!interface->desc.bNumEndpoints ||
|
||||
usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
|
||||
dbg("class descriptor not present\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (n = 0; n < hdesc->bNumDescriptors; n++)
|
||||
@@ -1749,32 +1750,34 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
|
||||
hid->name[0] = 0;
|
||||
|
||||
if (!(buf = kmalloc(64, GFP_KERNEL)))
|
||||
goto fail;
|
||||
if (dev->manufacturer)
|
||||
strlcpy(hid->name, dev->manufacturer, sizeof(hid->name));
|
||||
|
||||
if (dev->manufacturer) {
|
||||
strcat(hid->name, dev->manufacturer);
|
||||
if (dev->product)
|
||||
snprintf(hid->name, 64, "%s %s", hid->name, dev->product);
|
||||
} else if (dev->product) {
|
||||
snprintf(hid->name, 128, "%s", dev->product);
|
||||
} else
|
||||
snprintf(hid->name, 128, "%04x:%04x",
|
||||
le16_to_cpu(dev->descriptor.idVendor),
|
||||
le16_to_cpu(dev->descriptor.idProduct));
|
||||
if (dev->product) {
|
||||
if (dev->manufacturer)
|
||||
strlcat(hid->name, " ", sizeof(hid->name));
|
||||
strlcat(hid->name, dev->product, sizeof(hid->name));
|
||||
}
|
||||
|
||||
usb_make_path(dev, buf, 64);
|
||||
snprintf(hid->phys, 64, "%s/input%d", buf,
|
||||
intf->altsetting[0].desc.bInterfaceNumber);
|
||||
if (!strlen(hid->name))
|
||||
snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x",
|
||||
le16_to_cpu(dev->descriptor.idVendor),
|
||||
le16_to_cpu(dev->descriptor.idProduct));
|
||||
|
||||
usb_make_path(dev, hid->phys, sizeof(hid->phys));
|
||||
strlcat(hid->phys, "/input", sizeof(hid->phys));
|
||||
len = strlen(hid->phys);
|
||||
if (len < sizeof(hid->phys) - 1)
|
||||
snprintf(hid->phys + len, sizeof(hid->phys) - len,
|
||||
"%d", intf->altsetting[0].desc.bInterfaceNumber);
|
||||
|
||||
if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0)
|
||||
hid->uniq[0] = 0;
|
||||
|
||||
kfree(buf);
|
||||
|
||||
hid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (!hid->urbctrl)
|
||||
goto fail;
|
||||
|
||||
usb_fill_control_urb(hid->urbctrl, dev, 0, (void *) hid->cr,
|
||||
hid->ctrlbuf, 1, hid_ctrl, hid);
|
||||
hid->urbctrl->setup_dma = hid->cr_dma;
|
||||
|
Reference in New Issue
Block a user