summaryrefslogtreecommitdiff
path: root/linux/drivers/media/dvb/frontends/dib3000mc.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/dvb/frontends/dib3000mc.c')
-rw-r--r--linux/drivers/media/dvb/frontends/dib3000mc.c134
1 files changed, 66 insertions, 68 deletions
diff --git a/linux/drivers/media/dvb/frontends/dib3000mc.c b/linux/drivers/media/dvb/frontends/dib3000mc.c
index 9bed3dd05..76707bfca 100644
--- a/linux/drivers/media/dvb/frontends/dib3000mc.c
+++ b/linux/drivers/media/dvb/frontends/dib3000mc.c
@@ -51,7 +51,7 @@ MODULE_PARM_DESC(debug, "set debugging level (1=info,2=xfer,4=setfe,8=getfe,16=s
static int dib3000mc_tuner_pass_ctrl(struct dvb_frontend *fe, int onoff, u8 pll_addr);
static int dib3000mc_set_impulse_noise(struct dib3000_state * state, int mode,
- fe_transmit_mode_t transmission_mode, fe_bandwidth_t bandwidth)
+ fe_transmit_mode_t transmission_mode, fe_bandwidth_t bandwidth)
{
switch (transmission_mode) {
case TRANSMISSION_MODE_2K:
@@ -60,13 +60,13 @@ static int dib3000mc_set_impulse_noise(struct dib3000_state * state, int mode,
case TRANSMISSION_MODE_8K:
wr_foreach(dib3000mc_reg_fft,dib3000mc_fft_modes[1]);
break;
- default:
+ default:
break;
}
switch (bandwidth) {
/* case BANDWIDTH_5_MHZ:
- wr_foreach(dib3000mc_reg_impulse_noise,dib3000mc_impluse_noise[0]);
+ wr_foreach(dib3000mc_reg_impulse_noise,dib3000mc_impluse_noise[0]);
break; */
case BANDWIDTH_6_MHZ:
wr_foreach(dib3000mc_reg_impulse_noise,dib3000mc_impluse_noise[1]);
@@ -77,12 +77,12 @@ static int dib3000mc_set_impulse_noise(struct dib3000_state * state, int mode,
case BANDWIDTH_8_MHZ:
wr_foreach(dib3000mc_reg_impulse_noise,dib3000mc_impluse_noise[3]);
break;
- default:
+ default:
break;
}
switch (mode) {
- case 0: /* no impulse */ /* fall through */
+ case 0: /* no impulse */ /* fall through */
wr_foreach(dib3000mc_reg_imp_noise_ctl,dib3000mc_imp_noise_ctl[0]);
break;
case 1: /* new algo */
@@ -107,14 +107,14 @@ static int dib3000mc_set_timing(struct dib3000_state *state, int upd_offset,
case BANDWIDTH_8_MHZ: comp = DIB3000MC_CLOCK_REF*8; break;
case BANDWIDTH_7_MHZ: comp = DIB3000MC_CLOCK_REF*7; break;
case BANDWIDTH_6_MHZ: comp = DIB3000MC_CLOCK_REF*6; break;
- default: err("unknown bandwidth (%d)",bw); break;
+ default: err("unknown bandwidth (%d)",bw); break;
}
timf_msb = (comp >> 16) & 0xff;
timf_lsb = (comp & 0xffff);
// Update the timing offset ;
if (upd_offset > 0) {
- if (!state->timing_offset_comp_done) {
+ if (!state->timing_offset_comp_done) {
msleep(200);
state->timing_offset_comp_done = 1;
}
@@ -128,11 +128,11 @@ static int dib3000mc_set_timing(struct dib3000_state *state, int upd_offset,
tim_offset = state->timing_offset;
if (tim_offset < 0) {
- tim_sgn = 1;
+ tim_sgn = 1;
tim_offset = -tim_offset;
- } else
+ } else
tim_sgn = 0;
-
+
comp1 = (u32)tim_offset * (u32)timf_lsb ;
comp2 = (u32)tim_offset * (u32)timf_msb ;
comp = ((comp1 >> 16) + comp2) >> 7;
@@ -141,7 +141,7 @@ static int dib3000mc_set_timing(struct dib3000_state *state, int upd_offset,
comp = (u32)(timf_msb << 16) + (u32) timf_lsb + comp;
else
comp = (u32)(timf_msb << 16) + (u32) timf_lsb - comp ;
-
+
timf_msb = (comp >> 16) & 0xff;
timf_lsb = comp & 0xffff;
@@ -177,7 +177,7 @@ static int dib3000mc_init_auto_scan(struct dib3000_state *state, fe_bandwidth_t
return -EINVAL;
}
if (boost) {
- u32 timeout = (rd(DIB3000MC_REG_BW_TIMOUT_MSB) << 16) +
+ u32 timeout = (rd(DIB3000MC_REG_BW_TIMOUT_MSB) << 16) +
rd(DIB3000MC_REG_BW_TIMOUT_LSB);
timeout *= 85; timeout >>= 7;
wr(DIB3000MC_REG_BW_TIMOUT_MSB,(timeout >> 16) & 0xffff);
@@ -189,13 +189,13 @@ static int dib3000mc_init_auto_scan(struct dib3000_state *state, fe_bandwidth_t
static int dib3000mc_set_adp_cfg(struct dib3000_state *state, fe_modulation_t con)
{
switch (con) {
- case QAM_64:
+ case QAM_64:
wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[2]);
break;
- case QAM_16:
+ case QAM_16:
wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[1]);
break;
- case QPSK:
+ case QPSK:
wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[0]);
break;
case QAM_AUTO:
@@ -237,7 +237,7 @@ static int dib3000mc_set_general_cfg(struct dib3000_state *state, struct dvb_fro
}
switch (ofdm->hierarchy_information) {
case HIERARCHY_NONE: /* fall through */
- case HIERARCHY_1: alpha = DIB3000_ALPHA_1; break;
+ case HIERARCHY_1: alpha = DIB3000_ALPHA_1; break;
case HIERARCHY_2: alpha = DIB3000_ALPHA_2; break;
case HIERARCHY_4: alpha = DIB3000_ALPHA_4; break;
case HIERARCHY_AUTO: break;
@@ -262,7 +262,7 @@ static int dib3000mc_set_general_cfg(struct dib3000_state *state, struct dvb_fro
case FEC_AUTO: break;
default: return -EINVAL;
}
-
+
wr(DIB3000MC_REG_DEMOD_PARM,DIB3000MC_DEMOD_PARM(alpha,qam,guard,fft));
wr(DIB3000MC_REG_HRCH_PARM,DIB3000MC_HRCH_PARM(sel_hp,cr,hrch));
@@ -327,14 +327,14 @@ static int dib3000mc_get_frontend(struct dvb_frontend* fe,
fep->inversion =
((inv_test2 == 2) && (inv_test1==1 || inv_test1==0)) ||
- ((inv_test2 == 0) && (inv_test1==1 || inv_test1==2)) ?
+ ((inv_test2 == 0) && (inv_test1==1 || inv_test1==2)) ?
INVERSION_ON : INVERSION_OFF;
deb_getf("inversion %d %d, %d\n", inv_test2, inv_test1, fep->inversion);
fep->frequency = state->last_tuned_freq;
fep->u.ofdm.bandwidth= state->last_tuned_bw;
-
+
tps_val = rd(DIB3000MC_REG_TUNING_PARM);
switch (DIB3000MC_TP_QAM(tps_val)) {
@@ -353,7 +353,7 @@ static int dib3000mc_get_frontend(struct dvb_frontend* fe,
default:
err("Unexpected constellation returned by TPS (%d)", tps_val);
break;
- }
+ }
if (DIB3000MC_TP_HRCH(tps_val)) {
deb_getf("HRCH ON ");
@@ -462,12 +462,12 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe,
struct dvb_ofdm_parameters *ofdm = &fep->u.ofdm;
int search_state,auto_val;
u16 val;
-
+
if (tuner) { /* initial call from dvb */
dib3000mc_tuner_pass_ctrl(fe,1,state->config.pll_addr(fe));
state->config.pll_set(fe,fep,NULL);
dib3000mc_tuner_pass_ctrl(fe,0,state->config.pll_addr(fe));
-
+
state->last_tuned_freq = fep->frequency;
// if (!scanboost) {
dib3000mc_set_timing(state,0,ofdm->transmission_mode,ofdm->bandwidth);
@@ -477,7 +477,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe,
wr_foreach(dib3000mc_reg_agc_bandwidth,dib3000mc_agc_bandwidth);
wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_AGC);
wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_OFF);
-
+
/* Default cfg isi offset adp */
wr_foreach(dib3000mc_reg_offset,dib3000mc_offset[0]);
@@ -495,7 +495,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe,
auto_val = 0;
dib3000mc_set_general_cfg(state,fep,&auto_val);
dib3000mc_set_impulse_noise(state,0,ofdm->constellation,ofdm->bandwidth);
-
+
val = rd(DIB3000MC_REG_DEMOD_PARM);
wr(DIB3000MC_REG_DEMOD_PARM,val|DIB3000MC_DEMOD_RST_DEMOD_ON);
wr(DIB3000MC_REG_DEMOD_PARM,val);
@@ -507,17 +507,17 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe,
int as_count=0;
deb_setf("autosearch enabled.\n");
-
+
val = rd(DIB3000MC_REG_DEMOD_PARM);
wr(DIB3000MC_REG_DEMOD_PARM,val | DIB3000MC_DEMOD_RST_AUTO_SRCH_ON);
wr(DIB3000MC_REG_DEMOD_PARM,val);
while ((search_state = dib3000_search_status(
- rd(DIB3000MC_REG_AS_IRQ),1)) < 0 && as_count++ < 100)
+ rd(DIB3000MC_REG_AS_IRQ),1)) < 0 && as_count++ < 100)
msleep(10);
-
+
deb_info("search_state after autosearch %d after %d checks\n",search_state,as_count);
-
+
if (search_state == 1) {
struct dvb_frontend_parameters feps;
if (dib3000mc_get_frontend(fe, &feps) == 0) {
@@ -529,33 +529,31 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe,
dib3000mc_set_impulse_noise(state,0,ofdm->transmission_mode,ofdm->bandwidth);
wr(DIB3000MC_REG_ISI,DIB3000MC_ISI_DEFAULT|DIB3000MC_ISI_ACTIVATE);
dib3000mc_set_adp_cfg(state,ofdm->constellation);
-
+
/* set_offset_cfg */
wr_foreach(dib3000mc_reg_offset,
dib3000mc_offset[(ofdm->transmission_mode == TRANSMISSION_MODE_8K)+1]);
}
} else { /* second call, after autosearch (fka: set_WithKnownParams) */
// dib3000mc_set_timing(state,1,ofdm->transmission_mode,ofdm->bandwidth);
-
+
auto_val = 0;
dib3000mc_set_general_cfg(state,fep,&auto_val);
if (auto_val)
deb_info("auto_val is true, even though an auto search was already performed.\n");
dib3000mc_set_impulse_noise(state,0,ofdm->constellation,ofdm->bandwidth);
-
+
val = rd(DIB3000MC_REG_DEMOD_PARM);
wr(DIB3000MC_REG_DEMOD_PARM,val | DIB3000MC_DEMOD_RST_AUTO_SRCH_ON);
wr(DIB3000MC_REG_DEMOD_PARM,val);
-
+
msleep(30);
-
+
wr(DIB3000MC_REG_ISI,DIB3000MC_ISI_DEFAULT|DIB3000MC_ISI_ACTIVATE);
dib3000mc_set_adp_cfg(state,ofdm->constellation);
wr_foreach(dib3000mc_reg_offset,
dib3000mc_offset[(ofdm->transmission_mode == TRANSMISSION_MODE_8K)+1]);
-
-
}
return 0;
}
@@ -567,26 +565,26 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode)
state->timing_offset = 0;
state->timing_offset_comp_done = 0;
-
+
wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_CONFIG);
wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_OFF);
wr(DIB3000MC_REG_CLK_CFG_1,DIB3000MC_CLK_CFG_1_POWER_UP);
wr(DIB3000MC_REG_CLK_CFG_2,DIB3000MC_CLK_CFG_2_PUP_MOBILE);
wr(DIB3000MC_REG_CLK_CFG_3,DIB3000MC_CLK_CFG_3_POWER_UP);
wr(DIB3000MC_REG_CLK_CFG_7,DIB3000MC_CLK_CFG_7_INIT);
-
+
wr(DIB3000MC_REG_RST_UNC,DIB3000MC_RST_UNC_OFF);
wr(DIB3000MC_REG_UNK_19,DIB3000MC_UNK_19);
wr(33,5);
wr(36,81);
- wr(DIB3000MC_REG_UNK_88,DIB3000MC_UNK_88);
-
+ wr(DIB3000MC_REG_UNK_88,DIB3000MC_UNK_88);
+
wr(DIB3000MC_REG_UNK_99,DIB3000MC_UNK_99);
wr(DIB3000MC_REG_UNK_111,DIB3000MC_UNK_111_PH_N_MODE_0); /* phase noise algo off */
/* mobile mode - portable reception */
- wr_foreach(dib3000mc_reg_mobile_mode,dib3000mc_mobile_mode[1]);
+ wr_foreach(dib3000mc_reg_mobile_mode,dib3000mc_mobile_mode[1]);
/* TUNER_PANASONIC_ENV57H12D5: */
wr_foreach(dib3000mc_reg_agc_bandwidth,dib3000mc_agc_bandwidth);
@@ -599,24 +597,24 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode)
wr(DIB3000MC_REG_UNK_2,DIB3000MC_UNK_2);
wr(DIB3000MC_REG_UNK_3,DIB3000MC_UNK_3);
wr(DIB3000MC_REG_SEQ_TPS,DIB3000MC_SEQ_TPS_DEFAULT);
-
+
wr_foreach(dib3000mc_reg_bandwidth,dib3000mc_bandwidth_8mhz);
wr_foreach(dib3000mc_reg_bandwidth_general,dib3000mc_bandwidth_general);
-
+
wr(DIB3000MC_REG_UNK_4,DIB3000MC_UNK_4);
wr(DIB3000MC_REG_SET_DDS_FREQ_MSB,DIB3000MC_DDS_FREQ_MSB_INV_OFF);
wr(DIB3000MC_REG_SET_DDS_FREQ_LSB,DIB3000MC_DDS_FREQ_LSB);
- dib3000mc_set_timing(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ);
+ dib3000mc_set_timing(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ);
// wr_foreach(dib3000mc_reg_timing_freq,dib3000mc_timing_freq[3]);
-
+
wr(DIB3000MC_REG_UNK_120,DIB3000MC_UNK_120);
wr(DIB3000MC_REG_UNK_134,DIB3000MC_UNK_134);
wr(DIB3000MC_REG_FEC_CFG,DIB3000MC_FEC_CFG);
-
+
wr(DIB3000MC_REG_DIVERSITY3,DIB3000MC_DIVERSITY3_IN_OFF);
-
+
dib3000mc_set_impulse_noise(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ);
/* output mode control, just the MPEG2_SLAVE */
@@ -632,13 +630,13 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode)
rd(DIB3000MC_REG_OUTMODE)));
wr(DIB3000MC_REG_SMO_MODE,
- DIB3000MC_SMO_MODE_DEFAULT |
+ DIB3000MC_SMO_MODE_DEFAULT |
DIB3000MC_SMO_MODE_188);
wr(DIB3000MC_REG_FIFO_THRESHOLD,DIB3000MC_FIFO_THRESHOLD_DEFAULT);
wr(DIB3000MC_REG_ELEC_OUT,DIB3000MC_ELEC_OUT_DIV_OUT_ON);
*/
-
+
/* diversity */
wr(DIB3000MC_REG_DIVERSITY1,DIB3000MC_DIVERSITY1_DEFAULT);
wr(DIB3000MC_REG_DIVERSITY2,DIB3000MC_DIVERSITY2_DEFAULT);
@@ -708,14 +706,14 @@ static int dib3000mc_read_snr(struct dvb_frontend* fe, u16 *snr)
u16 val = rd(DIB3000MC_REG_SIGNAL_NOISE_LSB),
val2 = rd(DIB3000MC_REG_SIGNAL_NOISE_MSB);
u16 sig,noise;
-
+
sig = (((val >> 6) & 0xff) << 8) + (val & 0x3f);
noise = (((val >> 4) & 0xff) << 8) + ((val & 0xf) << 2) + ((val2 >> 14) & 0x3);
if (noise == 0)
*snr = 0xffff;
else
*snr = (u16) sig/noise;
-
+
deb_stat("signal: mantisse = %d, exponent = %d\n",(sig >> 8) & 0xff, sig & 0xff);
deb_stat("noise: mantisse = %d, exponent = %d\n",(noise >> 8) & 0xff, noise & 0xff);
deb_stat("snr: %d\n",*snr);
@@ -753,7 +751,7 @@ static int dib3000mc_set_frontend_and_tuner(struct dvb_frontend* fe, struct dvb_
}
static void dib3000mc_release(struct dvb_frontend* fe)
-{
+{
struct dib3000_state *state = (struct dib3000_state *) fe->demodulator_priv;
kfree(state);
}
@@ -771,9 +769,9 @@ static int dib3000mc_fifo_control(struct dvb_frontend *fe, int onoff)
{
struct dib3000_state *state = (struct dib3000_state*) fe->demodulator_priv;
u16 tmp = rd(DIB3000MC_REG_SMO_MODE);
-
+
deb_xfer("%s fifo\n",onoff ? "enabling" : "disabling");
-
+
if (onoff) {
deb_xfer("%d %x\n",tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH,tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH);
wr(DIB3000MC_REG_SMO_MODE,tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH);
@@ -784,13 +782,13 @@ static int dib3000mc_fifo_control(struct dvb_frontend *fe, int onoff)
return 0;
}
-static int dib3000mc_pid_parse(struct dvb_frontend *fe, int onoff)
+static int dib3000mc_pid_parse(struct dvb_frontend *fe, int onoff)
{
struct dib3000_state *state = fe->demodulator_priv;
u16 tmp = rd(DIB3000MC_REG_SMO_MODE);
-
+
deb_xfer("%s pid parsing\n",onoff ? "enabling" : "disabling");
-
+
if (onoff) {
wr(DIB3000MC_REG_SMO_MODE,tmp | DIB3000MC_SMO_MODE_PID_PARSE);
} else {
@@ -810,7 +808,7 @@ static int dib3000mc_tuner_pass_ctrl(struct dvb_frontend *fe, int onoff, u8 pll_
return 0;
}
-static int dib3000mc_demod_init(struct dib3000_state *state)
+static int dib3000mc_demod_init(struct dib3000_state *state)
{
u16 default_addr = 0x0a;
/* first init */
@@ -818,13 +816,13 @@ static int dib3000mc_demod_init(struct dib3000_state *state)
deb_info("initializing the demod the first time. Setting demod addr to 0x%x\n",default_addr);
wr(DIB3000MC_REG_ELEC_OUT,DIB3000MC_ELEC_OUT_DIV_OUT_ON);
wr(DIB3000MC_REG_OUTMODE,DIB3000MC_OM_PAR_CONT_CLK);
-
+
wr(DIB3000MC_REG_RST_I2C_ADDR,
DIB3000MC_DEMOD_ADDR(default_addr) |
DIB3000MC_DEMOD_ADDR_ON);
-
+
state->config.demod_address = default_addr;
-
+
wr(DIB3000MC_REG_RST_I2C_ADDR,
DIB3000MC_DEMOD_ADDR(default_addr));
} else
@@ -852,13 +850,13 @@ struct dvb_frontend* dib3000mc_attach(const struct dib3000_config* config,
memcpy(&state->ops, &dib3000mc_ops, sizeof(struct dvb_frontend_ops));
/* check for the correct demod */
- if (rd(DIB3000_REG_MANUFACTOR_ID) != DIB3000_I2C_ID_DIBCOM)
+ if (rd(DIB3000_REG_MANUFACTOR_ID) != DIB3000_I2C_ID_DIBCOM)
goto error;
devid = rd(DIB3000_REG_DEVICE_ID);
if (devid != DIB3000MC_DEVICE_ID && devid != DIB3000P_DEVICE_ID)
goto error;
-
+
switch (devid) {
case DIB3000MC_DEVICE_ID:
info("Found a DiBcom 3000M-C, interesting...");
@@ -879,7 +877,7 @@ struct dvb_frontend* dib3000mc_attach(const struct dib3000_config* config,
xfer_ops->tuner_pass_ctrl = dib3000mc_tuner_pass_ctrl;
dib3000mc_demod_init(state);
-
+
return &state->frontend;
error:
@@ -887,20 +885,20 @@ error:
kfree(state);
return NULL;
}
-
+
static struct dvb_frontend_ops dib3000mc_ops = {
.info = {
.name = "DiBcom 3000P/M-C DVB-T",
- .type = FE_OFDM,
- .frequency_min = 44250000,
- .frequency_max = 867250000,
+ .type = FE_OFDM,
+ .frequency_min = 44250000,
+ .frequency_max = 867250000,
.frequency_stepsize = 62500,
.caps = FE_CAN_INVERSION_AUTO |
FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
- FE_CAN_TRANSMISSION_MODE_AUTO |
+ FE_CAN_TRANSMISSION_MODE_AUTO |
FE_CAN_GUARD_INTERVAL_AUTO |
FE_CAN_RECOVER |
FE_CAN_HIERARCHY_AUTO,