Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv12477
Modified Files:
iforce-main.c iforce-usb.c iforce.h
Log Message:
Added delete functions to delete driver. iforce_delete is only called when
the driver is realeased (or on deconnection if it is not used).
Index: iforce-main.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-main.c 2002/01/29 23:17:02 1.8
+++ iforce-main.c 2002/01/30 19:47:35 1.9
@@ -276,11 +276,28 @@
switch (iforce->bus) {
#ifdef IFORCE_USB
case IFORCE_USB:
- if (!--iforce->open)
+ if (!--iforce->open) {
usb_unlink_urb(&iforce->irq);
+ usb_unlink_urb(&iforce->out);
+
+ /* The device was unplugged before the file
+ * was released */
+ if (iforce->usbdev == NULL) {
+ iforce_delete(iforce);
+ }
+ }
break;
#endif
}
+}
+
+void iforce_delete(struct iforce *iforce)
+{
+#ifdef IFORCE_USB
+ iforce_usb_delete(iforce);
+#endif
+
+ kfree(iforce);
}
int iforce_init_device(struct iforce *iforce)
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-usb.c 2002/01/30 17:54:50 1.8
+++ iforce-usb.c 2002/01/30 19:47:35 1.9
@@ -135,15 +135,22 @@
return iforce;
}
+/* Called by iforce_delete() */
+void iforce_usb_delete(struct iforce* iforce)
+{
+ usb_unlink_urb(&iforce->irq);
+ usb_unlink_urb(&iforce->out);
+ usb_unlink_urb(&iforce->ctrl);
+}
+
static void iforce_usb_disconnect(struct usb_device *dev, void *ptr)
{
struct iforce *iforce = ptr;
- usb_unlink_urb(&iforce->irq);
iforce->usbdev = NULL;
input_unregister_device(&iforce->dev);
-#if 0
- kfree(iforce);
-#endif
+
+ if (iforce->open <= 0)
+ iforce_delete(iforce);
}
static struct usb_device_id iforce_usb_ids [] = {
Index: iforce.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- iforce.h 2002/01/28 22:45:00 1.6
+++ iforce.h 2002/01/30 19:47:35 1.7
@@ -173,9 +173,11 @@
/* iforce-usb.c */
void iforce_usb_xmit(struct iforce *iforce);
+void iforce_usb_delete(struct iforce *iforce);
/* iforce-main.c */
int iforce_init_device(struct iforce *iforce);
+void iforce_delete(struct iforce *iforce);
/* iforce-packets.c */
int iforce_control_playback(struct iforce*, u16 id, unsigned int);
|