struct SCfgAgc { enum AGC_CTRL_MODE ctrlMode;
u16 outputLevel; /* range [0, ... , 1023], 1/n of fullscale range */
u16 settleLevel; /* range [0, ... , 1023], 1/n of fullscale range */
u16 minOutputLevel; /* range [0, ... , 1023], 1/n of fullscale range */
u16 maxOutputLevel; /* range [0, ... , 1023], 1/n of fullscale range */
u16 speed; /* range [0, ... , 1023], 1/n of fullscale range */
u16 R1;
u16 R2;
u16 R3;
};
struct SNoiseCal { int cpOpt; short cpNexpOfs; short tdCal2k; short tdCal8k;
};
/* do inverse broadcast, followed by explicit write to HI */
Write16(state, HI_COMM_MB__A, 0x0000, DRX_I2C_BROADCAST);
Write16(state, HI_COMM_MB__A, 0x0000, 0x0000); return 0;
}
staticint InitCC(struct drxd_state *state)
{ int status = 0;
status |= Write16(state, CC_REG_OSC_MODE__A, CC_REG_OSC_MODE_M20, 0);
status |= Write16(state, CC_REG_PLL_MODE__A,
CC_REG_PLL_MODE_BYPASS_PLL |
CC_REG_PLL_MODE_PUMP_CUR_12, 0);
status |= Write16(state, CC_REG_REF_DIVIDE__A,
state->osc_clock_freq / 4000, 0);
status |= Write16(state, CC_REG_PWD_MODE__A, CC_REG_PWD_MODE_DOWN_PLL,
0);
status |= Write16(state, CC_REG_UPDATE__A, CC_REG_UPDATE_KEY, 0);
return status;
}
staticint ResetECOD(struct drxd_state *state)
{ int status = 0;
if (state->type_A)
status = Write16(state, EC_OD_REG_SYNC__A, 0x0664, 0); else
status = Write16(state, B_EC_OD_REG_SYNC__A, 0x0664, 0);
if (!(status < 0))
status = WriteTable(state, state->m_ResetECRAM); if (!(status < 0))
status = Write16(state, EC_OD_REG_COMM_EXEC__A, 0x0001, 0); return status;
}
/* Configure PGA switch */
staticint SetCfgPga(struct drxd_state *state, int pgaSwitch)
{ int status;
u16 AgModeLop = 0;
u16 AgModeHip = 0; do { if (pgaSwitch) { /* PGA on */ /* fine gain */
status = Read16(state, B_FE_AG_REG_AG_MODE_LOP__A, &AgModeLop, 0x0000); if (status < 0) break;
AgModeLop &= (~(B_FE_AG_REG_AG_MODE_LOP_MODE_C__M));
AgModeLop |= B_FE_AG_REG_AG_MODE_LOP_MODE_C_DYNAMIC;
status = Write16(state, B_FE_AG_REG_AG_MODE_LOP__A, AgModeLop, 0x0000); if (status < 0) break;
/* coarse gain */
status = Read16(state, B_FE_AG_REG_AG_MODE_HIP__A, &AgModeHip, 0x0000); if (status < 0) break;
AgModeHip &= (~(B_FE_AG_REG_AG_MODE_HIP_MODE_J__M));
AgModeHip |= B_FE_AG_REG_AG_MODE_HIP_MODE_J_DYNAMIC;
status = Write16(state, B_FE_AG_REG_AG_MODE_HIP__A, AgModeHip, 0x0000); if (status < 0) break;
/* enable fine and coarse gain, enable AAF,
no ext resistor */
status = Write16(state, B_FE_AG_REG_AG_PGA_MODE__A, B_FE_AG_REG_AG_PGA_MODE_PFY_PCY_AFY_REN, 0x0000); if (status < 0) break;
} else { /* PGA off, bypass */
/* fine gain */
status = Read16(state, B_FE_AG_REG_AG_MODE_LOP__A, &AgModeLop, 0x0000); if (status < 0) break;
AgModeLop &= (~(B_FE_AG_REG_AG_MODE_LOP_MODE_C__M));
AgModeLop |= B_FE_AG_REG_AG_MODE_LOP_MODE_C_STATIC;
status = Write16(state, B_FE_AG_REG_AG_MODE_LOP__A, AgModeLop, 0x0000); if (status < 0) break;
/* coarse gain */
status = Read16(state, B_FE_AG_REG_AG_MODE_HIP__A, &AgModeHip, 0x0000); if (status < 0) break;
AgModeHip &= (~(B_FE_AG_REG_AG_MODE_HIP_MODE_J__M));
AgModeHip |= B_FE_AG_REG_AG_MODE_HIP_MODE_J_STATIC;
status = Write16(state, B_FE_AG_REG_AG_MODE_HIP__A, AgModeHip, 0x0000); if (status < 0) break;
/* disable fine and coarse gain, enable AAF,
no ext resistor */
status = Write16(state, B_FE_AG_REG_AG_PGA_MODE__A, B_FE_AG_REG_AG_PGA_MODE_PFN_PCN_AFY_REN, 0x0000); if (status < 0) break;
}
} while (0); return status;
}
staticint InitFE(struct drxd_state *state)
{ int status;
do {
status = WriteTable(state, state->m_InitFE_1); if (status < 0) break;
if (state->type_A) {
status = Write16(state, FE_AG_REG_AG_PGA_MODE__A,
FE_AG_REG_AG_PGA_MODE_PFN_PCN_AFY_REN,
0);
} else { if (state->PGA)
status = SetCfgPga(state, 0); else
status =
Write16(state, B_FE_AG_REG_AG_PGA_MODE__A,
B_FE_AG_REG_AG_PGA_MODE_PFN_PCN_AFY_REN,
0);
}
if (status < 0) break;
status = Write16(state, FE_AG_REG_AG_AGC_SIO__A, state->m_FeAgRegAgAgcSio, 0x0000); if (status < 0) break;
status = Write16(state, FE_AG_REG_AG_PWD__A, state->m_FeAgRegAgPwd, 0x0000); if (status < 0) break;
status = WriteTable(state, state->m_InitFE_2); if (status < 0) break;
} while (0);
return status;
}
staticint InitFT(struct drxd_state *state)
{ /* norm OFFSET, MB says =2 voor 8K en =3 voor 2K waarschijnlijk SC stuff
*/ return Write16(state, FT_REG_COMM_EXEC__A, 0x0001, 0x0000);
}
staticint SC_WaitForReady(struct drxd_state *state)
{ int i;
for (i = 0; i < DRXD_MAX_RETRIES; i += 1) { int status = Read16(state, SC_RA_RAM_CMD__A, NULL, 0); if (status == 0) return status;
} return -1;
}
staticint SC_SendCommand(struct drxd_state *state, u16 cmd)
{ int status = 0, ret;
u16 errCode;
status = Write16(state, SC_RA_RAM_CMD__A, cmd, 0); if (status < 0) return status;
SC_WaitForReady(state);
ret = Read16(state, SC_RA_RAM_CMD_ADDR__A, &errCode, 0);
if (ret < 0 || errCode == 0xFFFF) {
printk(KERN_ERR "Command Error\n");
status = -1;
}
return status;
}
staticint SC_ProcStartCommand(struct drxd_state *state,
u16 subCmd, u16 param0, u16 param1)
{ int ret, status = 0;
u16 scExec;
mutex_lock(&state->mutex); do {
ret = Read16(state, SC_COMM_EXEC__A, &scExec, 0); if (ret < 0 || scExec != 1) {
status = -1; break;
}
SC_WaitForReady(state);
status |= Write16(state, SC_RA_RAM_CMD_ADDR__A, subCmd, 0);
status |= Write16(state, SC_RA_RAM_PARAM1__A, param1, 0);
status |= Write16(state, SC_RA_RAM_PARAM0__A, param0, 0);
SC_SendCommand(state, SC_RA_RAM_CMD_PROC_START);
} while (0);
mutex_unlock(&state->mutex); return status;
}
mutex_lock(&state->mutex); do {
status = SC_WaitForReady(state); if (status < 0) break;
status = Write16(state, SC_RA_RAM_CMD_ADDR__A, subCmd, 0); if (status < 0) break;
status = Write16(state, SC_RA_RAM_PARAM1__A, param1, 0); if (status < 0) break;
status = Write16(state, SC_RA_RAM_PARAM0__A, param0, 0); if (status < 0) break;
status = SC_SendCommand(state, SC_RA_RAM_CMD_SET_PREF_PARAM); if (status < 0) break;
} while (0);
mutex_unlock(&state->mutex); return status;
}
#if 0 staticint SC_GetOpParamCommand(struct drxd_state *state, u16 * result)
{ int status = 0;
mutex_lock(&state->mutex); do {
status = SC_WaitForReady(state); if (status < 0) break;
status = SC_SendCommand(state, SC_RA_RAM_CMD_GET_OP_PARAM); if (status < 0) break;
status = Read16(state, SC_RA_RAM_PARAM0__A, result, 0); if (status < 0) break;
} while (0);
mutex_unlock(&state->mutex); return status;
} #endif
staticint ConfigureMPEGOutput(struct drxd_state *state, int bEnableOutput)
{ int status;
do { /* Retrieve bandwidth and incr, sanity check */
/* These accesses should be AtomicReadReg32, but that
causes trouble (at least for diversity */
status = Read32(state, LC_RA_RAM_IFINCR_NOM_L__A, ((u32 *) &nomincr), 0); if (status < 0) break;
status = Read32(state, FE_IF_REG_INCR0__A, (u32 *) &incr, 0); if (status < 0) break;
Diff = oscClockDeviation - state->osc_clock_deviation; /*printk(KERN_INFO "sysclockdiff=%d\n", Diff); */ if (Diff >= -200 && Diff <= 200) {
state->sys_clock_freq = (u16) sysClockFreq; if (oscClockDeviation != state->osc_clock_deviation) { if (state->config.osc_deviation) {
state->config.osc_deviation(state->priv,
oscClockDeviation,
1);
state->osc_clock_deviation =
oscClockDeviation;
}
} /* switch OFF SRMM scan in SC */
status = Write16(state, SC_RA_RAM_SAMPLE_RATE_COUNT__A, DRXD_OSCDEV_DONT_SCAN, 0); if (status < 0) break; /* overrule FE_IF internal value for
proper re-locking */
status = Write16(state, SC_RA_RAM_IF_SAVE__AX, state->current_fe_if_incr, 0); if (status < 0) break;
state->cscd_state = CSCD_SAVED;
}
} while (0);
return status;
}
staticint DRX_Stop(struct drxd_state *state)
{ int status;
if (state->drxd_state != DRXD_STARTED) return 0;
do { if (state->cscd_state != CSCD_SAVED) {
u32 lock;
status = DRX_GetLockStatus(state, &lock); if (status < 0) break;
}
status = StopOC(state); if (status < 0) break;
state->drxd_state = DRXD_STOPPED;
status = ConfigureMPEGOutput(state, 0); if (status < 0) break;
if (state->type_A) { /* Stop relevant processors off the device */
status = Write16(state, EC_OD_REG_COMM_EXEC__A, 0x0000, 0x0000); if (status < 0) break;
status = Write16(state, SC_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, LC_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
} else { /* Stop all processors except HI & CC & FE */
status = Write16(state, B_SC_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, B_LC_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, B_FT_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, B_CP_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, B_CE_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, B_EQ_COMM_EXEC__A, SC_COMM_EXEC_CTL_STOP, 0); if (status < 0) break;
status = Write16(state, EC_OD_REG_COMM_EXEC__A, 0x0000, 0); if (status < 0) break;
}
} while (0); return status;
}
#if 0 /* Currently unused */ staticint SetOperationMode(struct drxd_state *state, int oMode)
{ int status;
do { if (state->drxd_state != DRXD_STOPPED) {
status = -1; break;
}
if (oMode == state->operation_mode) {
status = 0; break;
}
if (oMode != OM_Default && !state->diversity) {
status = -1; break;
}
switch (oMode) { case OM_DVBT_Diversity_Front:
status = WriteTable(state, state->m_InitDiversityFront); break; case OM_DVBT_Diversity_End:
status = WriteTable(state, state->m_InitDiversityEnd); break; case OM_Default: /* We need to check how to
get DRXD out of diversity */ default:
status = WriteTable(state, state->m_DisableDiversity); break;
}
} while (0);
if (!status)
state->operation_mode = oMode; return status;
} #endif
staticint StartDiversity(struct drxd_state *state)
{ int status = 0;
u16 rcControl;
do { if (state->operation_mode == OM_DVBT_Diversity_Front) {
status = WriteTable(state, state->m_StartDiversityFront); if (status < 0) break;
} elseif (state->operation_mode == OM_DVBT_Diversity_End) {
status = WriteTable(state, state->m_StartDiversityEnd); if (status < 0) break; if (state->props.bandwidth_hz == 8000000) {
status = WriteTable(state, state->m_DiversityDelay8MHZ); if (status < 0) break;
} else {
status = WriteTable(state, state->m_DiversityDelay6MHZ); if (status < 0) break;
}
status = Read16(state, B_EQ_REG_RC_SEL_CAR__A, &rcControl, 0); if (status < 0) break;
rcControl &= ~(B_EQ_REG_RC_SEL_CAR_FFTMODE__M);
rcControl |= B_EQ_REG_RC_SEL_CAR_DIV_ON | /* combining enabled */
B_EQ_REG_RC_SEL_CAR_MEAS_A_CC |
B_EQ_REG_RC_SEL_CAR_PASS_A_CC |
B_EQ_REG_RC_SEL_CAR_LOCAL_A_CC;
status = Write16(state, B_EQ_REG_RC_SEL_CAR__A, rcControl, 0); if (status < 0) break;
}
} while (0); return status;
}
staticint SetFrequencyShift(struct drxd_state *state,
u32 offsetFreq, int channelMirrored)
{ int negativeShift = (state->tuner_mirrors == channelMirrored);
/* Handle all mirroring * * Note: ADC mirroring (aliasing) is implictly handled by limiting * feFsRegAddInc to 28 bits below * (if the result before masking is more than 28 bits, this means * that the ADC is mirroring. * The masking is in fact the aliasing of the ADC) *
*/
/* Save the frequency shift without tunerOffset compensation
for CtrlGetChannel. */
state->org_fe_fs_add_incr = MulDiv32(state->intermediate_freq,
1 << 28, state->sys_clock_freq); /* Remove integer part */
state->org_fe_fs_add_incr &= 0x0FFFFFFFL; if (negativeShift)
state->org_fe_fs_add_incr = ((1L << 28) -
state->org_fe_fs_add_incr);
staticint SetCfgNoiseCalibration(struct drxd_state *state, struct SNoiseCal *noiseCal)
{
u16 beOptEna; int status = 0;
do {
status = Read16(state, SC_RA_RAM_BE_OPT_ENA__A, &beOptEna, 0); if (status < 0) break; if (noiseCal->cpOpt) {
beOptEna |= (1 << SC_RA_RAM_BE_OPT_ENA_CP_OPT);
} else {
beOptEna &= ~(1 << SC_RA_RAM_BE_OPT_ENA_CP_OPT);
status = Write16(state, CP_REG_AC_NEXP_OFFS__A, noiseCal->cpNexpOfs, 0); if (status < 0) break;
}
status = Write16(state, SC_RA_RAM_BE_OPT_ENA__A, beOptEna, 0); if (status < 0) break;
if (!state->type_A) {
status = Write16(state, B_SC_RA_RAM_CO_TD_CAL_2K__A, noiseCal->tdCal2k, 0); if (status < 0) break;
status = Write16(state, B_SC_RA_RAM_CO_TD_CAL_8K__A, noiseCal->tdCal8k, 0); if (status < 0) break;
}
} while (0);
if (off < 0)
off = (off - 500) / 1000; else
off = (off + 500) / 1000;
do { if (state->drxd_state != DRXD_STOPPED) return -1;
status = ResetECOD(state); if (status < 0) break; if (state->type_A) {
status = InitSC(state); if (status < 0) break;
} else {
status = InitFT(state); if (status < 0) break;
status = InitCP(state); if (status < 0) break;
status = InitCE(state); if (status < 0) break;
status = InitEQ(state); if (status < 0) break;
status = InitSC(state); if (status < 0) break;
}
/* Restore current IF & RF AGC settings */
status = SetCfgIfAgc(state, &state->if_agc_cfg); if (status < 0) break;
status = SetCfgRfAgc(state, &state->rf_agc_cfg); if (status < 0) break;
case HIERARCHY_2:
transmissionParams |= SC_RA_RAM_OP_PARAM_HIER_A2; if (state->type_A) {
status = Write16(state, EQ_REG_OT_ALPHA__A, 0x0002, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_ALPHA__A, 0x0002, 0x0000); if (status < 0) break;
switch (p->modulation) { default:
operationMode |= SC_RA_RAM_OP_AUTO_CONST__M;
fallthrough; /* try first guess DRX_CONSTELLATION_QAM64 */ case QAM_64:
transmissionParams |= SC_RA_RAM_OP_PARAM_CONST_QAM64; if (state->type_A) {
status = Write16(state, EQ_REG_OT_CONST__A, 0x0002, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_CONST__A, EC_SB_REG_CONST_64QAM, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_MSB__A, 0x0020, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_BIT2__A, 0x0008, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_LSB__A, 0x0002, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_TD_TPS_PWR_OFS__A, qam64TdTpsPwr, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_SN_CEGAIN__A, qam64SnCeGain, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_MAN__A, qam64IsGainMan, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_EXP__A, qam64IsGainExp, 0x0000); if (status < 0) break;
} break; case QPSK:
transmissionParams |= SC_RA_RAM_OP_PARAM_CONST_QPSK; if (state->type_A) {
status = Write16(state, EQ_REG_OT_CONST__A, 0x0000, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_CONST__A, EC_SB_REG_CONST_QPSK, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_MSB__A, 0x0010, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_BIT2__A, 0x0000, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_LSB__A, 0x0000, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_TD_TPS_PWR_OFS__A, qpskTdTpsPwr, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_SN_CEGAIN__A, qpskSnCeGain, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_MAN__A, qpskIsGainMan, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_EXP__A, qpskIsGainExp, 0x0000); if (status < 0) break;
} break;
case QAM_16:
transmissionParams |= SC_RA_RAM_OP_PARAM_CONST_QAM16; if (state->type_A) {
status = Write16(state, EQ_REG_OT_CONST__A, 0x0001, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_CONST__A, EC_SB_REG_CONST_16QAM, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_MSB__A, 0x0010, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_BIT2__A, 0x0004, 0x0000); if (status < 0) break;
status = Write16(state, EC_SB_REG_SCALE_LSB__A, 0x0000, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_TD_TPS_PWR_OFS__A, qam16TdTpsPwr, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_SN_CEGAIN__A, qam16SnCeGain, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_MAN__A, qam16IsGainMan, 0x0000); if (status < 0) break;
status = Write16(state, EQ_REG_IS_GAIN_EXP__A, qam16IsGainExp, 0x0000); if (status < 0) break;
} break;
} if (status < 0) break;
switch (DRX_CHANNEL_HIGH) { default: case DRX_CHANNEL_AUTO: case DRX_CHANNEL_LOW:
transmissionParams |= SC_RA_RAM_OP_PARAM_PRIO_LO;
status = Write16(state, EC_SB_REG_PRIOR__A, EC_SB_REG_PRIOR_LO, 0x0000); break; case DRX_CHANNEL_HIGH:
transmissionParams |= SC_RA_RAM_OP_PARAM_PRIO_HI;
status = Write16(state, EC_SB_REG_PRIOR__A, EC_SB_REG_PRIOR_HI, 0x0000); break;
}
switch (p->code_rate_HP) { case FEC_1_2:
transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_1_2; if (state->type_A)
status = Write16(state, EC_VD_REG_SET_CODERATE__A, EC_VD_REG_SET_CODERATE_C1_2, 0x0000); break; default:
operationMode |= SC_RA_RAM_OP_AUTO_RATE__M;
fallthrough; case FEC_2_3:
transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_2_3; if (state->type_A)
status = Write16(state, EC_VD_REG_SET_CODERATE__A, EC_VD_REG_SET_CODERATE_C2_3, 0x0000); break; case FEC_3_4:
transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_3_4; if (state->type_A)
status = Write16(state, EC_VD_REG_SET_CODERATE__A, EC_VD_REG_SET_CODERATE_C3_4, 0x0000); break; case FEC_5_6:
transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_5_6; if (state->type_A)
status = Write16(state, EC_VD_REG_SET_CODERATE__A, EC_VD_REG_SET_CODERATE_C5_6, 0x0000); break; case FEC_7_8:
transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_7_8; if (state->type_A)
status = Write16(state, EC_VD_REG_SET_CODERATE__A, EC_VD_REG_SET_CODERATE_C7_8, 0x0000); break;
} if (status < 0) break;
/* First determine real bandwidth (Hz) */ /* Also set delay for impulse noise cruncher (only A2) */ /* Also set parameters for EC_OC fix, note EC_OC_REG_TMD_HIL_MAR is changed by SC for fix for some 8K,1/8 guard but is restored by InitEC and ResetEC
functions */ switch (p->bandwidth_hz) { case 0:
p->bandwidth_hz = 8000000;
fallthrough; case 8000000: /* (64/7)*(8/8)*1000000 */
bandwidth = DRXD_BANDWIDTH_8MHZ_IN_HZ;
bandwidthParam = 0;
status = Write16(state,
FE_AG_REG_IND_DEL__A, 50, 0x0000); break; case 7000000: /* (64/7)*(7/8)*1000000 */
bandwidth = DRXD_BANDWIDTH_7MHZ_IN_HZ;
bandwidthParam = 0x4807; /*binary:0100 1000 0000 0111 */
status = Write16(state,
FE_AG_REG_IND_DEL__A, 59, 0x0000); break; case 6000000: /* (64/7)*(6/8)*1000000 */
bandwidth = DRXD_BANDWIDTH_6MHZ_IN_HZ;
bandwidthParam = 0x0F07; /*binary: 0000 1111 0000 0111 */
status = Write16(state,
FE_AG_REG_IND_DEL__A, 71, 0x0000); break; default:
status = -EINVAL;
} if (status < 0) break;
status = Write16(state, SC_RA_RAM_BAND__A, bandwidthParam, 0x0000); if (status < 0) break;
{
u16 sc_config;
status = Read16(state, SC_RA_RAM_CONFIG__A, &sc_config, 0); if (status < 0) break;
/* Mirror & frequency offset */
SetFrequencyShift(state, off, mirrorFreqSpect);
/* Start SC, write channel settings to SC */
/* Enable SC after setting all other parameters */
status = Write16(state, SC_COMM_STATE__A, 0, 0x0000); if (status < 0) break;
status = Write16(state, SC_COMM_EXEC__A, 1, 0x0000); if (status < 0) break;
/* Start correct processes to get in lock */
status = SC_ProcStartCommand(state, SC_RA_RAM_PROC_LOCKTRACK, SC_RA_RAM_SW_EVENT_RUN_NMASK__M, SC_RA_RAM_LOCKTRACK_MIN); if (status < 0) break;
status = StartOC(state); if (status < 0) break;
if (state->operation_mode != OM_Default) {
status = StartDiversity(state); if (status < 0) break;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.