diff options
-rw-r--r-- | drivers/media/dvb/frontends/s5h1409.c | 14 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/s5h1409.h | 4 | ||||
-rw-r--r-- | drivers/media/video/cx23885/cx23885-dvb.c | 4 |
3 files changed, 17 insertions, 5 deletions
diff --git a/drivers/media/dvb/frontends/s5h1409.c b/drivers/media/dvb/frontends/s5h1409.c index 562d9208857a..b80a3ee91ba4 100644 --- a/drivers/media/dvb/frontends/s5h1409.c +++ b/drivers/media/dvb/frontends/s5h1409.c | |||
@@ -42,6 +42,7 @@ struct s5h1409_state { | |||
42 | fe_modulation_t current_modulation; | 42 | fe_modulation_t current_modulation; |
43 | 43 | ||
44 | u32 current_frequency; | 44 | u32 current_frequency; |
45 | int if_freq; | ||
45 | 46 | ||
46 | u32 is_qam_locked; | 47 | u32 is_qam_locked; |
47 | u32 qam_state; | 48 | u32 qam_state; |
@@ -348,6 +349,9 @@ static int s5h1409_softreset(struct dvb_frontend* fe) | |||
348 | return 0; | 349 | return 0; |
349 | } | 350 | } |
350 | 351 | ||
352 | #define S5H1409_VSB_IF_FREQ 5380 | ||
353 | #define S5H1409_QAM_IF_FREQ state->config->qam_if | ||
354 | |||
351 | static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz) | 355 | static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz) |
352 | { | 356 | { |
353 | struct s5h1409_state* state = fe->demodulator_priv; | 357 | struct s5h1409_state* state = fe->demodulator_priv; |
@@ -369,6 +373,9 @@ static int s5h1409_set_if_freq(struct dvb_frontend* fe, int KHz) | |||
369 | ret = -1; | 373 | ret = -1; |
370 | } | 374 | } |
371 | 375 | ||
376 | if (0 == ret) | ||
377 | state->if_freq = KHz; | ||
378 | |||
372 | return ret; | 379 | return ret; |
373 | } | 380 | } |
374 | 381 | ||
@@ -394,11 +401,15 @@ static int s5h1409_enable_modulation(struct dvb_frontend* fe, | |||
394 | switch(m) { | 401 | switch(m) { |
395 | case VSB_8: | 402 | case VSB_8: |
396 | dprintk("%s() VSB_8\n", __FUNCTION__); | 403 | dprintk("%s() VSB_8\n", __FUNCTION__); |
404 | if (state->if_freq != S5H1409_VSB_IF_FREQ) | ||
405 | s5h1409_set_if_freq(fe, S5H1409_VSB_IF_FREQ); | ||
397 | s5h1409_writereg(state, 0xf4, 0); | 406 | s5h1409_writereg(state, 0xf4, 0); |
398 | break; | 407 | break; |
399 | case QAM_64: | 408 | case QAM_64: |
400 | case QAM_256: | 409 | case QAM_256: |
401 | dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__); | 410 | dprintk("%s() QAM_AUTO (64/256)\n", __FUNCTION__); |
411 | if (state->if_freq != S5H1409_QAM_IF_FREQ) | ||
412 | s5h1409_set_if_freq(fe, S5H1409_QAM_IF_FREQ); | ||
402 | s5h1409_writereg(state, 0xf4, 1); | 413 | s5h1409_writereg(state, 0xf4, 1); |
403 | s5h1409_writereg(state, 0x85, 0x110); | 414 | s5h1409_writereg(state, 0x85, 0x110); |
404 | break; | 415 | break; |
@@ -571,7 +582,7 @@ static int s5h1409_init (struct dvb_frontend* fe) | |||
571 | s5h1409_writereg(state, 0xab, 0x0); /* Parallel */ | 582 | s5h1409_writereg(state, 0xab, 0x0); /* Parallel */ |
572 | 583 | ||
573 | s5h1409_set_spectralinversion(fe, state->config->inversion); | 584 | s5h1409_set_spectralinversion(fe, state->config->inversion); |
574 | s5h1409_set_if_freq(fe, state->config->if_freq); | 585 | s5h1409_set_if_freq(fe, state->if_freq); |
575 | s5h1409_set_gpio(fe, state->config->gpio); | 586 | s5h1409_set_gpio(fe, state->config->gpio); |
576 | s5h1409_softreset(fe); | 587 | s5h1409_softreset(fe); |
577 | 588 | ||
@@ -751,6 +762,7 @@ struct dvb_frontend* s5h1409_attach(const struct s5h1409_config* config, | |||
751 | state->config = config; | 762 | state->config = config; |
752 | state->i2c = i2c; | 763 | state->i2c = i2c; |
753 | state->current_modulation = 0; | 764 | state->current_modulation = 0; |
765 | state->if_freq = S5H1409_VSB_IF_FREQ; | ||
754 | 766 | ||
755 | /* check if the demod exists */ | 767 | /* check if the demod exists */ |
756 | if (s5h1409_readreg(state, 0x04) != 0x0066) | 768 | if (s5h1409_readreg(state, 0x04) != 0x0066) |
diff --git a/drivers/media/dvb/frontends/s5h1409.h b/drivers/media/dvb/frontends/s5h1409.h index 20f9af1af445..b1f433906664 100644 --- a/drivers/media/dvb/frontends/s5h1409.h +++ b/drivers/media/dvb/frontends/s5h1409.h | |||
@@ -39,8 +39,8 @@ struct s5h1409_config | |||
39 | #define S5H1409_GPIO_ON 1 | 39 | #define S5H1409_GPIO_ON 1 |
40 | u8 gpio; | 40 | u8 gpio; |
41 | 41 | ||
42 | /* IF Freq in KHz */ | 42 | /* IF Freq for QAM in KHz, VSB is hardcoded to 5380 */ |
43 | u16 if_freq; | 43 | u16 qam_if; |
44 | 44 | ||
45 | /* Spectral Inversion */ | 45 | /* Spectral Inversion */ |
46 | #define S5H1409_INVERSION_OFF 0 | 46 | #define S5H1409_INVERSION_OFF 0 |
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c index eda8c05d0931..96d732098a0d 100644 --- a/drivers/media/video/cx23885/cx23885-dvb.c +++ b/drivers/media/video/cx23885/cx23885-dvb.c | |||
@@ -85,7 +85,7 @@ static struct s5h1409_config hauppauge_generic_config = { | |||
85 | .demod_address = 0x32 >> 1, | 85 | .demod_address = 0x32 >> 1, |
86 | .output_mode = S5H1409_SERIAL_OUTPUT, | 86 | .output_mode = S5H1409_SERIAL_OUTPUT, |
87 | .gpio = S5H1409_GPIO_ON, | 87 | .gpio = S5H1409_GPIO_ON, |
88 | .if_freq = 44000, | 88 | .qam_if = 44000, |
89 | .inversion = S5H1409_INVERSION_OFF, | 89 | .inversion = S5H1409_INVERSION_OFF, |
90 | .status_mode = S5H1409_DEMODLOCKING | 90 | .status_mode = S5H1409_DEMODLOCKING |
91 | }; | 91 | }; |
@@ -94,7 +94,7 @@ static struct s5h1409_config hauppauge_hvr1800lp_config = { | |||
94 | .demod_address = 0x32 >> 1, | 94 | .demod_address = 0x32 >> 1, |
95 | .output_mode = S5H1409_SERIAL_OUTPUT, | 95 | .output_mode = S5H1409_SERIAL_OUTPUT, |
96 | .gpio = S5H1409_GPIO_OFF, | 96 | .gpio = S5H1409_GPIO_OFF, |
97 | .if_freq = 44000, | 97 | .qam_if = 44000, |
98 | .inversion = S5H1409_INVERSION_OFF, | 98 | .inversion = S5H1409_INVERSION_OFF, |
99 | .status_mode = S5H1409_DEMODLOCKING | 99 | .status_mode = S5H1409_DEMODLOCKING |
100 | }; | 100 | }; |