summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/tuner-xc2028.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/video/tuner-xc2028.c')
-rw-r--r--linux/drivers/media/video/tuner-xc2028.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/linux/drivers/media/video/tuner-xc2028.c b/linux/drivers/media/video/tuner-xc2028.c
index 9b6e7c006..4b429759b 100644
--- a/linux/drivers/media/video/tuner-xc2028.c
+++ b/linux/drivers/media/video/tuner-xc2028.c
@@ -653,6 +653,8 @@ static int xc2028_dvb_release(struct dvb_frontend *fe)
priv->count--;
if (!priv->count) {
+ list_del(&priv->xc2028_list);
+
if (priv->ctrl.fname)
kfree(priv->ctrl.fname);
@@ -742,7 +744,6 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
list_for_each_entry(priv, &xc2028_list, xc2028_list) {
if (priv->dev == dev) {
dev = NULL;
- priv->count++;
}
}
@@ -769,8 +770,10 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
priv->ctrl.fname = kmalloc(sizeof(DEFAULT_FIRMWARE)+1,
GFP_KERNEL);
- if (!priv->ctrl.fname)
+ if (!priv->ctrl.fname) {
+ kfree (priv);
return -ENOMEM;
+ }
strcpy (priv->ctrl.fname, DEFAULT_FIRMWARE);
#endif
@@ -779,6 +782,7 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
list_add_tail(&priv->xc2028_list,&xc2028_list);
}
+ priv->count++;
memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
sizeof(xc2028_dvb_tuner_ops));