aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/saa7134/saa7134-dvb.c221
-rw-r--r--drivers/media/video/saa7134/saa7134.h1
2 files changed, 144 insertions, 78 deletions
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c b/drivers/media/video/saa7134/saa7134-dvb.c
index 98a492ddc216..a36dab152585 100644
--- a/drivers/media/video/saa7134/saa7134-dvb.c
+++ b/drivers/media/video/saa7134/saa7134-dvb.c
@@ -132,9 +132,9 @@ static int mt352_aver777_init(struct dvb_frontend* fe)
132 return 0; 132 return 0;
133} 133}
134 134
135static int mt352_pinnacle_pll_set(struct dvb_frontend* fe, 135static int mt352_pinnacle_tuner_pllbuf(struct dvb_frontend* fe,
136 struct dvb_frontend_parameters* params, 136 struct dvb_frontend_parameters* params,
137 u8* pllbuf) 137 u8* pllbuf, int buf_len)
138{ 138{
139 u8 off[] = { 0x00, 0xf1}; 139 u8 off[] = { 0x00, 0xf1};
140 u8 on[] = { 0x00, 0x71}; 140 u8 on[] = { 0x00, 0x71};
@@ -143,6 +143,9 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
143 struct saa7134_dev *dev = fe->dvb->priv; 143 struct saa7134_dev *dev = fe->dvb->priv;
144 struct v4l2_frequency f; 144 struct v4l2_frequency f;
145 145
146 if (buf_len < 5)
147 return -EINVAL;
148
146 /* set frequency (mt2050) */ 149 /* set frequency (mt2050) */
147 f.tuner = 0; 150 f.tuner = 0;
148 f.type = V4L2_TUNER_DIGITAL_TV; 151 f.type = V4L2_TUNER_DIGITAL_TV;
@@ -156,21 +159,24 @@ static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
156 159
157 /* mt352 setup */ 160 /* mt352 setup */
158 mt352_pinnacle_init(fe); 161 mt352_pinnacle_init(fe);
159 pllbuf[0] = 0xc2; 162 pllbuf[0] = 0x61;
160 pllbuf[1] = 0x00; 163 pllbuf[1] = 0x00;
161 pllbuf[2] = 0x00; 164 pllbuf[2] = 0x00;
162 pllbuf[3] = 0x80; 165 pllbuf[3] = 0x80;
163 pllbuf[4] = 0x00; 166 pllbuf[4] = 0x00;
164 return 0; 167 return 5;
165} 168}
166 169
167static int mt352_aver777_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf) 170static int mt352_aver777_tuner_pllbuf(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf, int buf_len)
168{ 171{
169 pllbuf[0] = 0xc2; 172 if (buf_len < 5)
173 return -EINVAL;
174
175 pllbuf[0] = 0x61;
170 dvb_pll_configure(&dvb_pll_philips_td1316, pllbuf+1, 176 dvb_pll_configure(&dvb_pll_philips_td1316, pllbuf+1,
171 params->frequency, 177 params->frequency,
172 params->u.ofdm.bandwidth); 178 params->u.ofdm.bandwidth);
173 return 0; 179 return 5;
174} 180}
175 181
176static struct mt352_config pinnacle_300i = { 182static struct mt352_config pinnacle_300i = {
@@ -179,13 +185,11 @@ static struct mt352_config pinnacle_300i = {
179 .if2 = 36150, 185 .if2 = 36150,
180 .no_tuner = 1, 186 .no_tuner = 1,
181 .demod_init = mt352_pinnacle_init, 187 .demod_init = mt352_pinnacle_init,
182 .pll_set = mt352_pinnacle_pll_set,
183}; 188};
184 189
185static struct mt352_config avermedia_777 = { 190static struct mt352_config avermedia_777 = {
186 .demod_address = 0xf, 191 .demod_address = 0xf,
187 .demod_init = mt352_aver777_init, 192 .demod_init = mt352_aver777_init,
188 .pll_set = mt352_aver777_pll_set,
189}; 193};
190#endif 194#endif
191 195
@@ -268,6 +272,8 @@ static int philips_tda6651_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb_
268 tuner_buf[2] = 0xca; 272 tuner_buf[2] = 0xca;
269 tuner_buf[3] = (cp << 5) | (filter << 3) | band; 273 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
270 274
275 if (fe->ops->i2c_gate_ctrl)
276 fe->ops->i2c_gate_ctrl(fe, 1);
271 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) 277 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
272 return -EIO; 278 return -EIO;
273 msleep(1); 279 msleep(1);
@@ -281,6 +287,8 @@ static int philips_tda6651_pll_init(u8 addr, struct dvb_frontend *fe)
281 struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) }; 287 struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tu1216_init,.len = sizeof(tu1216_init) };
282 288
283 /* setup PLL configuration */ 289 /* setup PLL configuration */
290 if (fe->ops->i2c_gate_ctrl)
291 fe->ops->i2c_gate_ctrl(fe, 1);
284 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) 292 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
285 return -EIO; 293 return -EIO;
286 msleep(1); 294 msleep(1);
@@ -290,12 +298,12 @@ static int philips_tda6651_pll_init(u8 addr, struct dvb_frontend *fe)
290 298
291/* ------------------------------------------------------------------ */ 299/* ------------------------------------------------------------------ */
292 300
293static int philips_tu1216_pll_60_init(struct dvb_frontend *fe) 301static int philips_tu1216_tuner_60_init(struct dvb_frontend *fe)
294{ 302{
295 return philips_tda6651_pll_init(0x60, fe); 303 return philips_tda6651_pll_init(0x60, fe);
296} 304}
297 305
298static int philips_tu1216_pll_60_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 306static int philips_tu1216_tuner_60_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
299{ 307{
300 return philips_tda6651_pll_set(0x60, fe, params); 308 return philips_tda6651_pll_set(0x60, fe, params);
301} 309}
@@ -315,20 +323,17 @@ static struct tda1004x_config philips_tu1216_60_config = {
315 .xtal_freq = TDA10046_XTAL_4M, 323 .xtal_freq = TDA10046_XTAL_4M,
316 .agc_config = TDA10046_AGC_DEFAULT, 324 .agc_config = TDA10046_AGC_DEFAULT,
317 .if_freq = TDA10046_FREQ_3617, 325 .if_freq = TDA10046_FREQ_3617,
318 .pll_init = philips_tu1216_pll_60_init,
319 .pll_set = philips_tu1216_pll_60_set,
320 .pll_sleep = NULL,
321 .request_firmware = philips_tu1216_request_firmware, 326 .request_firmware = philips_tu1216_request_firmware,
322}; 327};
323 328
324/* ------------------------------------------------------------------ */ 329/* ------------------------------------------------------------------ */
325 330
326static int philips_tu1216_pll_61_init(struct dvb_frontend *fe) 331static int philips_tu1216_tuner_61_init(struct dvb_frontend *fe)
327{ 332{
328 return philips_tda6651_pll_init(0x61, fe); 333 return philips_tda6651_pll_init(0x61, fe);
329} 334}
330 335
331static int philips_tu1216_pll_61_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 336static int philips_tu1216_tuner_61_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
332{ 337{
333 return philips_tda6651_pll_set(0x61, fe, params); 338 return philips_tda6651_pll_set(0x61, fe, params);
334} 339}
@@ -341,21 +346,20 @@ static struct tda1004x_config philips_tu1216_61_config = {
341 .xtal_freq = TDA10046_XTAL_4M, 346 .xtal_freq = TDA10046_XTAL_4M,
342 .agc_config = TDA10046_AGC_DEFAULT, 347 .agc_config = TDA10046_AGC_DEFAULT,
343 .if_freq = TDA10046_FREQ_3617, 348 .if_freq = TDA10046_FREQ_3617,
344 .pll_init = philips_tu1216_pll_61_init,
345 .pll_set = philips_tu1216_pll_61_set,
346 .pll_sleep = NULL,
347 .request_firmware = philips_tu1216_request_firmware, 349 .request_firmware = philips_tu1216_request_firmware,
348}; 350};
349 351
350/* ------------------------------------------------------------------ */ 352/* ------------------------------------------------------------------ */
351 353
352static int philips_europa_pll_init(struct dvb_frontend *fe) 354static int philips_europa_tuner_init(struct dvb_frontend *fe)
353{ 355{
354 struct saa7134_dev *dev = fe->dvb->priv; 356 struct saa7134_dev *dev = fe->dvb->priv;
355 static u8 msg[] = { 0x0b, 0xf5, 0x86, 0xab }; 357 static u8 msg[] = { 0x0b, 0xf5, 0x86, 0xab };
356 struct i2c_msg init_msg = {.addr = 0x61,.flags = 0,.buf = msg,.len = sizeof(msg) }; 358 struct i2c_msg init_msg = {.addr = 0x61,.flags = 0,.buf = msg,.len = sizeof(msg) };
357 359
358 /* setup PLL configuration */ 360 /* setup PLL configuration */
361 if (fe->ops->i2c_gate_ctrl)
362 fe->ops->i2c_gate_ctrl(fe, 1);
359 if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1) 363 if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)
360 return -EIO; 364 return -EIO;
361 msleep(1); 365 msleep(1);
@@ -365,18 +369,20 @@ static int philips_europa_pll_init(struct dvb_frontend *fe)
365 init_msg.len = 0x02; 369 init_msg.len = 0x02;
366 msg[0] = 0x00; 370 msg[0] = 0x00;
367 msg[1] = 0x40; 371 msg[1] = 0x40;
372 if (fe->ops->i2c_gate_ctrl)
373 fe->ops->i2c_gate_ctrl(fe, 1);
368 if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1) 374 if (i2c_transfer(&dev->i2c_adap, &init_msg, 1) != 1)
369 return -EIO; 375 return -EIO;
370 376
371 return 0; 377 return 0;
372} 378}
373 379
374static int philips_td1316_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 380static int philips_td1316_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
375{ 381{
376 return philips_tda6651_pll_set(0x61, fe, params); 382 return philips_tda6651_pll_set(0x61, fe, params);
377} 383}
378 384
379static void philips_europa_analog(struct dvb_frontend *fe) 385static int philips_europa_tuner_sleep(struct dvb_frontend *fe)
380{ 386{
381 struct saa7134_dev *dev = fe->dvb->priv; 387 struct saa7134_dev *dev = fe->dvb->priv;
382 /* this message actually turns the tuner back to analog mode */ 388 /* this message actually turns the tuner back to analog mode */
@@ -391,7 +397,20 @@ static void philips_europa_analog(struct dvb_frontend *fe)
391 analog_msg.len = 0x02; 397 analog_msg.len = 0x02;
392 msg[0] = 0x00; 398 msg[0] = 0x00;
393 msg[1] = 0x14; 399 msg[1] = 0x14;
400 if (fe->ops->i2c_gate_ctrl)
401 fe->ops->i2c_gate_ctrl(fe, 1);
394 i2c_transfer(&dev->i2c_adap, &analog_msg, 1); 402 i2c_transfer(&dev->i2c_adap, &analog_msg, 1);
403 return 0;
404}
405
406static int philips_europa_demod_sleep(struct dvb_frontend *fe)
407{
408 struct saa7134_dev *dev = fe->dvb->priv;
409
410 if (dev->original_demod_sleep)
411 dev->original_demod_sleep(fe);
412 fe->ops->i2c_gate_ctrl(fe, 1);
413 return 0;
395} 414}
396 415
397static struct tda1004x_config philips_europa_config = { 416static struct tda1004x_config philips_europa_config = {
@@ -402,21 +421,20 @@ static struct tda1004x_config philips_europa_config = {
402 .xtal_freq = TDA10046_XTAL_4M, 421 .xtal_freq = TDA10046_XTAL_4M,
403 .agc_config = TDA10046_AGC_IFO_AUTO_POS, 422 .agc_config = TDA10046_AGC_IFO_AUTO_POS,
404 .if_freq = TDA10046_FREQ_052, 423 .if_freq = TDA10046_FREQ_052,
405 .pll_init = philips_europa_pll_init,
406 .pll_set = philips_td1316_pll_set,
407 .pll_sleep = philips_europa_analog,
408 .request_firmware = NULL, 424 .request_firmware = NULL,
409}; 425};
410 426
411/* ------------------------------------------------------------------ */ 427/* ------------------------------------------------------------------ */
412 428
413static int philips_fmd1216_pll_init(struct dvb_frontend *fe) 429static int philips_fmd1216_tuner_init(struct dvb_frontend *fe)
414{ 430{
415 struct saa7134_dev *dev = fe->dvb->priv; 431 struct saa7134_dev *dev = fe->dvb->priv;
416 /* this message is to set up ATC and ALC */ 432 /* this message is to set up ATC and ALC */
417 static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0xa0 }; 433 static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0xa0 };
418 struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) }; 434 struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) };
419 435
436 if (fe->ops->i2c_gate_ctrl)
437 fe->ops->i2c_gate_ctrl(fe, 1);
420 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) 438 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
421 return -EIO; 439 return -EIO;
422 msleep(1); 440 msleep(1);
@@ -424,22 +442,27 @@ static int philips_fmd1216_pll_init(struct dvb_frontend *fe)
424 return 0; 442 return 0;
425} 443}
426 444
427static void philips_fmd1216_analog(struct dvb_frontend *fe) 445static int philips_fmd1216_tuner_sleep(struct dvb_frontend *fe)
428{ 446{
429 struct saa7134_dev *dev = fe->dvb->priv; 447 struct saa7134_dev *dev = fe->dvb->priv;
430 /* this message actually turns the tuner back to analog mode */ 448 /* this message actually turns the tuner back to analog mode */
431 static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0x60 }; 449 static u8 fmd1216_init[] = { 0x0b, 0xdc, 0x9c, 0x60 };
432 struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) }; 450 struct i2c_msg tuner_msg = {.addr = 0x61,.flags = 0,.buf = fmd1216_init,.len = sizeof(fmd1216_init) };
433 451
452 if (fe->ops->i2c_gate_ctrl)
453 fe->ops->i2c_gate_ctrl(fe, 1);
434 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1); 454 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
435 msleep(1); 455 msleep(1);
436 fmd1216_init[2] = 0x86; 456 fmd1216_init[2] = 0x86;
437 fmd1216_init[3] = 0x54; 457 fmd1216_init[3] = 0x54;
458 if (fe->ops->i2c_gate_ctrl)
459 fe->ops->i2c_gate_ctrl(fe, 1);
438 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1); 460 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
439 msleep(1); 461 msleep(1);
462 return 0;
440} 463}
441 464
442static int philips_fmd1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 465static int philips_fmd1216_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
443{ 466{
444 struct saa7134_dev *dev = fe->dvb->priv; 467 struct saa7134_dev *dev = fe->dvb->priv;
445 u8 tuner_buf[4]; 468 u8 tuner_buf[4];
@@ -516,6 +539,8 @@ static int philips_fmd1216_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
516 tuner_buf[2] = 0x80 | (cp << 6) | (mode << 3) | 4; 539 tuner_buf[2] = 0x80 | (cp << 6) | (mode << 3) | 4;
517 tuner_buf[3] = 0x40 | band; 540 tuner_buf[3] = 0x40 | band;
518 541
542 if (fe->ops->i2c_gate_ctrl)
543 fe->ops->i2c_gate_ctrl(fe, 1);
519 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) 544 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
520 return -EIO; 545 return -EIO;
521 return 0; 546 return 0;
@@ -528,9 +553,6 @@ static struct tda1004x_config medion_cardbus = {
528 .xtal_freq = TDA10046_XTAL_16M, 553 .xtal_freq = TDA10046_XTAL_16M,
529 .agc_config = TDA10046_AGC_IFO_AUTO_NEG, 554 .agc_config = TDA10046_AGC_IFO_AUTO_NEG,
530 .if_freq = TDA10046_FREQ_3613, 555 .if_freq = TDA10046_FREQ_3613,
531 .pll_init = philips_fmd1216_pll_init,
532 .pll_set = philips_fmd1216_pll_set,
533 .pll_sleep = philips_fmd1216_analog,
534 .request_firmware = NULL, 556 .request_firmware = NULL,
535}; 557};
536 558
@@ -578,12 +600,12 @@ static struct tda827x_data tda827x_dvbt[] = {
578 { .lomax = 0, .spd = 0, .bs = 0, .bp = 0, .cp = 0, .gc3 = 0, .div1p5 = 0} 600 { .lomax = 0, .spd = 0, .bs = 0, .bp = 0, .cp = 0, .gc3 = 0, .div1p5 = 0}
579}; 601};
580 602
581static int philips_tda827x_pll_init(struct dvb_frontend *fe) 603static int philips_tda827x_tuner_init(struct dvb_frontend *fe)
582{ 604{
583 return 0; 605 return 0;
584} 606}
585 607
586static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 608static int philips_tda827x_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
587{ 609{
588 struct saa7134_dev *dev = fe->dvb->priv; 610 struct saa7134_dev *dev = fe->dvb->priv;
589 u8 tuner_buf[14]; 611 u8 tuner_buf[14];
@@ -630,6 +652,8 @@ static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
630 tuner_buf[13] = 0x40; 652 tuner_buf[13] = 0x40;
631 653
632 tuner_msg.len = 14; 654 tuner_msg.len = 14;
655 if (fe->ops->i2c_gate_ctrl)
656 fe->ops->i2c_gate_ctrl(fe, 1);
633 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1) 657 if (i2c_transfer(&dev->i2c_adap, &tuner_msg, 1) != 1)
634 return -EIO; 658 return -EIO;
635 659
@@ -638,18 +662,23 @@ static int philips_tda827x_pll_set(struct dvb_frontend *fe, struct dvb_frontend_
638 tuner_buf[0] = 0x30; 662 tuner_buf[0] = 0x30;
639 tuner_buf[1] = 0x50 + tda827x_dvbt[i].cp; 663 tuner_buf[1] = 0x50 + tda827x_dvbt[i].cp;
640 tuner_msg.len = 2; 664 tuner_msg.len = 2;
665 if (fe->ops->i2c_gate_ctrl)
666 fe->ops->i2c_gate_ctrl(fe, 1);
641 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1); 667 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
642 668
643 return 0; 669 return 0;
644} 670}
645 671
646static void philips_tda827x_pll_sleep(struct dvb_frontend *fe) 672static int philips_tda827x_tuner_sleep(struct dvb_frontend *fe)
647{ 673{
648 struct saa7134_dev *dev = fe->dvb->priv; 674 struct saa7134_dev *dev = fe->dvb->priv;
649 static u8 tda827x_sleep[] = { 0x30, 0xd0}; 675 static u8 tda827x_sleep[] = { 0x30, 0xd0};
650 struct i2c_msg tuner_msg = {.addr = 0x60,.flags = 0,.buf = tda827x_sleep, 676 struct i2c_msg tuner_msg = {.addr = 0x60,.flags = 0,.buf = tda827x_sleep,
651 .len = sizeof(tda827x_sleep) }; 677 .len = sizeof(tda827x_sleep) };
678 if (fe->ops->i2c_gate_ctrl)
679 fe->ops->i2c_gate_ctrl(fe, 1);
652 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1); 680 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
681 return 0;
653} 682}
654 683
655static struct tda1004x_config tda827x_lifeview_config = { 684static struct tda1004x_config tda827x_lifeview_config = {
@@ -659,9 +688,6 @@ static struct tda1004x_config tda827x_lifeview_config = {
659 .xtal_freq = TDA10046_XTAL_16M, 688 .xtal_freq = TDA10046_XTAL_16M,
660 .agc_config = TDA10046_AGC_TDA827X, 689 .agc_config = TDA10046_AGC_TDA827X,
661 .if_freq = TDA10046_FREQ_045, 690 .if_freq = TDA10046_FREQ_045,
662 .pll_init = philips_tda827x_pll_init,
663 .pll_set = philips_tda827x_pll_set,
664 .pll_sleep = philips_tda827x_pll_sleep,
665 .request_firmware = NULL, 691 .request_firmware = NULL,
666}; 692};
667 693
@@ -753,6 +779,8 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
753 tuner_buf[12] = 0x00; 779 tuner_buf[12] = 0x00;
754 tuner_buf[13] = 0x39; // lpsel 780 tuner_buf[13] = 0x39; // lpsel
755 msg.len = 14; 781 msg.len = 14;
782 if (fe->ops->i2c_gate_ctrl)
783 fe->ops->i2c_gate_ctrl(fe, 1);
756 if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1) 784 if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
757 return -EIO; 785 return -EIO;
758 786
@@ -760,10 +788,14 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
760 msg.len = 2; 788 msg.len = 2;
761 reg2[0] = 0x60; 789 reg2[0] = 0x60;
762 reg2[1] = 0x3c; 790 reg2[1] = 0x3c;
791 if (fe->ops->i2c_gate_ctrl)
792 fe->ops->i2c_gate_ctrl(fe, 1);
763 i2c_transfer(&dev->i2c_adap, &msg, 1); 793 i2c_transfer(&dev->i2c_adap, &msg, 1);
764 794
765 reg2[0] = 0xa0; 795 reg2[0] = 0xa0;
766 reg2[1] = 0x40; 796 reg2[1] = 0x40;
797 if (fe->ops->i2c_gate_ctrl)
798 fe->ops->i2c_gate_ctrl(fe, 1);
767 i2c_transfer(&dev->i2c_adap, &msg, 1); 799 i2c_transfer(&dev->i2c_adap, &msg, 1);
768 800
769 msleep(2); 801 msleep(2);
@@ -771,36 +803,43 @@ static int philips_tda827xa_pll_set(u8 addr, struct dvb_frontend *fe, struct dvb
771 reg2[0] = 0x30; 803 reg2[0] = 0x30;
772 reg2[1] = 0x10 + tda827xa_dvbt[i].scr; 804 reg2[1] = 0x10 + tda827xa_dvbt[i].scr;
773 msg.len = 2; 805 msg.len = 2;
806 if (fe->ops->i2c_gate_ctrl)
807 fe->ops->i2c_gate_ctrl(fe, 1);
774 i2c_transfer(&dev->i2c_adap, &msg, 1); 808 i2c_transfer(&dev->i2c_adap, &msg, 1);
775 809
776 msleep(550); 810 msleep(550);
777 reg2[0] = 0x50; 811 reg2[0] = 0x50;
778 reg2[1] = 0x4f + (tda827xa_dvbt[i].gc3 << 4); 812 reg2[1] = 0x4f + (tda827xa_dvbt[i].gc3 << 4);
813 if (fe->ops->i2c_gate_ctrl)
814 fe->ops->i2c_gate_ctrl(fe, 1);
779 i2c_transfer(&dev->i2c_adap, &msg, 1); 815 i2c_transfer(&dev->i2c_adap, &msg, 1);
780 816
781 return 0; 817 return 0;
782 818
783} 819}
784 820
785static void philips_tda827xa_pll_sleep(u8 addr, struct dvb_frontend *fe) 821static int philips_tda827xa_tuner_sleep(u8 addr, struct dvb_frontend *fe)
786{ 822{
787 struct saa7134_dev *dev = fe->dvb->priv; 823 struct saa7134_dev *dev = fe->dvb->priv;
788 static u8 tda827xa_sleep[] = { 0x30, 0x90}; 824 static u8 tda827xa_sleep[] = { 0x30, 0x90};
789 struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tda827xa_sleep, 825 struct i2c_msg tuner_msg = {.addr = addr,.flags = 0,.buf = tda827xa_sleep,
790 .len = sizeof(tda827xa_sleep) }; 826 .len = sizeof(tda827xa_sleep) };
827 if (fe->ops->i2c_gate_ctrl)
828 fe->ops->i2c_gate_ctrl(fe, 1);
791 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1); 829 i2c_transfer(&dev->i2c_adap, &tuner_msg, 1);
792 830 return 0;
793} 831}
794 832
795/* ------------------------------------------------------------------ */ 833/* ------------------------------------------------------------------ */
796 834
797static int philips_tiger_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 835static int philips_tiger_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
798{ 836{
799 int ret; 837 int ret;
800 struct saa7134_dev *dev = fe->dvb->priv; 838 struct saa7134_dev *dev = fe->dvb->priv;
801 static u8 tda8290_close[] = { 0x21, 0xc0}; 839 static u8 tda8290_close[] = { 0x21, 0xc0};
802 static u8 tda8290_open[] = { 0x21, 0x80}; 840 static u8 tda8290_open[] = { 0x21, 0x80};
803 struct i2c_msg tda8290_msg = {.addr = 0x4b,.flags = 0, .len = 2}; 841 struct i2c_msg tda8290_msg = {.addr = 0x4b,.flags = 0, .len = 2};
842
804 /* close tda8290 i2c bridge */ 843 /* close tda8290 i2c bridge */
805 tda8290_msg.buf = tda8290_close; 844 tda8290_msg.buf = tda8290_close;
806 ret = i2c_transfer(&dev->i2c_adap, &tda8290_msg, 1); 845 ret = i2c_transfer(&dev->i2c_adap, &tda8290_msg, 1);
@@ -816,7 +855,7 @@ static int philips_tiger_pll_set(struct dvb_frontend *fe, struct dvb_frontend_pa
816 return ret; 855 return ret;
817} 856}
818 857
819static int philips_tiger_dvb_mode(struct dvb_frontend *fe) 858static int philips_tiger_tuner_init(struct dvb_frontend *fe)
820{ 859{
821 struct saa7134_dev *dev = fe->dvb->priv; 860 struct saa7134_dev *dev = fe->dvb->priv;
822 static u8 data[] = { 0x3c, 0x33, 0x6a}; 861 static u8 data[] = { 0x3c, 0x33, 0x6a};
@@ -827,14 +866,15 @@ static int philips_tiger_dvb_mode(struct dvb_frontend *fe)
827 return 0; 866 return 0;
828} 867}
829 868
830static void philips_tiger_analog_mode(struct dvb_frontend *fe) 869static int philips_tiger_tuner_sleep(struct dvb_frontend *fe)
831{ 870{
832 struct saa7134_dev *dev = fe->dvb->priv; 871 struct saa7134_dev *dev = fe->dvb->priv;
833 static u8 data[] = { 0x3c, 0x33, 0x68}; 872 static u8 data[] = { 0x3c, 0x33, 0x68};
834 struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)}; 873 struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
835 874
836 i2c_transfer(&dev->i2c_adap, &msg, 1); 875 i2c_transfer(&dev->i2c_adap, &msg, 1);
837 philips_tda827xa_pll_sleep( 0x61, fe); 876 philips_tda827xa_tuner_sleep( 0x61, fe);
877 return 0;
838} 878}
839 879
840static struct tda1004x_config philips_tiger_config = { 880static struct tda1004x_config philips_tiger_config = {
@@ -844,15 +884,12 @@ static struct tda1004x_config philips_tiger_config = {
844 .xtal_freq = TDA10046_XTAL_16M, 884 .xtal_freq = TDA10046_XTAL_16M,
845 .agc_config = TDA10046_AGC_TDA827X, 885 .agc_config = TDA10046_AGC_TDA827X,
846 .if_freq = TDA10046_FREQ_045, 886 .if_freq = TDA10046_FREQ_045,
847 .pll_init = philips_tiger_dvb_mode,
848 .pll_set = philips_tiger_pll_set,
849 .pll_sleep = philips_tiger_analog_mode,
850 .request_firmware = NULL, 887 .request_firmware = NULL,
851}; 888};
852 889
853/* ------------------------------------------------------------------ */ 890/* ------------------------------------------------------------------ */
854 891
855static int lifeview_trio_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 892static int lifeview_trio_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
856{ 893{
857 int ret; 894 int ret;
858 895
@@ -860,16 +897,12 @@ static int lifeview_trio_pll_set(struct dvb_frontend *fe, struct dvb_frontend_pa
860 return ret; 897 return ret;
861} 898}
862 899
863static int lifeview_trio_dvb_mode(struct dvb_frontend *fe) 900static int lifeview_trio_tuner_sleep(struct dvb_frontend *fe)
864{ 901{
902 philips_tda827xa_tuner_sleep(0x60, fe);
865 return 0; 903 return 0;
866} 904}
867 905
868static void lifeview_trio_analog_mode(struct dvb_frontend *fe)
869{
870 philips_tda827xa_pll_sleep(0x60, fe);
871}
872
873static struct tda1004x_config lifeview_trio_config = { 906static struct tda1004x_config lifeview_trio_config = {
874 .demod_address = 0x09, 907 .demod_address = 0x09,
875 .invert = 1, 908 .invert = 1,
@@ -877,15 +910,12 @@ static struct tda1004x_config lifeview_trio_config = {
877 .xtal_freq = TDA10046_XTAL_16M, 910 .xtal_freq = TDA10046_XTAL_16M,
878 .agc_config = TDA10046_AGC_TDA827X_GPL, 911 .agc_config = TDA10046_AGC_TDA827X_GPL,
879 .if_freq = TDA10046_FREQ_045, 912 .if_freq = TDA10046_FREQ_045,
880 .pll_init = lifeview_trio_dvb_mode,
881 .pll_set = lifeview_trio_pll_set,
882 .pll_sleep = lifeview_trio_analog_mode,
883 .request_firmware = NULL, 913 .request_firmware = NULL,
884}; 914};
885 915
886/* ------------------------------------------------------------------ */ 916/* ------------------------------------------------------------------ */
887 917
888static int ads_duo_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 918static int ads_duo_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
889{ 919{
890 int ret; 920 int ret;
891 921
@@ -893,7 +923,7 @@ static int ads_duo_pll_set(struct dvb_frontend *fe, struct dvb_frontend_paramete
893 return ret; 923 return ret;
894} 924}
895 925
896static int ads_duo_dvb_mode(struct dvb_frontend *fe) 926static int ads_duo_tuner_init(struct dvb_frontend *fe)
897{ 927{
898 struct saa7134_dev *dev = fe->dvb->priv; 928 struct saa7134_dev *dev = fe->dvb->priv;
899 /* route TDA8275a AGC input to the channel decoder */ 929 /* route TDA8275a AGC input to the channel decoder */
@@ -901,12 +931,13 @@ static int ads_duo_dvb_mode(struct dvb_frontend *fe)
901 return 0; 931 return 0;
902} 932}
903 933
904static void ads_duo_analog_mode(struct dvb_frontend *fe) 934static int ads_duo_tuner_sleep(struct dvb_frontend *fe)
905{ 935{
906 struct saa7134_dev *dev = fe->dvb->priv; 936 struct saa7134_dev *dev = fe->dvb->priv;
907 /* route TDA8275a AGC input to the analog IF chip*/ 937 /* route TDA8275a AGC input to the analog IF chip*/
908 saa_writeb(SAA7134_GPIO_GPSTATUS2, 0x20); 938 saa_writeb(SAA7134_GPIO_GPSTATUS2, 0x20);
909 philips_tda827xa_pll_sleep( 0x61, fe); 939 philips_tda827xa_tuner_sleep( 0x61, fe);
940 return 0;
910} 941}
911 942
912static struct tda1004x_config ads_tech_duo_config = { 943static struct tda1004x_config ads_tech_duo_config = {
@@ -916,31 +947,24 @@ static struct tda1004x_config ads_tech_duo_config = {
916 .xtal_freq = TDA10046_XTAL_16M, 947 .xtal_freq = TDA10046_XTAL_16M,
917 .agc_config = TDA10046_AGC_TDA827X_GPL, 948 .agc_config = TDA10046_AGC_TDA827X_GPL,
918 .if_freq = TDA10046_FREQ_045, 949 .if_freq = TDA10046_FREQ_045,
919 .pll_init = ads_duo_dvb_mode,
920 .pll_set = ads_duo_pll_set,
921 .pll_sleep = ads_duo_analog_mode,
922 .request_firmware = NULL, 950 .request_firmware = NULL,
923}; 951};
924 952
925/* ------------------------------------------------------------------ */ 953/* ------------------------------------------------------------------ */
926 954
927static int tevion_dvb220rf_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 955static int tevion_dvb220rf_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
928{ 956{
929 int ret; 957 int ret;
930 ret = philips_tda827xa_pll_set(0x60, fe, params); 958 ret = philips_tda827xa_pll_set(0x60, fe, params);
931 return ret; 959 return ret;
932} 960}
933 961
934static int tevion_dvb220rf_pll_init(struct dvb_frontend *fe) 962static int tevion_dvb220rf_tuner_sleep(struct dvb_frontend *fe)
935{ 963{
964 philips_tda827xa_tuner_sleep( 0x61, fe);
936 return 0; 965 return 0;
937} 966}
938 967
939static void tevion_dvb220rf_pll_sleep(struct dvb_frontend *fe)
940{
941 philips_tda827xa_pll_sleep( 0x61, fe);
942}
943
944static struct tda1004x_config tevion_dvbt220rf_config = { 968static struct tda1004x_config tevion_dvbt220rf_config = {
945 .demod_address = 0x08, 969 .demod_address = 0x08,
946 .invert = 1, 970 .invert = 1,
@@ -948,9 +972,6 @@ static struct tda1004x_config tevion_dvbt220rf_config = {
948 .xtal_freq = TDA10046_XTAL_16M, 972 .xtal_freq = TDA10046_XTAL_16M,
949 .agc_config = TDA10046_AGC_TDA827X, 973 .agc_config = TDA10046_AGC_TDA827X,
950 .if_freq = TDA10046_FREQ_045, 974 .if_freq = TDA10046_FREQ_045,
951 .pll_init = tevion_dvb220rf_pll_init,
952 .pll_set = tevion_dvb220rf_pll_set,
953 .pll_sleep = tevion_dvb220rf_pll_sleep,
954 .request_firmware = NULL, 975 .request_firmware = NULL,
955}; 976};
956 977
@@ -961,8 +982,6 @@ static struct tda1004x_config tevion_dvbt220rf_config = {
961#ifdef HAVE_NXT200X 982#ifdef HAVE_NXT200X
962static struct nxt200x_config avertvhda180 = { 983static struct nxt200x_config avertvhda180 = {
963 .demod_address = 0x0a, 984 .demod_address = 0x0a,
964 .pll_address = 0x61,
965 .pll_desc = &dvb_pll_tdhu2,
966}; 985};
967 986
968static int nxt200x_set_pll_input(u8 *buf, int input) 987static int nxt200x_set_pll_input(u8 *buf, int input)
@@ -976,8 +995,6 @@ static int nxt200x_set_pll_input(u8 *buf, int input)
976 995
977static struct nxt200x_config kworldatsc110 = { 996static struct nxt200x_config kworldatsc110 = {
978 .demod_address = 0x0a, 997 .demod_address = 0x0a,
979 .pll_address = 0x61,
980 .pll_desc = &dvb_pll_tuv1236d,
981 .set_pll_input = nxt200x_set_pll_input, 998 .set_pll_input = nxt200x_set_pll_input,
982}; 999};
983#endif 1000#endif
@@ -1003,78 +1020,126 @@ static int dvb_init(struct saa7134_dev *dev)
1003 printk("%s: pinnacle 300i dvb setup\n",dev->name); 1020 printk("%s: pinnacle 300i dvb setup\n",dev->name);
1004 dev->dvb.frontend = mt352_attach(&pinnacle_300i, 1021 dev->dvb.frontend = mt352_attach(&pinnacle_300i,
1005 &dev->i2c_adap); 1022 &dev->i2c_adap);
1023 dev->dvb.frontend->ops->tuner_ops.pllbuf = mt352_pinnacle_tuner_pllbuf;
1006 break; 1024 break;
1007 1025
1008 case SAA7134_BOARD_AVERMEDIA_777: 1026 case SAA7134_BOARD_AVERMEDIA_777:
1009 printk("%s: avertv 777 dvb setup\n",dev->name); 1027 printk("%s: avertv 777 dvb setup\n",dev->name);
1010 dev->dvb.frontend = mt352_attach(&avermedia_777, 1028 dev->dvb.frontend = mt352_attach(&avermedia_777,
1011 &dev->i2c_adap); 1029 &dev->i2c_adap);
1030 dev->dvb.frontend->ops->tuner_ops.pllbuf = mt352_aver777_tuner_pllbuf;
1012 break; 1031 break;
1013#endif 1032#endif
1014#ifdef HAVE_TDA1004X 1033#ifdef HAVE_TDA1004X
1015 case SAA7134_BOARD_MD7134: 1034 case SAA7134_BOARD_MD7134:
1016 dev->dvb.frontend = tda10046_attach(&medion_cardbus, 1035 dev->dvb.frontend = tda10046_attach(&medion_cardbus,
1017 &dev->i2c_adap); 1036 &dev->i2c_adap);
1037 dev->dvb.frontend->ops->tuner_ops.init = philips_fmd1216_tuner_init;
1038 dev->dvb.frontend->ops->tuner_ops.sleep = philips_fmd1216_tuner_sleep;
1039 dev->dvb.frontend->ops->tuner_ops.set_params = philips_fmd1216_tuner_set_params;
1018 break; 1040 break;
1019 case SAA7134_BOARD_PHILIPS_TOUGH: 1041 case SAA7134_BOARD_PHILIPS_TOUGH:
1020 dev->dvb.frontend = tda10046_attach(&philips_tu1216_60_config, 1042 dev->dvb.frontend = tda10046_attach(&philips_tu1216_60_config,
1021 &dev->i2c_adap); 1043 &dev->i2c_adap);
1044 dev->dvb.frontend->ops->tuner_ops.init = philips_tu1216_tuner_60_init;
1045 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tu1216_tuner_60_set_params;
1022 break; 1046 break;
1023 case SAA7134_BOARD_FLYDVBTDUO: 1047 case SAA7134_BOARD_FLYDVBTDUO:
1024 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config, 1048 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
1025 &dev->i2c_adap); 1049 &dev->i2c_adap);
1050 dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
1051 dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
1052 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
1026 break; 1053 break;
1027 case SAA7134_BOARD_FLYDVBT_DUO_CARDBUS: 1054 case SAA7134_BOARD_FLYDVBT_DUO_CARDBUS:
1028 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config, 1055 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
1029 &dev->i2c_adap); 1056 &dev->i2c_adap);
1057 dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
1058 dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
1059 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
1030 break; 1060 break;
1031 case SAA7134_BOARD_PHILIPS_EUROPA: 1061 case SAA7134_BOARD_PHILIPS_EUROPA:
1032 dev->dvb.frontend = tda10046_attach(&philips_europa_config, 1062 dev->dvb.frontend = tda10046_attach(&philips_europa_config,
1033 &dev->i2c_adap); 1063 &dev->i2c_adap);
1064 dev->original_demod_sleep = dev->dvb.frontend->ops->sleep;
1065 dev->dvb.frontend->ops->sleep = philips_europa_demod_sleep;
1066 dev->dvb.frontend->ops->tuner_ops.init = philips_europa_tuner_init;
1067 dev->dvb.frontend->ops->tuner_ops.sleep = philips_europa_tuner_sleep;
1068 dev->dvb.frontend->ops->tuner_ops.set_params = philips_td1316_tuner_set_params;
1034 break; 1069 break;
1035 case SAA7134_BOARD_VIDEOMATE_DVBT_300: 1070 case SAA7134_BOARD_VIDEOMATE_DVBT_300:
1036 dev->dvb.frontend = tda10046_attach(&philips_europa_config, 1071 dev->dvb.frontend = tda10046_attach(&philips_europa_config,
1037 &dev->i2c_adap); 1072 &dev->i2c_adap);
1073 dev->dvb.frontend->ops->tuner_ops.init = philips_europa_tuner_init;
1074 dev->dvb.frontend->ops->tuner_ops.sleep = philips_europa_tuner_sleep;
1075 dev->dvb.frontend->ops->tuner_ops.set_params = philips_td1316_tuner_set_params;
1038 break; 1076 break;
1039 case SAA7134_BOARD_VIDEOMATE_DVBT_200: 1077 case SAA7134_BOARD_VIDEOMATE_DVBT_200:
1040 dev->dvb.frontend = tda10046_attach(&philips_tu1216_61_config, 1078 dev->dvb.frontend = tda10046_attach(&philips_tu1216_61_config,
1041 &dev->i2c_adap); 1079 &dev->i2c_adap);
1080 dev->dvb.frontend->ops->tuner_ops.init = philips_tu1216_tuner_61_init;
1081 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tu1216_tuner_61_set_params;
1042 break; 1082 break;
1043 case SAA7134_BOARD_PHILIPS_TIGER: 1083 case SAA7134_BOARD_PHILIPS_TIGER:
1044 dev->dvb.frontend = tda10046_attach(&philips_tiger_config, 1084 dev->dvb.frontend = tda10046_attach(&philips_tiger_config,
1045 &dev->i2c_adap); 1085 &dev->i2c_adap);
1086 dev->dvb.frontend->ops->tuner_ops.init = philips_tiger_tuner_init;
1087 dev->dvb.frontend->ops->tuner_ops.sleep = philips_tiger_tuner_sleep;
1088 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tiger_tuner_set_params;
1046 break; 1089 break;
1047 case SAA7134_BOARD_ASUSTeK_P7131_DUAL: 1090 case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
1048 dev->dvb.frontend = tda10046_attach(&philips_tiger_config, 1091 dev->dvb.frontend = tda10046_attach(&philips_tiger_config,
1049 &dev->i2c_adap); 1092 &dev->i2c_adap);
1093 dev->dvb.frontend->ops->tuner_ops.init = philips_tiger_tuner_init;
1094 dev->dvb.frontend->ops->tuner_ops.sleep = philips_tiger_tuner_sleep;
1095 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tiger_tuner_set_params;
1050 break; 1096 break;
1051 case SAA7134_BOARD_FLYDVBT_LR301: 1097 case SAA7134_BOARD_FLYDVBT_LR301:
1052 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config, 1098 dev->dvb.frontend = tda10046_attach(&tda827x_lifeview_config,
1053 &dev->i2c_adap); 1099 &dev->i2c_adap);
1100 dev->dvb.frontend->ops->tuner_ops.init = philips_tda827x_tuner_init;
1101 dev->dvb.frontend->ops->tuner_ops.sleep = philips_tda827x_tuner_sleep;
1102 dev->dvb.frontend->ops->tuner_ops.set_params = philips_tda827x_tuner_set_params;
1054 break; 1103 break;
1055 case SAA7134_BOARD_FLYDVB_TRIO: 1104 case SAA7134_BOARD_FLYDVB_TRIO:
1056 dev->dvb.frontend = tda10046_attach(&lifeview_trio_config, 1105 dev->dvb.frontend = tda10046_attach(&lifeview_trio_config,
1057 &dev->i2c_adap); 1106 &dev->i2c_adap);
1107 dev->dvb.frontend->ops->tuner_ops.sleep = lifeview_trio_tuner_sleep;
1108 dev->dvb.frontend->ops->tuner_ops.set_params = lifeview_trio_tuner_set_params;
1058 break; 1109 break;
1059 case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331: 1110 case SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331:
1060 dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config, 1111 dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config,
1061 &dev->i2c_adap); 1112 &dev->i2c_adap);
1113 dev->dvb.frontend->ops->tuner_ops.init = ads_duo_tuner_init;
1114 dev->dvb.frontend->ops->tuner_ops.sleep = ads_duo_tuner_sleep;
1115 dev->dvb.frontend->ops->tuner_ops.set_params = ads_duo_tuner_set_params;
1062 break; 1116 break;
1063 case SAA7134_BOARD_TEVION_DVBT_220RF: 1117 case SAA7134_BOARD_TEVION_DVBT_220RF:
1064 dev->dvb.frontend = tda10046_attach(&tevion_dvbt220rf_config, 1118 dev->dvb.frontend = tda10046_attach(&tevion_dvbt220rf_config,
1065 &dev->i2c_adap); 1119 &dev->i2c_adap);
1120 dev->dvb.frontend->ops->tuner_ops.sleep = tevion_dvb220rf_tuner_sleep;
1121 dev->dvb.frontend->ops->tuner_ops.set_params = tevion_dvb220rf_tuner_set_params;
1066 break; 1122 break;
1067 case SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS: 1123 case SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS:
1068 dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config, 1124 dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config,
1069 &dev->i2c_adap); 1125 &dev->i2c_adap);
1126 dev->dvb.frontend->ops->tuner_ops.init = ads_duo_tuner_init;
1127 dev->dvb.frontend->ops->tuner_ops.sleep = ads_duo_tuner_sleep;
1128 dev->dvb.frontend->ops->tuner_ops.set_params = ads_duo_tuner_set_params;
1070 break; 1129 break;
1071#endif 1130#endif
1072#ifdef HAVE_NXT200X 1131#ifdef HAVE_NXT200X
1073 case SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180: 1132 case SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180:
1074 dev->dvb.frontend = nxt200x_attach(&avertvhda180, &dev->i2c_adap); 1133 dev->dvb.frontend = nxt200x_attach(&avertvhda180, &dev->i2c_adap);
1134 if (dev->dvb.frontend) {
1135 dvb_pll_attach(dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tdhu2);
1136 }
1075 break; 1137 break;
1076 case SAA7134_BOARD_KWORLD_ATSC110: 1138 case SAA7134_BOARD_KWORLD_ATSC110:
1077 dev->dvb.frontend = nxt200x_attach(&kworldatsc110, &dev->i2c_adap); 1139 dev->dvb.frontend = nxt200x_attach(&kworldatsc110, &dev->i2c_adap);
1140 if (dev->dvb.frontend) {
1141 dvb_pll_attach(dev->dvb.frontend, 0x61, &dev->i2c_adap, &dvb_pll_tuv1236d);
1142 }
1078 break; 1143 break;
1079#endif 1144#endif
1080 default: 1145 default:
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index 353af3a8b766..9048d2c29899 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -531,6 +531,7 @@ struct saa7134_dev {
531 531
532 /* SAA7134_MPEG_DVB only */ 532 /* SAA7134_MPEG_DVB only */
533 struct videobuf_dvb dvb; 533 struct videobuf_dvb dvb;
534 int (*original_demod_sleep)(struct dvb_frontend* fe);
534}; 535};
535 536
536/* ----------------------------------------------------------- */ 537/* ----------------------------------------------------------- */