mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
atv_demod: modify atv demod code [1/1]
PD#SWPL-2295 Problem: 1.modify atv demod code for coverity. 2.add ntsc-m ring filter for t962x2. 3.merge code optimization from android l. 4.add tuner compatible info in dts for tuner debug. Solution: 1.modify atv demod code for coverity. 2.add ntsc-m ring filter for t962x2. 3.merge code optimization from android l. 4.add tuner compatible info in dts for tuner debug. Verify: verified by einstein Change-Id: I9696aa628315ee11f0c9dd279c7cc03797f04331 Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com> Conflicts: arch/arm/boot/dts/amlogic/txlx_t962x_r314.dts arch/arm64/boot/dts/amlogic/txlx_t962x_r314.dts drivers/amlogic/atv_demod/atv_demod_access.c drivers/amlogic/atv_demod/atv_demod_driver.c drivers/amlogic/atv_demod/atv_demod_ops.c drivers/amlogic/atv_demod/atvdemod_func.c
This commit is contained in:
committed by
Dongjin Kim
parent
3c693dd285
commit
cf6568a019
@@ -993,6 +993,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
|
||||
@@ -1042,6 +1042,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c0>;
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -437,6 +437,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -427,6 +427,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -448,6 +448,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -448,6 +448,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -618,6 +618,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -662,6 +662,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -620,6 +620,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -616,6 +616,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -624,14 +624,12 @@
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "disabled";
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -427,6 +427,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -440,6 +440,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -440,6 +440,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "r842_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -617,6 +617,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -661,6 +661,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "si2151_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -618,6 +618,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -618,6 +618,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -617,6 +617,7 @@
|
||||
};
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
|
||||
@@ -620,14 +620,12 @@
|
||||
|
||||
tuner: tuner {
|
||||
compatible = "amlogic, tuner";
|
||||
status = "disabled";
|
||||
tuner_cur = <0>; /* default use tuner */
|
||||
tuner_num = <1>; /* tuner number, multi tuner support */
|
||||
tuner_name_0 = "mxl661_tuner";
|
||||
tuner_i2c_adap_0 = <&i2c1>;
|
||||
tuner_i2c_addr_0 = <0x60>;
|
||||
tuner_xtal_0 = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode_0 = <0>;
|
||||
status = "okay";
|
||||
tuner_name = "mxl661_tuner";
|
||||
tuner_i2c_adap = <&i2c1>;
|
||||
tuner_i2c_addr = <0x60>;
|
||||
tuner_xtal = <0>; /* 0: 16MHz, 1: 24MHz */
|
||||
tuner_xtal_mode = <0>;
|
||||
/* NO_SHARE_XTAL(0)
|
||||
* SLAVE_XTAL_SHARE(1)
|
||||
*/
|
||||
|
||||
@@ -82,9 +82,9 @@ int atvaudiodem_reg_read(unsigned int reg, unsigned int *val)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (amlatvdemod_devp->audio_reg_base)
|
||||
*val = readl(amlatvdemod_devp->audio_reg_base + reg);
|
||||
#endif
|
||||
if (amlatvdemod_devp->audiodemod_reg_base)
|
||||
*val = readl(amlatvdemod_devp->audiodemod_reg_base + reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -101,8 +101,32 @@ int atvaudiodem_reg_write(unsigned int reg, unsigned int val)
|
||||
}
|
||||
}
|
||||
|
||||
if (amlatvdemod_devp->audiodemod_reg_base)
|
||||
writel(val, (amlatvdemod_devp->audiodemod_reg_base + reg));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atvaudio_reg_read(unsigned int *val)
|
||||
{
|
||||
/* only 0xffd0d340 read */
|
||||
/* bit0: I2s select in_src, 0 = atv_demod, 1 = adec */
|
||||
/* bit1: Din5, 0 = atv_demod, 1 = adec */
|
||||
/* bit2: L/R swap for adec audio data */
|
||||
if (amlatvdemod_devp->audio_reg_base)
|
||||
writel(val, (amlatvdemod_devp->audio_reg_base + reg));
|
||||
*val = readl(amlatvdemod_devp->audio_reg_base);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int atvaudio_reg_write(unsigned int val)
|
||||
{
|
||||
/* only 0xffd0d340 write */
|
||||
/* bit0: I2s select in_src, 0 = atv_demod, 1 = adec */
|
||||
/* bit1: Din5, 0 = atv_demod, 1 = adec */
|
||||
/* bit2: L/R swap for adec audio data */
|
||||
if (amlatvdemod_devp->audio_reg_base)
|
||||
writel(val, amlatvdemod_devp->audio_reg_base);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -152,10 +176,10 @@ void atv_dmd_wr_reg(unsigned char block, unsigned char reg, unsigned long data)
|
||||
|
||||
unsigned long atv_dmd_rd_reg(unsigned char block, unsigned char reg)
|
||||
{
|
||||
unsigned long data = 0;
|
||||
unsigned int data = 0;
|
||||
unsigned int reg_addr = (block << 8) + reg * 4;
|
||||
|
||||
amlatvdemod_reg_read(reg_addr, (unsigned int *)&data);
|
||||
amlatvdemod_reg_read(reg_addr, &data);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ extern int amlatvdemod_reg_read(unsigned int reg, unsigned int *val);
|
||||
extern int amlatvdemod_reg_write(unsigned int reg, unsigned int val);
|
||||
extern int atvaudiodem_reg_read(unsigned int reg, unsigned int *val);
|
||||
extern int atvaudiodem_reg_write(unsigned int reg, unsigned int val);
|
||||
extern int atvaudio_reg_read(unsigned int *val);
|
||||
extern int atvaudio_reg_write(unsigned int val);
|
||||
extern int amlatvdemod_hiu_reg_read(unsigned int reg, unsigned int *val);
|
||||
extern int amlatvdemod_hiu_reg_write(unsigned int reg, unsigned int val);
|
||||
extern int amlatvdemod_periphs_reg_read(unsigned int reg, unsigned int *val);
|
||||
|
||||
@@ -96,6 +96,8 @@
|
||||
DEBUGFS_CREATE_NODE(audio_a2_power_threshold, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_gain_shift, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_gain_lpr, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_atv_ov, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_atv_ov_flag, 0640, dentry, u32)\
|
||||
}
|
||||
|
||||
|
||||
@@ -178,12 +180,11 @@ static ssize_t debugfs_write(struct file *file, const char __user *userbuf,
|
||||
char buf[20] = { 0 };
|
||||
int len = ARRAY_SIZE(debugfs_dentry);
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
count = min_t(size_t, count, (sizeof(buf) - 1));
|
||||
if (copy_from_user(buf, userbuf, count))
|
||||
return -EFAULT;
|
||||
|
||||
buf[count] = 0;
|
||||
|
||||
/*i = sscanf(buf, "%d", &val);*/
|
||||
i = kstrtoint(buf, 0, &val);
|
||||
if (i == 0) {
|
||||
|
||||
@@ -548,7 +548,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
pr_err("get demod memory resource fail.\n");
|
||||
pr_err("no demod memory resource.\n");
|
||||
goto fail_get_resource;
|
||||
}
|
||||
|
||||
@@ -566,7 +566,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!res) {
|
||||
pr_err("no hiu demod memory resource.\n");
|
||||
pr_err("no hiu memory resource.\n");
|
||||
dev->hiu_reg_base = NULL;
|
||||
} else {
|
||||
size_io_reg = resource_size(res);
|
||||
@@ -584,7 +584,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
|
||||
if (!res) {
|
||||
pr_err("no periphs demod memory resource.\n");
|
||||
pr_err("no periphs memory resource.\n");
|
||||
dev->periphs_reg_base = NULL;
|
||||
} else {
|
||||
size_io_reg = resource_size(res);
|
||||
@@ -602,29 +602,31 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
|
||||
if (!res) {
|
||||
pr_err("no audio demod memory resource.\n");
|
||||
dev->audio_reg_base = NULL;
|
||||
pr_err("no audiodemod memory resource.\n");
|
||||
dev->audiodemod_reg_base = NULL;
|
||||
} else {
|
||||
size_io_reg = resource_size(res);
|
||||
dev->audio_reg_base = devm_ioremap_nocache(
|
||||
dev->audiodemod_reg_base = devm_ioremap_nocache(
|
||||
&pdev->dev, res->start, size_io_reg);
|
||||
if (!dev->audio_reg_base) {
|
||||
pr_err("audio ioremap failed.\n");
|
||||
if (!dev->audiodemod_reg_base) {
|
||||
pr_err("audiodemod ioremap failed.\n");
|
||||
goto fail_get_resource;
|
||||
}
|
||||
|
||||
pr_info("audio start = 0x%p, size = 0x%x, base = 0x%p.\n",
|
||||
pr_info("audiodemod start = 0x%p, size = 0x%x, base = 0x%p.\n",
|
||||
(void *) res->start, size_io_reg,
|
||||
dev->audio_reg_base);
|
||||
dev->audiodemod_reg_base);
|
||||
}
|
||||
|
||||
/* add for audio system control */
|
||||
if (is_meson_txlx_cpu() || is_meson_txhd_cpu()) {
|
||||
/* add for audio system control */
|
||||
dev->audio_demod_reg_base = ioremap(
|
||||
round_down(0xffd0d340, 0x3), 4);
|
||||
dev->audio_reg_base = ioremap(round_down(0xffd0d340, 0x3), 4);
|
||||
|
||||
pr_info("audio_demod_reg_base = 0x%p.\n",
|
||||
dev->audio_demod_reg_base);
|
||||
pr_info("audio_reg_base = 0x%p.\n", dev->audio_reg_base);
|
||||
} else if (is_meson_tl1_cpu()) {
|
||||
dev->audio_reg_base = ioremap(round_down(0xff600340, 0x3), 4);
|
||||
|
||||
pr_info("audio_reg_base = 0x%p.\n", dev->audio_reg_base);
|
||||
}
|
||||
|
||||
aml_atvdemod_dt_parse(dev);
|
||||
|
||||
@@ -66,10 +66,10 @@ struct aml_atvdemod_device {
|
||||
bool tuner_attached;
|
||||
|
||||
void __iomem *demod_reg_base;
|
||||
void __iomem *audio_reg_base;
|
||||
void __iomem *audiodemod_reg_base;
|
||||
void __iomem *hiu_reg_base;
|
||||
void __iomem *periphs_reg_base;
|
||||
void __iomem *audio_demod_reg_base;
|
||||
void __iomem *audio_reg_base;
|
||||
|
||||
unsigned int reg_23cf; /* IIR filter */
|
||||
int btsc_sap_mode; /*0: off 1:monitor 2:auto */
|
||||
|
||||
@@ -539,6 +539,7 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
int i = 0;
|
||||
int try_vfmt_cnt = 300;
|
||||
int varify_cnt = 0;
|
||||
int cvbs_std = 0;
|
||||
v4l2_std_id std_bk = 0;
|
||||
unsigned int broad_std = 0;
|
||||
unsigned int audio = 0;
|
||||
@@ -550,12 +551,12 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
std_bk = aml_fe_hook_get_fmt();
|
||||
if (std_bk) {
|
||||
cvbs_std = aml_fe_hook_get_fmt();
|
||||
if (cvbs_std) {
|
||||
varify_cnt++;
|
||||
pr_dbg("get varify_cnt:%d, cnt:%d, std_bk:0x%x\n",
|
||||
pr_dbg("get cvbs_std varify_cnt:%d, cnt:%d, cvbs_std:0x%x\n",
|
||||
varify_cnt, i,
|
||||
(unsigned int) std_bk);
|
||||
(unsigned int) cvbs_std);
|
||||
if (((v4l2_fe->tuner_id == AM_TUNER_R840
|
||||
|| v4l2_fe->tuner_id == AM_TUNER_R842)
|
||||
&& varify_cnt > 0)
|
||||
@@ -592,13 +593,13 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
usleep_range(30 * 1000, 30 * 1000 + 100);
|
||||
}
|
||||
|
||||
pr_dbg("get std_bk cnt:%d, std_bk: 0x%x\n",
|
||||
i, (unsigned int) std_bk);
|
||||
pr_dbg("get cvbs_std cnt:%d, cvbs_std: 0x%x\n",
|
||||
i, (unsigned int) cvbs_std);
|
||||
|
||||
if (std_bk == 0) {
|
||||
if (cvbs_std == 0) {
|
||||
pr_err("%s: failed to get video fmt, assume PAL.\n",
|
||||
__func__);
|
||||
std_bk = TVIN_SIG_FMT_CVBS_PAL_I;
|
||||
cvbs_std = TVIN_SIG_FMT_CVBS_PAL_I;
|
||||
p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_DK;
|
||||
p->frequency += 1;
|
||||
p->audmode = V4L2_STD_PAL_DK;
|
||||
@@ -613,7 +614,7 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
usleep_range(20 * 1000, 20 * 1000 + 100);
|
||||
}
|
||||
|
||||
std_bk = atvdemod_fe_tvin_fmt_to_v4l2_std(std_bk);
|
||||
std_bk = atvdemod_fe_tvin_fmt_to_v4l2_std(cvbs_std);
|
||||
} else {
|
||||
/* Only search std by user setting,
|
||||
* so no need tvafe identify signal.
|
||||
@@ -630,9 +631,14 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
|
||||
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);
|
||||
broad_std = aml_audiomode_autodet(v4l2_fe);
|
||||
audio = atvdemod_fmt_2_v4l2_std(broad_std);
|
||||
if (cvbs_std == TVIN_SIG_FMT_CVBS_NTSC_M) {
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
|
||||
audio = V4L2_STD_NTSC_M;
|
||||
} else {
|
||||
amlatvdemod_set_std(AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC);
|
||||
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;
|
||||
@@ -652,8 +658,7 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
#endif
|
||||
} else {
|
||||
/* V4L2_COLOR_STD_PAL */
|
||||
if (cvbs_std == TVIN_SIG_FMT_CVBS_PAL_M ||
|
||||
cvbs_std == TVIN_SIG_FMT_CVBS_PAL_CN) {
|
||||
if (cvbs_std == TVIN_SIG_FMT_CVBS_PAL_M) {
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
|
||||
audio = V4L2_STD_PAL_M;
|
||||
} else {
|
||||
|
||||
@@ -587,7 +587,7 @@ static int v4l2_property_process_get(struct v4l2_frontend *v4l2_fe,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_ioctl_properties(struct file *filp,
|
||||
static long v4l2_frontend_ioctl_properties(struct file *filp,
|
||||
unsigned int cmd, void *parg)
|
||||
{
|
||||
struct v4l2_frontend *v4l2_fe = video_get_drvdata(video_devdata(filp));
|
||||
|
||||
@@ -1355,14 +1355,10 @@ void set_output_left_right_exchange(unsigned int ch)
|
||||
{
|
||||
unsigned int read = 0;
|
||||
|
||||
if (amlatvdemod_devp->audio_demod_reg_base == NULL)
|
||||
return;
|
||||
|
||||
read = readl(amlatvdemod_devp->audio_demod_reg_base);
|
||||
atvaudio_reg_read(&read);
|
||||
|
||||
if ((read & (1 << 2)) != ((ch & 0x01) << 2))
|
||||
writel((read & ~(1 << 2)) | ((ch & 0x01) << 2),
|
||||
amlatvdemod_devp->audio_demod_reg_base);
|
||||
atvaudio_reg_write((read & ~(1 << 2)) | ((ch & 0x01) << 2));
|
||||
}
|
||||
|
||||
#endif /* __ATVAUDDEMOD_FUN_H */
|
||||
|
||||
@@ -96,6 +96,9 @@ unsigned int audio_a2_threshold = 0x800;
|
||||
unsigned int audio_a2_delay = 10;
|
||||
unsigned int audio_nicam_delay = 100;
|
||||
|
||||
unsigned int audio_atv_ov;
|
||||
unsigned int audio_atv_ov_flag;
|
||||
|
||||
enum AUDIO_SCAN_ID {
|
||||
ID_PAL_I = 0,
|
||||
ID_PAL_M,
|
||||
@@ -268,8 +271,7 @@ void atv_dmd_misc(void)
|
||||
0x18, 0x7ffff);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x1c, 0x0f000);
|
||||
atvaudio_ctrl_read(®);
|
||||
atvaudio_ctrl_write(reg & (~0x3));
|
||||
atvaudio_reg_write(0x0);
|
||||
audio_atv_ov_flag = 1;
|
||||
} else {
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
@@ -278,8 +280,7 @@ void atv_dmd_misc(void)
|
||||
0x18, 0xc000);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x1c, 0x1f000);
|
||||
atvaudio_ctrl_read(®);
|
||||
atvaudio_ctrl_write(reg | 0x3);
|
||||
atvaudio_reg_write(0x7);
|
||||
audio_atv_ov_flag = 0;
|
||||
}
|
||||
}
|
||||
@@ -301,26 +302,11 @@ void atv_dmd_ring_filter(bool on)
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x30, 0x1d175c);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x34, 0x2d19e4);
|
||||
|
||||
/* enable filter */
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x4c, 0x1);
|
||||
} else {
|
||||
/* default value */
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x10, 0x8423F6);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x14, 0xFF86A967);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x18, 0x37FE45);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x1c, 0xFF86A967);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x20, 0x3C223B);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x24, 0x8423F6);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x28, 0xFF86A967);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x2c, 0x37FE45);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x30, 0xFF86A967);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x34, 0x3C223B);
|
||||
|
||||
/* disable filter */
|
||||
} else
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_GDE_EQUAL, 0x4c, 0x0);
|
||||
}
|
||||
|
||||
pr_dbg("%s do atv_dmd_ring_filter %d ...\n", __func__, on);
|
||||
pr_err("%s do atv_dmd_ring_filter %d ...\n", __func__, on);
|
||||
}
|
||||
|
||||
void atv_dmd_non_std_set(bool enable)
|
||||
@@ -551,7 +537,8 @@ void configure_receiver(int Broadcast_Standard, unsigned int Tuner_IF_Frequency,
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M) ||
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_DK) ||
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_BG) ||
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_I)) {
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_I) ||
|
||||
(Broadcast_Standard == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_M)) {
|
||||
gp_coeff_1[0] = 0x57777;
|
||||
gp_coeff_1[1] = 0xdd777;
|
||||
gp_coeff_1[2] = 0x7d777;
|
||||
@@ -1803,6 +1790,12 @@ int atvdemod_init(void)
|
||||
pr_err("%s do atv_dmd_misc ...\n", __func__);
|
||||
atv_dmd_misc();
|
||||
|
||||
if (broad_std == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_M ||
|
||||
broad_std == AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC)
|
||||
atv_dmd_ring_filter(true);
|
||||
else
|
||||
atv_dmd_ring_filter(false);
|
||||
|
||||
pr_err("%s do atv_dmd_soft_reset ...\n", __func__);
|
||||
/*4.software reset*/
|
||||
atv_dmd_soft_reset();
|
||||
@@ -1950,14 +1943,14 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
unsigned long carrier_power_average_max = 0;
|
||||
unsigned long carrier_power_average[4] = {0};
|
||||
unsigned long temp_data = 0;
|
||||
int carrier_lock_count = 0;
|
||||
int lock = 0;
|
||||
int lock = 0, line_lock = 0;
|
||||
int broad_std_final = 0;
|
||||
int num = 0, i = 0, final_id = 0;
|
||||
int delay_ms = 10, delay_ms_default = 10;
|
||||
int cur_std = ID_PAL_DK;
|
||||
bool secam_signal = false;
|
||||
|
||||
bool ntsc_signal = false;
|
||||
bool has_audio = false;
|
||||
#if 0
|
||||
temp_data = atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02);
|
||||
temp_data = temp_data | 0x80;/* 0x40 */
|
||||
@@ -1976,7 +1969,10 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_BG:
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_M:
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC:
|
||||
|
||||
ntsc_signal = true;
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
|
||||
break;
|
||||
#if 0 /* ntsc will try other audio */
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_M;
|
||||
atvdemod_init();
|
||||
temp_data = atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02);
|
||||
@@ -1984,7 +1980,7 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
atv_dmd_wr_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02, temp_data);
|
||||
/* pr_err("%s, SECAM ,audio set SECAM_L\n", __func__); */
|
||||
return broad_std;
|
||||
|
||||
#endif
|
||||
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:
|
||||
@@ -2158,9 +2154,15 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
|
||||
cur_std = ID_PAL_M;
|
||||
|
||||
p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_M;
|
||||
p->frequency += 1;
|
||||
p->audmode = V4L2_STD_PAL_M;
|
||||
if (!ntsc_signal) {
|
||||
p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_M;
|
||||
p->frequency += 1;
|
||||
p->audmode = V4L2_STD_PAL_M;
|
||||
} else {
|
||||
p->std = V4L2_COLOR_STD_NTSC | V4L2_STD_NTSC_M;
|
||||
p->frequency += 1;
|
||||
p->audmode = V4L2_STD_NTSC_M;
|
||||
}
|
||||
|
||||
delay_ms = delay_ms_default;
|
||||
break;
|
||||
@@ -2188,32 +2190,37 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
|
||||
/* enable audio detect function */
|
||||
temp_data = atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02);
|
||||
temp_data = temp_data | 0x80;/* 0x40 */
|
||||
temp_data = temp_data | 0x87;/* 0x40 */
|
||||
atv_dmd_wr_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02, temp_data);
|
||||
|
||||
usleep_range(delay_ms * 1000, delay_ms * 1000 + 100);
|
||||
|
||||
carrier_lock_count = 0;
|
||||
/* ----------------judgment signal state--------------------- */
|
||||
i = 4;
|
||||
has_audio = false;
|
||||
while (i--) {
|
||||
retrieve_vpll_carrier_lock(&lock);
|
||||
if (lock == 0)
|
||||
line_lock = atv_dmd_rd_byte(APB_BLOCK_ADDR_VDAGC, 0x4f);
|
||||
if (lock == 0 && (line_lock & 0x10) == 0) {
|
||||
has_audio = true;
|
||||
break;
|
||||
carrier_lock_count++;
|
||||
if (carrier_lock_count >= 20) {
|
||||
pr_err("%s step2, retrieve_vpll_carrier_lock failed\n",
|
||||
__func__);
|
||||
/* return broad_std; */
|
||||
}
|
||||
|
||||
usleep_range(6000, 9000);
|
||||
}
|
||||
/* ----------------read carrier_power--------------------- */
|
||||
for (i = 0; i < 100; i++) {
|
||||
carrier_power =
|
||||
atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x03);
|
||||
carrier_power_max += carrier_power;
|
||||
if (has_audio) {
|
||||
for (i = 0; i < 100; i++) {
|
||||
carrier_power = atv_dmd_rd_reg(
|
||||
APB_BLOCK_ADDR_SIF_STG_2, 0x03);
|
||||
carrier_power_max += carrier_power;
|
||||
}
|
||||
carrier_power = carrier_power_max/i;
|
||||
} else {
|
||||
carrier_power = 0;
|
||||
pr_err("[%s] pll and line unlock.\n", __func__);
|
||||
}
|
||||
carrier_power = carrier_power_max/i;
|
||||
|
||||
carrier_power_max = 0;
|
||||
pr_err("[%s] [num:%d] [broad_std:%d] audio carrier power: %lu. @@@@@@@@@@\n",
|
||||
__func__, num, broad_std, carrier_power);
|
||||
@@ -2226,7 +2233,7 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
|
||||
void aml_audio_valume_gain_set(unsigned int audio_gain)
|
||||
{
|
||||
unsigned long audio_gain_data, temp_data;
|
||||
unsigned long audio_gain_data = 0, temp_data = 0;
|
||||
|
||||
if (audio_gain > 0xfff) {
|
||||
pr_err("Error: atv in gain max 7.998, min 0.002! gain = value/512\n");
|
||||
@@ -2241,7 +2248,7 @@ void aml_audio_valume_gain_set(unsigned int audio_gain)
|
||||
|
||||
unsigned int aml_audio_valume_gain_get(void)
|
||||
{
|
||||
unsigned long audio_gain_data;
|
||||
unsigned long audio_gain_data = 0;
|
||||
|
||||
audio_gain_data = atv_dmd_rd_word(APB_BLOCK_ADDR_MONO_PROC, 0x52);
|
||||
audio_gain_data = audio_gain_data & 0xfff;
|
||||
@@ -2250,7 +2257,7 @@ unsigned int aml_audio_valume_gain_get(void)
|
||||
|
||||
void aml_fix_PWM_adjust(int enable)
|
||||
{
|
||||
unsigned long temp_data;
|
||||
unsigned long temp_data = 0;
|
||||
/*
|
||||
* temp_data = atv_dmd_rd_byte(APB_BLOCK_ADDR_AGC_PWM, 0x08);
|
||||
* temp_data = temp_data | 0x01;
|
||||
@@ -2271,16 +2278,15 @@ void aml_fix_PWM_adjust(int enable)
|
||||
|
||||
void aml_audio_overmodulation(int enable)
|
||||
{
|
||||
static int ov_flag;
|
||||
unsigned long tmp_v;
|
||||
unsigned long tmp_v1;
|
||||
unsigned long tmp_v = 0;
|
||||
unsigned long tmp_v1 = 0;
|
||||
u32 Broadcast_Standard = broad_std;
|
||||
|
||||
if (enable && Broadcast_Standard ==
|
||||
AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK) {
|
||||
tmp_v = atv_dmd_rd_long(APB_BLOCK_ADDR_SIF_STG_2, 0x28);
|
||||
tmp_v = tmp_v&0xffff;
|
||||
if (tmp_v >= 0x10 && ov_flag == 0) {
|
||||
if (tmp_v > 0x10 && audio_atv_ov_flag == 0) {
|
||||
tmp_v1 =
|
||||
atv_dmd_rd_long(APB_BLOCK_ADDR_SIF_STG_2, 0);
|
||||
tmp_v1 = (tmp_v1&0xffffff)|(1<<24);
|
||||
@@ -2288,19 +2294,12 @@ void aml_audio_overmodulation(int enable)
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x14, 0x8000015);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x1c, 0x0f000);
|
||||
} else if (tmp_v >= 0x2500 && ov_flag == 0) {
|
||||
tmp_v1 = atv_dmd_rd_long(APB_BLOCK_ADDR_SIF_STG_2, 0);
|
||||
tmp_v1 = (tmp_v1&0xffffff)|(1<<24);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2, 0, tmp_v1);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x14, 0xf400015);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x18, 0xc000);
|
||||
0x18, 0x7ffff);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x1c, 0x0f000);
|
||||
ov_flag = 1;
|
||||
} else if (tmp_v <= 0x10 && ov_flag == 1) {
|
||||
atvaudio_reg_write(0x0);
|
||||
audio_atv_ov_flag = 1;
|
||||
} else if (tmp_v <= 0x10 && audio_atv_ov_flag == 1) {
|
||||
tmp_v1 = atv_dmd_rd_long(APB_BLOCK_ADDR_SIF_STG_2, 0);
|
||||
tmp_v1 = (tmp_v1&0xffffff)|(0<<24);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2, 0, tmp_v1);
|
||||
@@ -2310,7 +2309,8 @@ void aml_audio_overmodulation(int enable)
|
||||
0x18, 0xc000);
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x1c, 0x1f000);
|
||||
ov_flag = 0;
|
||||
atvaudio_reg_write(0x7);
|
||||
audio_atv_ov_flag = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ extern void read_version_register(void);
|
||||
extern void check_communication_interface(void);
|
||||
extern void power_on_receiver(void);
|
||||
extern void atv_dmd_misc(void);
|
||||
extern void atv_dmd_ring_filter(bool on);
|
||||
extern void configure_receiver(int Broadcast_Standard,
|
||||
unsigned int Tuner_IF_Frequency,
|
||||
int Tuner_Input_IF_inverted, int GDE_Curve,
|
||||
|
||||
Reference in New Issue
Block a user