V4L/DVB (11652): au0828: fix kernel oops regression on USB disconnect.
A regression was introduced in hg changeset 33810c734a0d, which resulted in a kernel panic whenever the device was disconnected from USB. The call to 4l2_device_register() was overwriting the pointer for usb_set_intfdata(), so when au0828_usb_disconnect() was called, the usb_get_intfdata() returned a pointer to the v4l2_device instead of the au0828_dev structure. Signed-off-by: Devin Heitmueller <dheitmueller@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
d4dc673da9
commit
fe78a49c8a
1 changed files with 4 additions and 2 deletions
|
@ -192,8 +192,6 @@ static int au0828_usb_probe(struct usb_interface *interface,
|
|||
dev->usbdev = usbdev;
|
||||
dev->boardnr = id->driver_info;
|
||||
|
||||
usb_set_intfdata(interface, dev);
|
||||
|
||||
/* Create the v4l2_device */
|
||||
retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
|
||||
if (retval) {
|
||||
|
@ -222,6 +220,10 @@ static int au0828_usb_probe(struct usb_interface *interface,
|
|||
/* Digital TV */
|
||||
au0828_dvb_register(dev);
|
||||
|
||||
/* Store the pointer to the au0828_dev so it can be accessed in
|
||||
au0828_usb_disconnect */
|
||||
usb_set_intfdata(interface, dev);
|
||||
|
||||
printk(KERN_INFO "Registered device AU0828 [%s]\n",
|
||||
dev->board.name == NULL ? "Unset" : dev->board.name);
|
||||
|
||||
|
|
Loading…
Reference in a new issue