Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] [PATCH] ttusb-dec cleanup



Hi All!

I've attached a patch which cleans up some of the init/deinit of the ttusb-dec 
driver, if someone check over/test this I would appreaciate it.

Kenneth
Index: linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c,v
retrieving revision 1.53
diff -u -r1.53 ttusb_dec.c
--- linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	8 Aug 2004 12:34:51 -0000	1.53
+++ linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c	9 Aug 2004 14:10:42 -0000
@@ -102,7 +102,6 @@
 	struct dmxdev			dmxdev;
 	struct dvb_demux		demux;
 	struct dmx_frontend		frontend;
-	struct dvb_i2c_bus		i2c_bus;
 	struct dvb_net			dvb_net;
 	struct dvb_frontend_info	*frontend_info;
 	int (*frontend_ioctl) (struct dvb_frontend *, unsigned int, void *);
@@ -152,8 +151,6 @@
 	struct dvb_demux_filter	*video_filter;
 	struct list_head	filter_info_list;
 	spinlock_t		filter_info_list_lock;
-
-	int			active; /* Loaded successfully */
 };
 
 struct urb_frame {
@@ -1680,19 +1677,6 @@
 	return 0;
 }
 
-static void ttusb_dec_init_frontend(struct ttusb_dec *dec)
-{
-	dec->i2c_bus.adapter = dec->adapter;
-
-	dvb_register_frontend(dec->frontend_ioctl, &dec->i2c_bus, (void *)dec,
-			      dec->frontend_info);
-}
-
-static void ttusb_dec_exit_frontend(struct ttusb_dec *dec)
-{
-	dvb_unregister_frontend(dec->frontend_ioctl, &dec->i2c_bus);
-}
-
 static void ttusb_dec_init_filters(struct ttusb_dec *dec)
 {
 	INIT_LIST_HEAD(&dec->filter_info_list);
@@ -1714,6 +1698,7 @@
 static int ttusb_dec_probe(struct usb_interface *intf,
 			   const struct usb_device_id *id)
 {
+	int ret;
 	struct usb_device *udev;
 	struct ttusb_dec *dec;
 
@@ -1747,21 +1732,31 @@
 	dec->udev = udev;
 
 	ttusb_dec_init_usb(dec);
-	if (ttusb_dec_init_stb(dec)) {
-		ttusb_dec_exit_usb(dec);
-		return 0;
-	}
-	ttusb_dec_init_dvb(dec);
-	ttusb_dec_init_frontend(dec);
+	if ((ret = ttusb_dec_init_stb(dec)))
+		goto error_1;
+
+	if ((ret = ttusb_dec_init_dvb(dec)))
+		goto error_2;
+	
+	if ((ret = dvb_register_frontend_new(dec->frontend_ioctl, dec->adapter,
+					     dec, dec->frontend_info,
+					     THIS_MODULE)))
+		goto error_2;
+
 	ttusb_dec_init_v_pes(dec);
 	ttusb_dec_init_filters(dec);
 	ttusb_dec_init_tasklet(dec);
 
-	dec->active = 1;
-
 	ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN);
 
 	return 0;
+
+error_2:
+	ttusb_dec_exit_dvb(dec);
+error_1:
+	ttusb_dec_exit_usb(dec);
+	kfree(dec);
+	return ret;
 }
 
 static void ttusb_dec_disconnect(struct usb_interface *intf)
@@ -1772,14 +1767,11 @@
 
 	dprintk("%s\n", __FUNCTION__);
 
-	if (dec->active) {
-		ttusb_dec_exit_tasklet(dec);
-		ttusb_dec_exit_filters(dec);
-		ttusb_dec_exit_usb(dec);
-		ttusb_dec_exit_frontend(dec);
-		ttusb_dec_exit_dvb(dec);
-	}
-
+	ttusb_dec_exit_tasklet(dec);
+	ttusb_dec_exit_filters(dec);
+	dvb_unregister_frontend_new(dec->frontend_ioctl, dec->adapter);
+	ttusb_dec_exit_dvb(dec);
+	ttusb_dec_exit_usb(dec);
 	kfree(dec);
 }
 

Home | Main Index | Thread Index