From 9a89c689995c840c015e8e9feb405e87df096ad3 Mon Sep 17 00:00:00 2001 From: "nengwen.chen" Date: Tue, 24 Jul 2018 14:20:03 +0800 Subject: [PATCH] demod: prevent the agc pin conflict when used in atv or dtv demod [1/3] PD#170409: prevent the agc pin conflict when used in atv or dtv demod Change-Id: I78359502a97d79a703e990669bd1acddae6679ce Signed-off-by: nengwen.chen --- drivers/amlogic/atv_demod/atv_demod_ops.c | 9 +++++++-- drivers/amlogic/media/dtv_demod/amlfrontend.c | 8 ++++++-- drivers/media/dvb-core/dvb_frontend.c | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/amlogic/atv_demod/atv_demod_ops.c b/drivers/amlogic/atv_demod/atv_demod_ops.c index 1a2fed7..4eb44e5 100644 --- a/drivers/amlogic/atv_demod/atv_demod_ops.c +++ b/drivers/amlogic/atv_demod/atv_demod_ops.c @@ -468,10 +468,15 @@ int atv_demod_enter_mode(struct dvb_frontend *fe) if (atv_demod_get_state() == ATVDEMOD_STATE_WORK) return 0; #endif - if (amlatvdemod_devp->pin_name != NULL) + if (amlatvdemod_devp->pin_name != NULL) { amlatvdemod_devp->agc_pin = devm_pinctrl_get_select(amlatvdemod_devp->dev, amlatvdemod_devp->pin_name); + if (IS_ERR(amlatvdemod_devp->agc_pin)) { + amlatvdemod_devp->agc_pin = NULL; + pr_err("%s: get agc pins fail\n", __func__); + } + } adc_set_pll_cntl(1, 0x1, NULL); vdac_enable(1, 1); @@ -510,7 +515,7 @@ int atv_demod_leave_mode(struct dvb_frontend *fe) aml_afc_timer_disable(fe); atvdemod_uninit(); - if (amlatvdemod_devp->agc_pin != NULL) { + if (!IS_ERR_OR_NULL(amlatvdemod_devp->agc_pin)) { devm_pinctrl_put(amlatvdemod_devp->agc_pin); amlatvdemod_devp->agc_pin = NULL; } diff --git a/drivers/amlogic/media/dtv_demod/amlfrontend.c b/drivers/amlogic/media/dtv_demod/amlfrontend.c index 106e245..f2d395d 100644 --- a/drivers/amlogic/media/dtv_demod/amlfrontend.c +++ b/drivers/amlogic/media/dtv_demod/amlfrontend.c @@ -3008,9 +3008,13 @@ static void dtvdemod_set_agc_pinmux(int on) if (on) { dtvdd_devp->pin = devm_pinctrl_get_select(dtvdd_devp->dev, dtvdd_devp->pin_name); + if (IS_ERR(dtvdd_devp->pin)) { + dtvdd_devp->pin = NULL; + PR_ERR("get agc pins fail\n"); + } } else { /*off*/ - if (dtvdd_devp->pin != NULL) { + if (!IS_ERR_OR_NULL(dtvdd_devp->pin)) { devm_pinctrl_put(dtvdd_devp->pin); dtvdd_devp->pin = NULL; } @@ -4064,7 +4068,7 @@ static struct dvb_frontend_ops aml_dtvdm_gxtvbb_ops = { }; static struct dvb_frontend_ops aml_dtvdm_txl_ops = { - .delsys = { /*SYS_DVBC_ANNEX_A,*/ SYS_DTMB, SYS_ANALOG}, + .delsys = { SYS_DVBC_ANNEX_A, SYS_DTMB, SYS_ANALOG}, .info = { /*in aml_fe, it is 'amlogic dvb frontend' */ .name = "amlogic dtv demod txl", diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index aadff13..09bffbcc 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c @@ -1544,7 +1544,8 @@ static bool is_dvbv3_delsys(u32 delsys) bool status; status = (delsys == SYS_DVBT) || (delsys == SYS_DVBC_ANNEX_A) || - (delsys == SYS_DVBS) || (delsys == SYS_ATSC); + (delsys == SYS_DVBS) || (delsys == SYS_ATSC) || + (delsys == SYS_DTMB); /* added by Amlogic 20180720 */ return status; } -- 2.7.4