From: Greg KH To: torvalds@transmeta.com Cc: linux-usb-devel@lists.sourceforge.net Subject: [PATCH 5 of 6] USB vicam driver bugfix Hi, Here's a patch against 2.5.3-pre2 that for the USB vicam driver that fixes the module reference logic in the driver. This patch was done by Oliver Neukum. thanks, greg k-h diff -Nru a/drivers/usb/vicam.c b/drivers/usb/vicam.c --- a/drivers/usb/vicam.c Mon Jan 21 10:48:38 2002 +++ b/drivers/usb/vicam.c Mon Jan 21 10:48:38 2002 @@ -468,29 +468,23 @@ int err = 0; dbg("vicam_v4l_open"); - - MOD_INC_USE_COUNT; + down(&vicam->sem); - if (vicam->open_count) /* Maybe not needed? */ - err = -EBUSY; + vicam->fbuf = rvmalloc(vicam->maxframesize * VICAM_NUMFRAMES); + if (!vicam->fbuf) + err=-ENOMEM; else { - vicam->fbuf = rvmalloc(vicam->maxframesize * VICAM_NUMFRAMES); - if (!vicam->fbuf) - err=-ENOMEM; - else { - vicam->open_count = 1; - } + vicam->open_count = 1; + } #ifdef BLINKING - vicam_sndctrl(1, vicam, VICAM_REQ_CAMERA_POWER, 0x01, NULL, 0); - info ("led on"); - vicam_sndctrl(1, vicam, VICAM_REQ_LED_CONTROL, 0x01, NULL, 0); + vicam_sndctrl(1, vicam, VICAM_REQ_CAMERA_POWER, 0x01, NULL, 0); + info ("led on"); + vicam_sndctrl(1, vicam, VICAM_REQ_LED_CONTROL, 0x01, NULL, 0); #endif - } up(&vicam->sem); - if (err) - MOD_DEC_USE_COUNT; + return err; } @@ -515,7 +509,6 @@ up(&vicam->sem); /* Why does se401.c have a usbdevice check here? */ /* If device is unplugged while open, I guess we only may unregister now */ - MOD_DEC_USE_COUNT; } static long vicam_v4l_read(struct video_device *vdev, char *user_buf, unsigned long buflen, int noblock) @@ -717,6 +710,7 @@ /* FIXME - vicam_template - important */ static struct video_device vicam_template = { + owner: THIS_MODULE, name: "vicam USB camera", type: VID_TYPE_CAPTURE, hardware: VID_HARDWARE_SE401, /* need to ask for own id */ @@ -938,6 +932,7 @@ /* usb specific object needed to register this driver with the usb subsystem */ static struct usb_driver vicam_driver = { + owner: THIS_MODULE, name: "vicam", probe: vicam_probe, disconnect: vicam_disconnect, @@ -984,3 +979,4 @@ module_init(usb_vicam_init); module_exit(usb_vicam_exit); +