afc->status = AFC_LOCK_STATUS_PRE_UNLOCK;
}
- if (afc->pre_unlock_cnt <= afc->wave_cnt) {/*40ms*/
+ if (afc->pre_unlock_cnt <= afc_wave_cnt) {/*40ms*/
afc->status = AFC_LOCK_STATUS_PRE_UNLOCK;
return;
}
afc->pre_lock_cnt++;
pr_afc("%s,afc_pre_lock_cnt:%d\n",
__func__, afc->pre_lock_cnt);
- if (afc->pre_lock_cnt >= afc->wave_cnt * 2) {/*100ms*/
+ if (afc->pre_lock_cnt >= afc_wave_cnt * 2) {/*100ms*/
afc->pre_lock_cnt = 0;
afc->pre_unlock_cnt = 0;
afc->status = AFC_LOCK_STATUS_PRE_LOCK;
afc->pre_step = 0;
if (afc->lock) {
- if (0 == ((audio_overmodul++) % 10))
+ if (0 == ((audio_overmodul++) % 10)) {
aml_audio_overmodulation(1);
+ audio_overmodul = 0;
+ }
}
retrieve_frequency_offset(&freq_offset);
__func__, freq_offset, param->frequency);
afc->wave_cnt = 0;
afc->offset = 0;
- pr_afc("%s, [post lock --> unlock]\n", __func__);
+ pr_afc("%s, [post lock --> unlock] set offset 0.\n", __func__);
return;
}
u32 if_info[2] = { 0 };
struct atv_demod_priv *priv = fe->analog_demod_priv;
struct aml_atvdemod_parameters *p = &priv->atvdemod_param;
+ bool reconfig = false;
priv->standby = false;
- p->param.frequency = params->frequency;
- p->param.mode = params->mode;
- p->param.audmode = params->audmode;
- p->param.std = params->std;
-
/* afc tune disable,must cancel wq before set tuner freq*/
if (priv->afc.disable)
priv->afc.disable(&priv->afc);
if (fe->ops.tuner_ops.get_if_frequency)
ret = fe->ops.tuner_ops.get_if_frequency(fe, if_info);
+ p->param.frequency = params->frequency;
+ p->param.mode = params->mode;
+ p->param.audmode = params->audmode;
+ p->param.std = params->std;
+
p->if_inv = if_info[0];
p->if_freq = if_info[1];
last_frq = p->param.frequency;
last_std = p->param.std;
#endif
- if (amlatvdemod_devp->std != p->param.std ||
+
+ if ((p->tuner_id == AM_TUNER_R840) ||
+ (p->tuner_id == AM_TUNER_R842) ||
+ (p->tuner_id == AM_TUNER_SI2151) ||
+ (p->tuner_id == AM_TUNER_SI2159) ||
+ (p->tuner_id == AM_TUNER_MXL661))
+ reconfig = true;
+
+ /* In general, demod does not need to be reconfigured
+ * if parameters such as STD remain unchanged,
+ * but when the input signal frequency offset -0.25MHz,
+ * demod will be unlocked. That's very strange.
+ */
+ if (reconfig || amlatvdemod_devp->std != p->param.std ||
amlatvdemod_devp->audmode != p->param.audmode ||
amlatvdemod_devp->if_freq != p->if_freq ||
amlatvdemod_devp->if_inv != p->if_inv ||
amlatvdemod_devp->tuner_id != p->tuner_id) {
+
amlatvdemod_devp->std = p->param.std;
amlatvdemod_devp->audmode = p->param.audmode;
amlatvdemod_devp->if_freq = p->if_freq;
tuner_id == AM_TUNER_R842) {
usleep_range(10 * 1000, 10 * 1000 + 100);
fe->ops.tuner_ops.get_status(fe,
- &tuner_state);
+ (u32 *)&tuner_state);
} else {
/* AM_TUNER_SI2151 and AM_TUNER_SI2159 */
usleep_range(10 * 1000, 10 * 1000 + 100);
void retrieve_vpll_carrier_lock(int *lock)
{
- unsigned int data;
+ unsigned int data = 0;
data = atv_dmd_rd_byte(APB_BLOCK_ADDR_CARR_RCVY, 0x43);
*lock = (data & 0x1);
gde_curve = 4;
}
- if (amlatvdemod_devp->tuner_id == AM_TUNER_R840) {
- if_freq = amlatvdemod_devp->if_freq;
- if_inv = amlatvdemod_devp->if_inv;
- } else if (amlatvdemod_devp->tuner_id == AM_TUNER_R842) {
- if_freq = amlatvdemod_devp->if_freq;
- if_inv = amlatvdemod_devp->if_inv;
- } else if (amlatvdemod_devp->tuner_id == AM_TUNER_MXL661) {
- if_freq = amlatvdemod_devp->if_freq;
- if_inv = amlatvdemod_devp->if_inv;
- } else if (amlatvdemod_devp->tuner_id == AM_TUNER_SI2151) {
- if_freq = amlatvdemod_devp->if_freq;
- if_inv = amlatvdemod_devp->if_inv;
- } else if (amlatvdemod_devp->tuner_id == AM_TUNER_SI2159) {
+ /* Tuner returns the if and signal inverted states */
+ if ((amlatvdemod_devp->tuner_id == AM_TUNER_R840) ||
+ (amlatvdemod_devp->tuner_id == AM_TUNER_R842) ||
+ (amlatvdemod_devp->tuner_id == AM_TUNER_SI2151) ||
+ (amlatvdemod_devp->tuner_id == AM_TUNER_SI2159) ||
+ (amlatvdemod_devp->tuner_id == AM_TUNER_MXL661)) {
if_freq = amlatvdemod_devp->if_freq;
if_inv = amlatvdemod_devp->if_inv;
}