diff options
author | Antti Palosaari <crope@iki.fi> | 2012-05-18 14:58:57 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-20 09:24:37 -0400 |
commit | 631a2b611288f87de4ef1098d1fb4bc4d246b103 (patch) | |
tree | e7db14c7eab60268d7faf4786dce96a2196180bb | |
parent | 78e750754bf0cc86d36149536bc7f3382710a2ee (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.c | 110 |
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 | ||
377 | static 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; | ||
481 | err: | ||
482 | dbg("%s: failed=%d", __func__, ret); | ||
483 | return ret; | ||
484 | } | ||
485 | |||
377 | static int rtl2830_read_status(struct dvb_frontend *fe, fe_status_t *status) | 486 | static 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, |