aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/m88rs2000.c
diff options
context:
space:
mode:
authorMalcolm Priestley <tvboxspy@gmail.com>2013-12-28 12:02:44 -0500
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-01-07 06:40:04 -0500
commit49c44802a79ca558c78d9b86f4c1ff6bb5ba0208 (patch)
treeab6fc5ccd65e2da14653714cde6bf8520a76b5a4 /drivers/media/dvb-frontends/m88rs2000.c
parent7a9d6b43f81aa5ad89afdbb26a1d6fd4dff4d635 (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.c37
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)
541static int m88rs2000_set_fec(struct m88rs2000_state *state, 541static 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
572static fe_code_rate_t m88rs2000_get_fec(struct m88rs2000_state *state) 577static 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);