Index: dvb_i2c.c
===================================================================
RCS file: /cvsroot/tuxbox/driver/dvb/drivers/media/dvb/dvb-core/dvb_i2c.c,v
retrieving revision 1.1
diff -u -r1.1 dvb_i2c.c
--- dvb_i2c.c	2002/10/20 15:38:01	1.1
+++ dvb_i2c.c	2002/10/30 14:13:01
@@ -228,6 +228,14 @@
 }
 
 
+static void
+dvb_remove_i2c_bus (struct dvb_i2c_bus *i2c)
+{
+	unregister_all_clients_from_bus (i2c);
+	list_del (&i2c->list_head);
+	kfree (i2c);
+}
+
 
 void dvb_unregister_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c,
 					  struct i2c_msg msgs[], int num),
@@ -235,11 +243,24 @@
 			     int id)
 {
 	struct dvb_i2c_bus *i2c = dvb_find_i2c_bus (xfer, adapter, id);
+
+	if (i2c)
+		dvb_remove_i2c_bus (i2c);
+}
+
+
+void 
+dvb_unregister_i2c_adapter(struct dvb_adapter *adapter)
+{
+	struct list_head *entry;
+
+	list_for_each (entry, &dvb_i2c_buslist) {
+		struct dvb_i2c_bus *i2c;
 
-	if (i2c) {
-		unregister_all_clients_from_bus (i2c);
-		list_del (&i2c->list_head);
-		kfree (i2c);
+		i2c = list_entry (entry, struct dvb_i2c_bus, list_head);
+		
+		if (i2c->adapter == adapter)
+			dvb_remove_i2c_bus (i2c);
 	}
 }
 
Index: dvb_i2c.h
===================================================================
RCS file: /cvsroot/tuxbox/driver/dvb/drivers/media/dvb/dvb-core/dvb_i2c.h,v
retrieving revision 1.1
diff -u -r1.1 dvb_i2c.h
--- dvb_i2c.h	2002/10/20 15:38:01	1.1
+++ dvb_i2c.h	2002/10/30 14:13:01
@@ -52,6 +52,8 @@
 			     struct dvb_adapter *adapter,
 			     int id);
 
+extern
+void dvb_unregister_i2c_adapter(struct dvb_adapter *adapter);
 
 extern int dvb_register_i2c_device (struct module *owner,
 				    int (*attach) (struct dvb_i2c_bus *i2c),
Index: dvb_ksyms.c
===================================================================
RCS file: /cvsroot/tuxbox/driver/dvb/drivers/media/dvb/dvb-core/dvb_ksyms.c,v
retrieving revision 1.2
diff -u -r1.2 dvb_ksyms.c
--- dvb_ksyms.c	2002/10/22 02:12:46	1.2
+++ dvb_ksyms.c	2002/10/30 14:13:01
@@ -25,6 +25,7 @@
 
 EXPORT_SYMBOL(dvb_register_i2c_bus);
 EXPORT_SYMBOL(dvb_unregister_i2c_bus);
+EXPORT_SYMBOL(dvb_unregister_i2c_adapter);
 EXPORT_SYMBOL(dvb_register_i2c_device);
 EXPORT_SYMBOL(dvb_unregister_i2c_device);
 
Index: dvbdev.c
===================================================================
RCS file: /cvsroot/tuxbox/driver/dvb/drivers/media/dvb/dvb-core/dvbdev.c,v
retrieving revision 1.1
diff -u -r1.1 dvbdev.c
--- dvbdev.c	2002/10/20 15:38:01	1.1
+++ dvbdev.c	2002/10/30 14:13:02
@@ -41,6 +41,7 @@
 
 #include "compat.h"
 #include "dvbdev.h"
+#include "dvb_i2c.h"
 
 static int dvbdev_debug = 0;
 #define dprintk if (dvbdev_debug) printk
@@ -321,7 +322,8 @@
 
 int dvb_unregister_adapter(struct dvb_adapter *adap)
 {
-        devfs_unregister (adap->devfs_handle);
+	dvb_unregister_i2c_adapter (adap);
+	devfs_unregister (adap->devfs_handle);
 	if (down_interruptible (&dvbdev_register_lock))
 		return -ERESTARTSYS;
 	list_del (&adap->list_head);
