]> git.itanic.dy.fi Git - linux-stable/commitdiff
dib8000: fix regression with dib807x
authorOlivier Grenie <olivier.grenie@parrot.com>
Thu, 12 Dec 2013 12:26:22 +0000 (09:26 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Feb 2014 21:55:38 +0000 (13:55 -0800)
commit d67350f8c4e67f5eba627e1fd111f16257ca9c95 upstream.

Commit 173a64cb3fcf broke support for some dib807x versions.

Fix it by providing backward compatibility with the older versions.

[mkrufky@linuxtv.org: conflict handling and CodingStyle fixes]

Signed-off-by: Olivier Grenie <olivier.grenie@parrot.com>
Acked-by: Patrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/dvb-frontends/dib8000.c

index 2b2de4d0ca562fb01fc00f45405872a4ae2ef65b..36c839cabe82537daf37dcd1e2ad5fbadf81ea4a 100644 (file)
@@ -2462,7 +2462,8 @@ static int dib8000_autosearch_start(struct dvb_frontend *fe)
        if (state->revision == 0x8090)
                internal = dib8000_read32(state, 23) / 1000;
 
-       if (state->autosearch_state == AS_SEARCHING_FFT) {
+       if ((state->revision >= 0x8002) &&
+           (state->autosearch_state == AS_SEARCHING_FFT)) {
                dib8000_write_word(state,  37, 0x0065); /* P_ctrl_pha_off_max default values */
                dib8000_write_word(state, 116, 0x0000); /* P_ana_gain to 0 */
 
@@ -2498,7 +2499,8 @@ static int dib8000_autosearch_start(struct dvb_frontend *fe)
                dib8000_write_word(state, 770, (dib8000_read_word(state, 770) & 0xdfff) | (1 << 13)); /* P_restart_ccg = 1 */
                dib8000_write_word(state, 770, (dib8000_read_word(state, 770) & 0xdfff) | (0 << 13)); /* P_restart_ccg = 0 */
                dib8000_write_word(state, 0, (dib8000_read_word(state, 0) & 0x7ff) | (0 << 15) | (1 << 13)); /* P_restart_search = 0; */
-       } else if (state->autosearch_state == AS_SEARCHING_GUARD) {
+       } else if ((state->revision >= 0x8002) &&
+                  (state->autosearch_state == AS_SEARCHING_GUARD)) {
                c->transmission_mode = TRANSMISSION_MODE_8K;
                c->guard_interval = GUARD_INTERVAL_1_8;
                c->inversion = 0;
@@ -2600,7 +2602,8 @@ static int dib8000_autosearch_irq(struct dvb_frontend *fe)
        struct dib8000_state *state = fe->demodulator_priv;
        u16 irq_pending = dib8000_read_word(state, 1284);
 
-       if (state->autosearch_state == AS_SEARCHING_FFT) {
+       if ((state->revision >= 0x8002) &&
+           (state->autosearch_state == AS_SEARCHING_FFT)) {
                if (irq_pending & 0x1) {
                        dprintk("dib8000_autosearch_irq: max correlation result available");
                        return 3;