dtv_demod: calibrate dvbt/t2 strength (r842) (v3.7.5.1) [1/1]

PD#TV-168004

Problem:
dvbt/t2 strength is inaccurate

Solution:
calibrate dvbt/t2 strength

Verify:
BR30A4

Change-Id: I8ff0455037fa0f3eba474ececc7b3508a8215f88
Signed-off-by: caiyi.xu <caiyi.xu@amlogic.com>
This commit is contained in:
caiyi.xu
2025-07-03 05:21:13 +00:00
committed by Guofeng Tang
parent 96bf0f203d
commit 0df5d02476
4 changed files with 43 additions and 8 deletions
+8 -2
View File
@@ -2427,9 +2427,12 @@ static int aml_dtvdm_read_signal_strength(struct dvb_frontend *fe,
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
case SYS_DVBT:
case SYS_DVBT2:
ret = gxtv_demod_dvbt_read_signal_strength(fe, (s16 *)strength);
break;
case SYS_DVBT2:
ret = gxtv_demod_dvbt2_read_signal_strength(fe, (s16 *)strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
case SYS_ISDBT:
@@ -3035,9 +3038,12 @@ static int aml_dtvdm_get_property(struct dvb_frontend *fe,
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
case SYS_DVBT:
case SYS_DVBT2:
gxtv_demod_dvbt_read_signal_strength(fe, &strength);
break;
case SYS_DVBT2:
gxtv_demod_dvbt2_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
case SYS_ISDBT:
+31 -4
View File
@@ -495,7 +495,7 @@ static int dvbt2_read_status(struct dvb_frontend *fe, enum fe_status *status, in
if (devp->tuner_strength_limit)
strength_limit = devp->tuner_strength_limit;
gxtv_demod_dvbt_read_signal_strength(fe, &strength);
gxtv_demod_dvbt2_read_signal_strength(fe, &strength);
if (!tuner_find_by_name(fe, "mxl661") || demod->last_status != 0x1F) {
if (strength < strength_limit) {
if (!(no_signal_cnt++ % 20))
@@ -764,10 +764,37 @@ int gxtv_demod_dvbt_read_signal_strength(struct dvb_frontend *fe,
*strength = (s16)tuner_get_ch_power(fe);
if (tuner_find_by_name(fe, "r842") ||
tuner_find_by_name(fe, "r836") ||
tuner_find_by_name(fe, "r850"))
*strength += 7;
else if (tuner_find_by_name(fe, "mxl661"))
tuner_find_by_name(fe, "r850")) {
*strength -= 3;
if (fe->dtv_property_cache.frequency == 474000000)
*strength -= 1;
else if (fe->dtv_property_cache.frequency == 690000000)
*strength -= 3;
} else if (tuner_find_by_name(fe, "mxl661")) {
*strength += 3;
}
PR_DVBT("[id %d] strength %d dBm\n", demod->id, *strength);
return 0;
}
int gxtv_demod_dvbt2_read_signal_strength(struct dvb_frontend *fe, s16 *strength)
{
struct aml_dtvdemod *demod = (struct aml_dtvdemod *)fe->demodulator_priv;
*strength = (s16)tuner_get_ch_power(fe);
if (tuner_find_by_name(fe, "r842") ||
tuner_find_by_name(fe, "r836") ||
tuner_find_by_name(fe, "r850")) {
*strength += 6;
if (fe->dtv_property_cache.frequency == 474000000)
*strength += 2;
else if (fe->dtv_property_cache.frequency == 578000000)
*strength += 3;
} else if (tuner_find_by_name(fe, "mxl661")) {
*strength += 3;
}
PR_DVBT("[id %d] strength %d dBm\n", demod->id, *strength);
@@ -10,6 +10,7 @@ int dvbt_read_ber(struct dvb_frontend *fe, u32 *ber);
int dvbt_read_snr(struct dvb_frontend *fe, u16 *snr);
int dvbt2_read_snr(struct dvb_frontend *fe, u16 *snr);
int gxtv_demod_dvbt_read_signal_strength(struct dvb_frontend *fe, s16 *strength);
int gxtv_demod_dvbt2_read_signal_strength(struct dvb_frontend *fe, s16 *strength);
int dvbt_set_frontend(struct dvb_frontend *fe);
int dvbt2_set_frontend(struct dvb_frontend *fe);
int dvbt_tune(struct dvb_frontend *fe, bool re_tune,
@@ -205,6 +205,7 @@
/* V3.7.003 fix dvbc_auto_qam_process stack allocation */
/* V3.7.004 fix isdbt frontend(t6d) and ambus(t5m) */
/* V3.7.005 improve dvbs bindscan(2) and adapter tuner (rt710/rda5815m) */
/* V3.7.005.1 calibrate dvbt/t2 strength (r842) */
/****************************************************/
/****************************************************************/
/* AMLDTVDEMOD_VER Description: */
@@ -221,8 +222,8 @@
/*->The last four digits indicate the release time */
/****************************************************************/
#define KERNEL_4_9_EN 1
#define AMLDTVDEMOD_VER "V3.7.005"
#define DTVDEMOD_VER "2025/06/04 improve dvbs bindscan(2) and adapter tuner (rt710/rda5815m)"
#define AMLDTVDEMOD_VER "V3.7.5.1"
#define DTVDEMOD_VER "2025/07/03 calibrate dvbt/t2 strength (r842)"
#define AMLDTVDEMOD_T2_FW_VER "v1059.20250521"
#define DEMOD_DEVICE_NAME "dtvdemod"