mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
atv_demod: Add atv demod
PD#163853: Add atv demod Change-Id: Ia3a7f51927df92025a67923e5acce2f0f07e674c Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>
This commit is contained in:
@@ -4,29 +4,3 @@ aml_atvdemod-objs = atvdemod_func.o atvauddemod_func.o atv_demod_v4l2.o atv_demo
|
||||
|
||||
ccflags-y += -I.
|
||||
ccflags-y += -Idrivers/media/dvb-core
|
||||
#ccflags-y += -Idrivers/amlogic/tuners/mxl661
|
||||
#ccflags-y += -Idrivers/amlogic/tuners/si2151
|
||||
|
||||
#obj-m += aml_atvdemod.o
|
||||
#
|
||||
#aml_atvdemod-objs = atvdemod_func.o atvauddemod_func.o
|
||||
#
|
||||
#aml_atvdemod-objs += atv_demod_v4l2.o atv_demod_driver.o atv_demod_ops.o
|
||||
#
|
||||
#ccflags-y += -I.
|
||||
#ccflags-y += -Idrivers/media/dvb-core
|
||||
#
|
||||
#TARGET_PRODUCT=t962e_r321
|
||||
#KERNEL_ARCH=arm64
|
||||
#CROSS_COMPILE=aarch64-linux-gnu-
|
||||
#PRODUCT_OUT=../../../../out/target/product/$(TARGET_PRODUCT)/obj/KERNEL_OBJ
|
||||
#
|
||||
#KBUILD_EXTRA_SYMBOLS += $(shell pwd)/../tuner/si2151_4.9/Module.symvers
|
||||
#
|
||||
#export KBUILD_EXTRA_SYMBOLS
|
||||
#
|
||||
#all:
|
||||
# $(MAKE) -C $(PRODUCT_OUT) M=$(shell pwd) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
|
||||
#
|
||||
#clean:
|
||||
# rm -rf *.ko .*.ko.cmd *.o *.order *.symvers -f *.cmd .*.o.cmd *.mod.c .tmp_versions/
|
||||
@@ -16,25 +16,28 @@
|
||||
|
||||
extern int atvdemod_debug_en;
|
||||
|
||||
#undef pr_fmt
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#undef pr_info
|
||||
#define pr_info(args...)\
|
||||
#define pr_info(fmt, ...)\
|
||||
do {\
|
||||
if (atvdemod_debug_en)\
|
||||
printk(args);\
|
||||
if (1)\
|
||||
printk(fmt, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#undef pr_dbg
|
||||
#define pr_dbg(args...) \
|
||||
#define pr_dbg(fmt, ...) \
|
||||
do {\
|
||||
if (atvdemod_debug_en == 2)\
|
||||
printk(args);\
|
||||
if (atvdemod_debug_en)\
|
||||
printk(fmt, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#undef pr_err
|
||||
#define pr_err(args...) \
|
||||
#define pr_err(fmt, ...) \
|
||||
do {\
|
||||
if (1)\
|
||||
printk(args);\
|
||||
printk(fmt, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#endif /* __ATV_DEMOD_DEBUG_H__ */
|
||||
|
||||
@@ -71,30 +71,29 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
parm[n++] = token;
|
||||
}
|
||||
|
||||
if (!strncmp(parm[0], "init", strlen("init"))) {
|
||||
if (!strncmp(parm[0], "init", 4)) {
|
||||
ret = atv_demod_enter_mode();
|
||||
if (ret)
|
||||
pr_info("[tuner..] atv_restart error.\n");
|
||||
} else if (!strncmp(parm[0], "audout_mode", strlen("audout_mode"))) {
|
||||
pr_info("atv init error.\n");
|
||||
} else if (!strncmp(parm[0], "audout_mode", 11)) {
|
||||
if (get_atvdemod_state() == ATVDEMOD_STATE_WORK) {
|
||||
if (is_meson_txlx_cpu()) {
|
||||
atvauddemod_set_outputmode();
|
||||
pr_info("[tuner..] atvauddemod_set_outputmode done ....\n");
|
||||
pr_info("atvauddemod_set_outputmode done ....\n");
|
||||
}
|
||||
} else {
|
||||
pr_info("[tuner..] atvdemod_state not work ....\n");
|
||||
pr_info("atvdemod_state not work ....\n");
|
||||
}
|
||||
} else if (!strncmp(parm[0], "signal_audmode",
|
||||
strlen("signal_audmode"))) {
|
||||
} else if (!strncmp(parm[0], "signal_audmode", 14)) {
|
||||
int stereo_flag, sap_flag;
|
||||
|
||||
if (get_atvdemod_state() == ATVDEMOD_STATE_WORK) {
|
||||
if (is_meson_txlx_cpu()) {
|
||||
update_btsc_mode(1, &stereo_flag, &sap_flag);
|
||||
pr_info("[tuner..] get signal_audmode done ....\n");
|
||||
pr_info("get signal_audmode done ....\n");
|
||||
}
|
||||
} else {
|
||||
pr_info("[tuner..] atvdemod_state not work ....\n");
|
||||
pr_info("atvdemod_state not work ....\n");
|
||||
}
|
||||
} else if (!strncmp(parm[0], "clk", 3)) {
|
||||
adc_set_pll_cntl(1, 0x1, NULL);
|
||||
@@ -102,51 +101,45 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
if (is_meson_txlx_cpu() || is_meson_txhd_cpu())
|
||||
aud_demod_clk_gate(1);
|
||||
pr_info("atvdemod_clk_init done ....\n");
|
||||
} else if (!strcmp(parm[0], "tune")) {
|
||||
} else if (!strncmp(parm[0], "tune", 4)) {
|
||||
/* val = simple_strtol(parm[1], NULL, 10); */
|
||||
} else if (!strcmp(parm[0], "set")) {
|
||||
if (!strncmp(parm[1], "avout_gain", strlen("avout_gain"))) {
|
||||
} else if (!strncmp(parm[0], "set", 3)) {
|
||||
if (!strncmp(parm[1], "avout_gain", 10)) {
|
||||
if (kstrtoul(buf + strlen("avout_offset") + 1,
|
||||
10, &tmp) == 0)
|
||||
val = tmp;
|
||||
atv_dmd_wr_byte(0x0c, 0x01, val & 0xff);
|
||||
} else if (!strncmp(parm[1], "avout_offset",
|
||||
strlen("avout_offset"))) {
|
||||
} else if (!strncmp(parm[1], "avout_offset", 12)) {
|
||||
if (kstrtoul(buf + strlen("avout_offset") + 1,
|
||||
10, &tmp) == 0)
|
||||
val = tmp;
|
||||
atv_dmd_wr_byte(0x0c, 0x04, val & 0xff);
|
||||
} else if (!strncmp(parm[1], "atv_gain",
|
||||
strlen("atv_gain"))) {
|
||||
} else if (!strncmp(parm[1], "atv_gain", 8)) {
|
||||
if (kstrtoul(buf + strlen("atv_gain") + 1,
|
||||
10, &tmp) == 0)
|
||||
val = tmp;
|
||||
atv_dmd_wr_byte(0x19, 0x01, val & 0xff);
|
||||
} else if (!strncmp(parm[1], "atv_offset",
|
||||
strlen("atv_offset"))) {
|
||||
} else if (!strncmp(parm[1], "atv_offset", 10)) {
|
||||
if (kstrtoul(buf + strlen("atv_offset") + 1,
|
||||
10, &tmp) == 0)
|
||||
val = tmp;
|
||||
atv_dmd_wr_byte(0x19, 0x04, val & 0xff);
|
||||
}
|
||||
} else if (!strcmp(parm[0], "get")) {
|
||||
if (!strncmp(parm[1], "avout_gain", strlen("avout_gain"))) {
|
||||
} else if (!strncmp(parm[0], "get", 3)) {
|
||||
if (!strncmp(parm[1], "avout_gain", 10)) {
|
||||
val = atv_dmd_rd_byte(0x0c, 0x01);
|
||||
pr_dbg("avout_gain:0x%x\n", val);
|
||||
} else if (!strncmp(parm[1], "avout_offset",
|
||||
strlen("avout_offset"))) {
|
||||
} else if (!strncmp(parm[1], "avout_offset", 12)) {
|
||||
val = atv_dmd_rd_byte(0x0c, 0x04);
|
||||
pr_dbg("avout_offset:0x%x\n", val);
|
||||
} else if (!strncmp(parm[1], "atv_gain",
|
||||
strlen("atv_gain"))) {
|
||||
} else if (!strncmp(parm[1], "atv_gain", 8)) {
|
||||
val = atv_dmd_rd_byte(0x19, 0x01);
|
||||
pr_dbg("atv_gain:0x%x\n", val);
|
||||
} else if (!strncmp(parm[1], "atv_offset",
|
||||
strlen("atv_offset"))) {
|
||||
} else if (!strncmp(parm[1], "atv_offset", 10)) {
|
||||
val = atv_dmd_rd_byte(0x19, 0x04);
|
||||
pr_dbg("atv_offset:0x%x\n", val);
|
||||
}
|
||||
} else if (!strncmp(parm[0], "snr_hist", strlen("snr_hist"))) {
|
||||
} else if (!strncmp(parm[0], "snr_hist", 8)) {
|
||||
data_snr_avg = 0;
|
||||
for (i = 0; i < 128; i++) {
|
||||
data_snr[i] = (atv_dmd_rd_long(APB_BLOCK_ADDR_VDAGC,
|
||||
@@ -158,37 +151,32 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
pr_dbg("**********snr_hist_128avg:0x%x(%d)*********\n",
|
||||
data_snr_avg,
|
||||
data_snr_avg);
|
||||
} else if (!strncmp(parm[0], "afc_info", strlen("afc_info"))) {
|
||||
} else if (!strncmp(parm[0], "afc_info", 8)) {
|
||||
data_afc = retrieve_vpll_carrier_afc();
|
||||
pr_dbg("[amlatvdemod..]afc %d Khz.\n", data_afc);
|
||||
} else if (!strncmp(parm[0], "ver_info", strlen("ver_info"))) {
|
||||
pr_dbg("[amlatvdemod..]aml_atvdemod_ver %s.\n",
|
||||
pr_dbg("afc %d Khz.\n", data_afc);
|
||||
} else if (!strncmp(parm[0], "ver_info", 8)) {
|
||||
pr_dbg("aml_atvdemod_ver %s.\n",
|
||||
AMLATVDEMOD_VER);
|
||||
} else if (!strncmp(parm[0], "audio_autodet",
|
||||
strlen("audio_autodet"))) {
|
||||
} else if (!strncmp(parm[0], "audio_autodet", 13)) {
|
||||
aml_audiomode_autodet(NULL);
|
||||
} else if (!strncmp(parm[0], "overmodule_det",
|
||||
strlen("overmodule_det"))) {
|
||||
} else if (!strncmp(parm[0], "overmodule_det", 14)) {
|
||||
/* unsigned long over_threshold, */
|
||||
/* int det_mode = auto_det_mode; */
|
||||
aml_atvdemod_overmodule_det();
|
||||
} else if (!strncmp(parm[0], "audio_gain_set",
|
||||
strlen("audio_gain_set"))) {
|
||||
} else if (!strncmp(parm[0], "audio_gain_set", 14)) {
|
||||
if (kstrtoul(buf + strlen("audio_gain_set") + 1, 16, &tmp) == 0)
|
||||
val = tmp;
|
||||
aml_audio_valume_gain_set(val);
|
||||
pr_dbg("audio_gain_set : %d\n", val);
|
||||
} else if (!strncmp(parm[0], "audio_gain_get",
|
||||
strlen("audio_gain_get"))) {
|
||||
} else if (!strncmp(parm[0], "audio_gain_get", 14)) {
|
||||
val = aml_audio_valume_gain_get();
|
||||
pr_dbg("audio_gain_get : %d\n", val);
|
||||
} else if (!strncmp(parm[0], "fix_pwm_adj",
|
||||
strlen("fix_pwm_adj"))) {
|
||||
} else if (!strncmp(parm[0], "fix_pwm_adj", 11)) {
|
||||
if (kstrtoul(parm[1], 10, &tmp) == 0) {
|
||||
val = tmp;
|
||||
aml_fix_PWM_adjust(val);
|
||||
}
|
||||
} else if (!strncmp(parm[0], "rs", strlen("rs"))) {
|
||||
} else if (!strncmp(parm[0], "rs", 2)) {
|
||||
if (kstrtoul(parm[1], 16, &tmp) == 0)
|
||||
block_addr = tmp;
|
||||
if (kstrtoul(parm[2], 16, &tmp) == 0)
|
||||
@@ -198,7 +186,7 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
pr_dbg("rs block_addr:0x%x,block_reg:0x%x,block_val:0x%x\n",
|
||||
block_addr,
|
||||
block_reg, block_val);
|
||||
} else if (!strncmp(parm[0], "ws", strlen("ws"))) {
|
||||
} else if (!strncmp(parm[0], "ws", 2)) {
|
||||
if (kstrtoul(parm[1], 16, &tmp) == 0)
|
||||
block_addr = tmp;
|
||||
if (kstrtoul(parm[2], 16, &tmp) == 0)
|
||||
@@ -212,16 +200,16 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
block_reg, block_val);
|
||||
block_val = atv_dmd_rd_long(block_addr, block_reg);
|
||||
pr_dbg("readback_val:0x%x\n", block_val);
|
||||
} else if (!strncmp(parm[0], "pin_mux", strlen("pin_mux"))) {
|
||||
} else if (!strncmp(parm[0], "pin_mux", 7)) {
|
||||
aml_atvdemod_dev->pin = devm_pinctrl_get_select(
|
||||
aml_atvdemod_dev->dev,
|
||||
aml_atvdemod_dev->pin_name);
|
||||
pr_dbg("atvdemod agc pinmux name:%s\n",
|
||||
aml_atvdemod_dev->pin_name);
|
||||
} else if (!strncmp(parm[0], "snr_cur", strlen("snr_cur"))) {
|
||||
} else if (!strncmp(parm[0], "snr_cur", 7)) {
|
||||
data_snr_avg = aml_atvdemod_get_snr_ex();
|
||||
pr_dbg("**********snr_cur:%d*********\n", data_snr_avg);
|
||||
} else if (!strncmp(parm[0], "pll_status", strlen("pll_status"))) {
|
||||
} else if (!strncmp(parm[0], "pll_status", 10)) {
|
||||
int vpll_lock;
|
||||
|
||||
retrieve_vpll_carrier_lock(&vpll_lock);
|
||||
@@ -229,7 +217,7 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
pr_dbg("visual carrier lock:locked\n");
|
||||
else
|
||||
pr_dbg("visual carrier lock:unlocked\n");
|
||||
} else if (!strncmp(parm[0], "line_lock", strlen("line_lock"))) {
|
||||
} else if (!strncmp(parm[0], "line_lock", 9)) {
|
||||
int line_lock;
|
||||
|
||||
retrieve_vpll_carrier_line_lock(&line_lock);
|
||||
@@ -237,16 +225,16 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
pr_dbg("line lock:locked\n");
|
||||
else
|
||||
pr_dbg("line lock:unlocked\n");
|
||||
} else if (!strncmp(parm[0], "audio_power", strlen("audio_power"))) {
|
||||
} else if (!strncmp(parm[0], "audio_power", 11)) {
|
||||
int audio_power = 0;
|
||||
|
||||
retrieve_vpll_carrier_audio_power(&audio_power);
|
||||
} else if (!strncmp(parm[0], "adc_power", strlen("adc_power"))) {
|
||||
} else if (!strncmp(parm[0], "adc_power", 9)) {
|
||||
int adc_power = 0;
|
||||
|
||||
retrieve_adc_power(&adc_power);
|
||||
pr_dbg("adc_power:%d\n", adc_power);
|
||||
} else if (!strncmp(parm[0], "search_atv", strlen("search_atv"))) {
|
||||
} else if (!strncmp(parm[0], "search_atv", 10)) {
|
||||
unsigned int freq = 0;
|
||||
struct analog_parameters params;
|
||||
struct dvb_frontend *fe = NULL;
|
||||
@@ -262,7 +250,7 @@ static ssize_t aml_atvdemod_store(struct class *class,
|
||||
params.std = V4L2_STD_PAL_I;
|
||||
|
||||
fe->ops.analog_ops.set_params(fe, ¶ms);
|
||||
} else if (!strncmp(parm[0], "mode_set", strlen("mode_set"))) {
|
||||
} else if (!strncmp(parm[0], "mode_set", 8)) {
|
||||
int priv_cfg = AML_ATVDEMOD_INIT;
|
||||
struct dvb_frontend *fe = NULL;
|
||||
|
||||
@@ -349,14 +337,11 @@ static void aml_atvdemod_dt_parse(struct aml_atvdemod_device *pdev)
|
||||
if (ret)
|
||||
pr_err("can't find tuner.\n");
|
||||
else {
|
||||
if (!strncmp(str, "mxl661_tuner",
|
||||
strlen("mxl661_tuner")))
|
||||
if (!strncmp(str, "mxl661_tuner", 12))
|
||||
pdev->tuner_id = AM_TUNER_MXL661;
|
||||
else if (!strncmp(str, "si2151_tuner",
|
||||
strlen("si2151_tuner")))
|
||||
else if (!strncmp(str, "si2151_tuner", 12))
|
||||
pdev->tuner_id = AM_TUNER_SI2151;
|
||||
else if (!strncmp(str, "r840_tuner",
|
||||
strlen("r840_tuner")))
|
||||
else if (!strncmp(str, "r840_tuner", 10))
|
||||
pdev->tuner_id = AM_TUNER_R840;
|
||||
else
|
||||
pr_err("can't find tuner: %s.\n", str);
|
||||
@@ -392,27 +377,27 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
int size_io_reg = 0;
|
||||
struct aml_atvdemod_device *dev = NULL;
|
||||
|
||||
pr_info("%s.\n", __func__);
|
||||
|
||||
dev = kzalloc(sizeof(struct aml_atvdemod_device), GFP_KERNEL);
|
||||
if (!dev) {
|
||||
ret = -ENOMEM;
|
||||
goto fail_alloc_device;
|
||||
}
|
||||
dev = devm_kmalloc(&pdev->dev, sizeof(struct aml_atvdemod_device),
|
||||
GFP_KERNEL);
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->name = ATVDEMOD_DEVICE_NAME;
|
||||
dev->cls.name = ATVDEMOD_DEVICE_NAME;
|
||||
#if 0
|
||||
dev->cls.name = devm_kmalloc(&pdev->dev, sizeof(ATVDEMOD_DEVICE_NAME),
|
||||
GFP_KERNEL);
|
||||
if (!dev->cls.name)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->cls.name = kzalloc(strlen(ATVDEMOD_DEVICE_NAME), GFP_KERNEL);
|
||||
if (!dev->cls.name) {
|
||||
ret = -ENOMEM;
|
||||
goto fail_alloc_class;
|
||||
}
|
||||
snprintf((char *)dev->cls.name, sizeof(ATVDEMOD_DEVICE_NAME), "%s",
|
||||
ATVDEMOD_DEVICE_NAME);
|
||||
#endif
|
||||
|
||||
sprintf((char *)dev->cls.name, "%s", ATVDEMOD_DEVICE_NAME);
|
||||
dev->cls.class_attrs = atvdemod_debug_class_attrs;
|
||||
ret = class_register(&dev->cls);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "class_create fail.\n");
|
||||
pr_err("class_create fail.\n");
|
||||
goto fail_create_class;
|
||||
}
|
||||
|
||||
@@ -420,7 +405,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "get demod memory resource fail.\n");
|
||||
pr_err("get demod memory resource fail.\n");
|
||||
goto fail_get_resource;
|
||||
}
|
||||
|
||||
@@ -428,7 +413,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
dev->demod_reg_base = devm_ioremap_nocache(&pdev->dev,
|
||||
res->start, size_io_reg);
|
||||
if (!dev->demod_reg_base) {
|
||||
dev_err(&pdev->dev, "demod ioremap failed.\n");
|
||||
pr_err("demod ioremap failed.\n");
|
||||
goto fail_get_resource;
|
||||
}
|
||||
|
||||
@@ -438,14 +423,14 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!res) {
|
||||
dev_err(&pdev->dev, "no audio demod memory resource.\n");
|
||||
pr_err("no audio demod memory resource.\n");
|
||||
dev->audio_reg_base = NULL;
|
||||
} else {
|
||||
size_io_reg = resource_size(res);
|
||||
dev->audio_reg_base = devm_ioremap_nocache(
|
||||
&pdev->dev, res->start, size_io_reg);
|
||||
if (!dev->audio_reg_base) {
|
||||
dev_err(&pdev->dev, "audio ioremap failed.\n");
|
||||
pr_err("audio ioremap failed.\n");
|
||||
goto fail_get_resource;
|
||||
}
|
||||
|
||||
@@ -477,7 +462,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
dev->v4l2_ad.tuner_id = dev->tuner_id;
|
||||
ret = v4l2_resister_frontend(&dev->v4l2_ad, &dev->v4l2_fe);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "resister v4l2 fail.\n");
|
||||
pr_err("resister v4l2 fail.\n");
|
||||
goto fail_register_v4l2;
|
||||
}
|
||||
|
||||
@@ -485,7 +470,7 @@ static int aml_atvdemod_probe(struct platform_device *pdev)
|
||||
|
||||
amlatvdemod_devp = dev;
|
||||
|
||||
pr_info("probe ok.\n");
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -493,11 +478,10 @@ fail_register_v4l2:
|
||||
fail_get_resource:
|
||||
class_unregister(&dev->cls);
|
||||
fail_create_class:
|
||||
kfree(dev->cls.name);
|
||||
fail_alloc_class:
|
||||
kfree(dev);
|
||||
fail_alloc_device:
|
||||
pr_info("[amlatvdemod]: atvdemod_init fail.\n");
|
||||
/*devm_kfree(&pdev->dev, dev->cls.name);*/
|
||||
devm_kfree(&pdev->dev, dev);
|
||||
|
||||
pr_info("%s: fail.\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -515,17 +499,17 @@ static int aml_atvdemod_remove(struct platform_device *pdev)
|
||||
|
||||
amlatvdemod_devp = NULL;
|
||||
|
||||
kfree(dev->cls.name);
|
||||
kfree(dev);
|
||||
/*devm_kfree(&pdev->dev, dev->cls.name);*/
|
||||
devm_kfree(&pdev->dev, dev);
|
||||
|
||||
pr_dbg("[amlatvdemod] : aml_atvdemod_remove.\n");
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void aml_atvdemod_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
pr_info("%s done.\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
}
|
||||
|
||||
static int aml_atvdemod_suspend(struct platform_device *pdev,
|
||||
@@ -535,7 +519,7 @@ static int aml_atvdemod_suspend(struct platform_device *pdev,
|
||||
|
||||
v4l2_frontend_suspend(&dev->v4l2_fe);
|
||||
|
||||
pr_info("%s: OK\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -546,7 +530,7 @@ int aml_atvdemod_resume(struct platform_device *pdev)
|
||||
|
||||
v4l2_frontend_resume(&dev->v4l2_fe);
|
||||
|
||||
pr_info("%s: OK\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -575,11 +559,11 @@ static struct platform_driver aml_atvdemod_driver = {
|
||||
static int __init aml_atvdemod_init(void)
|
||||
{
|
||||
if (platform_driver_register(&aml_atvdemod_driver)) {
|
||||
pr_err("failed to register amlatvdemod driver module\n");
|
||||
pr_err("%s: failed to register driver.\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
pr_dbg("[amlatvdemod..]%s: driver init ok.\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -587,7 +571,7 @@ static int __init aml_atvdemod_init(void)
|
||||
static void __exit aml_atvdemod_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&aml_atvdemod_driver);
|
||||
pr_dbg("[amlatvdemod..]%s: driver exit ok.\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("nengwen.chen <nengwen.chen@amlogic.com>");
|
||||
|
||||
@@ -72,7 +72,7 @@ void aml_fe_get_atvaudio_state(int *state)
|
||||
else
|
||||
*state = 0;
|
||||
|
||||
pr_info("aml_fe_get_atvaudio_state: %d, power = %d.\n",
|
||||
pr_dbg("aml_fe_get_atvaudio_state: %d, power = %d.\n",
|
||||
*state, power);
|
||||
}
|
||||
|
||||
@@ -201,10 +201,13 @@ int atv_demod_enter_mode(void)
|
||||
}
|
||||
|
||||
/* set_aft_thread_enable(1, 0); */
|
||||
//memset(&(amlatvdemod_devp->parm), 0, sizeof(amlatvdemod_devp->parm));
|
||||
/*
|
||||
* memset(&(amlatvdemod_devp->parm), 0,
|
||||
* sizeof(amlatvdemod_devp->parm));
|
||||
*/
|
||||
atvdemod_state = ATVDEMOD_STATE_WORK;
|
||||
|
||||
pr_info("%s: OK\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -224,10 +227,14 @@ int atv_demod_leave_mode(void)
|
||||
adc_set_pll_cntl(0, 0x1, NULL);
|
||||
if (is_meson_txlx_cpu() || is_meson_txhd_cpu())
|
||||
aud_demod_clk_gate(0);
|
||||
//memset(&(amlatvdemod_devp->parm), 0, sizeof(amlatvdemod_devp->parm));
|
||||
|
||||
/*
|
||||
* memset(&(amlatvdemod_devp->parm), 0,
|
||||
* sizeof(amlatvdemod_devp->parm));
|
||||
*/
|
||||
atvdemod_state = ATVDEMOD_STATE_IDEL;
|
||||
|
||||
pr_info("%s: OK\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -288,14 +295,12 @@ static void atv_demod_set_params(struct dvb_frontend *fe,
|
||||
if (!is_atvdemod_scan_mode())
|
||||
atvauddemod_init();
|
||||
|
||||
pr_info("[amlatvdemod..]%s set std color %lld, audio type %lld.\n",
|
||||
pr_info("%s: set std color %lld, audio type %lld.\n",
|
||||
__func__, amlatvdemod_devp->std, amlatvdemod_devp->std);
|
||||
pr_info("[amlatvdemod..]%s set if_freq %d, if_inv %d.\n",
|
||||
pr_info("%s: set if_freq %d, if_inv %d.\n",
|
||||
__func__, amlatvdemod_devp->if_freq,
|
||||
amlatvdemod_devp->if_inv);
|
||||
}
|
||||
|
||||
pr_err("%s: tuner_id = %d.\n", __func__, atvdemod_param->tuner_id);
|
||||
}
|
||||
|
||||
static int atv_demod_has_signal(struct dvb_frontend *fe, u16 *signal)
|
||||
@@ -316,8 +321,6 @@ static int atv_demod_has_signal(struct dvb_frontend *fe, u16 *signal)
|
||||
pr_info("visual carrier lock:unlocked\n");
|
||||
}
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -328,20 +331,18 @@ static void atv_demod_standby(struct dvb_frontend *fe)
|
||||
set_atvdemod_state(ATVDEMOD_STATE_SLEEP);
|
||||
}
|
||||
|
||||
pr_info("%s: OK\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
}
|
||||
|
||||
static void atv_demod_tuner_status(struct dvb_frontend *fe)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_info("%s.\n", __func__);
|
||||
}
|
||||
|
||||
static int atv_demod_get_afc(struct dvb_frontend *fe, s32 *afc)
|
||||
{
|
||||
*afc = retrieve_vpll_carrier_afc();
|
||||
|
||||
pr_info("%s: afc %d.\n", __func__, *afc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -360,7 +361,7 @@ static void atv_demod_release(struct dvb_frontend *fe)
|
||||
|
||||
fe->analog_demod_priv = NULL;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
}
|
||||
|
||||
static int atv_demod_set_config(struct dvb_frontend *fe, void *priv_cfg)
|
||||
@@ -368,7 +369,7 @@ static int atv_demod_set_config(struct dvb_frontend *fe, void *priv_cfg)
|
||||
int *state = (int *) priv_cfg;
|
||||
|
||||
if (!state) {
|
||||
pr_err("%s state == NULL.\n", __func__);
|
||||
pr_err("%s: state == NULL.\n", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -391,8 +392,6 @@ static int atv_demod_set_config(struct dvb_frontend *fe, void *priv_cfg)
|
||||
|
||||
mutex_unlock(&atv_demod_list_mutex);
|
||||
|
||||
pr_err("%s done.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -414,6 +413,7 @@ struct dvb_frontend *aml_atvdemod_attach(struct dvb_frontend *fe,
|
||||
struct i2c_adapter *i2c_adap, u8 i2c_addr, u32 tuner_id)
|
||||
{
|
||||
int instance = 0;
|
||||
void *p = NULL;
|
||||
struct atv_demod_priv *priv = NULL;
|
||||
|
||||
mutex_lock(&atv_demod_list_mutex);
|
||||
@@ -449,12 +449,16 @@ struct dvb_frontend *aml_atvdemod_attach(struct dvb_frontend *fe,
|
||||
case AM_TUNER_R840:
|
||||
break;
|
||||
case AM_TUNER_SI2151:
|
||||
v4l2_attach(si2151_attach, fe, i2c_adap, i2c_addr);
|
||||
p = v4l2_attach(si2151_attach, fe, i2c_adap, i2c_addr);
|
||||
break;
|
||||
case AM_TUNER_MXL661:
|
||||
v4l2_attach(mxl661_attach, fe, i2c_adap, i2c_addr);
|
||||
p = v4l2_attach(mxl661_attach, fe, i2c_adap, i2c_addr);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!p)
|
||||
pr_err("%s: v4l2_attach tuner %d error.\n",
|
||||
__func__, tuner_id);
|
||||
|
||||
return fe;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ void aml_fe_hook_cvd(hook_func_t atv_mode, hook_func_t cvd_hv_lock,
|
||||
aml_fe_hook_atv_status = atv_mode;
|
||||
aml_fe_hook_hv_lock = cvd_hv_lock;
|
||||
aml_fe_hook_get_fmt = get_fmt;
|
||||
pr_dbg("[aml_fe]%s\n", __func__);
|
||||
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
}
|
||||
EXPORT_SYMBOL(aml_fe_hook_cvd);
|
||||
|
||||
@@ -104,7 +105,7 @@ static v4l2_std_id demod_fmt_2_v4l2_std(int fmt)
|
||||
std = V4L2_STD_SECAM_DK;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: unsupport fmt: 0x%0x.\n", __func__, fmt);
|
||||
pr_err("%s: Unsupport fmt: 0x%0x.\n", __func__, fmt);
|
||||
}
|
||||
|
||||
return std;
|
||||
@@ -137,14 +138,15 @@ static v4l2_std_id trans_tvin_fmt_to_v4l2_std(int fmt)
|
||||
std = V4L2_STD_SECAM;
|
||||
break;
|
||||
default:
|
||||
pr_err("%s err fmt: 0x%x\n", __func__, fmt);
|
||||
pr_err("%s: Unsupport fmt: 0x%x\n", __func__, fmt);
|
||||
break;
|
||||
}
|
||||
return std;
|
||||
}
|
||||
|
||||
static void v4l2_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
bool auto_search_std, v4l2_std_id *video_fmt, int *audio_fmt)
|
||||
bool auto_search_std, v4l2_std_id *video_fmt,
|
||||
unsigned int *audio_fmt)
|
||||
{
|
||||
struct dvb_frontend *fe = &v4l2_fe->v4l2_ad->fe;
|
||||
struct v4l2_analog_parameters *p = &v4l2_fe->params;
|
||||
@@ -153,7 +155,7 @@ static void v4l2_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
int try_vfmt_cnt = 300;
|
||||
int varify_cnt = 0;
|
||||
v4l2_std_id std_bk = 0;
|
||||
int audio = 0;
|
||||
unsigned int audio = 0;
|
||||
|
||||
if (auto_search_std == true) {
|
||||
for (i = 0; i < try_vfmt_cnt; i++) {
|
||||
@@ -202,8 +204,8 @@ static void v4l2_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
i, (unsigned int) std_bk);
|
||||
|
||||
if (std_bk == 0) {
|
||||
pr_err("[%s] failed to get v fmt !!\n", __func__);
|
||||
pr_err("[%s] vfmt assume PAL !!\n", __func__);
|
||||
pr_err("%s: failed to get video fmt, assume PAL.\n",
|
||||
__func__);
|
||||
std_bk = TVIN_SIG_FMT_CVBS_PAL_I;
|
||||
p->std = V4L2_STD_PAL_I;
|
||||
p->frequency += 1;
|
||||
@@ -240,21 +242,23 @@ static void v4l2_fe_try_analog_format(struct v4l2_frontend *v4l2_fe,
|
||||
#endif
|
||||
#else /* Now, force to NTSC_M, Ours demod only support M for NTSC.*/
|
||||
audio = V4L2_STD_NTSC_M;
|
||||
std_bk |= V4L2_COLOR_STD_NTSC;
|
||||
*video_fmt |= V4L2_COLOR_STD_NTSC;
|
||||
#endif
|
||||
} else if (std_bk == V4L2_STD_SECAM) {
|
||||
audio = V4L2_STD_SECAM_L;
|
||||
std_bk |= V4L2_COLOR_STD_SECAM;
|
||||
*video_fmt |= V4L2_COLOR_STD_SECAM;
|
||||
} else {
|
||||
/*V4L2_COLOR_STD_PAL*/
|
||||
std_bk |= V4L2_COLOR_STD_PAL;
|
||||
*video_fmt |= V4L2_COLOR_STD_PAL;
|
||||
amlatvdemod_set_std(AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK);
|
||||
audio = aml_audiomode_autodet(fe);
|
||||
pr_info("autodet audmode 0x%x\n", audio);
|
||||
audio = demod_fmt_2_v4l2_std(audio);
|
||||
pr_info("v4l2_std audmode 0x%x\n", audio);
|
||||
#if 0 /* Why do this to me? We need support PAL_M.*/
|
||||
if (audio == V4L2_STD_PAL_M) {
|
||||
audio = demod_fmt_2_v4l2_std(broad_std_except_pal_m);
|
||||
pr_err("select audmode 0x%x\n", audio);
|
||||
pr_info("select audmode 0x%x\n", audio);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -284,8 +288,7 @@ static int v4l2_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
if (abs(p->frequency - freq_success) < 3000000
|
||||
&& p->frequency > 45000000) {
|
||||
ktime_get_ts(&time_now);
|
||||
//if (debug_fe & 0x2)
|
||||
pr_err("%s: tv_sec now:%ld,tv_sec success:%ld\n",
|
||||
pr_err("[%s] tv_sec now:%ld,tv_sec success:%ld\n",
|
||||
__func__, time_now.tv_sec, success_time.tv_sec);
|
||||
/* beyond 10s search same frequency is ok */
|
||||
if ((time_now.tv_sec - success_time.tv_sec) < 10)
|
||||
@@ -312,8 +315,7 @@ static int v4l2_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
else if (fe->ops.tuner_ops.get_afc)
|
||||
fe->ops.tuner_ops.get_afc(fe, &afc);
|
||||
|
||||
//if (debug_fe & 0x2)
|
||||
pr_err("[%s] get afc %d khz, freq %u.\n",
|
||||
pr_dbg("[%s] get afc %d khz, freq %u.\n",
|
||||
__func__, afc, p->frequency);
|
||||
|
||||
if (afc == 0xffff) {
|
||||
@@ -321,7 +323,7 @@ static int v4l2_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
if (lock_cnt > 0) {
|
||||
p->frequency = temp_freq +
|
||||
temp_afc * 1000;
|
||||
pr_err("%s, force lock, f:%d\n",
|
||||
pr_err("[%s] force lock, f:%d\n",
|
||||
__func__, p->frequency);
|
||||
break;
|
||||
}
|
||||
@@ -352,21 +354,21 @@ static int v4l2_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
p->frequency += afc * 1000;
|
||||
|
||||
if (unlikely(p->frequency > maxafcfreq)) {
|
||||
pr_err("[%s]:[%d] is exceed maxafcfreq[%d]\n",
|
||||
pr_err("[%s] [%d] is exceed maxafcfreq[%d]\n",
|
||||
__func__, p->frequency, maxafcfreq);
|
||||
p->frequency = set_freq;
|
||||
return -1;
|
||||
}
|
||||
#if 0 /*if enable ,it would miss program*/
|
||||
if (unlikely(c->frequency < minafcfreq)) {
|
||||
pr_dbg("[%s]:[%d] is exceed minafcfreq[%d]\n",
|
||||
pr_dbg("[%s] [%d] is exceed minafcfreq[%d]\n",
|
||||
__func__, c->frequency, minafcfreq);
|
||||
c->frequency = set_freq;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
if (likely(!(count--))) {
|
||||
pr_err("[%s]:exceed the afc count\n", __func__);
|
||||
pr_err("[%s] exceed the afc count\n", __func__);
|
||||
p->frequency = set_freq;
|
||||
return -1;
|
||||
}
|
||||
@@ -387,8 +389,7 @@ static int v4l2_fe_afc_closer(struct v4l2_frontend *v4l2_fe, int minafcfreq,
|
||||
|
||||
freq_success = p->frequency;
|
||||
ktime_get_ts(&success_time);
|
||||
//if (debug_fe & 0x2)
|
||||
pr_err("[%s] get afc %d khz done, freq %u.\n",
|
||||
pr_dbg("[%s] get afc %d khz done, freq %u.\n",
|
||||
__func__, afc, p->frequency);
|
||||
}
|
||||
|
||||
@@ -409,7 +410,7 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
__u32 afc_step = 0;
|
||||
int tuner_status_cnt_local = tuner_status_cnt;
|
||||
v4l2_std_id std_bk = 0;
|
||||
int audio = 0;
|
||||
unsigned int audio = 0;
|
||||
int double_check_cnt = 1;
|
||||
bool auto_search_std = false;
|
||||
int search_count = 0;
|
||||
@@ -429,13 +430,13 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
}
|
||||
|
||||
if (p->afc_range == 0) {
|
||||
pr_err("[%s]:afc_range == 0, skip the search\n", __func__);
|
||||
pr_err("[%s] afc_range == 0, skip the search\n", __func__);
|
||||
return V4L2_SEARCH_INVALID;
|
||||
}
|
||||
|
||||
pr_err("[%s] afc_range: [%d], tuner type: [%d], freq: [%d].\n",
|
||||
__func__, p->afc_range,
|
||||
v4l2_fe->v4l2_ad->tuner_id, p->frequency);
|
||||
pr_info("[%s] afc_range: [%d], tuner: [%d], freq: [%d], flag: [%d].\n",
|
||||
__func__, p->afc_range, v4l2_fe->v4l2_ad->tuner_id,
|
||||
p->frequency, p->flag);
|
||||
|
||||
/* backup the freq by api */
|
||||
set_freq = p->frequency;
|
||||
@@ -447,7 +448,7 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
if (p->std == 0) {
|
||||
p->std = V4L2_STD_PAL_I;
|
||||
auto_search_std = true;
|
||||
pr_dbg("%s, user analog.std is 0, so set it to PAL | I.\n",
|
||||
pr_dbg("[%s] user analog.std is 0, so set it to PAL | I.\n",
|
||||
__func__);
|
||||
}
|
||||
|
||||
@@ -473,7 +474,7 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
}
|
||||
|
||||
/**enter auto search mode**/
|
||||
pr_dbg("%s Auto search user std: 0x%08x\n",
|
||||
pr_dbg("[%s] Auto search std: 0x%08x\n",
|
||||
__func__, (unsigned int) p->std);
|
||||
|
||||
#ifdef DEBUG_TIME_CUS
|
||||
@@ -564,7 +565,7 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
#ifdef DEBUG_TIME_CUS
|
||||
time_end = jiffies_to_msecs(jiffies);
|
||||
time_delta = time_end - time_start;
|
||||
pr_dbg("[ATV_SEARCH_SUCCESS]%s: time_delta:%d ms\n",
|
||||
pr_dbg("[%s] time_delta:%d ms\n",
|
||||
__func__, time_delta);
|
||||
#endif
|
||||
/*sync param */
|
||||
@@ -607,16 +608,14 @@ static enum v4l2_search v4l2_frontend_search(struct v4l2_frontend *v4l2_fe)
|
||||
#ifdef DEBUG_TIME_CUS
|
||||
time_end = jiffies_to_msecs(jiffies);
|
||||
time_delta = time_end - time_start;
|
||||
pr_dbg("[ATV_SEARCH_FAILED]%s: time_delta:%d ms\n",
|
||||
__func__, time_delta);
|
||||
pr_dbg("[%s] time_delta:%d ms\n", __func__, time_delta);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG_TIME_CUS
|
||||
time_end = jiffies_to_msecs(jiffies);
|
||||
time_delta = time_end - time_start;
|
||||
pr_dbg("[ATV_SEARCH_FAILED]%s: time_delta:%d ms\n",
|
||||
__func__, time_delta);
|
||||
pr_dbg("[%s] time_delta:%d ms\n", __func__, time_delta);
|
||||
#endif
|
||||
|
||||
pr_dbg("[%s] [%d] over of range [min=%d, max=%d], search failed.\n",
|
||||
@@ -635,7 +634,7 @@ static int v4l2_frontend_get_event(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
struct v4l2_fe_events *events = &fepriv->events;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
if (events->overflow) {
|
||||
events->overflow = 0;
|
||||
@@ -678,7 +677,7 @@ static void v4l2_frontend_add_event(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_frontend_event *e = NULL;
|
||||
int wp;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
mutex_lock(&events->mtx);
|
||||
|
||||
@@ -752,7 +751,7 @@ static int v4l2_frontend_thread(void *data)
|
||||
enum v4l2_status s = V4L2_TIMEDOUT;
|
||||
unsigned long timeout = 0;
|
||||
|
||||
pr_err("%s: thread start.\n", __func__);
|
||||
pr_info("%s: thread start.\n", __func__);
|
||||
|
||||
fepriv->delay = 3 * HZ;
|
||||
fepriv->status = 0;
|
||||
@@ -782,7 +781,7 @@ restart:
|
||||
|
||||
/* pr_dbg("%s: state = %d.\n", __func__, fepriv->state); */
|
||||
if (fepriv->state & V4L2FE_STATE_RETUNE) {
|
||||
pr_err("%s: Retune requested, V4L2FE_STATE_RETUNE.\n",
|
||||
pr_dbg("%s: Retune requested, V4L2FE_STATE_RETUNE.\n",
|
||||
__func__);
|
||||
fepriv->state = V4L2FE_STATE_TUNED;
|
||||
}
|
||||
@@ -838,7 +837,7 @@ restart:
|
||||
|
||||
v4l2_frontend_wakeup(v4l2_fe);
|
||||
|
||||
pr_err("%s: thread exit state = %d.\n", __func__, fepriv->state);
|
||||
pr_dbg("%s: thread exit state = %d.\n", __func__, fepriv->state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -847,7 +846,7 @@ static void v4l2_frontend_stop(struct v4l2_frontend *v4l2_fe)
|
||||
{
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
fepriv->exit = V4L2_FE_NORMAL_EXIT;
|
||||
|
||||
@@ -864,7 +863,7 @@ static void v4l2_frontend_stop(struct v4l2_frontend *v4l2_fe)
|
||||
|
||||
/* paranoia check in case a signal arrived */
|
||||
if (fepriv->thread)
|
||||
pr_err("%s: warning: thread %p won't exit\n",
|
||||
pr_info("%s: warning: thread %p won't exit\n",
|
||||
__func__, fepriv->thread);
|
||||
}
|
||||
|
||||
@@ -874,7 +873,7 @@ static int v4l2_frontend_start(struct v4l2_frontend *v4l2_fe)
|
||||
struct task_struct *thread = NULL;
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
if (fepriv->thread) {
|
||||
if (fepriv->exit == V4L2_FE_NO_EXIT)
|
||||
@@ -920,13 +919,13 @@ static int v4l2_set_frontend(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
struct dvb_frontend *fe = &v4l2_fe->v4l2_ad->fe;
|
||||
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
freq_min = fe->ops.tuner_ops.info.frequency_min;
|
||||
freq_max = fe->ops.tuner_ops.info.frequency_max;
|
||||
|
||||
if (freq_min == 0 || freq_max == 0)
|
||||
pr_err("%s: demod or tuner frequency limits undefined.\n",
|
||||
pr_info("%s: demod or tuner frequency limits undefined.\n",
|
||||
__func__);
|
||||
|
||||
/* range check: frequency */
|
||||
@@ -970,6 +969,9 @@ static int v4l2_set_frontend(struct v4l2_frontend *v4l2_fe,
|
||||
static int v4l2_get_frontend(struct v4l2_frontend *v4l2_fe,
|
||||
struct v4l2_analog_parameters *p)
|
||||
{
|
||||
pr_dbg("%s.\n", __func__);
|
||||
|
||||
memcpy(p, &v4l2_fe->params, sizeof(struct v4l2_analog_parameters));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -982,7 +984,7 @@ static int v4l2_frontend_set_mode(struct v4l2_frontend *v4l2_fe,
|
||||
struct analog_demod_ops *analog_ops = NULL;
|
||||
int priv_cfg = 0;
|
||||
|
||||
pr_err("%s: params = %ld.\n", __func__, params);
|
||||
pr_dbg("%s: params = %ld.\n", __func__, params);
|
||||
|
||||
fepriv->state = V4L2FE_STATE_IDLE;
|
||||
|
||||
@@ -1023,20 +1025,20 @@ static int v4l2_frontend_read_status(struct v4l2_frontend *v4l2_fe,
|
||||
|
||||
static void v4l2_frontend_vdev_release(struct video_device *dev)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
}
|
||||
|
||||
static ssize_t v4l2_frontend_read(struct file *filp, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t v4l2_frontend_write(struct file *filp, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1048,10 +1050,11 @@ static unsigned int v4l2_frontend_poll(struct file *filp,
|
||||
|
||||
poll_wait(filp, &fepriv->events.wait_queue, pts);
|
||||
|
||||
if (fepriv->events.eventw != fepriv->events.eventr)
|
||||
if (fepriv->events.eventw != fepriv->events.eventr) {
|
||||
pr_dbg("%s: POLLIN | POLLRDNORM | POLLPRI.\n", __func__);
|
||||
return (POLLIN | POLLRDNORM | POLLPRI);
|
||||
}
|
||||
|
||||
pr_info("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1059,18 +1062,28 @@ static long v4l2_frontend_ioctl(struct file *filp, void *fh, bool valid_prio,
|
||||
unsigned int cmd, void *arg)
|
||||
{
|
||||
int ret = 0;
|
||||
int need_lock = 1;
|
||||
struct v4l2_frontend *v4l2_fe = video_get_drvdata(video_devdata(filp));
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
|
||||
pr_err("%s: cmd = 0x%x.\n", __func__, cmd);
|
||||
pr_dbg("%s: cmd = 0x%x.\n", __func__, cmd);
|
||||
if (fepriv->exit != V4L2_FE_NO_EXIT)
|
||||
return -ENODEV;
|
||||
|
||||
if (down_interruptible(&fepriv->sem))
|
||||
return -ERESTARTSYS;
|
||||
if (cmd == V4L2_READ_STATUS || cmd == V4L2_GET_FRONTEND)
|
||||
need_lock = 0;
|
||||
|
||||
if (need_lock)
|
||||
if (down_interruptible(&fepriv->sem))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
if (fepriv->exit != DVB_FE_NO_EXIT) {
|
||||
up(&fepriv->sem);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case V4L2_SET_FRONTEND:
|
||||
case V4L2_SET_FRONTEND: /* 0x40285669 */
|
||||
ret = v4l2_set_frontend(v4l2_fe,
|
||||
(struct v4l2_analog_parameters *) arg);
|
||||
break;
|
||||
@@ -1080,13 +1093,13 @@ static long v4l2_frontend_ioctl(struct file *filp, void *fh, bool valid_prio,
|
||||
(struct v4l2_analog_parameters *) arg);
|
||||
break;
|
||||
|
||||
case V4L2_GET_EVENT:
|
||||
case V4L2_GET_EVENT: /* 0x8030566b */
|
||||
ret = v4l2_frontend_get_event(v4l2_fe,
|
||||
(struct v4l2_frontend_event *) arg,
|
||||
filp->f_flags);
|
||||
break;
|
||||
|
||||
case V4L2_SET_MODE:
|
||||
case V4L2_SET_MODE: /* 0x566c */
|
||||
ret = v4l2_frontend_set_mode(v4l2_fe, (unsigned long) arg);
|
||||
break;
|
||||
|
||||
@@ -1099,7 +1112,8 @@ static long v4l2_frontend_ioctl(struct file *filp, void *fh, bool valid_prio,
|
||||
break;
|
||||
}
|
||||
|
||||
up(&fepriv->sem);
|
||||
if (need_lock)
|
||||
up(&fepriv->sem);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1128,27 +1142,25 @@ static int v4l2_frontend_open(struct file *filp)
|
||||
break;
|
||||
}
|
||||
|
||||
if (p == NULL)
|
||||
pr_err("%s: v4l2_attach error.\n", __func__);
|
||||
if (p == NULL) {
|
||||
pr_err("%s: v4l2_attach tuner %d error.\n",
|
||||
__func__, v4l2_fe->v4l2_ad->tuner_id);
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
ret = v4l2_frontend_start(v4l2_fe);
|
||||
|
||||
fepriv->events.eventr = fepriv->events.eventw = 0;
|
||||
|
||||
pr_err("%s.\n", fepriv->v4l2dev->name);
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_info("%s: %s OK.\n", __func__, fepriv->v4l2dev->name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_release(struct file *filp)
|
||||
{
|
||||
struct v4l2_frontend *v4l2_fe = video_get_drvdata(video_devdata(filp));
|
||||
struct v4l2_frontend_private *fepriv = v4l2_fe->frontend_priv;
|
||||
|
||||
pr_err("%s.\n", fepriv->v4l2dev->name);
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1166,77 +1178,77 @@ static const struct v4l2_file_operations v4l2_fe_fops = {
|
||||
static int v4l2_frontend_vidioc_g_audio(struct file *file, void *fh,
|
||||
struct v4l2_audio *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_s_audio(struct file *filp, void *fh,
|
||||
const struct v4l2_audio *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_g_tuner(struct file *filp, void *fh,
|
||||
struct v4l2_tuner *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_s_tuner(struct file *filp, void *fh,
|
||||
const struct v4l2_tuner *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_g_frequency(struct file *filp, void *fh,
|
||||
struct v4l2_frequency *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_s_frequency(struct file *filp, void *fh,
|
||||
const struct v4l2_frequency *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_enum_freq_bands(struct file *filp, void *fh,
|
||||
struct v4l2_frequency_band *band)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_g_modulator(struct file *filp, void *fh,
|
||||
struct v4l2_modulator *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int v4l2_frontend_vidioc_s_modulator(struct file *filp, void *fh,
|
||||
const struct v4l2_modulator *a)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int v4l2_frontend_vidioc_streamon(struct file *filp, void *fh,
|
||||
enum v4l2_buf_type i)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int v4l2_frontend_vidioc_streamoff(struct file *filp, void *fh,
|
||||
enum v4l2_buf_type i)
|
||||
{
|
||||
pr_err("%s.\n", __func__);
|
||||
pr_dbg("%s.\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1270,7 +1282,7 @@ int v4l2_resister_frontend(struct v4l2_adapter *v4l2_ad,
|
||||
struct v4l2_frontend_private *fepriv = NULL;
|
||||
struct v4l2_atvdemod_device *v4l2dev = NULL;
|
||||
|
||||
if (v4l2_ad == NULL || v4l2_fe == NULL) {
|
||||
if (!v4l2_ad || !v4l2_fe) {
|
||||
pr_err("NULL pointer.\n");
|
||||
return -1;
|
||||
}
|
||||
@@ -1280,7 +1292,7 @@ int v4l2_resister_frontend(struct v4l2_adapter *v4l2_ad,
|
||||
|
||||
v4l2_fe->frontend_priv = kzalloc(sizeof(struct v4l2_frontend_private),
|
||||
GFP_KERNEL);
|
||||
if (v4l2_fe->frontend_priv == NULL) {
|
||||
if (!v4l2_fe->frontend_priv) {
|
||||
mutex_unlock(&v4l2_fe_mutex);
|
||||
pr_err("kzalloc fail.\n");
|
||||
return -ENOMEM;
|
||||
@@ -1292,7 +1304,7 @@ int v4l2_resister_frontend(struct v4l2_adapter *v4l2_ad,
|
||||
|
||||
fepriv->v4l2dev = kzalloc(sizeof(struct v4l2_atvdemod_device),
|
||||
GFP_KERNEL);
|
||||
if (fepriv->v4l2dev == NULL) {
|
||||
if (!fepriv->v4l2dev) {
|
||||
ret = -ENOMEM;
|
||||
goto malloc_fail;
|
||||
}
|
||||
@@ -1336,7 +1348,7 @@ int v4l2_resister_frontend(struct v4l2_adapter *v4l2_ad,
|
||||
|
||||
mutex_unlock(&v4l2_fe_mutex);
|
||||
|
||||
pr_err("resister aml atv demod device.\n");
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1349,6 +1361,7 @@ malloc_fail:
|
||||
kfree(v4l2_fe->frontend_priv);
|
||||
v4l2_fail:
|
||||
mutex_unlock(&v4l2_fe_mutex);
|
||||
pr_info("%s: Fail.\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1366,7 +1379,7 @@ int v4l2_unresister_frontend(struct v4l2_frontend *v4l2_fe)
|
||||
|
||||
mutex_unlock(&v4l2_fe_mutex);
|
||||
|
||||
pr_err("unregister aml atv demod device.\n");
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1378,14 +1391,14 @@ int v4l2_frontend_suspend(struct v4l2_frontend *v4l2_fe)
|
||||
struct dvb_tuner_ops tuner_ops = fe->ops.tuner_ops;
|
||||
struct analog_demod_ops analog_ops = fe->ops.analog_ops;
|
||||
|
||||
pr_info("%s.\n", __func__);
|
||||
|
||||
if (analog_ops.standby)
|
||||
analog_ops.standby(fe);
|
||||
|
||||
if (tuner_ops.suspend)
|
||||
tuner_ops.suspend(fe);
|
||||
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1398,8 +1411,6 @@ int v4l2_frontend_resume(struct v4l2_frontend *v4l2_fe)
|
||||
struct analog_demod_ops analog_ops = fe->ops.analog_ops;
|
||||
int priv_cfg = AML_ATVDEMOD_RESUME;
|
||||
|
||||
pr_info("%s.\n", __func__);
|
||||
|
||||
if (analog_ops.set_config)
|
||||
analog_ops.set_config(fe, &priv_cfg);
|
||||
|
||||
@@ -1409,5 +1420,7 @@ int v4l2_frontend_resume(struct v4l2_frontend *v4l2_fe)
|
||||
fepriv->state = V4L2FE_STATE_RETUNE;
|
||||
v4l2_frontend_wakeup(v4l2_fe);
|
||||
|
||||
pr_info("%s: OK.\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1158,7 +1158,7 @@ void audio_thd_det(void)
|
||||
if (thd_flag == 0) {
|
||||
thd_tmp_v += adec_rd_reg(OV_CNT_REPORT) & 0xffff;
|
||||
|
||||
pr_info("#0x12:0x%x\n", (adec_rd_reg(OV_CNT_REPORT) & 0xffff));
|
||||
pr_dbg("#0x12:0x%x\n", (adec_rd_reg(OV_CNT_REPORT) & 0xffff));
|
||||
if (thd_cnt == 15) {
|
||||
thd_tmp_v /= 3;
|
||||
if (thd_tmp_v > audio_thd_threshold1) {
|
||||
@@ -1171,7 +1171,7 @@ void audio_thd_det(void)
|
||||
} else if (thd_flag == 1) {
|
||||
thd_tmp_v += adec_rd_reg(OV_CNT_REPORT) & 0xffff;
|
||||
|
||||
pr_info("#0x13:0x%x\n", (adec_rd_reg(OV_CNT_REPORT) & 0xffff));
|
||||
pr_dbg("#0x13:0x%x\n", (adec_rd_reg(OV_CNT_REPORT) & 0xffff));
|
||||
if (thd_cnt == 15) {
|
||||
thd_tmp_v /= 3;
|
||||
if (thd_tmp_v <= audio_thd_threshold2) {
|
||||
@@ -1253,7 +1253,7 @@ void audio_mode_det(int mode)
|
||||
last_stereo_flag = stereo_flag;
|
||||
last_sap_flag = sap_flag;
|
||||
|
||||
pr_info("[tuner..] atvdemod_monitor_audio done ....\n");
|
||||
pr_dbg("atvdemod_monitor_audio done ....\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1302,7 +1302,7 @@ void retrieve_vpll_carrier_line_lock(int *lock)
|
||||
line_lock = data & 0x10;
|
||||
line_lock_strong = data & 0x8;
|
||||
|
||||
pr_info("line_lock = 0x%x, line_lock_strong = 0x%x\n",
|
||||
pr_dbg("line_lock = 0x%x, line_lock_strong = 0x%x\n",
|
||||
line_lock, line_lock_strong);
|
||||
|
||||
*lock = (line_lock | line_lock_strong);
|
||||
@@ -1327,7 +1327,7 @@ void retrieve_vpll_carrier_audio_power(int *power)
|
||||
*power = data & 0xffff;
|
||||
}
|
||||
|
||||
pr_info("retrieve_vpll_carrier_audio_power: %d.\n", *power);
|
||||
pr_dbg("retrieve_vpll_carrier_audio_power: %d.\n", *power);
|
||||
}
|
||||
|
||||
int retrieve_vpll_carrier_afc(void)
|
||||
@@ -1343,7 +1343,7 @@ int retrieve_vpll_carrier_afc(void)
|
||||
|
||||
if ((pll_lock == 1) || (line_lock == 0x10)) {
|
||||
/*if pll unlock, afc is invalid*/
|
||||
pr_err("[afc invalid] pll: %d, line: %d, line_strong: %d, field: %d.\n",
|
||||
pr_info("[afc invalid] pll: %d, line: %d, line_strong: %d, field: %d.\n",
|
||||
pll_lock, line_lock,
|
||||
line_lock_strong, field_lock);
|
||||
|
||||
@@ -1427,9 +1427,9 @@ void atvdemod_afc_tune(void)
|
||||
mix1_freq_cur = atv_dmd_rd_byte(APB_BLOCK_ADDR_MIXER_1, 0x0);
|
||||
delta_mix1_freq = abs(mix1_freq_cur - mix1_freq);
|
||||
if ((lock&0x1) == 0)
|
||||
pr_info("%s visual carrier lock:locked\n", __func__);
|
||||
pr_dbg("%s visual carrier lock:locked\n", __func__);
|
||||
else
|
||||
pr_info("%s visual carrier lock:unlocked\n", __func__);
|
||||
pr_dbg("%s visual carrier lock:unlocked\n", __func__);
|
||||
/* set_pll_lpf(lock); */
|
||||
retrieve_frequency_offset(&freq_offset);
|
||||
/* pr_info("visual carrier offset:%d Hz\n",*/
|
||||
@@ -2030,23 +2030,23 @@ int aml_audiomode_autodet(struct dvb_frontend *fe)
|
||||
param->param.std = V4L2_STD_PAL;
|
||||
switch (broad_std) {
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_DK:
|
||||
param->param.std |= V4L2_STD_PAL_DK;
|
||||
param->param.std = V4L2_STD_PAL_DK;
|
||||
param->param.audmode = V4L2_STD_PAL_DK;
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_I:
|
||||
param->param.std |= V4L2_STD_PAL_I;
|
||||
param->param.std = V4L2_STD_PAL_I;
|
||||
param->param.audmode = V4L2_STD_PAL_I;
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_BG:
|
||||
param->param.std |= V4L2_STD_PAL_BG;
|
||||
param->param.std = V4L2_STD_PAL_BG;
|
||||
param->param.audmode = V4L2_STD_PAL_BG;
|
||||
break;
|
||||
case AML_ATV_DEMOD_VIDEO_MODE_PROP_PAL_M:
|
||||
param->param.std |= V4L2_STD_PAL_M;
|
||||
param->param.std = V4L2_STD_PAL_M;
|
||||
param->param.audmode = V4L2_STD_PAL_M;
|
||||
break;
|
||||
default:
|
||||
param->param.std |= V4L2_STD_PAL_DK;
|
||||
param->param.std = V4L2_STD_PAL_DK;
|
||||
param->param.audmode = V4L2_STD_PAL_DK;
|
||||
}
|
||||
param->param.frequency += 1;
|
||||
|
||||
Reference in New Issue
Block a user