mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
atv_demod: add atbm2040 tuner support [1/3]
PD#TV-5499 Problem: add atbm2040 tuner support. Solution: add atbm2040 tuner support. Verify: Verified by x301. Change-Id: I89f82727c7c11f5fc6377584d519a17fe3449c4a Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>
This commit is contained in:
@@ -479,6 +479,8 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_R840;
|
||||
else if (!strncmp(str, "r842_tuner", 10))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_R842;
|
||||
else if (!strncmp(str, "atbm2040_tuner", 14))
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_ATBM2040;
|
||||
else {
|
||||
pr_err("can't support tuner: %s.\n", str);
|
||||
pdev->tuners[i].cfg.id = AM_TUNER_NONE;
|
||||
@@ -523,7 +525,7 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
else
|
||||
pdev->tuners[i].cfg.xtal_cap = val;
|
||||
|
||||
pr_err("find tuner %d.\n", i);
|
||||
pr_err("find tuner %s [%d].\n", str, pdev->tuners[i].cfg.id);
|
||||
}
|
||||
|
||||
of_node_put(node_tuner);
|
||||
@@ -592,6 +594,10 @@ int aml_attach_tuner(struct aml_atvdemod_device *dev)
|
||||
p = v4l2_attach(mxl661_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
case AM_TUNER_ATBM2040:
|
||||
p = v4l2_attach(atbm2040_attach, fe,
|
||||
dev->tuners[dev->tuner_cur].i2c_adp, cfg);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: Nonsupport tuner [%d].\n", __func__, cfg->id);
|
||||
break;
|
||||
|
||||
@@ -445,6 +445,10 @@ static struct analog_demod_ops atvdemod_ops = {
|
||||
|
||||
|
||||
unsigned int tuner_status_cnt = 4; /* 4-->16 test on sky mxl661 */
|
||||
/* 0: no check, 1: check */
|
||||
bool check_rssi = true;
|
||||
/* Less than -85, it means no signal */
|
||||
int tuner_rssi = -80;
|
||||
|
||||
bool slow_mode;
|
||||
|
||||
@@ -716,6 +720,7 @@ static void atvdemod_fe_try_signal(struct v4l2_frontend *v4l2_fe,
|
||||
/* unsigned int audio = 0; */
|
||||
/* bool try_secam = false; */
|
||||
unsigned int tuner_id = priv->atvdemod_param.tuner_id;
|
||||
s16 strength = 0;
|
||||
|
||||
params.frequency = p->frequency;
|
||||
params.mode = p->afc_range;
|
||||
@@ -736,6 +741,18 @@ static void atvdemod_fe_try_signal(struct v4l2_frontend *v4l2_fe,
|
||||
usleep_range(10 * 1000, 10 * 1000 + 100);
|
||||
}
|
||||
|
||||
/* Add tuner rssi strength check */
|
||||
if (tuner_id == AM_TUNER_ATBM2040 &&
|
||||
fe->ops.tuner_ops.get_strength && check_rssi) {
|
||||
fe->ops.tuner_ops.get_strength(fe, &strength);
|
||||
if (strength < tuner_rssi) {
|
||||
pr_err("[%s] freq: %d tuner RSSI [%d] less than [%d].\n",
|
||||
__func__, p->frequency,
|
||||
strength, tuner_rssi);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fe->ops.analog_ops.has_signal(fe, (u16 *)&ade_state);
|
||||
try_cnt--;
|
||||
if (((ade_state == V4L2_HAS_LOCK ||
|
||||
|
||||
@@ -2000,8 +2000,6 @@ void atvdemod_uninit(void)
|
||||
void atv_dmd_set_std(void)
|
||||
{
|
||||
v4l2_std_id ptstd = amlatvdemod_devp->std;
|
||||
int tuner_index = amlatvdemod_devp->tuner_cur;
|
||||
int tuner_id = amlatvdemod_devp->tuners[tuner_index].cfg.id;
|
||||
|
||||
/* set broad standard of tuner*/
|
||||
if (((ptstd & V4L2_COLOR_STD_PAL)
|
||||
@@ -2079,14 +2077,8 @@ void atv_dmd_set_std(void)
|
||||
}
|
||||
|
||||
/* Tuner returns the if and signal inverted states */
|
||||
if ((tuner_id == AM_TUNER_R840) ||
|
||||
(tuner_id == AM_TUNER_R842) ||
|
||||
(tuner_id == AM_TUNER_SI2151) ||
|
||||
(tuner_id == AM_TUNER_SI2159) ||
|
||||
(tuner_id == AM_TUNER_MXL661)) {
|
||||
if_freq = amlatvdemod_devp->if_freq;
|
||||
if_inv = amlatvdemod_devp->if_inv;
|
||||
}
|
||||
if_freq = amlatvdemod_devp->if_freq;
|
||||
if_inv = amlatvdemod_devp->if_inv;
|
||||
|
||||
pr_dbg("[%s] set broad_std %d, hz_cvrt 0x%x, offset %d.\n",
|
||||
__func__, broad_std, freq_hz_cvrt,
|
||||
|
||||
@@ -138,6 +138,7 @@ enum tuner_type {
|
||||
AM_TUNER_MXL608 = 11,
|
||||
AM_TUNER_SI2159 = 12,
|
||||
AM_TUNER_R842 = 13,
|
||||
AM_TUNER_ATBM2040 = 14,
|
||||
};
|
||||
|
||||
/* For configure different tuners */
|
||||
@@ -160,6 +161,8 @@ extern struct dvb_frontend *r840_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c_adap, struct tuner_config *cfg);
|
||||
extern struct dvb_frontend *r842_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c_adap, struct tuner_config *cfg);
|
||||
extern struct dvb_frontend *atbm2040_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c_adap, struct tuner_config *cfg);
|
||||
/* For attach tuner driver end*/
|
||||
|
||||
#endif /* __AML_ATVDEMOD_H__ */
|
||||
|
||||
Reference in New Issue
Block a user