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