mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
atv_demod: modify atv demod code [1/1]
PD#SWPL-3469 Problem: 1.add mono audio only config. 2.fix offset -0.5M lose channel when scanning. 3.fix a2 audio mono mode detection threshold. 4.add audio detection when scanning. 5.Ver: V2.06. Solution: add mono audio only config Verify: verified by einstein Change-Id: I774d7aa42ffbfcbec58b9b21f05368c5166331c8 Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>
This commit is contained in:
committed by
Jianxin Pan
parent
835fc3016c
commit
34eabd97ad
@@ -92,6 +92,7 @@
|
||||
DEBUGFS_CREATE_NODE(audio_nicam_delay, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_a2_auto, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_a2_power_threshold, 0640, dentry, u32)\
|
||||
DEBUGFS_CREATE_NODE(audio_a2_carrier_report, 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)\
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include "atvauddemod_func.h"
|
||||
|
||||
|
||||
#define AMLATVDEMOD_VER "V2.05"
|
||||
#define AMLATVDEMOD_VER "V2.06"
|
||||
|
||||
struct aml_atvdemod_device *amlatvdemod_devp;
|
||||
|
||||
|
||||
@@ -245,7 +245,7 @@ static void atv_demod_set_params(struct dvb_frontend *fe,
|
||||
(p->tuner_id == AM_TUNER_SI2151) ||
|
||||
(p->tuner_id == AM_TUNER_SI2159) ||
|
||||
(p->tuner_id == AM_TUNER_MXL661))
|
||||
reconfig = true;
|
||||
reconfig = false;
|
||||
|
||||
/* In general, demod does not need to be reconfigured
|
||||
* if parameters such as STD remain unchanged,
|
||||
@@ -265,7 +265,7 @@ static void atv_demod_set_params(struct dvb_frontend *fe,
|
||||
amlatvdemod_devp->tuner_id = p->tuner_id;
|
||||
|
||||
atv_dmd_set_std();
|
||||
|
||||
atvdemod_init(!priv->scanning);
|
||||
} else
|
||||
atv_dmd_soft_reset();
|
||||
|
||||
@@ -537,7 +537,7 @@ static v4l2_std_id atvdemod_fe_tvin_fmt_to_v4l2_std(int fmt)
|
||||
|
||||
static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
int auto_search_std, v4l2_std_id *video_fmt,
|
||||
unsigned int *audio_fmt)
|
||||
unsigned int *audio_fmt, unsigned int *soundsys)
|
||||
{
|
||||
struct dvb_frontend *fe = &v4l2_fe->fe;
|
||||
struct v4l2_analog_parameters *p = &v4l2_fe->params;
|
||||
@@ -681,10 +681,17 @@ static void atvdemod_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
#endif
|
||||
}
|
||||
|
||||
pr_info("autodet audio mode %d, [%s][0x%x]\n",
|
||||
broad_std, v4l2_std_to_str(audio), audio);
|
||||
|
||||
*audio_fmt = audio;
|
||||
|
||||
/* for audio standard detection */
|
||||
if (is_meson_txlx_cpu() || is_meson_txhd_cpu() || is_meson_tl1_cpu()) {
|
||||
*soundsys = amlfmt_aud_standard(broad_std);
|
||||
*soundsys = (*soundsys << 16) | 0x00FFFF;
|
||||
} else
|
||||
*soundsys = 0xFFFFFF;
|
||||
|
||||
pr_info("autodet audio broad_std %d, [%s][0x%x] soundsys[0x%x]\n",
|
||||
broad_std, v4l2_std_to_str(audio), audio, *soundsys);
|
||||
}
|
||||
|
||||
static int atvdemod_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
@@ -826,8 +833,9 @@ static int atvdemod_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
static int atvdemod_fe_set_property(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_property *tvp)
|
||||
{
|
||||
struct dvb_frontend *fe = &amlatvdemod_devp->v4l2_fe.fe;
|
||||
struct dvb_frontend *fe = &v4l2_fe->fe;
|
||||
struct atv_demod_priv *priv = fe->analog_demod_priv;
|
||||
struct v4l2_analog_parameters *params = &v4l2_fe->params;
|
||||
|
||||
pr_dbg("%s: cmd = 0x%x.\n", __func__, tvp->cmd);
|
||||
|
||||
@@ -835,8 +843,10 @@ static int atvdemod_fe_set_property(struct v4l2_frontend *v4l2_fe,
|
||||
case V4L2_SOUND_SYS:
|
||||
/* aud_mode = tvp->data & 0xFF; */
|
||||
amlatvdemod_devp->soundsys = tvp->data & 0xFF;
|
||||
if (amlatvdemod_devp->soundsys != 0xFF)
|
||||
if (amlatvdemod_devp->soundsys != 0xFF) {
|
||||
aud_mode = amlatvdemod_devp->soundsys;
|
||||
params->soundsys = aud_mode;
|
||||
}
|
||||
priv->sound_sys.output_mode = tvp->data & 0xFF;
|
||||
break;
|
||||
|
||||
@@ -894,6 +904,7 @@ static enum v4l2_search atvdemod_fe_search(struct v4l2_frontend *v4l2_fe)
|
||||
int tuner_status_cnt_local = tuner_status_cnt;
|
||||
v4l2_std_id std_bk = 0;
|
||||
unsigned int audio = 0;
|
||||
unsigned int soundsys = 0;
|
||||
int double_check_cnt = 1;
|
||||
int auto_search_std = 0;
|
||||
int search_count = 0;
|
||||
@@ -935,6 +946,7 @@ static enum v4l2_search atvdemod_fe_search(struct v4l2_frontend *v4l2_fe)
|
||||
*/
|
||||
if (p->std == 0) {
|
||||
p->std = V4L2_COLOR_STD_NTSC | V4L2_STD_NTSC_M;
|
||||
/* p->std = V4L2_COLOR_STD_PAL | V4L2_STD_DK; */
|
||||
auto_search_std = 0x01;
|
||||
pr_dbg("[%s] user std is 0, so set it to NTSC | M.\n",
|
||||
__func__);
|
||||
@@ -1078,21 +1090,13 @@ static enum v4l2_search atvdemod_fe_search(struct v4l2_frontend *v4l2_fe)
|
||||
|
||||
pr_dbg("[%s] freq: [%d] pll lock success\n",
|
||||
__func__, p->frequency);
|
||||
#if 0 /* In get_pll_status has line_lock check.*/
|
||||
if (fee->tuner->drv->id == AM_TUNER_MXL661) {
|
||||
fe->ops.analog_ops.get_atv_status(fe,
|
||||
&atv_status);
|
||||
if (atv_status.atv_lock)
|
||||
usleep_range(30 * 1000,
|
||||
30 * 1000 + 100);
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = atvdemod_fe_afc_closer(v4l2_fe, minafcfreq,
|
||||
maxafcfreq + ATV_AFC_500KHZ, 1);
|
||||
if (ret == 0) {
|
||||
atvdemod_fe_try_analog_format(v4l2_fe,
|
||||
auto_search_std,
|
||||
&std_bk, &audio);
|
||||
&std_bk, &audio, &soundsys);
|
||||
|
||||
pr_dbg("[%s] freq:%d, std_bk:0x%x, audmode:0x%x, search OK.\n",
|
||||
__func__, p->frequency,
|
||||
@@ -1103,6 +1107,7 @@ static enum v4l2_search atvdemod_fe_search(struct v4l2_frontend *v4l2_fe)
|
||||
p->std = std_bk;
|
||||
/*avoid std unenable */
|
||||
p->frequency -= 1;
|
||||
p->soundsys = soundsys;
|
||||
std_bk = 0;
|
||||
audio = 0;
|
||||
}
|
||||
|
||||
@@ -494,7 +494,7 @@ static unsigned int v4l2_frontend_poll(struct file *filp,
|
||||
poll_wait(filp, &fepriv->events.wait_queue, pts);
|
||||
|
||||
if (fepriv->events.eventw != fepriv->events.eventr) {
|
||||
pr_dbg("%s: POLLIN | POLLRDNORM | POLLPRI.\n", __func__);
|
||||
pr_dbg("%s: POLLIN | POLLRDNORM | POLLPRI.\n", __func__);
|
||||
return (POLLIN | POLLRDNORM | POLLPRI);
|
||||
}
|
||||
|
||||
@@ -538,11 +538,13 @@ static int v4l2_property_process_set(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_property *tvp, struct file *file)
|
||||
{
|
||||
int r = 0;
|
||||
struct v4l2_analog_parameters *params = &v4l2_fe->params;
|
||||
|
||||
v4l2_property_dump(v4l2_fe, true, tvp);
|
||||
|
||||
switch (tvp->cmd) {
|
||||
case V4L2_TUNE:
|
||||
v4l2_set_frontend(v4l2_fe, params);
|
||||
break;
|
||||
case V4L2_SOUND_SYS:
|
||||
case V4L2_SLOW_SEARCH_MODE:
|
||||
@@ -553,6 +555,20 @@ static int v4l2_property_process_set(struct v4l2_frontend *v4l2_fe,
|
||||
return r;
|
||||
}
|
||||
break;
|
||||
case V4L2_FREQUENCY:
|
||||
params->frequency = tvp->data;
|
||||
break;
|
||||
case V4L2_STD:
|
||||
/* std & 0xFF000000: color std */
|
||||
/* std & 0x00FFFFFF: audio std */
|
||||
if (tvp->data & 0xFF000000)
|
||||
params->std = (tvp->data & 0xFF000000);
|
||||
if (tvp->data & 0x00FFFFFF) {
|
||||
params->audmode = params->std & 0xFFFFFF;
|
||||
params->std = (tvp->data & 0xFF000000)
|
||||
| (params->audmode);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -564,6 +580,7 @@ static int v4l2_property_process_get(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_property *tvp, struct file *file)
|
||||
{
|
||||
int r = 0;
|
||||
struct v4l2_analog_parameters *params = &v4l2_fe->params;
|
||||
|
||||
switch (tvp->cmd) {
|
||||
case V4L2_SOUND_SYS:
|
||||
@@ -575,7 +592,14 @@ static int v4l2_property_process_get(struct v4l2_frontend *v4l2_fe,
|
||||
return r;
|
||||
}
|
||||
break;
|
||||
|
||||
case V4L2_FREQUENCY:
|
||||
tvp->data = params->frequency;
|
||||
break;
|
||||
case V4L2_STD:
|
||||
/* std & 0xFF000000: color std */
|
||||
/* std & 0x00FFFFFF: audio std */
|
||||
tvp->data = params->std;
|
||||
break;
|
||||
default:
|
||||
pr_dbg("%s: V4L2 property %d doesn't exist\n",
|
||||
__func__, tvp->cmd);
|
||||
|
||||
@@ -92,7 +92,8 @@
|
||||
#define V4L2_TUNE 1
|
||||
#define V4L2_SOUND_SYS 2
|
||||
#define V4L2_SLOW_SEARCH_MODE 3
|
||||
|
||||
#define V4L2_FREQUENCY 4
|
||||
#define V4L2_STD 5
|
||||
|
||||
struct v4l2_frontend;
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ unsigned int audio_thd_threshold2 = 0xf00;
|
||||
|
||||
unsigned int audio_a2_auto = 1;
|
||||
unsigned int audio_a2_power_threshold = 0x1800;
|
||||
unsigned int audio_a2_carrier_report = 0x600;
|
||||
|
||||
static int last_nicam_lock = -1;
|
||||
static int last_nicam_mono_flag = -1;
|
||||
@@ -717,6 +718,101 @@ void set_nicam_l(void)
|
||||
aa = (int)((FCLK-5.85e6)/FCLK*1024.0*1024.0*16.0);
|
||||
adec_wr_reg(0x110, aa);
|
||||
}
|
||||
|
||||
void set_mono_m(void)
|
||||
{
|
||||
int aa;
|
||||
|
||||
adec_wr_reg(ADDR_ADEC_CTRL, 0x2);
|
||||
|
||||
set_filter(filter_50k, ADDR_DDC_FIR0_COEF, 65);
|
||||
set_filter(filter_50k, ADDR_DDC_FIR1_COEF, 65);
|
||||
|
||||
aa = (int)(4.5e6/FCLK*1024.0*1024.0*8.0);
|
||||
adec_wr_reg(ADDR_DDC_FREQ0, aa);
|
||||
|
||||
set_lpf15k();
|
||||
set_deem(0);
|
||||
|
||||
adec_wr_reg(ADDR_DEMOD_GAIN, 0x12);
|
||||
|
||||
adec_wr_reg(ADDR_LPR_GAIN_ADJ, 0x200);
|
||||
|
||||
adec_wr_reg((ADDR_SEL_CTRL), 0x1000);
|
||||
|
||||
set_lpf15k();
|
||||
set_deem(0);
|
||||
}
|
||||
|
||||
void set_mono_dk(void)
|
||||
{
|
||||
int aa;
|
||||
|
||||
adec_wr_reg(ADDR_ADEC_CTRL, 0xa);
|
||||
|
||||
set_filter(filter_100k, ADDR_DDC_FIR0_COEF, 65);
|
||||
set_filter(filter_100k, ADDR_DDC_FIR1_COEF, 65);
|
||||
|
||||
aa = (int)(6.5e6/FCLK*1024.0*1024.0*8.0);
|
||||
adec_wr_reg(ADDR_DDC_FREQ0, aa);
|
||||
|
||||
adec_wr_reg(ADDR_LPR_GAIN_ADJ, 0x200);
|
||||
|
||||
set_deem(1);
|
||||
set_lpf15k();
|
||||
}
|
||||
|
||||
void set_mono_i(void)
|
||||
{
|
||||
int aa;
|
||||
|
||||
adec_wr_reg(ADDR_ADEC_CTRL, 0x7);
|
||||
|
||||
set_filter(filter_100k, ADDR_DDC_FIR0_COEF, 65);
|
||||
set_filter(filter_100k, ADDR_DDC_FIR1_COEF, 65);
|
||||
|
||||
aa = (int)(6.0e6/FCLK*1024.0*1024.0*8.0);
|
||||
adec_wr_reg(ADDR_DDC_FREQ0, aa);
|
||||
adec_wr_reg(ADDR_LPR_GAIN_ADJ, 0x200);
|
||||
|
||||
set_deem(1);
|
||||
set_lpf15k();
|
||||
}
|
||||
|
||||
void set_mono_bg(void)
|
||||
{
|
||||
int aa;
|
||||
|
||||
adec_wr_reg(ADDR_ADEC_CTRL, 0x8);
|
||||
|
||||
set_filter(filter_100k, ADDR_DDC_FIR0_COEF, 65);
|
||||
set_filter(filter_100k, ADDR_DDC_FIR1_COEF, 65);
|
||||
|
||||
aa = (int)(5.5e6/FCLK*1024.0*1024.0*8.0);
|
||||
adec_wr_reg(ADDR_DDC_FREQ0, aa);
|
||||
adec_wr_reg(ADDR_LPR_GAIN_ADJ, 0x200);
|
||||
|
||||
set_deem(1);
|
||||
set_lpf15k();
|
||||
}
|
||||
|
||||
void set_mono_l(void)
|
||||
{
|
||||
int aa;
|
||||
|
||||
adec_wr_reg(ADDR_ADEC_CTRL, 0x9);
|
||||
|
||||
set_filter(filter_100k, ADDR_DDC_FIR0_COEF, 65);
|
||||
set_filter(filter_100k, ADDR_DDC_FIR1_COEF, 65);
|
||||
|
||||
aa = (int)(6.5e6/FCLK*1024.0*1024.0*8.0);
|
||||
adec_wr_reg(ADDR_DDC_FREQ0, aa);
|
||||
adec_wr_reg(ADDR_LPR_GAIN_ADJ, 0x200);
|
||||
|
||||
set_deem(1);
|
||||
set_lpf15k();
|
||||
}
|
||||
|
||||
static void set_standard(uint32_t standard)
|
||||
{
|
||||
pr_info("\n<<<<<<<<<<<<<<< start configure register\n");
|
||||
@@ -766,6 +862,26 @@ static void set_standard(uint32_t standard)
|
||||
pr_info("<<<<<<<<<<<<<<< Set NICAM L and Test\n");
|
||||
set_nicam_l();
|
||||
break;
|
||||
case AUDIO_STANDARD_MONO_M:
|
||||
pr_info("<<<<<<<<<<<<<<< Set mono M and Test\n");
|
||||
set_mono_m();
|
||||
break;
|
||||
case AUDIO_STANDARD_MONO_DK:
|
||||
pr_info("<<<<<<<<<<<<<<< Set mono DK and Test\n");
|
||||
set_mono_dk();
|
||||
break;
|
||||
case AUDIO_STANDARD_MONO_I:
|
||||
pr_info("<<<<<<<<<<<<<<< Set mono I and Test\n");
|
||||
set_mono_i();
|
||||
break;
|
||||
case AUDIO_STANDARD_MONO_BG:
|
||||
pr_info("<<<<<<<<<<<<<<< Set mono BG and Test\n");
|
||||
set_mono_bg();
|
||||
break;
|
||||
case AUDIO_STANDARD_MONO_L:
|
||||
pr_info("<<<<<<<<<<<<<<< Set mono L and Test\n");
|
||||
set_mono_l();
|
||||
break;
|
||||
}
|
||||
|
||||
pr_info("\n<<<<<<<<<<<<<<< configure register finished\n");
|
||||
@@ -789,7 +905,7 @@ void update_a2_eiaj_mode(int auto_en, int *stereo_flag, int *dual_flag)
|
||||
|
||||
if (auto_en) {
|
||||
reg_value = adec_rd_reg(CARRIER_MAG_REPORT);
|
||||
if (((reg_value >> 16) & 0xffff) < 0x400) {
|
||||
if (((reg_value >> 16) & 0xffff) < audio_a2_carrier_report) {
|
||||
*stereo_flag = 0;
|
||||
*dual_flag = 0;
|
||||
} else {
|
||||
|
||||
@@ -41,6 +41,7 @@ unsigned int aud_std = AUDIO_STANDARD_NICAM_DK;
|
||||
unsigned int aud_mode = AUDIO_OUTMODE_STEREO;
|
||||
bool aud_auto = true;
|
||||
bool aud_reinit;
|
||||
bool aud_mono_only;
|
||||
unsigned long over_threshold = 0xffff;
|
||||
unsigned long input_amplitude = 0xffff;
|
||||
|
||||
@@ -139,6 +140,9 @@ void atv_dmd_soft_reset(void)
|
||||
atv_dmd_wr_byte(APB_BLOCK_ADDR_SYSTEM_MGT, 0x0, 0x0);
|
||||
atv_dmd_wr_byte(APB_BLOCK_ADDR_SYSTEM_MGT, 0x0, 0x1);
|
||||
atv_dmd_wr_long(0x1d, 0x0, 0x1037);/* enable dac */
|
||||
|
||||
/* for +-0.5M scanning lose */
|
||||
atv_dmd_wr_long(APB_BLOCK_ADDR_CARR_RCVY, 0x24, 0xc010301);
|
||||
}
|
||||
|
||||
void atv_dmd_input_clk_32m(void)
|
||||
@@ -1661,6 +1665,14 @@ int amlfmt_aud_standard(int broad_std)
|
||||
switch (broad_std) {
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M:
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_M;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_A2_K;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
@@ -1671,7 +1683,8 @@ int amlfmt_aud_standard(int broad_std)
|
||||
|
||||
/* maybe need wait */
|
||||
reg_value = adec_rd_reg(CARRIER_MAG_REPORT);
|
||||
pr_info("\n%s 0x%x\n", __func__, (reg_value>>16)&0xffff);
|
||||
pr_info("\n%s CARRIER_MAG_REPORT: 0x%x\n",
|
||||
__func__, (reg_value >> 16) & 0xffff);
|
||||
if (((reg_value>>16)&0xffff) > audio_a2_threshold) {
|
||||
std = AUDIO_STANDARD_A2_K;
|
||||
if (amlatvdemod_devp->soundsys == 0xFF)
|
||||
@@ -1689,11 +1702,27 @@ int amlfmt_aud_standard(int broad_std)
|
||||
}
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_NTSC_J:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_M;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_EIAJ;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_BG;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_NICAM_BG;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
@@ -1704,8 +1733,9 @@ int amlfmt_aud_standard(int broad_std)
|
||||
retrieve_vpll_carrier_line_lock(&line_lock);
|
||||
|
||||
reg_value = adec_rd_reg(NICAM_LEVEL_REPORT);
|
||||
nicam_lock = (reg_value>>28)&1;
|
||||
pr_info("\n%s 0x%x\n", __func__, reg_value);
|
||||
nicam_lock = (reg_value >> 28) & 1;
|
||||
pr_info("\n%s NICAM_LEVEL_REPORT: 0x%x\n",
|
||||
__func__, reg_value);
|
||||
if (nicam_lock) {
|
||||
std = AUDIO_STANDARD_NICAM_BG;
|
||||
if (amlatvdemod_devp->soundsys == 0xFF)
|
||||
@@ -1723,6 +1753,14 @@ int amlfmt_aud_standard(int broad_std)
|
||||
}
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_DK;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_NICAM_DK;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
@@ -1733,8 +1771,9 @@ int amlfmt_aud_standard(int broad_std)
|
||||
retrieve_vpll_carrier_line_lock(&line_lock);
|
||||
|
||||
reg_value = adec_rd_reg(NICAM_LEVEL_REPORT);
|
||||
nicam_lock = (reg_value>>28)&1;
|
||||
pr_info("\n%s 0x%x\n", __func__, reg_value);
|
||||
nicam_lock = (reg_value >> 28) & 1;
|
||||
pr_info("\n%s NICAM_LEVEL_REPORT: 0x%x\n",
|
||||
__func__, reg_value);
|
||||
if (nicam_lock) {
|
||||
std = AUDIO_STANDARD_NICAM_DK;
|
||||
if (amlatvdemod_devp->soundsys == 0xFF)
|
||||
@@ -1752,14 +1791,74 @@ int amlfmt_aud_standard(int broad_std)
|
||||
}
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_I;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_NICAM_I;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
msleep(audio_nicam_delay);
|
||||
/* need wait */
|
||||
|
||||
retrieve_vpll_carrier_lock(&vpll_lock);
|
||||
retrieve_vpll_carrier_line_lock(&line_lock);
|
||||
|
||||
reg_value = adec_rd_reg(NICAM_LEVEL_REPORT);
|
||||
nicam_lock = (reg_value >> 28) & 1;
|
||||
pr_info("\n%s NICAM_LEVEL_REPORT: 0x%x\n",
|
||||
__func__, reg_value);
|
||||
if (nicam_lock) {
|
||||
std = AUDIO_STANDARD_NICAM_I;
|
||||
if (amlatvdemod_devp->soundsys == 0xFF)
|
||||
aud_mode = AUDIO_OUTMODE_NICAM_STEREO;
|
||||
else
|
||||
aud_mode = amlatvdemod_devp->soundsys;
|
||||
} else {
|
||||
std = AUDIO_STANDARD_MONO_I;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
}
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_L:
|
||||
if (aud_mono_only) {
|
||||
std = AUDIO_STANDARD_MONO_L;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
break;
|
||||
}
|
||||
|
||||
std = AUDIO_STANDARD_NICAM_L;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
msleep(audio_nicam_delay);
|
||||
/* need wait */
|
||||
|
||||
retrieve_vpll_carrier_lock(&vpll_lock);
|
||||
retrieve_vpll_carrier_line_lock(&line_lock);
|
||||
|
||||
reg_value = adec_rd_reg(NICAM_LEVEL_REPORT);
|
||||
nicam_lock = (reg_value >> 28) & 1;
|
||||
pr_info("\n%s NICAM_LEVEL_REPORT: 0x%x\n",
|
||||
__func__, reg_value);
|
||||
if (nicam_lock) {
|
||||
std = AUDIO_STANDARD_NICAM_L;
|
||||
if (amlatvdemod_devp->soundsys == 0xFF)
|
||||
aud_mode = AUDIO_OUTMODE_NICAM_STEREO;
|
||||
else
|
||||
aud_mode = amlatvdemod_devp->soundsys;
|
||||
} else {
|
||||
std = AUDIO_STANDARD_MONO_L;
|
||||
aud_mode = AUDIO_OUTMODE_MONO;
|
||||
configure_adec(std);
|
||||
adec_soft_reset();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1810,7 +1909,7 @@ void atvauddemod_set_outputmode(void)
|
||||
}
|
||||
}
|
||||
|
||||
int atvdemod_init(void)
|
||||
int atvdemod_init(bool on)
|
||||
{
|
||||
/* 1.set system clock when atv enter*/
|
||||
|
||||
@@ -1821,8 +1920,8 @@ int atvdemod_init(void)
|
||||
pr_dbg("%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)
|
||||
if (on && (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);
|
||||
@@ -1957,9 +2056,6 @@ void atv_dmd_set_std(void)
|
||||
pr_dbg("[%s] set if_freq %d, if_inv %d.\n",
|
||||
__func__, amlatvdemod_devp->if_freq,
|
||||
amlatvdemod_devp->if_inv);
|
||||
|
||||
if (atvdemod_init())
|
||||
pr_info("[%s]: atv restart error.\n", __func__);
|
||||
}
|
||||
|
||||
int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
@@ -1982,11 +2078,6 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
bool ntsc_signal = false;
|
||||
bool pal_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 */
|
||||
atv_dmd_wr_reg(APB_BLOCK_ADDR_SIF_STG_2, 0x02, temp_data);
|
||||
#endif
|
||||
|
||||
switch (broad_std) {
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
|
||||
@@ -2004,15 +2095,6 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
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);
|
||||
temp_data = temp_data & (~0x80); /* 0xbf; */
|
||||
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:
|
||||
@@ -2022,7 +2104,7 @@ int aml_audiomode_autodet(struct v4l2_frontend *v4l2_fe)
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M;
|
||||
} else {
|
||||
broad_std = AML_ATV_DEMOD_VIDEO_MODE_PROP_SECAM_L;
|
||||
atvdemod_init();
|
||||
atvdemod_init(false);
|
||||
temp_data = atv_dmd_rd_reg(APB_BLOCK_ADDR_SIF_STG_2,
|
||||
0x02);
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ extern void configure_receiver(int Broadcast_Standard,
|
||||
int Tuner_Input_IF_inverted, int GDE_Curve,
|
||||
int sound_format);
|
||||
extern int atvdemod_clk_init(void);
|
||||
extern int atvdemod_init(void);
|
||||
extern int atvdemod_init(bool on);
|
||||
extern void atvdemod_uninit(void);
|
||||
extern void atv_dmd_set_std(void);
|
||||
extern void retrieve_adc_power(int *adc_level);
|
||||
@@ -204,6 +204,7 @@ extern void retrieve_frequency_offset(int *freq_offset);
|
||||
extern void retrieve_field_lock(int *lock);
|
||||
extern void set_atvdemod_scan_mode(int val);
|
||||
extern int atvauddemod_init(void);
|
||||
extern int amlfmt_aud_standard(int broad_std);
|
||||
extern void atvauddemod_set_outputmode(void);
|
||||
|
||||
/*from amldemod/amlfrontend.c*/
|
||||
|
||||
@@ -318,6 +318,11 @@
|
||||
#define AUDIO_STANDARD_INDIAN 0x0F
|
||||
#define AUDIO_STANDARD_BTSC_SA 0x10
|
||||
#define AUDIO_STANDARD_MONO_ONLY 0x11
|
||||
#define AUDIO_STANDARD_MONO_BG 0x12
|
||||
#define AUDIO_STANDARD_MONO_DK 0x13
|
||||
#define AUDIO_STANDARD_MONO_I 0x14
|
||||
#define AUDIO_STANDARD_MONO_M 0x15
|
||||
#define AUDIO_STANDARD_MONO_L 0x16
|
||||
|
||||
#define AUDIO_OUTMODE_MONO 0
|
||||
#define AUDIO_OUTMODE_STEREO 1
|
||||
|
||||
Reference in New Issue
Block a user