Chuck Ebbert 02278be
commit 57ab12e418ec4fe24c11788bb1bbdabb29d05679
Chuck Ebbert 02278be
Author: Jiri Kosina <jkosina at suse.cz>
Chuck Ebbert 02278be
Date:   Wed Feb 17 14:25:01 2010 +0100
Chuck Ebbert 02278be
Chuck Ebbert 02278be
    HID: usbhid: initialize interface pointers early enough
Chuck Ebbert 02278be
    
Chuck Ebbert 02278be
    Move the initialization of USB interface pointers from _start()
Chuck Ebbert 02278be
    over to _probe() callback, which is where it belongs.
Chuck Ebbert 02278be
    
Chuck Ebbert 02278be
    This fixes case where interface is NULL when parsing of report
Chuck Ebbert 02278be
    descriptor fails.
Chuck Ebbert 02278be
    
Chuck Ebbert 02278be
    LKML-Reference: <20100213135720.603e5f64 at neptune.home>
Chuck Ebbert 02278be
    Reported-by: Alan Stern <stern at rowland.harvard.edu>
Chuck Ebbert 02278be
    Tested-by: Bruno Prémont <bonbons at linux-vserver.org>
Chuck Ebbert 02278be
    Signed-off-by: Jiri Kosina <jkosina at suse.cz>
Chuck Ebbert 02278be
Chuck Ebbert 02278be
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
Chuck Ebbert 02278be
index 74bd3ca..ceaf4a1 100644
Chuck Ebbert 02278be
--- a/drivers/hid/usbhid/hid-core.c
Chuck Ebbert 02278be
+++ b/drivers/hid/usbhid/hid-core.c
Chuck Ebbert 02278be
@@ -1005,9 +1005,6 @@ static int usbhid_start(struct hid_device *hid)
Chuck Ebbert 02278be
 
Chuck Ebbert 02278be
 	spin_lock_init(&usbhid->lock);
Chuck Ebbert 02278be
 
Chuck Ebbert 02278be
-	usbhid->intf = intf;
Chuck Ebbert 02278be
-	usbhid->ifnum = interface->desc.bInterfaceNumber;
Chuck Ebbert 02278be
-
Chuck Ebbert 02278be
 	usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
Chuck Ebbert 02278be
 	if (!usbhid->urbctrl) {
Chuck Ebbert 02278be
 		ret = -ENOMEM;
Chuck Ebbert 02278be
@@ -1178,6 +1175,8 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
Chuck Ebbert 02278be
 
Chuck Ebbert 02278be
 	hid->driver_data = usbhid;
Chuck Ebbert 02278be
 	usbhid->hid = hid;
Chuck Ebbert 02278be
+	usbhid->intf = intf;
Chuck Ebbert 02278be
+	usbhid->ifnum = interface->desc.bInterfaceNumber;
Chuck Ebbert 02278be
 
Chuck Ebbert 02278be
 	ret = hid_add_device(hid);
Chuck Ebbert 02278be
 	if (ret) {