aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c3
-rw-r--r--drivers/media/video/cx88/cx88-vp3054-i2c.c16
-rw-r--r--drivers/media/video/cx88/cx88.h6
3 files changed, 15 insertions, 10 deletions
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index d16e5c6d21c0..fce19caf9d04 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -475,8 +475,9 @@ static int dvb_register(struct cx8802_dev *dev)
475 break; 475 break;
476 case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: 476 case CX88_BOARD_DNTV_LIVE_DVB_T_PRO:
477#if defined(CONFIG_VIDEO_CX88_VP3054) || (defined(CONFIG_VIDEO_CX88_VP3054_MODULE) && defined(MODULE)) 477#if defined(CONFIG_VIDEO_CX88_VP3054) || (defined(CONFIG_VIDEO_CX88_VP3054_MODULE) && defined(MODULE))
478 /* MT352 is on a secondary I2C bus made from some GPIO lines */
478 dev->dvb.frontend = dvb_attach(mt352_attach, &dntv_live_dvbt_pro_config, 479 dev->dvb.frontend = dvb_attach(mt352_attach, &dntv_live_dvbt_pro_config,
479 &((struct vp3054_i2c_state *)dev->card_priv)->adap); 480 &dev->vp3054->adap);
480 if (dev->dvb.frontend != NULL) { 481 if (dev->dvb.frontend != NULL) {
481 dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61, 482 dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x61,
482 &dev->core->i2c_adap, DVB_PLL_FMD1216ME); 483 &dev->core->i2c_adap, DVB_PLL_FMD1216ME);
diff --git a/drivers/media/video/cx88/cx88-vp3054-i2c.c b/drivers/media/video/cx88/cx88-vp3054-i2c.c
index 77c37889232b..6ce5af488471 100644
--- a/drivers/media/video/cx88/cx88-vp3054-i2c.c
+++ b/drivers/media/video/cx88/cx88-vp3054-i2c.c
@@ -41,7 +41,7 @@ static void vp3054_bit_setscl(void *data, int state)
41{ 41{
42 struct cx8802_dev *dev = data; 42 struct cx8802_dev *dev = data;
43 struct cx88_core *core = dev->core; 43 struct cx88_core *core = dev->core;
44 struct vp3054_i2c_state *vp3054_i2c = dev->card_priv; 44 struct vp3054_i2c_state *vp3054_i2c = dev->vp3054;
45 45
46 if (state) { 46 if (state) {
47 vp3054_i2c->state |= 0x0001; /* SCL high */ 47 vp3054_i2c->state |= 0x0001; /* SCL high */
@@ -58,7 +58,7 @@ static void vp3054_bit_setsda(void *data, int state)
58{ 58{
59 struct cx8802_dev *dev = data; 59 struct cx8802_dev *dev = data;
60 struct cx88_core *core = dev->core; 60 struct cx88_core *core = dev->core;
61 struct vp3054_i2c_state *vp3054_i2c = dev->card_priv; 61 struct vp3054_i2c_state *vp3054_i2c = dev->vp3054;
62 62
63 if (state) { 63 if (state) {
64 vp3054_i2c->state |= 0x0002; /* SDA high */ 64 vp3054_i2c->state |= 0x0002; /* SDA high */
@@ -113,10 +113,10 @@ int vp3054_i2c_probe(struct cx8802_dev *dev)
113 if (core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) 113 if (core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO)
114 return 0; 114 return 0;
115 115
116 dev->card_priv = kzalloc(sizeof(*vp3054_i2c), GFP_KERNEL); 116 vp3054_i2c = kzalloc(sizeof(*vp3054_i2c), GFP_KERNEL);
117 if (dev->card_priv == NULL) 117 if (vp3054_i2c == NULL)
118 return -ENOMEM; 118 return -ENOMEM;
119 vp3054_i2c = dev->card_priv; 119 dev->vp3054 = vp3054_i2c;
120 120
121 memcpy(&vp3054_i2c->algo, &vp3054_i2c_algo_template, 121 memcpy(&vp3054_i2c->algo, &vp3054_i2c_algo_template,
122 sizeof(vp3054_i2c->algo)); 122 sizeof(vp3054_i2c->algo));
@@ -139,8 +139,8 @@ int vp3054_i2c_probe(struct cx8802_dev *dev)
139 if (0 != rc) { 139 if (0 != rc) {
140 printk("%s: vp3054_i2c register FAILED\n", core->name); 140 printk("%s: vp3054_i2c register FAILED\n", core->name);
141 141
142 kfree(dev->card_priv); 142 kfree(dev->vp3054);
143 dev->card_priv = NULL; 143 dev->vp3054 = NULL;
144 } 144 }
145 145
146 return rc; 146 return rc;
@@ -148,7 +148,7 @@ int vp3054_i2c_probe(struct cx8802_dev *dev)
148 148
149void vp3054_i2c_remove(struct cx8802_dev *dev) 149void vp3054_i2c_remove(struct cx8802_dev *dev)
150{ 150{
151 struct vp3054_i2c_state *vp3054_i2c = dev->card_priv; 151 struct vp3054_i2c_state *vp3054_i2c = dev->vp3054;
152 152
153 if (vp3054_i2c == NULL || 153 if (vp3054_i2c == NULL ||
154 dev->core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) 154 dev->core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO)
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 43ba75ba94b4..2e0911bad43a 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -467,8 +467,12 @@ struct cx8802_dev {
467#if defined(CONFIG_VIDEO_CX88_DVB) || defined(CONFIG_VIDEO_CX88_DVB_MODULE) 467#if defined(CONFIG_VIDEO_CX88_DVB) || defined(CONFIG_VIDEO_CX88_DVB_MODULE)
468 /* for dvb only */ 468 /* for dvb only */
469 struct videobuf_dvb dvb; 469 struct videobuf_dvb dvb;
470#endif
470 471
471 void *card_priv; 472#if defined(CONFIG_VIDEO_CX88_VP3054) || \
473 defined(CONFIG_VIDEO_CX88_VP3054_MODULE)
474 /* For VP3045 secondary I2C bus support */
475 struct vp3054_i2c_state *vp3054;
472#endif 476#endif
473 /* for switching modulation types */ 477 /* for switching modulation types */
474 unsigned char ts_gen_cntrl; 478 unsigned char ts_gen_cntrl;