aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-11-01 23:30:40 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 15:41:23 -0500
commitadcd8de6de36f67241a5c3562f2ef1d5998b30a9 (patch)
tree3040b19e701aa8982fab5b95ba071dccfbc816d5 /drivers/media/dvb
parent48c511ed675772bd08044d97756f7f7aae5168eb (diff)
V4L/DVB (13332): s5h1409: remove a set register that would cause lock to be lost.
On particularly weak signals, changing register 0xab after setting the interleave mode will cause the FEC lock to get lost (while still holding the EQ lock). So remove the write entirely, which seems to have had no adverse effect in either of my ClearQAM environments (and in particular resolves the customer's reported issue). Also flip around the order of the amhum optimization and the interleave setup to be consistent with the windows driver, which has the side-benefit of doing them both in the same call (since the amhum optimization can only be done once the interleave setup). This work was sponsored by ONELAN Limited. Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r--drivers/media/dvb/frontends/s5h1409.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/media/dvb/frontends/s5h1409.c b/drivers/media/dvb/frontends/s5h1409.c
index 5507159a23b1..0e2f61a8978f 100644
--- a/drivers/media/dvb/frontends/s5h1409.c
+++ b/drivers/media/dvb/frontends/s5h1409.c
@@ -586,8 +586,6 @@ static void s5h1409_set_qam_interleave_mode(struct dvb_frontend *fe)
586 s5h1409_writereg(state, 0x96, 0x0020); 586 s5h1409_writereg(state, 0x96, 0x0020);
587 s5h1409_writereg(state, 0xad, 587 s5h1409_writereg(state, 0xad,
588 (((reg1 & 0xf000) >> 4) | (reg2 & 0xf0ff))); 588 (((reg1 & 0xf000) >> 4) | (reg2 & 0xf0ff)));
589 s5h1409_writereg(state, 0xab,
590 s5h1409_readreg(state, 0xab) & 0xeffe);
591 state->qam_state = QAM_STATE_INTERLEAVE_SET; 589 state->qam_state = QAM_STATE_INTERLEAVE_SET;
592 } 590 }
593 } else { 591 } else {
@@ -664,8 +662,8 @@ static int s5h1409_set_frontend(struct dvb_frontend *fe,
664 only do it for the HVR-1600. Once the other boards are 662 only do it for the HVR-1600. Once the other boards are
665 tested, the "legacy" versions can just go away */ 663 tested, the "legacy" versions can just go away */
666 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { 664 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) {
667 s5h1409_set_qam_amhum_mode(fe);
668 s5h1409_set_qam_interleave_mode(fe); 665 s5h1409_set_qam_interleave_mode(fe);
666 s5h1409_set_qam_amhum_mode(fe);
669 } else { 667 } else {
670 s5h1409_set_qam_amhum_mode_legacy(fe); 668 s5h1409_set_qam_amhum_mode_legacy(fe);
671 s5h1409_set_qam_interleave_mode_legacy(fe); 669 s5h1409_set_qam_interleave_mode_legacy(fe);
@@ -771,8 +769,8 @@ static int s5h1409_read_status(struct dvb_frontend *fe, fe_status_t *status)
771 only do it for the HVR-1600. Once the other boards are 769 only do it for the HVR-1600. Once the other boards are
772 tested, the "legacy" versions can just go away */ 770 tested, the "legacy" versions can just go away */
773 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) { 771 if (state->config->hvr1600_opt == S5H1409_HVR1600_OPTIMIZE) {
774 s5h1409_set_qam_amhum_mode(fe);
775 s5h1409_set_qam_interleave_mode(fe); 772 s5h1409_set_qam_interleave_mode(fe);
773 s5h1409_set_qam_amhum_mode(fe);
776 } 774 }
777 } 775 }
778 776