diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2013-12-28 12:02:44 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-01-07 06:40:04 -0500 |
commit | 49c44802a79ca558c78d9b86f4c1ff6bb5ba0208 (patch) | |
tree | ab6fc5ccd65e2da14653714cde6bf8520a76b5a4 /drivers/media/dvb-frontends/m88rs2000.c | |
parent | 7a9d6b43f81aa5ad89afdbb26a1d6fd4dff4d635 (diff) |
[media] m88rs2000: Correct m88rs2000_set_fec settings
Register 0x70 is used to set fec, register 0x76 is used to get fec
Register 0x76 is set to 0x8.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/dvb-frontends/m88rs2000.c')
-rw-r--r-- | drivers/media/dvb-frontends/m88rs2000.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/media/dvb-frontends/m88rs2000.c b/drivers/media/dvb-frontends/m88rs2000.c index f9d04db7275c..002b109d9383 100644 --- a/drivers/media/dvb-frontends/m88rs2000.c +++ b/drivers/media/dvb-frontends/m88rs2000.c | |||
@@ -541,33 +541,38 @@ static int m88rs2000_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) | |||
541 | static int m88rs2000_set_fec(struct m88rs2000_state *state, | 541 | static int m88rs2000_set_fec(struct m88rs2000_state *state, |
542 | fe_code_rate_t fec) | 542 | fe_code_rate_t fec) |
543 | { | 543 | { |
544 | u16 fec_set; | 544 | u8 fec_set, reg; |
545 | int ret; | ||
546 | |||
545 | switch (fec) { | 547 | switch (fec) { |
546 | /* This is not confirmed kept for reference */ | 548 | case FEC_1_2: |
547 | /* case FEC_1_2: | 549 | fec_set = 0x8; |
548 | fec_set = 0x88; | ||
549 | break; | 550 | break; |
550 | case FEC_2_3: | 551 | case FEC_2_3: |
551 | fec_set = 0x68; | 552 | fec_set = 0x10; |
552 | break; | 553 | break; |
553 | case FEC_3_4: | 554 | case FEC_3_4: |
554 | fec_set = 0x48; | 555 | fec_set = 0x20; |
555 | break; | 556 | break; |
556 | case FEC_5_6: | 557 | case FEC_5_6: |
557 | fec_set = 0x28; | 558 | fec_set = 0x40; |
558 | break; | 559 | break; |
559 | case FEC_7_8: | 560 | case FEC_7_8: |
560 | fec_set = 0x18; | 561 | fec_set = 0x80; |
561 | break; */ | 562 | break; |
562 | case FEC_AUTO: | 563 | case FEC_AUTO: |
563 | default: | 564 | default: |
564 | fec_set = 0x08; | 565 | fec_set = 0x0; |
565 | } | 566 | } |
566 | m88rs2000_writereg(state, 0x76, fec_set); | ||
567 | 567 | ||
568 | return 0; | 568 | reg = m88rs2000_readreg(state, 0x70); |
569 | } | 569 | reg &= 0x7; |
570 | ret = m88rs2000_writereg(state, 0x70, reg | fec_set); | ||
570 | 571 | ||
572 | ret |= m88rs2000_writereg(state, 0x76, 0x8); | ||
573 | |||
574 | return ret; | ||
575 | } | ||
571 | 576 | ||
572 | static fe_code_rate_t m88rs2000_get_fec(struct m88rs2000_state *state) | 577 | static fe_code_rate_t m88rs2000_get_fec(struct m88rs2000_state *state) |
573 | { | 578 | { |
@@ -650,12 +655,8 @@ static int m88rs2000_set_frontend(struct dvb_frontend *fe) | |||
650 | if (ret < 0) | 655 | if (ret < 0) |
651 | return -ENODEV; | 656 | return -ENODEV; |
652 | 657 | ||
653 | /* Unknown */ | ||
654 | reg = m88rs2000_readreg(state, 0x70); | ||
655 | ret = m88rs2000_writereg(state, 0x70, reg); | ||
656 | |||
657 | /* Set FEC */ | 658 | /* Set FEC */ |
658 | ret |= m88rs2000_set_fec(state, c->fec_inner); | 659 | ret = m88rs2000_set_fec(state, c->fec_inner); |
659 | ret |= m88rs2000_writereg(state, 0x85, 0x1); | 660 | ret |= m88rs2000_writereg(state, 0x85, 0x1); |
660 | ret |= m88rs2000_writereg(state, 0x8a, 0xbf); | 661 | ret |= m88rs2000_writereg(state, 0x8a, 0xbf); |
661 | ret |= m88rs2000_writereg(state, 0x8d, 0x1e); | 662 | ret |= m88rs2000_writereg(state, 0x8d, 0x1e); |