unsigned int tuner_id = priv->atvdemod_param.tuner_id;
s16 strength = 0;
- params.frequency = p->frequency;
- params.mode = p->afc_range;
- params.audmode = p->audmode;
- params.std = p->std;
- fe->ops.analog_ops.set_params(fe, ¶ms);
+ if (fe->ops.analog_ops.set_params) {
+ params.frequency = p->frequency;
+ params.mode = p->afc_range;
+ params.audmode = p->audmode;
+ params.std = p->std;
+ fe->ops.analog_ops.set_params(fe, ¶ms);
+ }
*lock = false;
do {
struct v4l2_analog_parameters *p = &v4l2_fe->params;
struct analog_parameters params;
struct atv_demod_priv *priv = fe->analog_demod_priv;
- int afc = 100;
+ int afc = 0;
__u32 set_freq;
int count = 25;
int lock_cnt = 0;
set_freq = p->frequency;
while (abs(afc) > AFC_BEST_LOCK) {
- if (tuner_id == AM_TUNER_SI2151 ||
- tuner_id == AM_TUNER_SI2159 ||
- tuner_id == AM_TUNER_R840 ||
- tuner_id == AM_TUNER_R842)
- usleep_range(10 * 1000, 10 * 1000 + 100);
- else if (tuner_id == AM_TUNER_MXL661)
+ if (tuner_id == AM_TUNER_MXL661)
usleep_range(30 * 1000, 30 * 1000 + 100);
+ else
+ usleep_range(10 * 1000, 10 * 1000 + 100);
- if (fe->ops.analog_ops.get_afc &&
- ((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 (fe->ops.analog_ops.get_afc)
fe->ops.analog_ops.get_afc(fe, &afc);
else if (fe->ops.tuner_ops.get_afc)
fe->ops.tuner_ops.get_afc(fe, &afc);
fe->ops.tuner_ops.set_analog_params(fe,
¶ms);
- if (tuner_id == AM_TUNER_SI2151 ||
- tuner_id == AM_TUNER_SI2159 ||
- tuner_id == AM_TUNER_R840 ||
- tuner_id == AM_TUNER_R842)
- usleep_range(10 * 1000, 10 * 1000 + 100);
- else if (tuner_id == AM_TUNER_MXL661)
+ if (tuner_id == AM_TUNER_MXL661)
usleep_range(30 * 1000, 30 * 1000 + 100);
+ else
+ usleep_range(10 * 1000, 10 * 1000 + 100);
}
freq_success = p->frequency;
static int atvdemod_fe_tune(struct v4l2_frontend *v4l2_fe,
struct v4l2_tune_status *status)
{
- bool lock = 0;
+ bool lock = false;
int priv_cfg = 0;
int try_cnt = 4;
+ enum v4l2_status state = V4L2_TIMEDOUT;
struct v4l2_analog_parameters *p = &v4l2_fe->params;
struct dvb_frontend *fe = &v4l2_fe->fe;
- priv_cfg = AML_ATVDEMOD_SCAN_MODE;
- fe->ops.analog_ops.set_config(fe, &priv_cfg);
+ /* for tune */
+ if (p->flag & ANALOG_FLAG_ENABLE_AFC) {
+ priv_cfg = AML_ATVDEMOD_SCAN_MODE;
+ if (fe->ops.analog_ops.set_config)
+ fe->ops.analog_ops.set_config(fe, &priv_cfg);
- atvdemod_fe_try_signal(v4l2_fe, 0, &lock);
+ atvdemod_fe_try_signal(v4l2_fe, 0, &lock);
+ } else { /* for play */
+ if (fe->ops.analog_ops.has_signal)
+ fe->ops.analog_ops.has_signal(fe, (u16 *) &state);
+
+ if (state == V4L2_HAS_LOCK)
+ lock = true;
+ else
+ lock = false;
+ }
if (lock) {
status->lock = 1;
__func__, status->lock, status->afc,
p->frequency, p->flag);
- priv_cfg = AML_ATVDEMOD_UNSCAN_MODE;
- fe->ops.analog_ops.set_config(fe, &priv_cfg);
+ if (p->flag & ANALOG_FLAG_ENABLE_AFC) {
+ priv_cfg = AML_ATVDEMOD_UNSCAN_MODE;
+ if (fe->ops.analog_ops.set_config)
+ fe->ops.analog_ops.set_config(fe, &priv_cfg);
+ }
return 0;
}
int auto_detect = AUTO_DETECT_COLOR | AUTO_DETECT_AUDIO;
priv_cfg = AML_ATVDEMOD_SCAN_MODE;
- fe->ops.analog_ops.set_config(fe, &priv_cfg);
+ if (fe->ops.analog_ops.set_config)
+ fe->ops.analog_ops.set_config(fe, &priv_cfg);
atvdemod_fe_try_analog_format(v4l2_fe, auto_detect,
&std_bk, &audio, &soundsys);
}
priv_cfg = AML_ATVDEMOD_UNSCAN_MODE;
- fe->ops.analog_ops.set_config(fe, &priv_cfg);
+ if (fe->ops.analog_ops.set_config)
+ fe->ops.analog_ops.set_config(fe, &priv_cfg);
return 0;
}
* and need tvafe identify signal type.
*/
if (p->std == 0) {
- p->std = V4L2_COLOR_STD_NTSC | V4L2_STD_NTSC_M;
- /* p->std = V4L2_COLOR_STD_PAL | V4L2_STD_DK; */
+ if (tuner_id == AM_TUNER_ATBM2040)
+ p->std = V4L2_COLOR_STD_PAL | V4L2_STD_PAL_DK;
+ else
+ p->std = V4L2_COLOR_STD_NTSC | V4L2_STD_NTSC_M;
auto_search_std = AUTO_DETECT_COLOR;
- pr_dbg("[%s] user std is 0, so set it to NTSC | M.\n",
- __func__);
+ pr_dbg("[%s] user std is 0, so set it to %s.\n",
+ __func__, v4l2_std_to_str(p->std & 0xFF000000));
}
if (p->audmode == 0) {