mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
19af5c5 dtv_demod: add AGC control for board t309 [1/1]
a9eb626 dtv_demod: Prevent NULL pointer crash caused by tuner attach failure [1/1] d27b145 dtv_demod: TL1 dtmb suspend hangup issue [1/1] 27c05dd dtv_demod: tl1,dvbc, new method for fast channel searching [1/1] fa80091 dtv_demod: txlx atsc-t loses lock when play video for a long time [1/1] 43db0c5 build: fix build err [1/1] d4abd67 dtv_demod: TXLX ISDB-T can't search channel [1/1] 70f2c39 dtv_demod: TL1 dvbc search time more than 3 min [1/1] 16d4727 dtv_demod: TL1 dtmb cma allocate fail after dtmb->dvbc->dtmb by cmd [1/1] b5aa9de media_module: h264/mpeg2/h265 [2/2] 3d6a5ed ppmgr: use light reg for video decoder local reset [1/1] ppmgr: use light reg for video decoder local reset [1/1] PD#SWPL-5014 Problem: ppmgr provider error sometimes in long time run under poor signal Solution: use light reg for video decoder local reset Verify: X301 Change-Id: I1500c9ddfdce76b3e9cb2b24a35cdee765f82d5f Signed-off-by: Hui Zhang <hui.zhang@amlogic.com> media_module: h264/mpeg2/h265 [2/2] PD#SWPL-3654 Problem: provide aspect_ratio information by AMSTREAM_IOC_VDECSTAT Solution: add ration_control information in vdec_status function for h264/mh264/vh265/mpeg12/mmpeg12, and normalized it for aspect_ratio in AMSTREAM_IOC_VDECSTAT message. Verify: Verified U212 Change-Id: Icd9270eb8f2ce2f6f7455ec28780d26ac6c56348 Signed-off-by: Rong Zhang <rong.zhang@amlogic.com> dtv_demod: TL1 dtmb cma allocate fail after dtmb->dvbc->dtmb by cmd [1/1] PD#TV-1748 Problem: [Hisense-T962X2-P-customer-DTV]:Failed to lock frequency in dtmb system Solution: leave the last mode before enter current mode to release the resources Verify: verified by t962x2_x301 Change-Id: Ibd7e1d4c67f5a5ad2191e0031fdd0b81812c8606 Signed-off-by: Zhiwei Yuan <zhiwei.yuan@amlogic.com> dtv_demod: TL1 dvbc search time more than 3 min [1/1] PD#SWPL-3555 Problem: {DVB-C}Hisense needs less than 3 minutes for dvb-c search.(5/5,None) Solution: 1.use demod internal state machine to optimize time 2.remove j.83b filter setting in dvbc mode for tl1 & txlx Verify: verified by t962x2_x301&t962x_r311 Change-Id: Ic922e3da727179e2e35a0fc80e52ac7242c54129 Signed-off-by: Zhiwei Yuan <zhiwei.yuan@amlogic.com> dtv_demod: TXLX ISDB-T can't search channel [1/1] PD#SWPL-3987 Problem: [Einstein]use ISDB-T cannot search any channel Solution: release cma memory at leave_mode for ISDB-t&DVB-T Verify: verified by t962x_r311 Change-Id: I9b79687a4d5270932ab30afaa3e7d2817e900149 Signed-off-by: Zhiwei Yuan <zhiwei.yuan@amlogic.com> build: fix build err [1/1] PD#SWPL-4150 Problem: When switch to the toolchain shipped with android P, multipile "-Werror=maybe-uninitialized" error occurs, and the code fail to be compiled Solution: Initialize variables if necessary Verify: Locally on Ampere Change-Id: I280de648914565656831e211539bf41a7dee2b4a Signed-off-by: Jiamin Ma <jiamin.ma@amlogic.com> dtv_demod: txlx atsc-t loses lock when play video for a long time [1/1] PD#SWPL-3418 Problem: [Einstein]when AC off/on,enter live TV , TV display blank screen and no signal about 5S Solution: use post-eq to track(0x912=0x50) Verify: verified by t962x_r311 Change-Id: I924c55a8f1c92328e4371cb730e1b03bd720457f Signed-off-by: Zhiwei Yuan <zhiwei.yuan@amlogic.com> dtv_demod: tl1,dvbc, new method for fast channel searching [1/1] PD#TV-2154 Problem: [Hisense-T962X2-P-customer-DTV]:DVBC QAM is set to auto to search channels Solution: add new searching method note: use "demod_dvbc_speedup_en" to mark the new method it's disabled as default, can be enabled if needed we can make it always enabled after all testing are passed enable: echo fast_search on > /sys/kernel/debug/demod/dvbc_channel_fast Verify: verified by t962x2_x301 Change-Id: Icaaab9f27eb058a062d7048c6ca9fa2e3bff008e Signed-off-by: Zhiwei Yuan <zhiwei.yuan@amlogic.com> dtv_demod: TL1 dtmb suspend hangup issue [1/1] PD#SWPL-5202 Problem: cma memory is not released when suspend Solution: provide suspend interface to release cma memory Verify: verified by t962x2_x301 Change-Id: I1d808a8a6119a2f385961c4c5bded5ab71c9c9d1 Signed-off-by: zhiwei.yuan <zhiwei.yuan@amlogic.com> dtv_demod: Prevent NULL pointer crash caused by tuner attach failure [1/1] PD#TV-1539 Problem: Prevent NULL pointer crash caused by tuner attach failure. Solution: Prevent NULL pointer crash caused by tuner attach failure. Verify: verified by x301 Change-Id: I57cf32947775626467eb952dd2298ae9ec84601d Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com> dtv_demod: add AGC control for board t309 [1/1] PD#SWPL-5175 Problem: r842 agc control need be controlled by demod Solution: add agc control function Verify: verified by t962x2_x301 t962x2_t309 Change-Id: If712e22276b97c457e2e2ed1c79bdf3673813dff Signed-off-by: zhiwei.yuan <zhiwei.yuan@amlogic.com>
This commit is contained in:
@@ -14507,6 +14507,8 @@ F: drivers/amlogic/media/dtv_demod/*
|
||||
AMLOGIC DTV DEMOD DRIVER
|
||||
M: Zhiwei Yuan <zhiwei.yuan@amlogic.com>
|
||||
F: drivers/amlogic/media/dtv_demod/include/addr_atsc*.h
|
||||
F: drivers/amlogic/media/dtv_demod/include/demod_dbg.h
|
||||
F: drivers/amlogic/media/dtv_demod/demod_dbg.c
|
||||
|
||||
AMLOGIC DEFENDKEY DRIVER
|
||||
M: Zhongfu Luo <zhongfu.luo@amlogic.com>
|
||||
|
||||
@@ -375,7 +375,7 @@ canvas_pool_map_show(struct class *class,
|
||||
int ret;
|
||||
int i;
|
||||
ssize_t size = 0;
|
||||
struct canvas_info info;
|
||||
struct canvas_info info = {NULL, 0, NULL, 0};
|
||||
struct canvas_s canvas;
|
||||
|
||||
if (jiffies - pool->last_cat_map > 5 * HZ) {
|
||||
|
||||
@@ -367,6 +367,33 @@ void vf_unreg_provider(struct vframe_provider_s *prov)
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(vf_unreg_provider);
|
||||
void vf_light_reg_provider(struct vframe_provider_s *prov)
|
||||
{
|
||||
struct vframe_provider_s *p = NULL;
|
||||
struct vframe_receiver_s *receiver = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_PROVIDER_NUM; i++) {
|
||||
p = provider_table[i];
|
||||
if (p && !strcmp(p->name, prov->name)) {
|
||||
if (vfm_debug_flag & 1)
|
||||
pr_err("%s:%s\n", __func__, prov->name);
|
||||
receiver = vf_get_receiver(prov->name);
|
||||
if (receiver && receiver->ops
|
||||
&& receiver->ops->event_cb) {
|
||||
receiver->ops->event_cb(
|
||||
VFRAME_EVENT_PROVIDER_REG,
|
||||
(void *)prov->name,
|
||||
receiver->op_arg);
|
||||
} else{
|
||||
pr_err("%s Error to notify receiver\n",
|
||||
__func__);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(vf_light_reg_provider);
|
||||
|
||||
void vf_light_unreg_provider(struct vframe_provider_s *prov)
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ obj-$(CONFIG_AMLOGIC_DTV_DEMOD) += dtvdemod.o
|
||||
|
||||
dtvdemod-objs := demod_func.o dvbc_func.o i2c_func.o tuner_func.o atsc_func.o dvbc_v2.o dvbc_v3.o dtmb_func.o dvbt_v2.o#dvbt_func.o
|
||||
|
||||
dtvdemod-objs += amlfrontend.o
|
||||
dtvdemod-objs += amlfrontend.o demod_dbg.o
|
||||
|
||||
dtvdemod-objs += aml_demod.o
|
||||
|
||||
|
||||
@@ -39,17 +39,18 @@
|
||||
/* #include <mach/am_regs.h> */
|
||||
#include <linux/device.h>
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/debugfs.h>
|
||||
|
||||
/* #include <asm/fiq.h> */
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/dvb/aml_demod.h>
|
||||
#include "demod_func.h"
|
||||
#include "demod_dbg.h"
|
||||
|
||||
#include <linux/slab.h>
|
||||
#ifdef CONFIG_COMPAT
|
||||
#include <linux/compat.h>
|
||||
#endif
|
||||
|
||||
/*#include "sdio/sdio_init.h"*/
|
||||
#define DRIVER_NAME "aml_demod"
|
||||
#define MODULE_NAME "aml_demod"
|
||||
@@ -280,6 +281,7 @@ static long aml_demod_ioctl(struct file *file,
|
||||
dvbfe = aml_get_fe();/*get_si2177_tuner();*/
|
||||
#if 0
|
||||
if (dvbfe != NULL)
|
||||
if (dvbfe->ops.tuner_ops.get_strength)
|
||||
strength = dvbfe->ops.tuner_ops.get_strength(dvbfe);
|
||||
#else
|
||||
strength = tuner_get_ch_power2();
|
||||
@@ -323,7 +325,8 @@ static long aml_demod_ioctl(struct file *file,
|
||||
#if 0 /*ary temp for my_tool:*/
|
||||
if (dvbfe != NULL) {
|
||||
pr_dbg("calling tuner ops\n");
|
||||
dvbfe->ops.tuner_ops.set_params(dvbfe);
|
||||
if (dvbfe->ops.tuner_ops.set_params)
|
||||
dvbfe->ops.tuner_ops.set_params(dvbfe);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@@ -493,288 +496,6 @@ static const struct file_operations aml_demod_fops = {
|
||||
#endif
|
||||
};
|
||||
|
||||
#if 0
|
||||
static int aml_demod_dbg_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
pr_dbg("Amlogic Demod debug Open\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int aml_demod_dbg_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
pr_dbg("Amlogic Demod debug Release\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int addr_for_read;
|
||||
static unsigned int register_val;
|
||||
static unsigned int symb_rate;
|
||||
static unsigned int ch_freq;
|
||||
static unsigned int modulation;
|
||||
static char *dbg_name[] = {
|
||||
"demod top r/w",
|
||||
"dvbc r/w",
|
||||
"atsc r/w",
|
||||
"dtmb r/w",
|
||||
"front r/w",
|
||||
"isdbt r/w",
|
||||
"dvbc init",
|
||||
"atsc init",
|
||||
"dtmb init",
|
||||
};
|
||||
|
||||
unsigned int get_symbol_rate(void)
|
||||
{// / 1000
|
||||
return symb_rate;
|
||||
}
|
||||
|
||||
unsigned int get_ch_freq(void)
|
||||
{// / 1000
|
||||
return ch_freq;
|
||||
}
|
||||
|
||||
unsigned int get_modu(void)
|
||||
{
|
||||
return modulation;
|
||||
}
|
||||
|
||||
/*
|
||||
*TVFE_VAFE_CTRL0 0x000d0710
|
||||
*TVFE_VAFE_CTRL1 0x00003000
|
||||
*TVFE_VAFE_CTRL2 0x1fe09e31
|
||||
*HHI_DADC_CNTL 0x0030303c
|
||||
*HHI_DADC_CNTL2 0x00003480
|
||||
*HHI_DADC_CNTL3 0x08700b83
|
||||
*HHI_VDAC_CNTL1 0x0000000
|
||||
|
||||
*ADC_PLL_CNTL0 0X012004e0
|
||||
*ADC_PLL_CNTL0 0X312004e0
|
||||
*ADC_PLL_CNTL1 0X05400000
|
||||
*ADC_PLL_CNTL2 0xe1800000
|
||||
*ADC_PLL_CNTL3 0x48681c00
|
||||
*ADC_PLL_CNTL4 0x88770290
|
||||
*ADC_PLL_CNTL5 0x39272000
|
||||
*ADC_PLL_CNTL6 0x56540000
|
||||
*ADC_PLL_CNTL0 0X111104e0
|
||||
*/
|
||||
static void aml_demod_adc_init(void)
|
||||
{
|
||||
PR_INFO("%s\n", __func__);
|
||||
demod_init_mutex();
|
||||
demod_power_switch(PWR_ON);
|
||||
//TVFE_VAFE_CTRL0
|
||||
demod_set_tvfe_reg(0x000d0710, 0xff654ec0);
|
||||
//TVFE_VAFE_CTRL1
|
||||
demod_set_tvfe_reg(0x00003000, 0xff654ec4);
|
||||
//TVFE_VAFE_CTRL2
|
||||
demod_set_tvfe_reg(0x1fe09e31, 0xff654ec8);
|
||||
//HHI_DADC_CNTL
|
||||
dd_tvafe_hiu_reg_write(0x9c, 0x0030303c);
|
||||
//HHI_DADC_CNTL2
|
||||
dd_tvafe_hiu_reg_write(0xa0, 0x00003480);
|
||||
//HHI_DADC_CNTL3
|
||||
//dd_tvafe_hiu_reg_write(0xa8, 0x08700b83);
|
||||
dd_tvafe_hiu_reg_write(0xa8, 0x08300b83);
|
||||
//HHI_VDAC_CNTL1
|
||||
dd_tvafe_hiu_reg_write(0x2f0, 0x0000000);
|
||||
//ADC_PLL_CNTL0
|
||||
dd_tvafe_hiu_reg_write(0x2c0, 0X012004e0);
|
||||
dd_tvafe_hiu_reg_write(0x2c0, 0X312004e0);
|
||||
//ADC_PLL_CNTL1
|
||||
dd_tvafe_hiu_reg_write(0x2c4, 0X05400000);
|
||||
//ADC_PLL_CNTL2
|
||||
//dd_tvafe_hiu_reg_write(0x2c8, 0xe1800000);
|
||||
dd_tvafe_hiu_reg_write(0x2c8, 0xE0800000);//shijie modify, crystal 24M
|
||||
//dd_tvafe_hiu_reg_write(0x2c8, 0xe9800000);
|
||||
//ADC_PLL_CNTL3
|
||||
dd_tvafe_hiu_reg_write(0x2cc, 0x48681c00);
|
||||
//ADC_PLL_CNTL4
|
||||
dd_tvafe_hiu_reg_write(0x2d0, 0x88770290);
|
||||
//ADC_PLL_CNTL5
|
||||
dd_tvafe_hiu_reg_write(0x2d4, 0x39272000);
|
||||
//ADC_PLL_CNTL6
|
||||
dd_tvafe_hiu_reg_write(0x2d8, 0x56540000);
|
||||
//ADC_PLL_CNTL0
|
||||
dd_tvafe_hiu_reg_write(0x2c0, 0X111104e0);
|
||||
//zou weihua
|
||||
dd_tvafe_hiu_reg_write(0x3cc, 0x00800000);
|
||||
//shijie
|
||||
dd_tvafe_hiu_reg_write(0x1d0, 0x501);//0x705
|
||||
//shixi, switch to demod mode, enable pclk
|
||||
//demod_write_reg(DEMOD_TOP_REG0, 0x11);
|
||||
dtvpll_init_flag(1);
|
||||
}
|
||||
|
||||
static ssize_t aml_demod_dbg_show(struct file *file, char __user *userbuf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[80];
|
||||
ssize_t len = 0;
|
||||
|
||||
#if 1
|
||||
len = snprintf(buf, sizeof(buf), "%s :0x%x = %i\n",
|
||||
dbg_name[addr_for_read >> 28], addr_for_read & 0xff,
|
||||
register_val);
|
||||
#else
|
||||
len = snprintf(buf, sizeof(buf), "%s\n", __func__);
|
||||
#endif
|
||||
//demod_read_reg(DEMOD_TOP_REGC);
|
||||
//dtmb_read_reg(0);
|
||||
//dd_tvafe_hiu_reg_write(0x9c, 0x0030303c);
|
||||
PR_INFO("%s\n", __func__);
|
||||
//PR_INFO("0xec0 = 0x%x\n", dd_tvafe_hiu_reg_read(0x9c));
|
||||
//dvbt_read_reg(0x38);
|
||||
|
||||
return simple_read_from_buffer(userbuf, count, ppos, buf, len);
|
||||
}
|
||||
|
||||
/*echo dbg_md [0xaddr] [val] > /sys/kernel/debug/demod/xxxx*/
|
||||
static ssize_t aml_demod_dbg_store(struct file *file,
|
||||
const char __user *userbuf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[80];
|
||||
unsigned int reg, val, dbg_md;
|
||||
int ret;
|
||||
|
||||
count = min_t(size_t, count, (sizeof(buf)-1));
|
||||
if (copy_from_user(buf, userbuf, count))
|
||||
return -EFAULT;
|
||||
|
||||
buf[count] = 0;
|
||||
|
||||
ret = sscanf(buf, "%d %x %i", &dbg_md, ®, &val);
|
||||
aml_demod_adc_init();
|
||||
|
||||
switch (ret) {
|
||||
case 1://cmd
|
||||
switch (dbg_md) {
|
||||
case AML_DBG_DVBC_INIT:
|
||||
Gxtv_Demod_Dvbc_v4_Init();
|
||||
break;
|
||||
case AML_DBG_ATSC_INIT:
|
||||
demod_set_sys_atsc_v4();
|
||||
break;
|
||||
case AML_DBG_DTMB_INIT:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
PR_INFO("%s\n", dbg_name[dbg_md]);
|
||||
break;
|
||||
case 2://read register, set param
|
||||
switch (dbg_md) {
|
||||
case AML_DBG_DEMOD_TOP_RW:
|
||||
addr_for_read = (AML_DBG_DEMOD_TOP_RW << 28) | reg;
|
||||
register_val = demod_read_reg(reg);
|
||||
break;
|
||||
case AML_DBG_DVBC_RW:
|
||||
addr_for_read = (AML_DBG_DVBC_RW << 28) | reg;
|
||||
register_val = dvbc_read_reg(reg);
|
||||
break;
|
||||
case AML_DBG_ATSC_RW:
|
||||
addr_for_read = (AML_DBG_ATSC_RW << 28) | reg;
|
||||
register_val = atsc_read_reg_v4(reg);
|
||||
break;
|
||||
case AML_DBG_DTMB_RW:
|
||||
addr_for_read = (AML_DBG_DTMB_RW << 28) | reg;
|
||||
register_val = dtmb_read_reg(reg);
|
||||
break;
|
||||
case AML_DBG_FRONT_RW:
|
||||
addr_for_read = (AML_DBG_FRONT_RW << 28) | reg;
|
||||
register_val = front_read_reg_v4(reg);
|
||||
break;
|
||||
case AML_DBG_ISDBT_RW:
|
||||
addr_for_read = (AML_DBG_ISDBT_RW << 28) | reg;
|
||||
register_val = isdbt_read_reg_v4(reg);
|
||||
break;
|
||||
case AML_DBG_DEMOD_SYMB_RATE:
|
||||
symb_rate = reg;
|
||||
break;
|
||||
case AML_DBG_DEMOD_CH_FREQ:
|
||||
ch_freq = reg;
|
||||
break;
|
||||
case AML_DBG_DEMOD_MODUL:
|
||||
modulation = reg;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
PR_INFO("%s reg:0x%x\n", dbg_name[dbg_md], reg);
|
||||
break;
|
||||
case 3://write register
|
||||
switch (dbg_md) {
|
||||
case AML_DBG_DEMOD_TOP_RW:
|
||||
demod_write_reg(reg, val);
|
||||
break;
|
||||
case AML_DBG_DVBC_RW:
|
||||
dvbc_write_reg(reg, val);
|
||||
break;
|
||||
case AML_DBG_ATSC_RW:
|
||||
atsc_write_reg_v4(reg, val);
|
||||
break;
|
||||
case AML_DBG_DTMB_RW:
|
||||
dtmb_write_reg(reg, val);
|
||||
break;
|
||||
case AML_DBG_FRONT_RW:
|
||||
front_write_reg_v4(reg, val);
|
||||
break;
|
||||
case AML_DBG_ISDBT_RW:
|
||||
isdbt_write_reg_v4(reg, val);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
PR_INFO("%s reg:0x%x,val=%d\n", dbg_name[dbg_md], reg, val);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static const struct file_operations aml_demod_dvbc_dbg_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = aml_demod_dbg_open,
|
||||
.release = aml_demod_dbg_release,
|
||||
//.unlocked_ioctl = aml_demod_ioctl,
|
||||
.read = aml_demod_dbg_show,
|
||||
.write = aml_demod_dbg_store,
|
||||
};
|
||||
|
||||
static void aml_demod_dbg_init(void)
|
||||
{
|
||||
struct dentry *root_entry = dtvdd_devp->demod_root;
|
||||
struct dentry *entry;
|
||||
|
||||
PR_INFO("%s\n", __func__);
|
||||
|
||||
root_entry = debugfs_create_dir("frontend", NULL);
|
||||
if (!root_entry) {
|
||||
PR_INFO("Can't create debugfs dir frontend.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
entry = debugfs_create_file("demod", S_IFREG | 0644, root_entry, NULL,
|
||||
&aml_demod_dvbc_dbg_fops);
|
||||
if (!entry) {
|
||||
PR_INFO("Can't create debugfs file demod.\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void aml_demod_dbg_exit(void)
|
||||
{
|
||||
struct dentry *root_entry = dtvdd_devp->demod_root;
|
||||
|
||||
if (dtvdd_devp && root_entry)
|
||||
debugfs_remove_recursive(root_entry);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int aml_demod_ui_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
pr_dbg("Amlogic aml_demod_ui_open Open\n");
|
||||
@@ -988,7 +709,7 @@ static int __init aml_demod_init(void)
|
||||
sdio_init();
|
||||
#endif
|
||||
aml_demod_ui_init();
|
||||
//aml_demod_dbg_init();
|
||||
aml_demod_dbg_init();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1028,7 +749,7 @@ static void __exit aml_demod_exit(void)
|
||||
class_unregister(&aml_demod_class);
|
||||
|
||||
aml_demod_exit_ui();
|
||||
//aml_demod_dbg_exit();
|
||||
aml_demod_dbg_exit();
|
||||
}
|
||||
|
||||
#ifndef CONFIG_AM_DEMOD_DVBAPI
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -565,6 +565,7 @@ if (!field_test_version) {
|
||||
atsc_write_reg(0x54d, 0x08);
|
||||
atsc_write_reg(0x54c, 0x08);
|
||||
atsc_write_reg(0x53b, 0x0e);
|
||||
atsc_write_reg(0x912, 0x50);
|
||||
}
|
||||
ar_flag = 0;
|
||||
}
|
||||
|
||||
179
drivers/amlogic/media/dtv_demod/demod_dbg.c
Normal file
179
drivers/amlogic/media/dtv_demod/demod_dbg.c
Normal file
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* drivers/amlogic/media/dtv_demod/demod_dbg.c
|
||||
*
|
||||
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include "demod_func.h"
|
||||
#include "amlfrontend.h"
|
||||
#include "demod_dbg.h"
|
||||
#include <linux/string.h>
|
||||
|
||||
static void demod_dump_atsc_reg(struct seq_file *seq)
|
||||
{
|
||||
unsigned int reg_start, reg_end;
|
||||
|
||||
if (is_ic_ver(IC_VER_TXLX)) {
|
||||
reg_start = 0x0;
|
||||
reg_end = 0xfff;
|
||||
|
||||
for (; reg_start <= reg_end; reg_start++) {
|
||||
if (reg_start % 8 == 0)
|
||||
seq_printf(seq, "\n[addr 0x%03x] ", reg_start);
|
||||
seq_printf(seq, "0x%02x\t", atsc_read_reg(reg_start));
|
||||
}
|
||||
|
||||
seq_puts(seq, "\n");
|
||||
} else if (is_ic_ver(IC_VER_TL1)) {
|
||||
}
|
||||
}
|
||||
|
||||
static int seq_file_demod_dump_reg_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
if (demod_get_current_mode() == AML_ATSC)
|
||||
demod_dump_atsc_reg(seq);
|
||||
else if (demod_get_current_mode() == UNKNOWN)
|
||||
seq_puts(seq, "current mode is unknown\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define DEFINE_SHOW_DEMOD(__name) \
|
||||
static int __name ## _open(struct inode *inode, struct file *file) \
|
||||
{ \
|
||||
return single_open(file, __name ## _show, inode->i_private); \
|
||||
} \
|
||||
\
|
||||
static const struct file_operations __name ## _fops = { \
|
||||
.owner = THIS_MODULE, \
|
||||
.open = __name ## _open, \
|
||||
.read = seq_read, \
|
||||
.llseek = seq_lseek, \
|
||||
.release = single_release, \
|
||||
}
|
||||
|
||||
DEFINE_SHOW_DEMOD(seq_file_demod_dump_reg);
|
||||
|
||||
static struct demod_debugfs_files_t demod_debugfs_files[] = {
|
||||
{"dump_reg", S_IFREG | 0644, &seq_file_demod_dump_reg_fops},
|
||||
};
|
||||
|
||||
static int demod_dbg_dvbc_fast_search_open(struct inode *inode,
|
||||
struct file *file)
|
||||
{
|
||||
PR_INFO("Demod debug Open\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int demod_dbg_dvbc_fast_search_release(struct inode *inode,
|
||||
struct file *file)
|
||||
{
|
||||
PR_INFO("Demod debug Release\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define BUFFER_SIZE 100
|
||||
static ssize_t demod_dbg_dvbc_fast_search_show(struct file *file,
|
||||
char __user *userbuf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[BUFFER_SIZE];
|
||||
unsigned int len;
|
||||
|
||||
len = snprintf(buf, BUFFER_SIZE, "channel fast search en : %d\n",
|
||||
demod_dvbc_get_fast_search());
|
||||
//len += snprintf(buf + len, BUFFER_SIZE - len, "");
|
||||
|
||||
return simple_read_from_buffer(userbuf, count, ppos, buf, len);
|
||||
}
|
||||
|
||||
static ssize_t demod_dbg_dvbc_fast_search_store(struct file *file,
|
||||
const char __user *userbuf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[80];
|
||||
char cmd[80], para[80];
|
||||
int ret;
|
||||
|
||||
count = min_t(size_t, count, (sizeof(buf)-1));
|
||||
if (copy_from_user(buf, userbuf, count))
|
||||
return -EFAULT;
|
||||
|
||||
buf[count] = 0;
|
||||
|
||||
ret = sscanf(buf, "%s %s", cmd, para);
|
||||
|
||||
if (!strcmp(cmd, "fast_search")) {
|
||||
PR_INFO("channel fast search: ");
|
||||
|
||||
if (!strcmp(para, "on")) {
|
||||
PR_INFO("on\n");
|
||||
demod_dvbc_set_fast_search(1);
|
||||
} else if (!strcmp(para, "off")) {
|
||||
PR_INFO("off\n");
|
||||
demod_dvbc_set_fast_search(0);
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static const struct file_operations demod_dbg_dvbc_fast_search_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = demod_dbg_dvbc_fast_search_open,
|
||||
.release = demod_dbg_dvbc_fast_search_release,
|
||||
//.unlocked_ioctl = aml_demod_ioctl,
|
||||
.read = demod_dbg_dvbc_fast_search_show,
|
||||
.write = demod_dbg_dvbc_fast_search_store,
|
||||
};
|
||||
|
||||
void aml_demod_dbg_init(void)
|
||||
{
|
||||
struct dentry *root_entry = dtvdd_devp->demod_root;
|
||||
struct dentry *entry;
|
||||
unsigned int i;
|
||||
|
||||
PR_INFO("%s\n", __func__);
|
||||
|
||||
root_entry = debugfs_create_dir("demod", NULL);
|
||||
if (!root_entry) {
|
||||
PR_INFO("Can't create debugfs dir frontend.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(demod_debugfs_files); i++) {
|
||||
entry = debugfs_create_file(demod_debugfs_files[i].name,
|
||||
demod_debugfs_files[i].mode,
|
||||
root_entry, NULL,
|
||||
demod_debugfs_files[i].fops);
|
||||
if (!entry)
|
||||
PR_INFO("Can't create debugfs seq file.\n");
|
||||
}
|
||||
|
||||
entry = debugfs_create_file("dvbc_channel_fast", S_IFREG | 0644,
|
||||
root_entry, NULL,
|
||||
&demod_dbg_dvbc_fast_search_fops);
|
||||
if (!entry)
|
||||
PR_INFO("Can't create debugfs fast search.\n");
|
||||
|
||||
}
|
||||
|
||||
void aml_demod_dbg_exit(void)
|
||||
{
|
||||
struct dentry *root_entry = dtvdd_devp->demod_root;
|
||||
|
||||
if (dtvdd_devp && root_entry)
|
||||
debugfs_remove_recursive(root_entry);
|
||||
}
|
||||
|
||||
|
||||
@@ -331,7 +331,7 @@ int dvbc_set_ch(struct aml_demod_sta *demod_sta,
|
||||
ret = -1;
|
||||
}
|
||||
/* if (ret != 0) return ret; */
|
||||
demod_sta->dvb_mode = 0;
|
||||
//demod_sta->dvb_mode = 0;
|
||||
demod_sta->ch_mode = mode;
|
||||
/* 0:16, 1:32, 2:64, 3:128, 4:256 */
|
||||
demod_sta->agc_mode = 1;
|
||||
|
||||
@@ -179,6 +179,86 @@ static unsigned int get_adc_freq(void)
|
||||
return 24000;
|
||||
}
|
||||
|
||||
void demod_dvbc_set_qam(unsigned int qam)
|
||||
{
|
||||
/* QAM_GCTL0 */
|
||||
qam_write_reg(0x2, (qam_read_reg(0x2) & ~7) | (qam & 7));
|
||||
|
||||
switch (qam) {
|
||||
case 0: /*16qam*/
|
||||
qam_write_reg(0x71, 0x000a2200);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x72, 0xc2b0c49);
|
||||
else
|
||||
qam_write_reg(0x72, 0x0c2b04a9);
|
||||
|
||||
qam_write_reg(0x73, 0x02020000);
|
||||
qam_write_reg(0x75, 0x000e9178);
|
||||
qam_write_reg(0x76, 0x0001c100);
|
||||
qam_write_reg(0x7a, 0x002ab7ff);
|
||||
qam_write_reg(0x93, 0x641a180c);
|
||||
qam_write_reg(0x94, 0x0c141400);
|
||||
break;
|
||||
case 1:/*32qam*/
|
||||
qam_write_reg(0x71, 0x00061200);
|
||||
qam_write_reg(0x72, 0x099301ae);
|
||||
qam_write_reg(0x73, 0x08080000);
|
||||
qam_write_reg(0x75, 0x000bf10c);
|
||||
qam_write_reg(0x76, 0x0000a05c);
|
||||
qam_write_reg(0x77, 0x001000d6);
|
||||
qam_write_reg(0x7a, 0x0019a7ff);
|
||||
qam_write_reg(0x7c, 0x00111222);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7d, 0x2020305);
|
||||
else
|
||||
qam_write_reg(0x7d, 0x05050505);
|
||||
|
||||
qam_write_reg(0x7e, 0x03000d0d);
|
||||
qam_write_reg(0x93, 0x641f1d0c);
|
||||
qam_write_reg(0x94, 0x0c1a1a00);
|
||||
break;
|
||||
case 2:/*64qam*/
|
||||
if (is_ic_ver(IC_VER_TL1)) {
|
||||
qam_write_reg(0x9c, 0x2a132100);
|
||||
qam_write_reg(0x57, 0x606060d);
|
||||
}
|
||||
break;
|
||||
case 3:/*128qam*/
|
||||
qam_write_reg(0x71, 0x0002c200);
|
||||
qam_write_reg(0x72, 0x0a6e0059);
|
||||
qam_write_reg(0x73, 0x08080000);
|
||||
qam_write_reg(0x75, 0x000a70e9);
|
||||
qam_write_reg(0x76, 0x00002013);
|
||||
qam_write_reg(0x77, 0x00035068);
|
||||
qam_write_reg(0x78, 0x000ab100);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7a, 0xba7ff);
|
||||
else
|
||||
qam_write_reg(0x7a, 0x002ba7ff);
|
||||
|
||||
qam_write_reg(0x7c, 0x00111222);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7d, 0x2020305);
|
||||
else
|
||||
qam_write_reg(0x7d, 0x05050505);
|
||||
|
||||
qam_write_reg(0x7e, 0x03000d0d);
|
||||
qam_write_reg(0x93, 0x642a240c);
|
||||
qam_write_reg(0x94, 0x0c262600);
|
||||
break;
|
||||
case 4://256 QAM
|
||||
if (is_ic_ver(IC_VER_TL1)) {
|
||||
qam_write_reg(0x9c, 0x2a232100);
|
||||
qam_write_reg(0x57, 0x606040d);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dvbc_reg_initial(struct aml_demod_sta *demod_sta)
|
||||
{
|
||||
u32 clk_freq;
|
||||
@@ -221,83 +301,24 @@ void dvbc_reg_initial(struct aml_demod_sta *demod_sta)
|
||||
qam_write_reg(0x7, qam_read_reg(0x7) & ~(1 << 0));
|
||||
/* Sw disable demod */
|
||||
qam_write_reg(0x7, qam_read_reg(0x7) | (1 << 0));
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
if (agc_mode == 1) {
|
||||
qam_write_reg(0x25,
|
||||
qam_read_reg(0x25) & ~(0x1 << 10));
|
||||
qam_write_reg(0x24,
|
||||
qam_read_reg(0x24) | (0x1 << 17));
|
||||
#if 0
|
||||
qam_write_reg(0x3d,
|
||||
qam_read_reg(0x3d) | 0xf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Sw enable demod */
|
||||
qam_write_reg(0x0, 0x0);
|
||||
/* QAM_STATUS */
|
||||
qam_write_reg(0x7, 0x00000f00);
|
||||
/* QAM_GCTL0 */
|
||||
qam_write_reg(0x2, (qam_read_reg(0x2) & ~7) | (ch_mode & 7));
|
||||
/* qam mode */
|
||||
|
||||
switch (ch_mode) {
|
||||
case 0: /*16qam*/
|
||||
qam_write_reg(0x71, 0x000a2200);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x72, 0xc2b0c49);
|
||||
else
|
||||
qam_write_reg(0x72, 0x0c2b04a9);
|
||||
|
||||
qam_write_reg(0x73, 0x02020000);
|
||||
qam_write_reg(0x75, 0x000e9178);
|
||||
qam_write_reg(0x76, 0x0001c100);
|
||||
qam_write_reg(0x7a, 0x002ab7ff);
|
||||
qam_write_reg(0x93, 0x641a180c);
|
||||
qam_write_reg(0x94, 0x0c141400);
|
||||
break;
|
||||
case 1:/*32qam*/
|
||||
qam_write_reg(0x71, 0x00061200);
|
||||
qam_write_reg(0x72, 0x099301ae);
|
||||
qam_write_reg(0x73, 0x08080000);
|
||||
qam_write_reg(0x75, 0x000bf10c);
|
||||
qam_write_reg(0x76, 0x0000a05c);
|
||||
qam_write_reg(0x77, 0x001000d6);
|
||||
qam_write_reg(0x7a, 0x0019a7ff);
|
||||
qam_write_reg(0x7c, 0x00111222);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7d, 0x2020305);
|
||||
else
|
||||
qam_write_reg(0x7d, 0x05050505);
|
||||
|
||||
qam_write_reg(0x7e, 0x03000d0d);
|
||||
qam_write_reg(0x93, 0x641f1d0c);
|
||||
qam_write_reg(0x94, 0x0c1a1a00);
|
||||
break;
|
||||
case 2:/*64qam*/
|
||||
break;
|
||||
case 3:/*128qam*/
|
||||
qam_write_reg(0x71, 0x0002c200);
|
||||
qam_write_reg(0x72, 0x0a6e0059);
|
||||
qam_write_reg(0x73, 0x08080000);
|
||||
qam_write_reg(0x75, 0x000a70e9);
|
||||
qam_write_reg(0x76, 0x00002013);
|
||||
qam_write_reg(0x77, 0x00035068);
|
||||
qam_write_reg(0x78, 0x000ab100);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7a, 0xba7ff);
|
||||
else
|
||||
qam_write_reg(0x7a, 0x002ba7ff);
|
||||
|
||||
qam_write_reg(0x7c, 0x00111222);
|
||||
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x7d, 0x2020305);
|
||||
else
|
||||
qam_write_reg(0x7d, 0x05050505);
|
||||
|
||||
qam_write_reg(0x7e, 0x03000d0d);
|
||||
qam_write_reg(0x93, 0x642a240c);
|
||||
qam_write_reg(0x94, 0x0c262600);
|
||||
break;
|
||||
case 4:
|
||||
if (is_ic_ver(IC_VER_TL1)) {
|
||||
qam_write_reg(0x9c, 0x2a232100);
|
||||
qam_write_reg(0x57, 0x606040d);
|
||||
}
|
||||
break;
|
||||
}
|
||||
demod_dvbc_set_qam(ch_mode);
|
||||
/*dvbc_write_reg(QAM_BASE+0x00c, 0xfffffffe);*/
|
||||
/* // adc_cnt, symb_cnt*/
|
||||
qam_write_reg(0x3, 0xffff8ffe);
|
||||
@@ -367,8 +388,10 @@ void dvbc_reg_initial(struct aml_demod_sta *demod_sta)
|
||||
/* // configure min symbol_rate fb = 6.95M*/
|
||||
qam_write_reg(0x12, (qam_read_reg(0x12) & ~(0xff<<8)) | 3400 * 256);
|
||||
|
||||
#if 0
|
||||
if (is_ic_ver(IC_VER_TL1))
|
||||
qam_write_reg(0x51, (qam_read_reg(0x51)&~(0x1<<28)));
|
||||
#endif
|
||||
/* configure min symbol_rate fb = 6.95M */
|
||||
|
||||
/*dvbc_write_reg(QAM_BASE+0x0c0, 0xffffff68); // threshold */
|
||||
@@ -385,16 +408,19 @@ void dvbc_reg_initial(struct aml_demod_sta *demod_sta)
|
||||
/* agc control */
|
||||
/* dvbc_write_reg(QAM_BASE+0x094, 0x7f800d2c);// AGC_CTRL ALPS tuner */
|
||||
/* dvbc_write_reg(QAM_BASE+0x094, 0x7f80292c); // Pilips Tuner */
|
||||
if ((agc_mode & 1) == 0)
|
||||
/* freeze if agc */
|
||||
qam_write_reg(0x25,
|
||||
qam_read_reg(0x25) | (0x1 << 10));
|
||||
if ((agc_mode & 2) == 0) {
|
||||
/* IF control */
|
||||
/*freeze rf agc */
|
||||
qam_write_reg(0x25,
|
||||
qam_read_reg(0x25) | (0x1 << 13));
|
||||
if (!is_ic_ver(IC_VER_TL1)) {
|
||||
if ((agc_mode & 1) == 0)
|
||||
/* freeze if agc */
|
||||
qam_write_reg(0x25,
|
||||
qam_read_reg(0x25) | (0x1 << 10));
|
||||
if ((agc_mode & 2) == 0) {
|
||||
/* IF control */
|
||||
/*freeze rf agc */
|
||||
qam_write_reg(0x25,
|
||||
qam_read_reg(0x25) | (0x1 << 13));
|
||||
}
|
||||
}
|
||||
|
||||
/*Maxlinear Tuner */
|
||||
/*dvbc_write_reg(QAM_BASE+0x094, 0x7f80292d); */
|
||||
/*dvbc_write_reg(QAM_BASE + 0x098, 0x9fcc8190);*/
|
||||
@@ -432,40 +458,43 @@ void dvbc_reg_initial(struct aml_demod_sta *demod_sta)
|
||||
|
||||
/* enable irq */
|
||||
qam_write_reg(0x34, 0x7fff << 3);
|
||||
#if 1
|
||||
|
||||
/*if (is_meson_txlx_cpu()) {*/
|
||||
if (is_ic_ver(IC_VER_TXLX)) {
|
||||
if (is_ic_ver(IC_VER_TXLX) || (is_ic_ver(IC_VER_TL1))) {
|
||||
/*my_tool setting j83b mode*/
|
||||
qam_write_reg(0x7, 0x10f33);
|
||||
/*j83b filter para*/
|
||||
qam_write_reg(0x40, 0x3f010201);
|
||||
qam_write_reg(0x41, 0x0a003a3b);
|
||||
qam_write_reg(0x42, 0xe1ee030e);
|
||||
qam_write_reg(0x43, 0x002601f2);
|
||||
qam_write_reg(0x44, 0x009b006b);
|
||||
qam_write_reg(0x45, 0xb3a1905);
|
||||
qam_write_reg(0x46, 0x1c396e07);
|
||||
qam_write_reg(0x47, 0x3801cc08);
|
||||
qam_write_reg(0x48, 0x10800a2);
|
||||
qam_write_reg(0x12, 0x50e1000);
|
||||
qam_write_reg(0x30, 0x41f2f69);
|
||||
/*j83b_symbolrate(please see register doc)*/
|
||||
qam_write_reg(0x4d, 0x23d125f7);
|
||||
/*for phase noise case 256qam*/
|
||||
qam_write_reg(0x9c, 0x2a232100);
|
||||
qam_write_reg(0x57, 0x606040d);
|
||||
/*for phase noise case 64qam*/
|
||||
qam_write_reg(0x54, 0x606050d);
|
||||
qam_write_reg(0x52, 0x346dc);
|
||||
|
||||
if (demod_sta->dvb_mode == Gxtv_Atsc ||
|
||||
is_ic_ver(IC_VER_TXLX)) {
|
||||
/*j83b filter para*/
|
||||
qam_write_reg(0x40, 0x3f010201);
|
||||
qam_write_reg(0x41, 0x0a003a3b);
|
||||
qam_write_reg(0x42, 0xe1ee030e);
|
||||
qam_write_reg(0x43, 0x002601f2);
|
||||
qam_write_reg(0x44, 0x009b006b);
|
||||
qam_write_reg(0x45, 0xb3a1905);
|
||||
qam_write_reg(0x46, 0x1c396e07);
|
||||
qam_write_reg(0x47, 0x3801cc08);
|
||||
qam_write_reg(0x48, 0x10800a2);
|
||||
qam_write_reg(0x12, 0x50e1000);
|
||||
qam_write_reg(0x30, 0x41f2f69);
|
||||
/*j83b_symbolrate(please see register doc)*/
|
||||
qam_write_reg(0x4d, 0x23d125f7);
|
||||
/*for phase noise case 256qam*/
|
||||
qam_write_reg(0x9c, 0x2a232100);
|
||||
qam_write_reg(0x57, 0x606040d);
|
||||
/*for phase noise case 64qam*/
|
||||
qam_write_reg(0x54, 0x606050d);
|
||||
qam_write_reg(0x52, 0x346dc);
|
||||
}
|
||||
|
||||
qam_auto_scan(1);
|
||||
}
|
||||
#endif
|
||||
if (!is_ic_ver(IC_VER_TL1)) {
|
||||
qam_write_reg(0x7, 0x10f23);
|
||||
qam_write_reg(0x3a, 0x0);
|
||||
qam_write_reg(0x7, 0x10f33);
|
||||
qam_write_reg(0x3a, 0x4);
|
||||
}
|
||||
|
||||
qam_write_reg(0x7, 0x10f23);
|
||||
qam_write_reg(0x3a, 0x0);
|
||||
qam_write_reg(0x7, 0x10f33);
|
||||
qam_write_reg(0x3a, 0x4);
|
||||
/*auto track*/
|
||||
/* dvbc_set_auto_symtrack(); */
|
||||
}
|
||||
|
||||
@@ -39,6 +39,18 @@ enum Gxtv_Demod_Dvb_Mode {
|
||||
Gxtv_Atsc = 2,
|
||||
Gxtv_Dtmb = 3,
|
||||
};
|
||||
|
||||
enum demod_md {
|
||||
UNKNOWN = 0,
|
||||
AML_DVBC,
|
||||
AML_DTMB,
|
||||
AML_DVBT,
|
||||
AML_ATSC,
|
||||
AML_J83B,
|
||||
AML_ISDBT,
|
||||
AML_DVBT2
|
||||
};
|
||||
|
||||
#define Adc_Clk_35M 35714 /* adc clk dvbc */
|
||||
#define Demod_Clk_71M 71428 /* demod clk */
|
||||
|
||||
@@ -448,4 +460,7 @@ extern unsigned int dtmb_is_update_delay(void);
|
||||
extern unsigned int dtmb_get_delay_clear(void);
|
||||
extern unsigned int dtmb_is_have_check(void);
|
||||
extern void dtmb_poll_v3(void);
|
||||
extern enum demod_md demod_get_current_mode(void);
|
||||
extern unsigned int demod_dvbc_get_fast_search(void);
|
||||
extern void demod_dvbc_set_fast_search(unsigned int en);
|
||||
#endif
|
||||
|
||||
25
drivers/amlogic/media/dtv_demod/include/demod_dbg.h
Normal file
25
drivers/amlogic/media/dtv_demod/include/demod_dbg.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* drivers/amlogic/media/dtv_demod/include/demod_dbg.h
|
||||
*
|
||||
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*/
|
||||
|
||||
struct demod_debugfs_files_t {
|
||||
const char *name;
|
||||
const umode_t mode;
|
||||
const struct file_operations *fops;
|
||||
};
|
||||
|
||||
extern void aml_demod_dbg_init(void);
|
||||
extern void aml_demod_dbg_exit(void);
|
||||
@@ -454,8 +454,9 @@ u16 tuner_get_ch_power3(void);
|
||||
|
||||
int dtmb_get_power_strength(int agc_gain);
|
||||
|
||||
|
||||
|
||||
extern int dvbc_get_power_strength(int agc_gain, int tuner_strength);
|
||||
extern int j83b_get_power_strength(int agc_gain, int tuner_strength);
|
||||
extern int atsc_get_power_strength(int agc_gain, int tuner_strength);
|
||||
|
||||
/* dvbt */
|
||||
int dvbt_set_ch(struct aml_demod_sta *demod_sta,
|
||||
@@ -498,6 +499,7 @@ extern void dvbc_reg_initial_old(struct aml_demod_sta *demod_sta);
|
||||
|
||||
/*txlx*/
|
||||
extern void dvbc_reg_initial(struct aml_demod_sta *demod_sta);
|
||||
extern void demod_dvbc_set_qam(unsigned int qam);
|
||||
extern void dvbc_init_reg_ext(void);
|
||||
extern u32 dvbc_get_ch_sts(void);
|
||||
extern u32 dvbc_get_qam_mode(void);
|
||||
|
||||
@@ -33,21 +33,21 @@ bool aml_dma_release_contiguous(struct device *dev, struct page *pages,
|
||||
|
||||
/*void ary_test(void);*/
|
||||
enum aml_fe_n_mode_t { /*same as aml_fe_mode_t in aml_fe.h*/
|
||||
AM_FE_UNKNOWN_N = 0,
|
||||
AM_FE_QPSK_N = 1,
|
||||
AM_FE_QAM_N = 2,
|
||||
AM_FE_OFDM_N = 4,
|
||||
AM_FE_ATSC_N = 8,
|
||||
AM_FE_UNKNOWN_N,
|
||||
AM_FE_QPSK_N,
|
||||
AM_FE_QAM_N,
|
||||
AM_FE_OFDM_N,
|
||||
AM_FE_ATSC_N,
|
||||
/*AM_FE_ANALOG = 16,*/
|
||||
AM_FE_DTMB_N = 32,
|
||||
AM_FE_ISDBT_N = 64
|
||||
AM_FE_DTMB_N,
|
||||
AM_FE_ISDBT_N,
|
||||
AM_FE_NUM,
|
||||
};
|
||||
|
||||
/*----------------------------------*/
|
||||
|
||||
struct aml_exp_func {
|
||||
|
||||
int (*leave_mode)(int mode);
|
||||
int (*leave_mode)(enum aml_fe_n_mode_t mode);
|
||||
};
|
||||
|
||||
#endif /*__DEPEND_H__*/
|
||||
|
||||
@@ -264,4 +264,72 @@ int dtmb_get_power_strength(int agc_gain)
|
||||
return strength;
|
||||
}
|
||||
|
||||
/*tuner has 3 stage gain control, only last is controlled by demod agc*/
|
||||
static int dvbc_R842[20] = {
|
||||
/*-90,-89,-88, -87, -86 , -85 , -84 , -83 , -82 , -81dbm*/
|
||||
1200, 1180, 1150, 1130, 1100, 1065, 1040, 1030, 1000, 970
|
||||
};
|
||||
|
||||
int dvbc_get_power_strength(int agc_gain, int tuner_strength)
|
||||
{
|
||||
int strength;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(dvbc_R842)/sizeof(int); i++)
|
||||
if (agc_gain >= dvbc_R842[i])
|
||||
break;
|
||||
|
||||
if (agc_gain >= 970)
|
||||
strength = -90+i*1;
|
||||
else
|
||||
strength = tuner_strength + 22;
|
||||
|
||||
return strength;
|
||||
}
|
||||
|
||||
static int j83b_R842[10] = {
|
||||
/*-90,-89,-88, -87, -86 , -85 , -84 , -83 , -82 , -81dbm*/
|
||||
1140, 1110, 1080, 1060, 1030, 1000, 980, 1000, 970, 1000,
|
||||
/*-80,-79,-78, -77, -76 , -75 , -74 , -73 , -72 , -71dbm*/
|
||||
/*970 , 980, 960, 970, 950, 960, 970, 980, 960, 970*/
|
||||
};
|
||||
|
||||
int j83b_get_power_strength(int agc_gain, int tuner_strength)
|
||||
{
|
||||
int strength;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(j83b_R842)/sizeof(int); i++)
|
||||
if (agc_gain >= j83b_R842[i])
|
||||
break;
|
||||
|
||||
if (agc_gain >= 970)
|
||||
strength = -90+i*1;
|
||||
else
|
||||
strength = tuner_strength + 18;
|
||||
|
||||
return strength;
|
||||
}
|
||||
|
||||
static int atsc_R842[6] = {
|
||||
/*-90,-89,-88, -87, -86 , -85 , -84 , -83 , -82 , -81dbm*/
|
||||
2160, 2110, 2060, 2010, 1960, 1910/*, 1870, 1910, 1860, 1900*/
|
||||
};
|
||||
|
||||
int atsc_get_power_strength(int agc_gain, int tuner_strength)
|
||||
{
|
||||
int strength;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(atsc_R842)/sizeof(int); i++)
|
||||
if (agc_gain >= atsc_R842[i])
|
||||
break;
|
||||
|
||||
if (agc_gain >= 1910)
|
||||
strength = -90+i*1;
|
||||
else
|
||||
strength = tuner_strength;
|
||||
|
||||
return strength;
|
||||
}
|
||||
|
||||
|
||||
@@ -3248,7 +3248,7 @@ SKIP_DETECT:
|
||||
vf_local_init();
|
||||
vf_light_unreg_provider(&ppmgr_vf_prov);
|
||||
msleep(30);
|
||||
vf_reg_provider(&ppmgr_vf_prov);
|
||||
vf_light_reg_provider(&ppmgr_vf_prov);
|
||||
ppmgr_blocking = false;
|
||||
up(&thread_sem);
|
||||
PPMGRVPP_WARN("ppmgr rebuild from light-unregister\n");
|
||||
|
||||
@@ -931,7 +931,7 @@ static void xc5000_config_tv(struct dvb_frontend *fe,
|
||||
static int xc5000_set_tv_freq(struct dvb_frontend *fe)
|
||||
{
|
||||
struct xc5000_priv *priv = fe->tuner_priv;
|
||||
u16 pll_lock_status;
|
||||
u16 pll_lock_status = 0;
|
||||
int ret;
|
||||
|
||||
tune_channel:
|
||||
|
||||
@@ -300,12 +300,20 @@ struct buf_status {
|
||||
|
||||
#define DECODER_ERROR_MASK (0xffff<<16)
|
||||
|
||||
|
||||
enum E_ASPECT_RATIO {
|
||||
ASPECT_RATIO_4_3,
|
||||
ASPECT_RATIO_16_9,
|
||||
ASPECT_UNDEFINED = 255
|
||||
};
|
||||
|
||||
struct vdec_status {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int fps;
|
||||
unsigned int error_count;
|
||||
unsigned int status;
|
||||
enum E_ASPECT_RATIO euAspectRatio;
|
||||
};
|
||||
|
||||
struct vdec_info {
|
||||
@@ -325,6 +333,7 @@ struct vdec_info {
|
||||
unsigned long long total_data;
|
||||
unsigned int samp_cnt;
|
||||
unsigned int offset;
|
||||
unsigned int ratio_control;
|
||||
char reserved[32];
|
||||
};
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@ extern int vf_notify_provider(const char *receiver_name, int event_type,
|
||||
extern int vf_notify_provider_by_name(const char *provider_name,
|
||||
int event_type, void *data);
|
||||
|
||||
void vf_light_reg_provider(struct vframe_provider_s *prov);
|
||||
void vf_light_unreg_provider(struct vframe_provider_s *prov);
|
||||
void vf_ext_light_unreg_provider(struct vframe_provider_s *prov);
|
||||
struct vframe_provider_s *vf_get_provider(const char *name);
|
||||
|
||||
@@ -112,6 +112,11 @@ COMPAT_SYSCALL_DEFINE2(settimeofday, struct compat_timeval __user *, tv,
|
||||
struct timespec new_ts;
|
||||
struct timezone new_tz;
|
||||
|
||||
#ifdef CONFIG_AMLOGIC_MODIFY
|
||||
new_ts.tv_sec = 0;
|
||||
new_ts.tv_nsec = 0;
|
||||
#endif
|
||||
|
||||
if (tv) {
|
||||
if (compat_get_timeval(&user_tv, tv))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -1222,6 +1222,10 @@ void set_process_cpu_timer(struct task_struct *tsk, unsigned int clock_idx,
|
||||
{
|
||||
unsigned long long now;
|
||||
|
||||
#ifdef CONFIG_AMLOGIC_MODIFY
|
||||
now = 0;
|
||||
#endif
|
||||
|
||||
WARN_ON_ONCE(clock_idx == CPUCLOCK_SCHED);
|
||||
cpu_timer_sample_group(clock_idx, tsk, &now);
|
||||
|
||||
|
||||
@@ -198,6 +198,11 @@ SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv,
|
||||
struct timespec new_ts;
|
||||
struct timezone new_tz;
|
||||
|
||||
#ifdef CONFIG_AMLOGIC_MODIFY
|
||||
new_ts.tv_sec = 0;
|
||||
new_ts.tv_nsec = 0;
|
||||
#endif
|
||||
|
||||
if (tv) {
|
||||
if (copy_from_user(&user_tv, tv, sizeof(*tv)))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -997,6 +997,10 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
struct hlist_head *list;
|
||||
struct path path = { NULL, NULL };
|
||||
|
||||
#ifdef CONFIG_AMLOGIC_MODIFY
|
||||
hash = 0;
|
||||
#endif
|
||||
|
||||
err = -EINVAL;
|
||||
if (addr_len < offsetofend(struct sockaddr_un, sun_family) ||
|
||||
sunaddr->sun_family != AF_UNIX)
|
||||
|
||||
Reference in New Issue
Block a user