aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/dvb/dvb-usb/cxusb.c1
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c1
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c2
-rw-r--r--drivers/media/video/tuner-core.c1
-rw-r--r--drivers/media/video/tuner-xc2028.c15
5 files changed, 12 insertions, 8 deletions
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index c58365005ac1..8aff70217635 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -509,7 +509,6 @@ static int cxusb_dvico_xc3028_tuner_attach(struct dvb_usb_adapter *adap)
509 struct xc2028_config cfg = { 509 struct xc2028_config cfg = {
510 .i2c_adap = &adap->dev->i2c_adap, 510 .i2c_adap = &adap->dev->i2c_adap,
511 .i2c_addr = 0x61, 511 .i2c_addr = 0x61,
512 .video_dev = adap->dev,
513 .callback = dvico_bluebird_xc2028_callback, 512 .callback = dvico_bluebird_xc2028_callback,
514 }; 513 };
515 static struct xc2028_ctrl ctl = { 514 static struct xc2028_ctrl ctl = {
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index 22381de7359e..5549a9d73a5c 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -297,7 +297,6 @@ static int dvb_register(struct cx23885_tsport *port)
297 struct xc2028_config cfg = { 297 struct xc2028_config cfg = {
298 .i2c_adap = &i2c_bus->i2c_adap, 298 .i2c_adap = &i2c_bus->i2c_adap,
299 .i2c_addr = 0x61, 299 .i2c_addr = 0x61,
300 .video_dev = port,
301 .callback = cx23885_hvr1500_xc3028_callback, 300 .callback = cx23885_hvr1500_xc3028_callback,
302 }; 301 };
303 static struct xc2028_ctrl ctl = { 302 static struct xc2028_ctrl ctl = {
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 37ebfcc6be55..bbbde6d7dab9 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -458,7 +458,6 @@ static int attach_xc3028(u8 addr, struct cx8802_dev *dev)
458 struct xc2028_config cfg = { 458 struct xc2028_config cfg = {
459 .i2c_adap = &dev->core->i2c_adap, 459 .i2c_adap = &dev->core->i2c_adap,
460 .i2c_addr = addr, 460 .i2c_addr = addr,
461 .video_dev = dev->core->i2c_adap.algo_data,
462 }; 461 };
463 462
464 if (!dev->dvb.frontend) { 463 if (!dev->dvb.frontend) {
@@ -780,7 +779,6 @@ static int dvb_register(struct cx8802_dev *dev)
780 struct xc2028_config cfg = { 779 struct xc2028_config cfg = {
781 .i2c_adap = &dev->core->i2c_adap, 780 .i2c_adap = &dev->core->i2c_adap,
782 .i2c_addr = 0x61, 781 .i2c_addr = 0x61,
783 .video_dev = dev->core,
784 .callback = cx88_pci_nano_callback, 782 .callback = cx88_pci_nano_callback,
785 }; 783 };
786 static struct xc2028_ctrl ctl = { 784 static struct xc2028_ctrl ctl = {
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 4b936b809d78..225e8f8df1a5 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -419,7 +419,6 @@ static void set_type(struct i2c_client *c, unsigned int type,
419 struct xc2028_config cfg = { 419 struct xc2028_config cfg = {
420 .i2c_adap = t->i2c->adapter, 420 .i2c_adap = t->i2c->adapter,
421 .i2c_addr = t->i2c->addr, 421 .i2c_addr = t->i2c->addr,
422 .video_dev = c->adapter->algo_data,
423 .callback = t->tuner_callback, 422 .callback = t->tuner_callback,
424 }; 423 };
425 if (!xc2028_attach(&t->fe, &cfg)) { 424 if (!xc2028_attach(&t->fe, &cfg)) {
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c
index a9caae1af49d..0b5ba67a4da5 100644
--- a/drivers/media/video/tuner-xc2028.c
+++ b/drivers/media/video/tuner-xc2028.c
@@ -1155,7 +1155,7 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe,
1155 if (debug) 1155 if (debug)
1156 printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n"); 1156 printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n");
1157 1157
1158 if (NULL == cfg || NULL == cfg->video_dev) 1158 if (NULL == cfg)
1159 return NULL; 1159 return NULL;
1160 1160
1161 if (!fe) { 1161 if (!fe) {
@@ -1163,13 +1163,19 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe,
1163 return NULL; 1163 return NULL;
1164 } 1164 }
1165 1165
1166 video_dev = cfg->video_dev; 1166 video_dev = cfg->i2c_adap->algo_data;
1167
1168 if (debug)
1169 printk(KERN_DEBUG "xc2028: video_dev =%p\n", video_dev);
1167 1170
1168 mutex_lock(&xc2028_list_mutex); 1171 mutex_lock(&xc2028_list_mutex);
1169 1172
1170 list_for_each_entry(priv, &xc2028_list, xc2028_list) { 1173 list_for_each_entry(priv, &xc2028_list, xc2028_list) {
1171 if (priv->video_dev == cfg->video_dev) { 1174 if (&priv->i2c_props.adap->dev == &cfg->i2c_adap->dev) {
1172 video_dev = NULL; 1175 video_dev = NULL;
1176 if (debug)
1177 printk(KERN_DEBUG "xc2028: reusing device\n");
1178
1173 break; 1179 break;
1174 } 1180 }
1175 } 1181 }
@@ -1197,6 +1203,9 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe,
1197 fe->tuner_priv = priv; 1203 fe->tuner_priv = priv;
1198 priv->count++; 1204 priv->count++;
1199 1205
1206 if (debug)
1207 printk(KERN_DEBUG "xc2028: usage count is %i\n", priv->count);
1208
1200 memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops, 1209 memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
1201 sizeof(xc2028_dvb_tuner_ops)); 1210 sizeof(xc2028_dvb_tuner_ops));
1202 1211