int try_vfmt_cnt = 300;
int varify_cnt = 0;
v4l2_std_id std_bk = 0;
+ unsigned int broad_std = 0;
unsigned int audio = 0;
if (auto_search_std & 0x01) {
if (std_bk & V4L2_COLOR_STD_NTSC) {
#if 1 /* For TV Signal Generator(TG39) test, NTSC need support other audio.*/
amlatvdemod_set_std(AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK);
- audio = aml_audiomode_autodet(fe);
- pr_info("autodet audmode 0x%x\n", audio);
- audio = atvdemod_fmt_2_v4l2_std(audio);
- pr_info("v4l2_std audmode 0x%x\n", audio);
+ broad_std = aml_audiomode_autodet(v4l2_fe);
+ audio = atvdemod_fmt_2_v4l2_std(broad_std);
#if 0 /* I don't know what's going on here */
if (audio == V4L2_STD_PAL_M)
audio = V4L2_STD_NTSC_M;
#endif
#else /* Now, force to NTSC_M, Ours demod only support M for NTSC.*/
audio = V4L2_STD_NTSC_M;
- *video_fmt |= V4L2_STD_NTSC_M;
#endif
} else if (std_bk & V4L2_COLOR_STD_SECAM) {
#if 1 /* For support SECAM-DK/BG/I/L */
amlatvdemod_set_std(AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_L);
- audio = aml_audiomode_autodet(fe);
- pr_info("autodet audmode 0x%x\n", audio);
- audio = atvdemod_fmt_2_v4l2_std(audio);
- pr_info("v4l2_std audmode 0x%x\n", audio);
-#else
+ broad_std = aml_audiomode_autodet(v4l2_fe);
+ audio = atvdemod_fmt_2_v4l2_std(broad_std);
+#else /* For force L */
audio = V4L2_STD_SECAM_L;
#endif
} else {
- /*V4L2_COLOR_STD_PAL*/
+ /* V4L2_COLOR_STD_PAL */
amlatvdemod_set_std(AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK);
- audio = aml_audiomode_autodet(fe);
- pr_info("autodet audmode 0x%x\n", audio);
- audio = atvdemod_fmt_2_v4l2_std(audio);
- pr_info("v4l2_std audmode 0x%x\n", audio);
+ broad_std = aml_audiomode_autodet(v4l2_fe);
+ audio = atvdemod_fmt_2_v4l2_std(broad_std);
#if 0 /* Why do this to me? We need support PAL_M.*/
if (audio == V4L2_STD_PAL_M) {
audio = atvdemod_fmt_2_v4l2_std(broad_std_except_pal_m);
#endif
}
+ pr_info("autodet audio mode %d, [%s][0x%x]\n",
+ broad_std, v4l2_std_to_str(audio), audio);
+
*audio_fmt = audio;
}
pr_info("[%s]: atv restart error.\n", __func__);
}
-int aml_audiomode_autodet(struct dvb_frontend *fe)
+int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
{
- struct atv_demod_priv *priv = fe->analog_demod_priv;
- struct aml_atvdemod_parameters *param = &priv->atvdemod_param;
+ struct dvb_frontend *fe = &v4l2_fe->fe;
+ struct v4l2_analog_parameters *p = &v4l2_fe->params;
+ struct analog_parameters params;
unsigned long carrier_power = 0;
unsigned long carrier_power_max = 0;
unsigned long carrier_power_average_max = 0;
unsigned long carrier_power_average[4] = {0};
- unsigned long reg_addr = 0x03, temp_data;
+ unsigned long temp_data = 0;
int carrier_lock_count = 0;
int lock = 0;
int broad_std_final = 0;
case AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_L:
case AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_DK2:
case AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_DK3:
- if (!(param->param.std & V4L2_COLOR_STD_SECAM) ||
- !(param->param.std & V4L2_STD_SECAM_L)) {
+ if (!(p->std & V4L2_COLOR_STD_SECAM) ||
+ !(p->std & V4L2_STD_SECAM_L)) {
secam_signal = true;
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
} else {
final_id = i;
}
}
+
switch (final_id) {
case ID_PAL_I:
broad_std_final =
AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK;
break;
}
+
carrier_power_average_max = carrier_power_max;
broad_std = broad_std_final;
pr_err("%s:broad_std:%d,carrier_power_average_max:%lu\n",
__func__, broad_std, carrier_power_average_max);
+
if (carrier_power_average_max < 150) {
pr_err("%s,carrier too low error\n", __func__);
if (secam_signal) {
__func__);
}
}
+
if (broad_std == AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M) {
/*the max except palm*/
carrier_power_average[final_id] = 0;
final_id = i;
}
}
- switch (final_id) {
- case ID_PAL_I:
- broad_std_except_pal_m =
+
+ switch (final_id) {
+ case ID_PAL_I:
+ broad_std_except_pal_m =
AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I;
- break;
- case ID_PAL_BG:
- broad_std_except_pal_m =
+ break;
+ case ID_PAL_BG:
+ broad_std_except_pal_m =
AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG;
- break;
- case ID_PAL_DK:
- broad_std_except_pal_m =
+ break;
+ case ID_PAL_DK:
+ broad_std_except_pal_m =
AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK;
- break;
- }
+ break;
+ }
}
- if (priv != NULL) {
- param->param.std = V4L2_COLOR_STD_PAL;
- switch (broad_std) {
- case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
- param->param.std |= V4L2_STD_PAL_DK;
- param->param.audmode = V4L2_STD_PAL_DK;
+
+ p->std = V4L2_COLOR_STD_PAL;
+ switch (broad_std) {
+ case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
+ p->std |= V4L2_STD_PAL_DK;
+ p->audmode = V4L2_STD_PAL_DK;
break;
- case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I:
- param->param.std |= V4L2_STD_PAL_I;
- param->param.audmode = V4L2_STD_PAL_I;
+ case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I:
+ p->std |= V4L2_STD_PAL_I;
+ p->audmode = V4L2_STD_PAL_I;
break;
- case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG:
- param->param.std |= V4L2_STD_PAL_BG;
- param->param.audmode = V4L2_STD_PAL_BG;
+ case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG:
+ p->std |= V4L2_STD_PAL_BG;
+ p->audmode = V4L2_STD_PAL_BG;
break;
- case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M:
- param->param.std |= V4L2_STD_PAL_M;
- param->param.audmode = V4L2_STD_PAL_M;
+ case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M:
+ p->std |= V4L2_STD_PAL_M;
+ p->audmode = V4L2_STD_PAL_M;
break;
- default:
- param->param.std |= V4L2_STD_PAL_DK;
- param->param.audmode = V4L2_STD_PAL_DK;
- }
- param->param.frequency += 1;
- fe->ops.analog_ops.set_params(fe,
- ¶m->param);
+ default:
+ p->std |= V4L2_STD_PAL_DK;
+ p->audmode = V4L2_STD_PAL_DK;
}
+
+ p->frequency += 1;
+ params.frequency = p->frequency;
+ params.mode = p->afc_range;
+ params.audmode = p->audmode;
+ params.std = p->std;
+
+ fe->ops.analog_ops.set_params(fe, ¶ms);
+
return broad_std;
}
+
switch (broad_std) {
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I;
cur_std = ID_PAL_I;
- if (priv != NULL) {
- param->param.std = V4L2_COLOR_STD_PAL
- | V4L2_STD_PAL_I;
- param->param.frequency += 1;
- param->param.audmode = V4L2_STD_PAL_I;
- }
+
+ p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_I;
+ p->frequency += 1;
+ p->audmode = V4L2_STD_PAL_I;
+
delay_ms = delay_ms_default;
break;
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I:
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG;
cur_std = ID_PAL_BG;
- if (priv != NULL) {
- param->param.std = V4L2_COLOR_STD_PAL
- | V4L2_STD_PAL_BG;
- param->param.frequency += 1;
- param->param.audmode = V4L2_STD_PAL_BG;
- }
+
+ p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_BG;
+ p->frequency += 1;
+ p->audmode = V4L2_STD_PAL_BG;
+
delay_ms = delay_ms_default;
break;
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG:
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
cur_std = ID_PAL_M;
- if (priv != NULL) {
- param->param.std = V4L2_COLOR_STD_PAL
- | V4L2_STD_PAL_M;
- param->param.frequency += 1;
- param->param.audmode = V4L2_STD_PAL_M;
- }
+
+ p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_M;
+ p->frequency += 1;
+ p->audmode = V4L2_STD_PAL_M;
+
delay_ms = delay_ms_default;
break;
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M:
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK;
cur_std = ID_PAL_DK;
- if (priv != NULL) {
- param->param.std = V4L2_COLOR_STD_PAL
- | V4L2_STD_PAL_DK;
- param->param.frequency += 1;
- param->param.audmode = V4L2_STD_PAL_DK;
- }
+
+ p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_DK;
+ p->frequency += 1;
+ p->audmode = V4L2_STD_PAL_DK;
+
delay_ms = delay_ms_default;
break;
pr_err("unsupport broadcast_standard!!!\n");
break;
}
- if (priv != NULL)
- fe->ops.analog_ops.set_params(fe, ¶m->param);
- /* atvdemod_init(); //set_frontend has already been called it */
+
+ params.frequency = p->frequency;
+ params.mode = p->afc_range;
+ params.audmode = p->audmode;
+ params.std = p->std;
+ fe->ops.analog_ops.set_params(fe, ¶ms);
/* enable audio detect function */
temp_data = atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02);
temp_data = temp_data | 0x80;/* 0x40 */
atv_dmd_wr_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02, temp_data);
- usleep_range(delay_ms*1000, delay_ms*1000+100);
+ usleep_range(delay_ms * 1000, delay_ms * 1000 + 100);
carrier_lock_count = 0;
i = 4;
/* ----------------read carrier_power--------------------- */
for (i = 0; i < 100; i++) {
carrier_power =
- atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2,
- reg_addr);
+ atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x03);
carrier_power_max += carrier_power;
}
carrier_power = carrier_power_max/i;