dtv_demod: delsys code isolation (V3.5.022) [1/1]

PD#SWPL-142882

Problem:
delsys code isolation

Solution:
add macro to control

Verify:
verified by T5M

Change-Id: I9f087ba44cb13d2ae0c4ffd16a302ac0929a0165
Signed-off-by: min.yang <min.yang@amlogic.com>
This commit is contained in:
min.yang
2023-10-31 14:20:37 +08:00
committed by Luan Yuan
parent 4ae34cf311
commit 31466bee2a
11 changed files with 1481 additions and 1356 deletions
+11 -2
View File
@@ -47,17 +47,26 @@ $(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/demod_dbg.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/aml_demod.o
ifneq ($(findstring AML_DEMOD_SUPPORT_DVBS, $(ccflags-y)),)
ccflags-y += -DAML_DVBS_SUPPORT_GPIO_LNBC
ifneq ($(CONFIG_AMLOGIC_ZAPPER_CUT), y)
cflags-y += -DAML_DVBS_SUPPORT_I2C_LNBC
endif
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/dvbs/dvbs.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/dvbs/dvbs_frontend.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/dvbs/dvbs_diseqc.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/dvbs/dvbs_singlecable.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/lnb_controller/gpio/gpio_lnbc.o
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/lnb_controller/wt20_1811/wt20_1811.o
ccflags-y += -I$(srctree)/$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/dvbs
ccflags-y += -I$(srctree)/$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/lnb_controller
ifneq ($(findstring DAML_DVBS_SUPPORT_GPIO_LNBC, $(ccflags-y)),)
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/lnb_controller/gpio/gpio_lnbc.o
ccflags-y += -I$(srctree)/$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/lnb_controller/wt20_1811
ccflags-y += -I$(srctree)/$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/lnb_controller/gpio
endif
ifneq ($(findstring DAML_DVBS_SUPPORT_I2C_LNBC, $(ccflags-y)),)
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/lnb_controller/wt20_1811/wt20_1811.o
ccflags-y += -I$(srctree)/$(COMMON_DRIVERS_DIR)/drivers/media/dtv_demod/lnb_controller/wt20_1811
endif
endif
ifneq ($(findstring AML_DEMOD_SUPPORT_ISDBT, $(ccflags-y)),)
$(MEDIA_MODULE_NAME)-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtv_demod/isdbt/isdbt_func.o
+20 -56
View File
@@ -163,55 +163,6 @@ int convert_snr(int in_snr)
return out_snr;
}
//static void dtvdemod_do_8vsb_rst(void)
//{
//union atsc_cntl_reg_0x20 val;
//val.bits = atsc_read_reg_v4(ATSC_CNTR_REG_0X20);
//val.b.cpu_rst = 1;
//atsc_write_reg_v4(ATSC_CNTR_REG_0X20, val.bits);
//val.b.cpu_rst = 0;
//atsc_write_reg_v4(ATSC_CNTR_REG_0X20, val.bits);
//}
//static int amdemod_check_8vsb_rst(struct aml_dtvdemod *demod)
//{
//int ret = 0;
/* for tl1/tm2, first time of pwr on,
* reset after signal locked
* for lock event, 0x79 is safe for reset
*/
//if (demod->atsc_rst_done == 0) {
//if (demod->atsc_rst_needed) {
//dtvdemod_do_8vsb_rst();
//demod->atsc_rst_done = 1;
//ret = 0;
//PR_ATSC("reset done\n");
//}
//if (atsc_read_reg_v4(ATSC_CNTR_REG_0X2E) >= 0x79) {
//demod->atsc_rst_needed = 1;
//ret = 0;
//PR_ATSC("need reset\n");
//} else {
//demod->atsc_rst_wait_cnt++;
//PR_ATSC("wait cnt: %d\n",
//demod->atsc_rst_wait_cnt);
//}
//if (demod->atsc_rst_wait_cnt >= 3 &&
//(atsc_read_reg_v4(ATSC_CNTR_REG_0X2E) >= 0x76)) {
//demod->atsc_rst_done = 1;
//ret = 1;
//}
//} else if (atsc_read_reg_v4(ATSC_CNTR_REG_0X2E) >= 0x76) {
//ret = 1;
//}
//return ret;
//}
unsigned int demod_is_t5d_cpu(struct amldtvdemod_device_s *devp)
{
enum dtv_demod_hw_ver_e hw_ver = devp->data->hw_ver;
@@ -792,6 +743,7 @@ static void delsys_exit(struct aml_dtvdemod *demod, unsigned int ldelsys,
#endif
} else if ((is_meson_t5w_cpu() || is_meson_t3_cpu() ||
demod_is_t5d_cpu(devp)) && ldelsys == SYS_DVBT2) {
#ifdef AML_DEMOD_SUPPORT_DVBT
demod_top_write_reg(DEMOD_TOP_CFG_REG_4, 0x182);
dvbt_t2_wr_byte_bits(0x09, 1, 4, 1);
demod_top_write_reg(DEMOD_TOP_CFG_REG_4, 0x97);
@@ -806,8 +758,10 @@ static void delsys_exit(struct aml_dtvdemod *demod, unsigned int ldelsys,
if (is_meson_t5w_cpu())
t5w_write_ambus_reg(0x3c4e, 0x1, 23, 1);
#endif
} else if ((is_meson_t5w_cpu() || is_meson_t3_cpu() ||
demod_is_t5d_cpu(devp)) && ldelsys == SYS_ISDBT) {
#ifdef AML_DEMOD_SUPPORT_ISDBT
dvbt_isdbt_wr_reg((0x2 << 2), 0x111021b);
dvbt_isdbt_wr_reg((0x2 << 2), 0x011021b);
dvbt_isdbt_wr_reg((0x2 << 2), 0x011001b);
@@ -817,6 +771,7 @@ static void delsys_exit(struct aml_dtvdemod *demod, unsigned int ldelsys,
if (is_meson_t5w_cpu())
t5w_write_ambus_reg(0x3c4e, 0x1, 23, 1);
#endif
}
#endif
@@ -2940,7 +2895,6 @@ static int aml_dtvdm_get_property(struct dvb_frontend *fe,
struct isdbt_tmcc_info tmcc_info;
#endif
s16 strength = 0;
int ret = 0;
mutex_lock(&devp->lock);
@@ -3119,30 +3073,30 @@ static int aml_dtvdm_get_property(struct dvb_frontend *fe,
#ifdef AML_DEMOD_SUPPORT_DVBS
case SYS_DVBS:
case SYS_DVBS2:
ret = dtvdemod_dvbs_read_signal_strength(fe, &strength);
dtvdemod_dvbs_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBC
case SYS_DVBC_ANNEX_A:
case SYS_DVBC_ANNEX_C:
ret = gxtv_demod_dvbc_read_signal_strength(fe, &strength);
gxtv_demod_dvbc_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
case SYS_DVBT:
case SYS_DVBT2:
ret = gxtv_demod_dvbt_read_signal_strength(fe, &strength);
gxtv_demod_dvbt_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
case SYS_ISDBT:
ret = gxtv_demod_isdbt_read_signal_strength(fe, &strength);
gxtv_demod_isdbt_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ATSC
case SYS_ATSC:
case SYS_ATSCMH:
ret = gxtv_demod_atsc_read_signal_strength(fe, &strength);
gxtv_demod_atsc_read_signal_strength(fe, &strength);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_J83B
@@ -3152,7 +3106,7 @@ static int aml_dtvdm_get_property(struct dvb_frontend *fe,
#endif
#ifdef AML_DEMOD_SUPPORT_DTMB
case SYS_DTMB:
ret = gxtv_demod_dtmb_read_signal_strength(fe, &strength);
gxtv_demod_dtmb_read_signal_strength(fe, &strength);
break;
#endif
default:
@@ -3248,10 +3202,20 @@ struct dvb_frontend *aml_dtvdm_attach(const struct demod_config *config)
demod->id = devp->index;
demod->act_dtmb = false;
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
demod->timeout_atsc_ms = TIMEOUT_ATSC;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
demod->timeout_dvbt_ms = TIMEOUT_DVBT;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
demod->timeout_dvbs_ms = TIMEOUT_DVBS;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBC
demod->timeout_dvbc_ms = TIMEOUT_DVBC;
#endif
demod->timeout_ddr_leave = TIMEOUT_DDR_LEAVE;
demod->last_qam_mode = QAM_MODE_NUM;
demod->last_lock = -1;
+49 -12
View File
@@ -28,7 +28,9 @@
static unsigned int dtmb_mode;
#endif
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
static unsigned int atsc_mode_para;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
#include "isdbt_func.h"
@@ -146,7 +148,10 @@ static void seq_dump_regs(struct seq_file *seq)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
struct aml_dtvdemod *demod = NULL;
unsigned int reg_start, polling_en = 1;
unsigned int reg_start;
#ifdef AML_DEMOD_SUPPORT_DVBT
unsigned int polling_en = 1;
#endif
if (cpu_after_eq(MESON_CPU_MAJOR_ID_TL1)) {
seq_puts(seq, "demod top start\n");
@@ -180,6 +185,7 @@ static void seq_dump_regs(struct seq_file *seq)
}
break;
#endif
#if defined AML_DEMOD_SUPPORT_DVBC || defined AML_DEMOD_SUPPORT_J83B
case SYS_DVBC_ANNEX_A:
case SYS_DVBC_ANNEX_C:
case SYS_DVBC_ANNEX_B:
@@ -190,7 +196,8 @@ static void seq_dump_regs(struct seq_file *seq)
reg_start, qam_read_reg(demod, reg_start));
}
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
case SYS_DVBT:
case SYS_DVBT2:
polling_en = devp->demod_thread;
@@ -217,6 +224,7 @@ static void seq_dump_regs(struct seq_file *seq)
devp->demod_thread = polling_en;
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DTMB
case SYS_DTMB:
for (reg_start = 0x0; reg_start <= 0xff; reg_start++)
@@ -224,11 +232,13 @@ static void seq_dump_regs(struct seq_file *seq)
reg_start, dtmb_read_reg(reg_start));
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
case SYS_ISDBT:
for (reg_start = 0x0; reg_start <= 0xff; reg_start++)
seq_printf(seq, "[0x%x] = 0x%x\n",
reg_start, dvbt_isdbt_rd_reg_new(reg_start));
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
case SYS_DVBS:
case SYS_DVBS2:
@@ -259,7 +269,9 @@ static void seq_dump_status(struct seq_file *seq)
#endif
int strength = 0;
char chip_name[30];
#if defined AML_DEMOD_SUPPORT_DVBC || defined AML_DEMOD_SUPPORT_J83B
struct aml_demod_sts demod_sts;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
unsigned int polling_en = 1;
#endif
@@ -1013,20 +1025,23 @@ static void info_show(void)
struct aml_dtvdemod *demod = NULL;
#ifdef AML_DEMOD_SUPPORT_DVBT
unsigned int debug_mode = aml_demod_debug;
int fw_ver = 0;
#endif
char chip_name[30];
#if defined AML_DEMOD_SUPPORT_DVBC || defined AML_DEMOD_SUPPORT_J83B
struct aml_demod_sts demod_sts;
int fw_ver = 0;
#endif
PR_INFO("DTV DEMOD state:\n");
PR_INFO("demod_thread: %d.\n", devp->demod_thread);
get_chip_name(devp, chip_name);
PR_INFO("hw version chip: %d, %s.\n", devp->data->hw_ver, chip_name);
#ifdef AML_DEMOD_SUPPORT_DVBT
if (cpu_after_eq(MESON_CPU_MAJOR_ID_T3))
fw_ver = dvbt_t2_rdb(0x48);
PR_INFO("version: %s-%s, T2 FW ver: V%d.%s.\n", AMLDTVDEMOD_VER,
DTVDEMOD_VER, fw_ver, AMLDTVDEMOD_T2_FW_VER);
#endif
dbg_ic_cfg_addr(devp);
PR_INFO("agc_pin_direction: %d.\n", devp->agc_direction);
@@ -1088,8 +1103,6 @@ static void info_show(void)
ser = atsc_read_ser();
PR_INFO("ser: %d.\n", ser);
PR_INFO("atsc rst done: %d.\n", demod->atsc_rst_done);
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
@@ -1128,9 +1141,12 @@ static void info_show(void)
static void dump_regs(struct aml_dtvdemod *demod)
{
unsigned int reg_start, polling_en = 1;
enum fe_delivery_system delsys = demod->last_delsys;
unsigned int reg_start;
#ifdef AML_DEMOD_SUPPORT_DVBT
struct amldtvdemod_device_s *devp = (struct amldtvdemod_device_s *)demod->priv;
unsigned int polling_en = 1;
#endif
if (cpu_after_eq(MESON_CPU_MAJOR_ID_TL1)) {
pr_info("demod top start\n");
@@ -1159,6 +1175,7 @@ static void dump_regs(struct aml_dtvdemod *demod)
pr_info("atsc end\n");
break;
#endif
#if defined AML_DEMOD_SUPPORT_DVBC || defined AML_DEMOD_SUPPORT_J83B
case SYS_DVBC_ANNEX_A:
case SYS_DVBC_ANNEX_C:
case SYS_DVBC_ANNEX_B:
@@ -1170,7 +1187,8 @@ static void dump_regs(struct aml_dtvdemod *demod)
}
pr_info("dvbc/j83b end\n");
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
case SYS_DVBT:
case SYS_DVBT2:
pr_info("dvbt/t2 start\n");
@@ -1199,6 +1217,7 @@ static void dump_regs(struct aml_dtvdemod *demod)
}
pr_info("dvbt/t2 end\n");
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DTMB
case SYS_DTMB:
pr_info("dtmb start\n");
@@ -1208,6 +1227,7 @@ static void dump_regs(struct aml_dtvdemod *demod)
pr_info("dtmb end\n");
break;
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
case SYS_ISDBT:
pr_info("isdbt start\n");
for (reg_start = 0x0; reg_start <= 0xff; reg_start++)
@@ -1215,6 +1235,7 @@ static void dump_regs(struct aml_dtvdemod *demod)
pr_info("isdbt end\n");
break;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
case SYS_DVBS:
case SYS_DVBS2:
@@ -1242,7 +1263,9 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
unsigned int capture_start = 0;
unsigned int val = 0;
unsigned int addr = 0;
#ifdef AML_DEMOD_SUPPORT_DVBS
unsigned int i;
#endif
static struct dvb_frontend *fe;
struct demod_config config;
struct dtv_property tvp;
@@ -1379,11 +1402,15 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
demod->timeout_dvbt_ms = val;
#endif
} else if (!strcmp(parm[0], "timeout_dvbs")) {
#ifdef AML_DEMOD_SUPPORT_DVBS
if (parm[1] && (kstrtouint(parm[1], 10, &val)) == 0)
demod->timeout_dvbs_ms = val;
#endif
} else if (!strcmp(parm[0], "timeout_dvbc")) {
#ifdef AML_DEMOD_SUPPORT_DVBC
if (parm[1] && (kstrtouint(parm[1], 10, &val)) == 0)
demod->timeout_dvbc_ms = val;
#endif
} else if (!strcmp(parm[0], "dump_reg")) {
dump_regs(demod);
} else if (!strcmp(parm[0], "get_plp")) {
@@ -1438,6 +1465,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
if (parm[1] && (kstrtoint(parm[1], 10, &demod->dvbc_sel)) == 0)
;
} else if (!strcmp(parm[0], "dvbsw")) {
#ifdef AML_DEMOD_SUPPORT_DVBS
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
if (parm[2] && (kstrtouint(parm[2], 16, &val)) == 0) {
dvbs_wr_byte(addr, val);
@@ -1457,7 +1485,9 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
i, dvbs_rd_byte(i));
}
}
#endif
} else if (!strcmp(parm[0], "dvbtr")) {
#ifdef AML_DEMOD_SUPPORT_DVBT
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
val = dvbt_t2_rdb(addr);
PR_INFO("dvdt rd addr:0x%x, val:0x%x\n", addr, val);
@@ -1469,6 +1499,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
PR_INFO("dvbt wr addr:0x%x, val:0x%x\n", addr, val);
}
}
#endif
} else if (!strcmp(parm[0], "topr")) {
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
val = demod_top_read_reg(addr);
@@ -1499,9 +1530,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
val = atsc_read_reg_v4(addr);
PR_INFO("atsc rd addr:0x%x, val:0x%x\n", addr, val);
}
#endif
} else if (!strcmp(parm[0], "atscw")) {
#ifdef AML_DEMOD_SUPPORT_ATSC
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
if (parm[2] && (kstrtouint(parm[2], 16, &val)) == 0) {
atsc_write_reg_v4(addr, val);
@@ -1510,6 +1539,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
}
#endif
} else if (!strcmp(parm[0], "dvbcr")) {
#ifdef AML_DEMOD_SUPPORT_DVBC
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
val = qam_read_reg(demod, addr);
PR_INFO("dvbc rd addr:0x%x, val:0x%x\n", addr, val);
@@ -1521,15 +1551,14 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
PR_INFO("dvbc wr addr:0x%x, val:0x%x\n", addr, val);
}
}
#endif
} else if (!strcmp(parm[0], "dtmbr")) {
#ifdef AML_DEMOD_SUPPORT_DTMB
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
val = dtmb_read_reg(addr);
PR_INFO("dtmb rd addr:0x%x, val:0x%x\n", addr, val);
}
#endif
} else if (!strcmp(parm[0], "dtmbw")) {
#ifdef AML_DEMOD_SUPPORT_DTMB
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
if (parm[2] && (kstrtouint(parm[2], 16, &val)) == 0) {
dtmb_write_reg(addr, val);
@@ -1538,6 +1567,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
}
#endif
} else if (!strcmp(parm[0], "isdbtr")) {
#ifdef AML_DEMOD_SUPPORT_ISDBT
if (parm[1] && (kstrtouint(parm[1], 16, &addr)) == 0) {
val = dvbt_isdbt_rd_reg_new(addr);
PR_INFO("isdbt rd addr:0x%x, val:0x%x\n", addr, val);
@@ -1549,6 +1579,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
PR_INFO("isdbt wr addr:0x%x, val:0x%x\n", addr, val);
}
}
#endif
} else if (!strcmp(parm[0], "demod_thread")) {
if (parm[1] && (kstrtouint(parm[1], 16, &val)) == 0)
devp->demod_thread = val;
@@ -1565,6 +1596,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
PR_INFO("set atsc cr val to 0x%x\n", devp->atsc_cr_step_size_dbg);
} else if (!strcmp(parm[0], "ci_mode")) {
if (demod->demod_status.delsys == SYS_DVBC_ANNEX_A) {
#ifdef AML_DEMOD_SUPPORT_DVBC
if (parm[1] && (kstrtouint(parm[1], 16, &val)) == 0) {
if (val == 0) {
qam_write_bits(demod, 0x11, 0x90, 24, 8);
@@ -1575,6 +1607,7 @@ static ssize_t attr_store(struct class *cls, struct class_attribute *attr,
}
PR_INFO("ic card set mode to %d\n", val);
}
#endif
} else {
PR_INFO("not dvbc mode,nothing to do\n");
}
@@ -1701,6 +1734,7 @@ static ssize_t dtmb_para_store(struct class *cls, struct class_attribute *attr,
}
#endif
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
static ssize_t atsc_para_show(struct class *cls,
struct class_attribute *attr, char *buf)
{
@@ -1708,8 +1742,10 @@ static ssize_t atsc_para_show(struct class *cls,
int snr, lock_status;
unsigned int ck;
#endif
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
unsigned int ser;
int strength = 0;
#endif
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
struct aml_dtvdemod *demod = NULL, *tmp = NULL;
@@ -1788,6 +1824,7 @@ static ssize_t atsc_para_store(struct class *cls, struct class_attribute *attr,
return count;
}
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
static ssize_t diseq_cmd_store(struct class *cla, struct class_attribute *attr,
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+5 -8
View File
@@ -6,8 +6,7 @@
#ifndef __DVBS_FUNC_H__
#define __DVBS_FUNC_H__
#include <media/dvb_frontend.h>
#define ALIGN_24 16777216
#define SR_LOW_THRD 11000000
#define BLIND_SEARCH_AGC2BANDWIDTH_40 (40)
#define BLIND_SEARCH_AGC2BANDWIDTH_60 (60)
@@ -19,10 +18,11 @@
#define CNR_HIGH 0xcae
#define CNR_LOW 0xcad
#define AUTOSR_REG 0x922
#define AUTOSR_OFF 0xcc
#define AUTOSR_ON 0xdc
extern unsigned int diseqc_out_invert;
enum diseq_irq_flag {
DISEQ_IRQGAPBURST = 0x01,
DISEQ_IRQFIFO64B = 0x02,
@@ -109,13 +109,12 @@ struct fft_total_result {
#define DVBS_REG_DISIRQCFG 0x300
#define DVBS_REG_DISIRQSTAT 0x301
#define DVBS_REG_DISTXCFG 0x302
#define DVBS_REG_DISTXSTATUS 0x303
#define DVBS_REG_DISTXBYTES 0x304
#define DVBS_REG_DISTXFIFO 0x305
#define DVBS_REG_DISTXF22 0x306
#define DVBS_REG_DISTXWAIT 0x307
#define DVBS_REG_DISTIMEOCFG 0x308
#define DVBS_REG_DISTIMEOUT 0x309
#define DVBS_REG_DISRXCFG 0x30A
#define DVBS_REG_DISRXSTAT1 0x30B
@@ -141,8 +140,6 @@ struct fft_total_result {
#define DVBS_REG_DSQADCINCFG 0x121
#define DSTATUS 0x934
/* carrier offset */
#define CFR12 0x9cf
#define CFR11 0x9d0
@@ -25,8 +25,12 @@
#include "demod_func.h"
#include "dvbs.h"
#include "dvbs_diseqc.h"
#ifdef AML_DVBS_SUPPORT_GPIO_LNBC
#include "gpio_lnbc.h"
#endif
#ifdef AML_DVBS_SUPPORT_I2C_LNBC
#include "wt20_1811.h"
#endif
#ifdef DISEQC_SAR_ADC_RX
#include "meson_saradc.h"
#endif
@@ -581,11 +585,15 @@ void aml_diseqc_attach(struct device *dev, struct dvb_frontend *fe)
{
struct aml_dtvdemod *demod = (struct aml_dtvdemod *)fe->demodulator_priv;
struct amldtvdemod_device_s *devp = (struct amldtvdemod_device_s *)demod->priv;
#ifdef AML_DVBS_SUPPORT_GPIO_LNBC
struct gpio_desc *gpio_en = NULL, *gpio_sel = NULL;
#endif
#ifdef AML_DVBS_SUPPORT_I2C_LNBC
struct device_node *node = NULL;
struct i2c_adapter *i2c_adap = NULL;
unsigned char i2c_addr = 0;
u32 value = 0;
#endif
int ret = 0;
struct aml_diseqc *diseqc = &devp->diseqc;
@@ -619,6 +627,7 @@ void aml_diseqc_attach(struct device *dev, struct dvb_frontend *fe)
}
if (!strcmp(diseqc->name, "wt20_1811")) {
#ifdef AML_DVBS_SUPPORT_I2C_LNBC
node = of_parse_phandle(dev->of_node, "lnbc_i2c_adap", 0);
if (!IS_ERR_OR_NULL(node)) {
i2c_adap = of_find_i2c_adapter_by_node(node);
@@ -640,7 +649,9 @@ void aml_diseqc_attach(struct device *dev, struct dvb_frontend *fe)
if (diseqc->lnbc.init)
diseqc->lnbc.init(&diseqc->lnbc);
#endif
} else {
#ifdef AML_DVBS_SUPPORT_GPIO_LNBC
gpio_en = devm_gpiod_get(dev, "lnb_en", GPIOD_OUT_LOW);
if (IS_ERR_OR_NULL(gpio_en)) {
gpio_en = NULL;
@@ -657,6 +668,7 @@ void aml_diseqc_attach(struct device *dev, struct dvb_frontend *fe)
if (diseqc->lnbc.init)
diseqc->lnbc.init(&diseqc->lnbc);
#endif
}
dvbs2_diseqc_init();
@@ -2,7 +2,7 @@
/*
* Copyright (c) 2021 Amlogic, Inc. All rights reserved.
*/
#if defined AML_DEMOD_SUPPORT_ISDBT || defined AML_DEMOD_SUPPORT_DVBT
void program_acf(int acf1[20], int acf2[33])
{
int i;
@@ -398,3 +398,5 @@ void ini_acf_iireq_src_207m_5m(void)
program_acf(acf1, acf2);
}
#endif
+59 -25
View File
@@ -146,6 +146,7 @@
/* V3.5.019 fix dvbt lock failed in weak signal */
/* V3.5.020 fix pm runtime error */
/* V3.5.021 optimize the ddr size of cma(max 40M reduced to 16M) */
/* V3.5.022 delsys code isolation */
/****************************************************/
/****************************************************************/
/* AMLDTVDEMOD_VER Description: */
@@ -163,27 +164,47 @@
/****************************************************************/
#define KERNEL_4_9_EN 1
#define AMLDTVDEMOD_VER "V3.5.21"
#define DTVDEMOD_VER "2023/11/14: optimize the ddr size of cma(max 40M reduced to 16M)"
#define DTVDEMOD_VER "2023/11/15: delsys code isolation"
#define AMLDTVDEMOD_T2_FW_VER "20231019_141000"
#define DEMOD_DEVICE_NAME "dtvdemod"
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
#define THRD_TUNER_STRENGTH_ATSC (-87)
#define THRD_TUNER_STRENGTH_J83 (-76)
/* tested on BTC, sensitivity of demod is -100dBm */
#define THRD_TUNER_STRENGTH_DVBT (-101)
#define THRD_TUNER_STRENGTH_DVBS (-79)
#define THRD_TUNER_STRENGTH_DTMB (-100)
#define THRD_TUNER_STRENGTH_DVBC (-87)
#define THRD_TUNER_STRENGTH_ISDBT (-90)
#define TIMEOUT_ATSC 3000
#define TIMEOUT_ATSC_STD 1500
#endif
#ifdef AML_DEMOD_SUPPORT_J83B
#define THRD_TUNER_STRENGTH_J83 (-76)
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
/* tested on BTC, sensitivity of demod is -100dBm */
#define THRD_TUNER_STRENGTH_DVBT (-101)
#define TIMEOUT_DVBT 3000
#define TIMEOUT_DVBS 2000
#define TIMEOUT_DVBC 3000
#define TIMEOUT_DVBT2 5000
#define TIMEOUT_DDR_LEAVE 50
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
#define THRD_TUNER_STRENGTH_DVBS (-79)
#define TIMEOUT_DVBS 2000
#endif
#ifdef AML_DEMOD_SUPPORT_DTMB
#define THRD_TUNER_STRENGTH_DTMB (-100)
#endif
#ifdef AML_DEMOD_SUPPORT_DVBC
#define THRD_TUNER_STRENGTH_DVBC (-87)
#define TIMEOUT_DVBC 3000
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
#define THRD_TUNER_STRENGTH_ISDBT (-90)
#define TIMEOUT_ISDBT 3000
#endif
#define TIMEOUT_DDR_LEAVE 50
enum qam_md_e {
QAM_MODE_16,
@@ -363,12 +384,6 @@ struct aml_dtvdemod {
struct dvb_frontend frontend;
/* only for tm2,first time of pwr on,reset after signal locked begin */
unsigned int atsc_rst_needed;
unsigned int atsc_rst_done;
unsigned int atsc_rst_wait_cnt;
/* only for tm2,first time of pwr on,reset after signal locked end */
unsigned int symbol_rate_manu;
unsigned int sr_val_hw;
unsigned int sr_val_hw_stable;
@@ -382,12 +397,18 @@ struct aml_dtvdemod {
enum fe_modulation atsc_mode;
struct aml_demod_para para_demod;
unsigned int timeout_atsc_ms;
#ifdef AML_DEMOD_SUPPORT_DVBT
unsigned int timeout_dvbt_ms;
#endif
#ifdef AML_DEMOD_SUPPORT_DVBS
unsigned int timeout_dvbs_ms;
#endif
unsigned int time_start;
unsigned int time_passed;
enum fe_status last_status;
#ifdef AML_DEMOD_SUPPORT_DVBC
unsigned int timeout_dvbc_ms;
#endif
int autoflags;
int auto_flags_trig;
unsigned int p1_peak;
@@ -536,20 +557,26 @@ int convert_snr(int in_snr);
struct amldtvdemod_device_s *dtvdemod_get_dev(void);
#if defined AML_DEMOD_SUPPORT_ISDBT || defined AML_DEMOD_SUPPORT_DVBT
static inline void __iomem *gbase_dvbt_isdbt(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_dvbt_isdbt;
}
#endif
#ifdef AML_DEMOD_SUPPORT_DVBT
static inline void __iomem *gbase_dvbt_t2(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_dvbt_t2;
}
#endif
#if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC || \
defined AML_DEMOD_SUPPORT_J83B
static inline void __iomem *gbase_dvbs(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
@@ -570,20 +597,34 @@ static inline void __iomem *gbase_dvbc_2(void)
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_dvbc_2;
}
#endif
#ifdef AML_DEMOD_SUPPORT_DTMB
static inline void __iomem *gbase_dtmb(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_dtmb;
}
#endif
#if defined AML_DEMOD_SUPPORT_ATSC || defined AML_DEMOD_SUPPORT_J83B
static inline void __iomem *gbase_atsc(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_atsc;
}
#endif
#ifdef AML_DEMOD_SUPPORT_ISDBT
static inline void __iomem *gbase_isdbt(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_isdbt;
}
#endif
static inline void __iomem *gbase_demod(void)
{
@@ -592,13 +633,6 @@ static inline void __iomem *gbase_demod(void)
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_demod_top;
}
static inline void __iomem *gbase_isdbt(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
return devp->reg_v[ES_MAP_ADDR_DEMOD].v + devp->data->regoff.off_isdbt;
}
static inline void __iomem *gbase_front(void)
{
struct amldtvdemod_device_s *devp = dtvdemod_get_dev();
+28 -1
View File
@@ -35,6 +35,17 @@
#include "fpga_func.h"
#endif
#if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC
#define DSTATUS 0x934
#define SR_LOW_THRD 11000000
#define AUTOSR_REG 0x922
#define DVBS_REG_DISTXCFG 0x302
#define AUTOSR_OFF 0xcc
#define DVBS_REG_DISTIMEOCFG 0x308
#endif
#define PWR_ON 1
#define PWR_OFF 0
@@ -58,6 +69,7 @@
#define AO_RTI_GEN_PWR_ISO0 ((0x00 << 10) | (0x3b << 2))
/*----------------------------------*/
#define ALIGN_24 16777216
/* demod register */
#define DEMOD_TOP_REG0 (0x00)
@@ -1026,6 +1038,8 @@ void calculate_cordic_para(void);
/*extern int aml_fe_analog_set_frontend(struct dvb_frontend *fe);*/
int get_dtvpll_init_flag(void);
void demod_set_mode_ts(struct aml_dtvdemod *demod, enum fe_delivery_system delsys);
#if defined AML_DEMOD_SUPPORT_J83B || defined AML_DEMOD_SUPPORT_DVBC
void qam_write_reg(struct aml_dtvdemod *demod,
unsigned int reg_addr, unsigned int reg_data);
unsigned int qam_read_reg(struct aml_dtvdemod *demod, unsigned int reg_addr);
@@ -1034,6 +1048,8 @@ void qam_write_bits(struct aml_dtvdemod *demod,
const u32 start, const u32 len);
void dvbc_write_reg(unsigned int addr, unsigned int data);
unsigned int dvbc_read_reg(unsigned int addr);
#endif
void demod_top_write_reg(unsigned int addr, unsigned int data);
void demod_top_write_bits(u32 reg_addr, const u32 reg_data, const u32 start, const u32 len);
unsigned int demod_top_read_reg(unsigned int addr);
@@ -1061,12 +1077,16 @@ unsigned int demod_get_adc_clk(struct aml_dtvdemod *demod);
unsigned int demod_get_sys_clk(struct aml_dtvdemod *demod);
/*register access api new*/
#if defined AML_DEMOD_SUPPORT_ISDBT || defined AML_DEMOD_SUPPORT_DVBT
void dvbt_isdbt_wr_reg(unsigned int addr, unsigned int data);
void dvbt_isdbt_wr_reg_new(unsigned int addr, unsigned int data);
void dvbt_isdbt_wr_bits_new(u32 reg_addr, const u32 reg_data,
const u32 start, const u32 len);
unsigned int dvbt_isdbt_rd_reg(unsigned int addr);
unsigned int dvbt_isdbt_rd_reg_new(unsigned int addr);
#endif
#if defined AML_DEMOD_SUPPORT_DVBT
void dvbt_t2_wrb(unsigned int addr, unsigned char data);
void dvbt_t2_write_w(unsigned int addr, unsigned int data);
void dvbt_t2_wr_byte_bits(u32 addr, const u32 data, const u32 start, const u32 len);
@@ -1075,15 +1095,20 @@ unsigned int dvbt_t2_read_w(unsigned int addr);
char dvbt_t2_rdb(unsigned int addr);
void riscv_ctl_write_reg(unsigned int addr, unsigned int data);
unsigned int riscv_ctl_read_reg(unsigned int addr);
#endif
#if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC
void dvbs_write_bits(u32 reg_addr, const u32 reg_data,
const u32 start, const u32 len);
void dvbs_wr_byte(unsigned int addr, unsigned char data);
unsigned char dvbs_rd_byte(unsigned int addr);
void dvbs2_reg_initial(unsigned int symb_rate_kbs, unsigned int is_blind_scan);
#endif
int aml_demod_init(void);
void aml_demod_exit(void);
unsigned int write_riscv_ram(void);
unsigned int dvbs_get_quality(void);
void dvbs2_reg_initial(unsigned int symb_rate_kbs, unsigned int is_blind_scan);
int dvbs_get_signal_strength_off(void);
void t3_revb_set_ambus_state(bool enable, bool is_t2);
void t5w_write_ambus_reg(u32 addr,
@@ -1106,7 +1131,9 @@ void real_para_clear(struct aml_demod_para_real *para);
enum fe_bandwidth dtvdemod_convert_bandwidth(unsigned int input);
void demod_enable_frontend_agc(struct aml_dtvdemod *demod,
enum fe_delivery_system delsys, bool enable);
#if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC
void fe_l2a_set_symbol_rate(struct fe_l2a_internal_param *pparams, unsigned int symbol_rate);
#endif
void fe_l2a_get_agc2accu(struct fe_l2a_internal_param *pparams, unsigned int *pintegrator);
#endif
-16
View File
@@ -204,19 +204,3 @@ int atsc_get_power_strength(int agc_gain, int tuner_strength)
return strength;
}
unsigned int atsc_read_reg_v4(unsigned int addr)
{
unsigned int tmp;
if (!get_dtvpll_init_flag())
return 0;
demod_mutex_lock();
tmp = readl(gbase_atsc() + (addr << 2));
demod_mutex_unlock();
return tmp;
}