aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-05-18 14:58:57 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-05-20 09:24:37 -0400
commit631a2b611288f87de4ef1098d1fb4bc4d246b103 (patch)
treee7db14c7eab60268d7faf4786dce96a2196180bb
parent78e750754bf0cc86d36149536bc7f3382710a2ee (diff)
[media] rtl2830: implement .get_frontend()
Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/frontends/rtl2830.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/drivers/media/dvb/frontends/rtl2830.c b/drivers/media/dvb/frontends/rtl2830.c
index 6e4029de3c73..507ef4bb047a 100644
--- a/drivers/media/dvb/frontends/rtl2830.c
+++ b/drivers/media/dvb/frontends/rtl2830.c
@@ -374,6 +374,115 @@ err:
374 return ret; 374 return ret;
375} 375}
376 376
377static int rtl2830_get_frontend(struct dvb_frontend *fe)
378{
379 struct rtl2830_priv *priv = fe->demodulator_priv;
380 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
381 int ret;
382 u8 buf[3];
383
384 ret = rtl2830_rd_regs(priv, 0x33c, buf, 2);
385 if (ret)
386 goto err;
387
388 ret = rtl2830_rd_reg(priv, 0x351, &buf[2]);
389 if (ret)
390 goto err;
391
392 dbg("%s: TPS=%02x %02x %02x", __func__, buf[0], buf[1], buf[2]);
393
394 switch ((buf[0] >> 2) & 3) {
395 case 0:
396 c->modulation = QPSK;
397 break;
398 case 1:
399 c->modulation = QAM_16;
400 break;
401 case 2:
402 c->modulation = QAM_64;
403 break;
404 }
405
406 switch ((buf[2] >> 2) & 1) {
407 case 0:
408 c->transmission_mode = TRANSMISSION_MODE_2K;
409 break;
410 case 1:
411 c->transmission_mode = TRANSMISSION_MODE_8K;
412 }
413
414 switch ((buf[2] >> 0) & 3) {
415 case 0:
416 c->guard_interval = GUARD_INTERVAL_1_32;
417 break;
418 case 1:
419 c->guard_interval = GUARD_INTERVAL_1_16;
420 break;
421 case 2:
422 c->guard_interval = GUARD_INTERVAL_1_8;
423 break;
424 case 3:
425 c->guard_interval = GUARD_INTERVAL_1_4;
426 break;
427 }
428
429 switch ((buf[0] >> 4) & 7) {
430 case 0:
431 c->hierarchy = HIERARCHY_NONE;
432 break;
433 case 1:
434 c->hierarchy = HIERARCHY_1;
435 break;
436 case 2:
437 c->hierarchy = HIERARCHY_2;
438 break;
439 case 3:
440 c->hierarchy = HIERARCHY_4;
441 break;
442 }
443
444 switch ((buf[1] >> 3) & 7) {
445 case 0:
446 c->code_rate_HP = FEC_1_2;
447 break;
448 case 1:
449 c->code_rate_HP = FEC_2_3;
450 break;
451 case 2:
452 c->code_rate_HP = FEC_3_4;
453 break;
454 case 3:
455 c->code_rate_HP = FEC_5_6;
456 break;
457 case 4:
458 c->code_rate_HP = FEC_7_8;
459 break;
460 }
461
462 switch ((buf[1] >> 0) & 7) {
463 case 0:
464 c->code_rate_LP = FEC_1_2;
465 break;
466 case 1:
467 c->code_rate_LP = FEC_2_3;
468 break;
469 case 2:
470 c->code_rate_LP = FEC_3_4;
471 break;
472 case 3:
473 c->code_rate_LP = FEC_5_6;
474 break;
475 case 4:
476 c->code_rate_LP = FEC_7_8;
477 break;
478 }
479
480 return 0;
481err:
482 dbg("%s: failed=%d", __func__, ret);
483 return ret;
484}
485
377static int rtl2830_read_status(struct dvb_frontend *fe, fe_status_t *status) 486static int rtl2830_read_status(struct dvb_frontend *fe, fe_status_t *status)
378{ 487{
379 struct rtl2830_priv *priv = fe->demodulator_priv; 488 struct rtl2830_priv *priv = fe->demodulator_priv;
@@ -622,6 +731,7 @@ static struct dvb_frontend_ops rtl2830_ops = {
622 .get_tune_settings = rtl2830_get_tune_settings, 731 .get_tune_settings = rtl2830_get_tune_settings,
623 732
624 .set_frontend = rtl2830_set_frontend, 733 .set_frontend = rtl2830_set_frontend,
734 .get_frontend = rtl2830_get_frontend,
625 735
626 .read_status = rtl2830_read_status, 736 .read_status = rtl2830_read_status,
627 .read_snr = rtl2830_read_snr, 737 .read_snr = rtl2830_read_snr,