| /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ |
| /* |
| * Copyright (c) 2021 Amlogic, Inc. All rights reserved. |
| */ |
| |
| #ifndef __DEMOD_FUNC_H__ |
| |
| #define __DEMOD_FUNC_H__ |
| |
| #include <linux/types.h> |
| |
| #include "aml_demod.h" |
| #include <media/dvb_frontend.h> |
| #include "amlfrontend.h" |
| #ifdef AML_DEMOD_SUPPORT_DTMB |
| #include "addr_dtmb_top.h" |
| #endif |
| #ifdef AML_DEMOD_SUPPORT_ATSC |
| #include "addr_atsc_demod.h" |
| #include "addr_atsc_eq.h" |
| #include "addr_atsc_cntr.h" |
| #include "atsc_func.h" |
| #endif |
| #ifdef AML_DEMOD_SUPPORT_J83B |
| #include "j83b_func.h" |
| #endif |
| #include "dtv_demod_regs.h" |
| |
| /*#include "c_stb_define.h"*/ |
| /*#include "c_stb_regs_define.h"*/ |
| #include <linux/io.h> |
| #include <linux/jiffies.h> |
| |
| #if defined DEMOD_FPGA_VERSION |
| #include "fpga_func.h" |
| #endif |
| |
| #if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC |
| |
| #define DSTATUS 0x934 |
| #define SR_LOW_THRD 11000000 |
| #define AUTOSR_REG 0x922 |
| #define DVBS_REG_DISTXCFG 0x302 |
| #define AUTOSR_OFF 0xcc |
| #define DVBS_REG_DISTIMEOCFG 0x308 |
| |
| #endif |
| |
| #define PWR_ON 1 |
| #define PWR_OFF 0 |
| |
| /* offset define */ |
| #define DEMOD_REG_ADDR_OFFSET(reg) (reg & 0xfffff) |
| #define QAM_BASE (0x400) /* is offset */ |
| #define DEMOD_CFG_BASE (0xC00) /* is offset */ |
| |
| /* adc */ |
| #define D_HHI_DADC_RDBK0_I (0x29 << 2) |
| #define D_HHI_DADC_CNTL4 (0x2b << 2) |
| |
| /*redefine*/ |
| #define HHI_DEMOD_MEM_PD_REG (0x43) |
| /*redefine*/ |
| #define RESET_RESET0_LEVEL (0x80) |
| |
| /*----------------------------------*/ |
| /*register offset define in C_stb_regs_define.h*/ |
| #define AO_RTI_GEN_PWR_SLEEP0 ((0x00 << 10) | (0x3a << 2)) |
| #define AO_RTI_GEN_PWR_ISO0 ((0x00 << 10) | (0x3b << 2)) |
| /*----------------------------------*/ |
| |
| #define ALIGN_24 16777216 |
| |
| /* demod register */ |
| #define DEMOD_TOP_REG0 (0x00) |
| #define DEMOD_TOP_REG4 (0x04) |
| #define DEMOD_TOP_REG8 (0x08) |
| #define DEMOD_TOP_REGC (0x0C) |
| #define DEMOD_TOP_CFG_REG_4 (0x10) |
| #define DEMOD_TOP_CFG_REG_6 (0x18) |
| #define DEMOD_FRONT_REG38 (0x38) |
| #define DEMOD_FRONT_REG39 (0x39) |
| |
| #define DEMOD_FRONT_AFIFO_ADC (0x20) |
| #define DEMOD_FRONT_AGC_CFG1 (0x21) |
| #define DEMOD_FRONT_AGC_CFG2 (0x22) |
| #define DEMOD_FRONT_AGC_CFG3 (0x23) |
| #define DEMOD_FRONT_AGC_CFG6 (0x26) |
| #define DEMOD_FRONT_DC_CFG1 (0x28) |
| |
| /*reset register*/ |
| #define reg_reset (0x1c) |
| |
| #define IO_CBUS_PHY_BASE (0xc0800000) |
| |
| #define DEMOD_REG0_VALUE 0x0000d007 |
| #define DEMOD_REG4_VALUE 0x2e805400 |
| #define DEMOD_REG8_VALUE 0x201 |
| |
| /* for table end */ |
| #define TABLE_FLG_END 0xffffffff |
| |
| #define OTP_LIC ((0x0010 << 2) + 0xfe440000) |
| #define OTP_LIC13 (OTP_LIC + 0x1C) |
| |
| /* debug info=====================================================*/ |
| extern int aml_demod_debug; |
| |
| #define DBG_INFO BIT(0) |
| #define DBG_REG BIT(1) |
| #define DBG_ATSC BIT(2) |
| #define DBG_DTMB BIT(3) |
| #define DBG_LOOP BIT(4) |
| #define DBG_DVBC BIT(5) |
| #define DBG_DVBT BIT(6) |
| #define DBG_DVBS BIT(7) |
| #define DBG_ISDBT BIT(8) |
| #define DBG_TIME BIT(9) |
| |
| #define PR_INFO(fmt, args ...) pr_info("dtv_dmd:" fmt, ##args) |
| |
| #define PR_TIME(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_TIME) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_DBG(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_INFO) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_ATSC(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_ATSC) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_DVBC(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_DVBC) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_DVBT(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_DVBT) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_DVBS(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_DVBS) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_DTMB(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_DTMB) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_ISDBT(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_ISDBT) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| /*polling*/ |
| #define PR_DBGL(fmt, args ...) \ |
| do { \ |
| if (aml_demod_debug & DBG_LOOP) { \ |
| pr_info("dtv_dmd:" fmt, ##args); \ |
| } \ |
| } while (0) |
| |
| #define PR_ERR(fmt, args ...) pr_err("dtv_dmd:" fmt, ##args) |
| #define PR_WAR(fmt, args...) pr_warn("dtv_dmd:" fmt, ##args) |
| |
| #define ST_DRIVER_ID 0 |
| #define ST_DRIVER_BASE (ST_DRIVER_ID << 16) |
| #define MAXNAMESIZE 30 |
| #define POWOF2(number) (1 << (number)) /* was: s32 PowOf2(s32 number); */ |
| #define POWOF4(number) (1 << ((number) << 1)) /* was: s32 PowOf2(s32 number); */ |
| #define MAKEWORD(X, Y) (((X) << 8) + (Y)) |
| |
| enum demod_reg_mode { |
| REG_MODE_DTMB, |
| REG_MODE_DVBT_ISDBT, |
| REG_MODE_DVBT_T2, |
| REG_MODE_ATSC, |
| REG_MODE_DVBC_J83B, |
| REG_MODE_FRONT, |
| REG_MODE_TOP, |
| REG_MODE_CFG, |
| REG_MODE_BASE, |
| REG_MODE_FPGA, |
| REG_MODE_COLLECT_DATA, |
| REG_MODE_OTHERS |
| }; |
| |
| enum { |
| AMLOGIC_DTMB_STEP0, |
| AMLOGIC_DTMB_STEP1, |
| AMLOGIC_DTMB_STEP2, |
| AMLOGIC_DTMB_STEP3, |
| AMLOGIC_DTMB_STEP4, |
| AMLOGIC_DTMB_STEP5, /* time eq */ |
| AMLOGIC_DTMB_STEP6, /* set normal mode sc */ |
| AMLOGIC_DTMB_STEP7, |
| AMLOGIC_DTMB_STEP8, /* set time eq mode */ |
| AMLOGIC_DTMB_STEP9, /* reset */ |
| AMLOGIC_DTMB_STEP10, /* set normal mode mc */ |
| AMLOGIC_DTMB_STEP11, |
| }; |
| |
| enum { |
| DTMB_IDLE = 0, |
| DTMB_AGC_READY = 1, |
| DTMB_TS1_READY = 2, |
| DTMB_TS2_READY = 3, |
| DTMB_FE_READY = 4, |
| DTMB_PNPHASE_READY = 5, |
| DTMB_SFO_INIT_READY = 6, |
| DTMB_TS3_READY = 7, |
| DTMB_PM_INIT_READY = 8, |
| DTMB_CHE_INIT_READY = 9, |
| DTMB_FEC_READY = 10 |
| }; |
| |
| enum dtv_demod_reg_access_mode_e { |
| ACCESS_WORD, |
| ACCESS_BITS, |
| ACCESS_BYTE, |
| ACCESS_NUM |
| }; |
| |
| struct aml_demod_reg { |
| enum demod_reg_mode mode; |
| u8_t rw;/* 0: read, 1: write. */ |
| u32_t addr; |
| u32_t val; |
| enum dtv_demod_reg_access_mode_e access_mode; |
| u32_t start_bit; |
| u32_t bit_width; |
| }; |
| |
| struct stchip_register_t { |
| unsigned short addr; /* Address */ |
| unsigned char value; /* Current value */ |
| }; |
| |
| enum fe_sat_search_algo { |
| FE_SAT_BLIND_SEARCH, /* offset freq and SR are Unknown */ |
| FE_SAT_COLD_START, /* only the SR is known */ |
| FE_SAT_WARM_START /* offset freq and SR are known */ |
| }; |
| |
| enum fe_sat_search_standard { |
| FE_SAT_AUTO_SEARCH, |
| FE_SAT_SEARCH_DVBS1, /* Search Standard*/ |
| FE_SAT_SEARCH_DVBS2, |
| FE_SAT_SEARCH_DSS, |
| FE_SAT_SEARCH_TURBOCODE |
| }; |
| |
| enum fe_sat_rate { /*DVBS1, DSS and turbo code puncture rate*/ |
| FE_SAT_PR_1_2 = 0, |
| FE_SAT_PR_2_3, |
| FE_SAT_PR_3_4, |
| FE_SAT_PR_4_5, /*for turbo code only*/ |
| FE_SAT_PR_5_6, |
| FE_SAT_PR_6_7, /*for DSS only */ |
| FE_SAT_PR_7_8, |
| FE_SAT_PR_8_9, /*for turbo code only*/ |
| FE_SAT_PR_UNKNOWN |
| }; |
| |
| enum fe_sat_search_iq_inv { |
| FE_SAT_IQ_AUTO, |
| FE_SAT_IQ_AUTO_NORMAL_FIRST, |
| FE_SAT_IQ_FORCE_NORMAL, |
| FE_SAT_IQ_FORCE_SWAPPED |
| }; |
| |
| enum fe_sat_modcode { |
| /* 0x00..1F: Legacy list, DVBS2 |
| * 0x20..3F: DVBS1 |
| * 0x40..7F: DVBS2-X With: _S: Short frame (only here to make it work compile, otherwise |
| * there will be a redefinition of enumerator) |
| * _L: Linear constellation, |
| * _R_xx: reserved + Modcode number hex Pon, Poff Pilots configuration |
| */ |
| FE_SAT_DUMMY_PLF = 0x00, |
| FE_SAT_QPSK_14 = 0x01, |
| FE_SAT_QPSK_13 = 0x02, |
| FE_SAT_QPSK_25 = 0x03, |
| FE_SAT_QPSK_12 = 0x04, |
| FE_SAT_QPSK_35 = 0x05, |
| FE_SAT_QPSK_23 = 0x06, |
| FE_SAT_QPSK_34 = 0x07, |
| FE_SAT_QPSK_45 = 0x08, |
| FE_SAT_QPSK_56 = 0x09, |
| FE_SAT_QPSK_89 = 0x0A, |
| FE_SAT_QPSK_910 = 0x0B, |
| FE_SAT_8PSK_35 = 0x0C, |
| FE_SAT_8PSK_23 = 0x0D, |
| FE_SAT_8PSK_34 = 0x0E, |
| FE_SAT_8PSK_56 = 0x0F, |
| FE_SAT_8PSK_89 = 0x10, |
| FE_SAT_8PSK_910 = 0x11, |
| FE_SAT_16APSK_23 = 0x12, |
| FE_SAT_16APSK_34 = 0x13, |
| FE_SAT_16APSK_45 = 0x14, |
| FE_SAT_16APSK_56 = 0x15, |
| FE_SAT_16APSK_89 = 0x16, |
| FE_SAT_16APSK_910 = 0x17, |
| FE_SAT_32APSK_34 = 0x18, |
| FE_SAT_32APSK_45 = 0x19, |
| FE_SAT_32APSK_56 = 0x1A, |
| FE_SAT_32APSK_89 = 0x1B, |
| FE_SAT_32APSK_910 = 0x1C, |
| FE_SAT_MODCODE_UNKNOWN = 0x1D, |
| FE_SAT_MODCODE_UNKNOWN_1E = 0x1E, |
| FE_SAT_MODCODE_UNKNOWN_1F = 0x1F, |
| /* ---------------------------------------- */ |
| FE_SAT_DVBS1_QPSK_12 = 0x20, |
| FE_SAT_DVBS1_QPSK_23 = 0x21, |
| FE_SAT_DVBS1_QPSK_34 = 0x22, |
| FE_SAT_DVBS1_QPSK_56 = 0x23, |
| FE_SAT_DVBS1_QPSK_67 = 0x24, |
| FE_SAT_DVBS1_QPSK_78 = 0x25, |
| FE_SAT_MODCODE_UNKNOWN_26 = 0x26, |
| FE_SAT_MODCODE_UNKNOWN_27 = 0x27, |
| FE_SAT_MODCODE_UNKNOWN_28 = 0x28, |
| FE_SAT_MODCODE_UNKNOWN_29 = 0x29, |
| FE_SAT_MODCODE_UNKNOWN_2A = 0x2A, |
| FE_SAT_MODCODE_UNKNOWN_2B = 0x2B, |
| FE_SAT_MODCODE_UNKNOWN_2C = 0x2C, |
| FE_SAT_MODCODE_UNKNOWN_2D = 0x2D, |
| FE_SAT_MODCODE_UNKNOWN_2E = 0x2E, |
| FE_SAT_MODCODE_UNKNOWN_2F = 0x2F, |
| FE_SAT_MODCODE_UNKNOWN_30 = 0x30, |
| FE_SAT_MODCODE_UNKNOWN_31 = 0x31, |
| FE_SAT_MODCODE_UNKNOWN_32 = 0x32, |
| FE_SAT_MODCODE_UNKNOWN_33 = 0x33, |
| FE_SAT_MODCODE_UNKNOWN_34 = 0x34, |
| FE_SAT_MODCODE_UNKNOWN_35 = 0x35, |
| FE_SAT_MODCODE_UNKNOWN_36 = 0x36, |
| FE_SAT_MODCODE_UNKNOWN_37 = 0x37, |
| FE_SAT_MODCODE_UNKNOWN_38 = 0x38, |
| FE_SAT_MODCODE_UNKNOWN_39 = 0x39, |
| FE_SAT_MODCODE_UNKNOWN_3A = 0x3A, |
| FE_SAT_MODCODE_UNKNOWN_3B = 0x3B, |
| FE_SAT_MODCODE_UNKNOWN_3C = 0x3C, |
| FE_SAT_MODCODE_UNKNOWN_3D = 0x3D, |
| FE_SAT_MODCODE_UNKNOWN_3E = 0x3E, |
| FE_SAT_MODCODE_UNKNOWN_3F = 0x3F, |
| /* ---------------------------------------- */ |
| FE_SATX_VLSNR1 = 0x40, |
| FE_SATX_VLSNR2 = 0x41, |
| FE_SATX_QPSK_13_45 = 0x42, |
| FE_SATX_QPSK_9_20 = 0x43, |
| FE_SATX_QPSK_11_20 = 0x44, |
| FE_SATX_8APSK_5_9_L = 0x45, |
| FE_SATX_8APSK_26_45_L = 0x46, |
| FE_SATX_8PSK_23_36 = 0x47, |
| FE_SATX_8PSK_25_36 = 0x48, |
| FE_SATX_8PSK_13_18 = 0x49, |
| FE_SATX_16APSK_1_2_L = 0x4A, |
| FE_SATX_16APSK_8_15_L = 0x4B, |
| FE_SATX_16APSK_5_9_L = 0x4C, |
| FE_SATX_16APSK_26_45 = 0x4D, |
| FE_SATX_16APSK_3_5 = 0x4E, |
| FE_SATX_16APSK_3_5_L = 0x4F, |
| FE_SATX_16APSK_28_45 = 0x50, |
| FE_SATX_16APSK_23_36 = 0x51, |
| FE_SATX_16APSK_2_3_L = 0x52, |
| FE_SATX_16APSK_25_36 = 0x53, |
| FE_SATX_16APSK_13_18 = 0x54, |
| FE_SATX_16APSK_7_9 = 0x55, |
| FE_SATX_16APSK_77_90 = 0x56, |
| FE_SATX_32APSK_2_3_L = 0x57, |
| FE_SATX_32APSK_R_58 = 0x58, |
| FE_SATX_32APSK_32_45 = 0x59, |
| FE_SATX_32APSK_11_15 = 0x5A, |
| FE_SATX_32APSK_7_9 = 0x5B, |
| FE_SATX_64APSK_32_45_L = 0x5C, |
| FE_SATX_64APSK_11_15 = 0x5D, |
| FE_SATX_64APSK_R_5E = 0x5E, |
| FE_SATX_64APSK_7_9 = 0x5F, |
| FE_SATX_64APSK_R_60 = 0x60, |
| FE_SATX_64APSK_4_5 = 0x61, |
| FE_SATX_64APSK_R_62 = 0x62, |
| FE_SATX_64APSK_5_6 = 0x63, |
| FE_SATX_128APSK_3_4 = 0x64, |
| FE_SATX_128APSK_7_9 = 0x65, |
| FE_SATX_256APSK_29_45_L = 0x66, |
| FE_SATX_256APSK_2_3_L = 0x67, |
| FE_SATX_256APSK_31_45_L = 0x68, |
| FE_SATX_256APSK_32_45 = 0x69, |
| FE_SATX_256APSK_11_15_L = 0x6A, |
| FE_SATX_256APSK_3_4 = 0x6B, |
| FE_SATX_QPSK_11_45 = 0x6C, |
| FE_SATX_QPSK_4_15 = 0x6D, |
| FE_SATX_QPSK_14_45 = 0x6E, |
| FE_SATX_QPSK_7_15 = 0x6F, |
| FE_SATX_QPSK_8_15 = 0x70, |
| FE_SATX_QPSK_32_45 = 0x71, |
| FE_SATX_8PSK_7_15 = 0x72, |
| FE_SATX_8PSK_8_15 = 0x73, |
| FE_SATX_8PSK_26_45 = 0x74, |
| FE_SATX_8PSK_32_45 = 0x75, |
| FE_SATX_16APSK_7_15 = 0x76, |
| FE_SATX_16APSK_8_15 = 0x77, |
| FE_SATX_16APSK_26_45_S = 0x78, |
| FE_SATX_16APSK_3_5_S = 0x79, |
| FE_SATX_16APSK_32_45 = 0x7A, |
| FE_SATX_32APSK_2_3 = 0x7B, |
| FE_SATX_32APSK_32_45_S = 0x7C, |
| /* ---------------------------------------- */ |
| FE_SATX_8PSK = 0x7D, |
| FE_SATX_32APSK = 0x7E, |
| FE_SATX_256APSK = 0x7F, /* POFF Modes */ |
| FE_SATX_16APSK = 0x80, |
| FE_SATX_64APSK = 0x81, |
| FE_SATX_1024APSK = 0x82, /* PON Modes */ |
| FE_SAT_MODCODE_MAX /* Only used for range checking */ |
| }; |
| |
| enum fe_sat_modulation { |
| FE_SAT_MOD_QPSK, |
| FE_SAT_MOD_8PSK, |
| FE_SAT_MOD_16APSK, |
| FE_SAT_MOD_32APSK, |
| FE_SAT_MOD_VLSNR, |
| FE_SAT_MOD_64APSK, |
| FE_SAT_MOD_128APSK, |
| FE_SAT_MOD_256APSK, |
| FE_SAT_MOD_8PSK_L, |
| FE_SAT_MOD_16APSK_L, |
| FE_SAT_MOD_32APSK_L, |
| FE_SAT_MOD_64APSK_L, |
| FE_SAT_MOD_256APSK_L, |
| FE_SAT_MOD_1024APSK, |
| FE_SAT_MOD_UNKNOWN |
| }; /* sat modulation type*/ |
| |
| enum stchip_error { |
| CHIPERR_NO_ERROR = 0x0, /* No error encountered */ |
| CHIPERR_INVALID_HANDLE = 0x1, /* Using of an invalid chip handle */ |
| CHIPERR_INVALID_REG_ID = 0x2, /* Using of an invalid register */ |
| CHIPERR_INVALID_FIELD_ID = 0x4, /* Using of an Invalid field */ |
| CHIPERR_INVALID_FIELD_SIZE = 0x8, /* Using of a field with an invalid size */ |
| CHIPERR_I2C_NO_ACK = 0x10, /* No acknowledge from the chip */ |
| CHIPERR_I2C_BURST = 0x20, /* Two many registers accessed in burst mode */ |
| CHIPERR_TYPE_ERR = 0x40, |
| CHIPERR_CONFIG_ERR = 0x80 |
| }; |
| |
| enum fe_sat_tracking_standard { |
| FE_SAT_DVBS1_STANDARD, /* Found Standard*/ |
| FE_SAT_DVBS2_STANDARD, |
| FE_SAT_DSS_STANDARD, |
| FE_SAT_TURBOCODE_STANDARD, |
| FE_SAT_UNKNOWN_STANDARD |
| }; |
| |
| enum fe_sat_pilots { |
| FE_SAT_PILOTS_OFF, |
| FE_SAT_PILOTS_ON, |
| FE_SAT_UNKNOWN_PILOTS |
| }; |
| |
| enum fe_sat_rolloff { |
| /* same order than MATYPE_ROLLOFF field */ |
| FE_SAT_35, |
| FE_SAT_25, |
| FE_SAT_20, |
| FE_SAT_10, |
| FE_SAT_05, |
| FE_SAT_15, |
| }; |
| |
| enum fe_sat_frame { |
| FE_SAT_NORMAL_FRAME, |
| FE_SAT_SHORT_FRAME, |
| FE_SAT_LONG_FRAME = FE_SAT_NORMAL_FRAME, |
| FE_SAT_UNKNOWN_FRAME |
| }; |
| |
| enum fe_sat_iq_inversion { |
| FE_SAT_IQ_NORMAL, |
| FE_SAT_IQ_SWAPPED |
| }; |
| |
| struct fe_sat_search_result { |
| bool locked; /* Transponder found */ |
| unsigned int frequency; /* Found frequency */ |
| unsigned int symbol_rate;/* Found Symbol rate*/ |
| enum fe_sat_tracking_standard standard; /* Found Standard DVBS1,DVBS2 or DSS*/ |
| enum fe_sat_rate puncture_rate;/* Found Puncture rate For DVBS1*/ |
| enum fe_sat_modcode modcode;/* Found Modcode only for DVBS2*/ |
| enum fe_sat_modulation modulation; /* Found modulation type*/ |
| enum fe_sat_pilots pilots; /* pilots Found for DVBS2*/ |
| enum fe_sat_frame frame_length;/* Found frame length for DVBS2*/ |
| enum fe_sat_iq_inversion spectrum;/* IQ specrum swap setting*/ |
| enum fe_sat_rolloff roll_off;/* Rolloff factor (0.2, 0.25 or 0.35)*/ |
| }; |
| |
| enum { |
| ST_NO_ERROR = ST_DRIVER_BASE, |
| ST_ERROR_BAD_PARAMETER, /* Bad parameter passed */ |
| ST_ERROR_NO_MEMORY, /* Memory allocation failed */ |
| ST_ERROR_UNKNOWN_DEVICE, /* Unknown device name */ |
| ST_ERROR_ALREADY_INITIALIZED, /* Device already initialized */ |
| ST_ERROR_NO_FREE_HANDLES, /* Cannot open device again */ |
| ST_ERROR_OPEN_HANDLE, /* At least one open handle */ |
| ST_ERROR_INVALID_HANDLE, /* Handle is not valid */ |
| ST_ERROR_FEATURE_NOT_SUPPORTED, /* Feature unavailable */ |
| ST_ERROR_INTERRUPT_INSTALL, /* Interrupt install failed */ |
| ST_ERROR_INTERRUPT_UNINSTALL, /* Interrupt uninstall failed */ |
| ST_ERROR_TIMEOUT, /* Timeout occurred */ |
| ST_ERROR_DEVICE_BUSY, /* Device is currently busy */ |
| STFRONTEND_ERROR_I2C |
| }; |
| |
| enum fe_lla_error { |
| FE_LLA_NO_ERROR = ST_NO_ERROR, |
| FE_LLA_INVALID_HANDLE = ST_ERROR_INVALID_HANDLE, |
| FE_LLA_ALLOCATION = ST_ERROR_NO_MEMORY, |
| FE_LLA_BAD_PARAMETER = ST_ERROR_BAD_PARAMETER, |
| FE_LLA_ALREADY_INITIALIZED = ST_ERROR_BAD_PARAMETER, |
| FE_LLA_I2C_ERROR = STFRONTEND_ERROR_I2C, |
| FE_LLA_SEARCH_FAILED, |
| FE_LLA_TRACKING_FAILED, |
| FE_LLA_NODATA, |
| FE_LLA_TUNER_NOSIGNAL, |
| FE_LLA_TUNER_JUMP, |
| FE_LLA_TUNER_4_STEP, |
| FE_LLA_TUNER_8_STEP, |
| FE_LLA_TUNER_16_STEP, |
| FE_LLA_TERM_FAILED, |
| FE_LLA_DISEQC_FAILED, |
| FE_LLA_NOT_SUPPORTED |
| }; /*Error Type*/ |
| |
| enum stchip_fieldtype { |
| CHIP_UNSIGNED, |
| CHIP_SIGNED |
| }; |
| |
| struct stchip_field { |
| unsigned short reg; /* Register index */ |
| unsigned char pos; /* Bit position */ |
| unsigned char bits; /* Bit width */ |
| unsigned int mask; /* Mask compute with width and position */ |
| enum stchip_fieldtype type; /* Signed or unsigned */ |
| char name[48]; /* Name */ |
| }; |
| |
| struct stchip_instindex { |
| unsigned short regidx; /* Register reference index */ |
| unsigned int fldidx; /* Field reference index */ |
| }; |
| |
| struct stchip_instance { |
| unsigned short path; /* Path index */ |
| struct stchip_instindex index[16]; /* 1st Register/Field index */ |
| }; |
| |
| /* how to access I2C bus */ |
| enum stchip_mode { |
| /* <trans><addr><addr...><data><data...> (e.g. oxford stbus bridge, fixed transaction) */ |
| STCHIP_MODE_I2C2STBUS, |
| STCHIP_MODE_SUBADR_8, /* <addr><reg8><data><data> (e.g. demod chip) */ |
| STCHIP_MODE_SUBADR_16, /* <addr><reg8><data><data> (e.g. demod chip) */ |
| STCHIP_MODE_NOSUBADR, /* <addr><data>|<data><data><data> (e.g. tuner chip) */ |
| /* <addr><data>|<data><data><data> (e.g. tuner chip) only for read */ |
| STCHIP_MODE_NOSUBADR_RD, |
| STCHIP_MODE_STI5197, /* 5197: base address FDE11000 for QAM IP registers */ |
| STCHIP_MODE_MXL, /* Access mode for MXL201RF tuner */ |
| STCHIP_MODE_STIH273, /* whatever */ |
| STCHIP_MODE_STV0368, /* 0368: specific use of PAGESHIFT register */ |
| /* 0368: specific use of MAILBOX communication scheme (!!!requires xp70 F/W!!!)*/ |
| STCHIP_MODE_STV0368MAILBOX, |
| STCHIP_MODE_SUBADR_8_SR, |
| STCHIP_MODE_STIH237 |
| }; |
| |
| struct stchip_info { |
| unsigned char i2caddr; /* Chip I2C address */ |
| char name[MAXNAMESIZE];/* Name of the chip */ |
| unsigned int nb_insts; /* Number of instances in the chip */ |
| int nb_regs; /* Number of registers in the chip */ |
| unsigned int nb_fields; /* Number of fields in the chip */ |
| struct stchip_register_t *p_reg_map_image; /* Pointer to register map */ |
| struct stchip_field *p_field_map_image; /* Pointer to field map */ |
| struct stchip_instance *p_inst_map; /* Pointer to an Instances Map */ |
| enum stchip_error error; /* Error state */ |
| enum stchip_mode chipmode;/* Access bus in demod (SubAdr) or tuner (NoSubAdr) mode*/ |
| unsigned char chipid; /* Chip cut ID */ |
| |
| bool repeater; /* Is repeater enabled or not ? */ |
| struct stchip_info *repeater_host; /* Owner of the repeater */ |
| /* Pointer to repeater routine */ |
| enum stchip_error (*repeater_fn)(struct stchip_info *hchip, bool state); |
| |
| /* Parameters needed for non sub address devices */ |
| unsigned int wr_start; /* Id of the first writable register */ |
| unsigned int wr_size; /* Number of writable registers */ |
| unsigned short rd_start; /* Id of the first readable register */ |
| unsigned int rd_size; /* Number of readable registers */ |
| /* Last accessed register index in the register map Image */ |
| signed int last_reg_index; |
| /* Abort flag when set to on no register access and no wait are done*/ |
| bool abort; |
| |
| void *p_data; /* pointer to chip data */ |
| unsigned char tuner_nb;/* number of tuner from 0 to 3, field added to match Oxford */ |
| //struct io_access io_fcn; |
| unsigned char *p_reg_mem_base; /* Pointer to register map base*/ |
| }; |
| |
| //typedef stchip_info_t stchip_handle_t; /* Handle to a chip */ |
| |
| struct fe_l2a_internal_param { |
| unsigned int tuner_bw; |
| signed int tuner_frequency; /* Current tuner frequency (KHz) */ |
| enum fe_lla_error demod_error; |
| signed int tuner_index_jump; |
| signed int tuner_index_jump1; |
| unsigned int sr; |
| unsigned int state; |
| struct stchip_info handle_demod; /* Handle to a demodulator */ |
| struct stchip_info handle_anafe; /* Handle to AFE */ |
| struct stchip_info handle_soc; /* Handle to SOC */ |
| struct stchip_info handle_tuner; /* Handle to tuner */ |
| struct stchip_info handle_vglna; /* Handle to the chip VGLNA*/ |
| enum fe_sat_rolloff roll_off; /* manual RollOff for DVBS1/DSS only */ |
| |
| /* Demod */ |
| /* Search standard:Auto, DVBS1/DSS only or DVBS2 only*/ |
| enum fe_sat_search_standard demod_search_standard; |
| /* Algorithm for search Blind, Cold or Warm*/ |
| enum fe_sat_search_algo demod_search_algo; |
| /* I,Q inversion search : auto, auto normal first, normal or inverted */ |
| enum fe_sat_search_iq_inv demod_search_iq_inv; |
| enum fe_sat_rate demod_puncture_rate; |
| enum fe_sat_modcode demod_modcode; |
| enum fe_sat_modulation demod_modulation; |
| struct fe_sat_search_result demod_results; /* Results of the search */ |
| /* Last error encountered */ |
| unsigned int demod_symbol_rate; /* Symbol rate (Bds) */ |
| unsigned int demod_search_range; /* Search range (Hz) */ |
| unsigned int quartz; /* Demod reference frequency (Hz)*/ |
| unsigned int master_clock; /* Master clock frequency (Hz) */ |
| /* Temporary definition for LO frequency*/ |
| unsigned int lo_frequency; |
| |
| /* Global I,Q inversion I,Q connection from tuner to demod*/ |
| enum fe_sat_iq_inversion tuner_global_iqv_inv; |
| |
| //struct ram_byte pid_flt; |
| //struct gse_ram_byte gse_flt; |
| //struct tuner_access tuner_fcn; |
| //struct io_access demod_io_fcn; |
| //struct io_access tuner_io_fcn; |
| }; |
| |
| int is_s1a_dvbs_disabled(void); |
| int is_s1a_dvbc_disabled(void); |
| void st_dvbs2_init(void); |
| bool tuner_find_by_name(struct dvb_frontend *fe, const char *name); |
| void tuner_set_params(struct dvb_frontend *fe); |
| int tuner_get_ch_power(struct dvb_frontend *fe); |
| |
| int dtmb_get_power_strength(int agc_gain); |
| int dvbc_get_power_strength(int agc_gain, int tuner_strength); |
| int j83b_get_power_strength(int agc_gain, int tuner_strength); |
| int atsc_get_power_strength(int agc_gain, int tuner_strength); |
| unsigned int atsc_read_reg_v4(unsigned int addr); |
| |
| /* dvbt */ |
| int dvbt_dvbt_set_ch(struct aml_dtvdemod *demod, |
| struct aml_demod_dvbt *demod_dvbt); |
| int dvbt_isdbt_set_ch(struct aml_dtvdemod *demod, |
| struct aml_demod_dvbt *demod_dvbt); |
| unsigned int dvbt_set_ch(struct aml_dtvdemod *demod, |
| struct aml_demod_dvbt *demod_dvbt, struct dvb_frontend *fe); |
| int dvbt2_set_ch(struct aml_dtvdemod *demod, struct dvb_frontend *fe); |
| |
| /*txlx*/ |
| enum dvbc_sym_speed { |
| SYM_SPEED_NORMAL, |
| SYM_SPEED_MIDDLE, |
| SYM_SPEED_HIGH |
| }; |
| |
| /* dvbc */ |
| #ifdef AML_DEMOD_SUPPORT_DVBC |
| int dvbc_set_ch(struct aml_dtvdemod *demod, struct aml_demod_dvbc *demod_dvbc, |
| struct dvb_frontend *fe); |
| int dvbc_status(struct aml_dtvdemod *demod, struct aml_demod_sts *demod_sts, |
| struct seq_file *seq); |
| int dvbc_isr_islock(void); |
| void dvbc_isr(struct aml_demod_sta *demod_sta); |
| u32 dvbc_set_qam_mode(unsigned char mode); |
| u32 dvbc_get_status(struct aml_dtvdemod *demod); |
| u32 dvbc_set_auto_symtrack(struct aml_dtvdemod *demod); |
| int dvbc_timer_init(void); |
| void dvbc_timer_exit(void); |
| int dvbc_cci_task(void *data); |
| int dvbc_get_cci_task(struct aml_dtvdemod *demod); |
| void dvbc_create_cci_task(struct aml_dtvdemod *demod); |
| void dvbc_kill_cci_task(struct aml_dtvdemod *demod); |
| u32 dvbc_get_symb_rate(struct aml_dtvdemod *demod); |
| |
| /* DVBC */ |
| /*gxtvbb*/ |
| |
| void dvbc_reg_initial_old(struct aml_dtvdemod *demod); |
| |
| void dvbc_reg_initial(struct aml_dtvdemod *demod, struct dvb_frontend *fe); |
| void demod_dvbc_qam_reset(struct aml_dtvdemod *demod); |
| void demod_dvbc_fsm_reset(struct aml_dtvdemod *demod); |
| void demod_dvbc_store_qam_cfg(struct aml_dtvdemod *demod); |
| void demod_dvbc_restore_qam_cfg(struct aml_dtvdemod *demod); |
| void demod_dvbc_set_qam(struct aml_dtvdemod *demod, enum qam_md_e qam, bool auto_sr); |
| void dvbc_init_reg_ext(struct aml_dtvdemod *demod); |
| u32 dvbc_get_ch_sts(struct aml_dtvdemod *demod); |
| u32 dvbc_get_qam_mode(struct aml_dtvdemod *demod); |
| void dvbc_cfg_sr_cnt(struct aml_dtvdemod *demod, enum dvbc_sym_speed spd); |
| void dvbc_cfg_sr_scan_speed(struct aml_dtvdemod *demod, enum dvbc_sym_speed spd); |
| void dvbc_cfg_tim_sweep_range(struct aml_dtvdemod *demod, enum dvbc_sym_speed spd); |
| void dvbc_cfg_sw_hw_sr_max(struct aml_dtvdemod *demod, unsigned int max_sr); |
| int dvbc_auto_qam_process(struct aml_dtvdemod *demod, unsigned int *qam_mode); |
| int dvbc_blind_scan_process(struct aml_dtvdemod *demod); |
| #endif |
| |
| /* dtmb */ |
| #ifdef AML_DEMOD_SUPPORT_DTMB |
| int dtmb_set_ch(struct aml_dtvdemod *demod, |
| struct aml_demod_dtmb *demod_dtmb); |
| void dtmb_reset(void); |
| int dtmb_check_status_gxtv(struct dvb_frontend *fe); |
| int dtmb_check_status_txl(struct dvb_frontend *fe); |
| int dtmb_bch_check(struct dvb_frontend *fe); |
| void dtmb_write_reg(unsigned int reg_addr, unsigned int reg_data); |
| unsigned int dtmb_read_reg(unsigned int reg_addr); |
| void dtmb_write_reg_bits(u32 addr, const u32 data, const u32 start, const u32 len); |
| void dtmb_register_reset(void); |
| |
| /* |
| * dtmb register write / read |
| */ |
| |
| /*test only*/ |
| enum REG_DTMB_D9 { |
| DTMB_D9_IF_GAIN, |
| DTMB_D9_RF_GAIN, |
| DTMB_D9_POWER, |
| DTMB_D9_ALL, |
| }; |
| |
| void dtmb_set_mem_st(unsigned int mem_start); |
| int dtmb_read_agc(enum REG_DTMB_D9 type, unsigned int *buf); |
| unsigned int dtmb_reg_r_che_snr(void); |
| unsigned int dtmb_reg_r_fec_lock(void); |
| unsigned int dtmb_reg_r_bch(void); |
| int check_dtmb_fec_lock(void); |
| int dtmb_constell_check(void); |
| |
| void dtmb_no_signal_check_v3(struct aml_dtvdemod *demod); |
| void dtmb_no_signal_check_finishi_v3(struct aml_dtvdemod *demod); |
| unsigned int dtmb_detect_first(void); |
| |
| #endif//AML_DEMOD_SUPPORT_DTMB |
| |
| /* demod functions */ |
| unsigned long apb_read_reg_collect(unsigned long addr); |
| void apb_write_reg_collect(unsigned int addr, unsigned int data); |
| void apb_write_reg(unsigned int reg, unsigned int val); |
| unsigned long apb_read_reg_high(unsigned long addr); |
| unsigned long apb_read_reg(unsigned long reg); |
| int app_apb_write_reg(int addr, int data); |
| int app_apb_read_reg(int addr); |
| |
| void demod_set_cbus_reg(unsigned int data, unsigned int addr); |
| unsigned int demod_read_cbus_reg(unsigned int addr); |
| void demod_set_demod_reg(unsigned int data, unsigned int addr); |
| void demod_set_tvfe_reg(unsigned int data, unsigned int addr); |
| unsigned int demod_read_demod_reg(unsigned int addr); |
| |
| /* extern int clk_measure(char index); */ |
| |
| void ofdm_initial(int bandwidth, |
| /* 00:8M 01:7M 10:6M 11:5M */ |
| int samplerate, |
| /* 00:45M 01:20.8333M 10:20.7M 11:28.57 */ |
| int IF, |
| /* 000:36.13M 001:-5.5M 010:4.57M 011:4M 100:5M */ |
| int mode, |
| /* 00:DVBT,01:ISDBT */ |
| int tc_mode |
| /* 0: Unsigned, 1:TC */); |
| |
| /*no use void monitor_isdbt(void);*/ |
| void demod_set_reg(struct aml_dtvdemod *demod, struct aml_demod_reg *demod_reg); |
| void demod_get_reg(struct aml_dtvdemod *demod, struct aml_demod_reg *demod_reg); |
| |
| /* void demod_calc_clk(struct aml_demod_sta *demod_sta); */ |
| int demod_set_sys(struct aml_dtvdemod *demod, struct aml_demod_sys *demod_sys); |
| void set_j83b_filter_reg_v4(struct aml_dtvdemod *demod); |
| |
| |
| /* for g9tv */ |
| int adc_dpll_setup(int clk_a, int clk_b, int clk_sys, struct aml_demod_sta *demod_sta); |
| void demod_power_switch(int pwr_cntl); |
| |
| union adc_pll_cntl { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned pll_m:9; |
| unsigned pll_n:5; |
| unsigned pll_od0:2; |
| unsigned pll_od1:2; |
| unsigned pll_od2:2; |
| unsigned pll_xd0:6; |
| unsigned pll_xd1:6; |
| } b; |
| }; |
| |
| union adc_pll_cntl2 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned output_mux_ctrl:4; |
| unsigned div2_ctrl:1; |
| unsigned b_polar_control:1; |
| unsigned a_polar_control:1; |
| unsigned gate_ctrl:6; |
| unsigned tdc_buf:8; |
| unsigned lm_s:6; |
| unsigned lm_w:4; |
| unsigned reserved:1; |
| } b; |
| }; |
| |
| union adc_pll_cntl3 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned afc_dsel_in:1; |
| unsigned afc_dsel_bypass:1; |
| unsigned dco_sdmck_sel:2; |
| unsigned dc_vc_in:2; |
| unsigned dco_m_en:1; |
| unsigned dpfd_lmode:1; |
| unsigned filter_acq1:11; |
| unsigned enable:1; |
| unsigned filter_acq2:11; |
| unsigned reset:1; |
| } b; |
| }; |
| |
| union adc_pll_cntl4 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned reve:12; |
| unsigned tdc_en:1; |
| unsigned dco_sdm_en:1; |
| unsigned dco_iup:2; |
| unsigned pvt_fix_en:1; |
| unsigned iir_bypass_n:1; |
| unsigned pll_od3:2; |
| unsigned filter_pvt1:4; |
| unsigned filter_pvt2:4; |
| unsigned reserved:4; |
| } b; |
| }; |
| |
| /* ///////////////////////////////////////////////////////////////// */ |
| |
| union demod_dig_clk { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned demod_clk_div:7; |
| unsigned reserved0:1; |
| unsigned demod_clk_en:1; |
| unsigned demod_clk_sel:2; |
| unsigned reserved1:5; |
| unsigned adc_extclk_div:7; /* 34 */ |
| unsigned use_adc_extclk:1; /* 1 */ |
| unsigned adc_extclk_en:1; /* 1 */ |
| unsigned adc_extclk_sel:3; /* 1 */ |
| unsigned reserved2:4; |
| } b; |
| }; |
| |
| union demod_adc_clk { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned pll_m:9; |
| unsigned pll_n:5; |
| unsigned pll_od:2; |
| unsigned pll_xd:5; |
| unsigned reserved0:3; |
| unsigned pll_ss_clk:4; |
| unsigned pll_ss_en:1; |
| unsigned reset:1; |
| unsigned pll_pd:1; |
| unsigned reserved1:1; |
| } b; |
| }; |
| |
| union demod_cfg0 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned mode:4; |
| unsigned ts_sel:4; |
| unsigned test_bus_clk:1; |
| unsigned adc_ext:1; |
| unsigned adc_rvs:1; |
| unsigned adc_swap:1; |
| unsigned adc_format:1; |
| unsigned adc_regout:1; |
| unsigned adc_regsel:1; |
| unsigned adc_regadj:5; |
| unsigned adc_value:10; |
| unsigned adc_test:1; |
| unsigned ddr_sel:1; |
| } b; |
| }; |
| |
| union demod_cfg1 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned reserved:8; |
| unsigned ref_top:2; |
| unsigned ref_bot:2; |
| unsigned cml_xs:2; |
| unsigned cml_1s:2; |
| unsigned vdda_sel:2; |
| unsigned bias_sel_sha:2; |
| unsigned bias_sel_mdac2:2; |
| unsigned bias_sel_mdac1:2; |
| unsigned fast_chg:1; |
| unsigned rin_sel:3; |
| unsigned en_ext_vbg:1; |
| unsigned en_cmlgen_res:1; |
| unsigned en_ext_vdd12:1; |
| unsigned en_ext_ref:1; |
| } b; |
| }; |
| |
| union demod_cfg2 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned en_adc:1; |
| unsigned biasgen_ibipt_sel:2; |
| unsigned biasgen_ibic_sel:2; |
| unsigned biasgen_rsv:4; |
| unsigned biasgen_en:1; |
| unsigned biasgen_bias_sel_adc:2; |
| unsigned biasgen_bias_sel_cml1:2; |
| unsigned biasgen_bias_sel_ref_op:2; |
| unsigned clk_phase_sel:1; |
| unsigned reserved:15; |
| } b; |
| }; |
| |
| union demod_cfg3 { |
| /** raw register data */ |
| uint32_t d32; |
| /** register bits */ |
| struct { |
| unsigned dc_arb_mask:3; |
| unsigned dc_arb_enable:1; |
| unsigned reserved:28; |
| } b; |
| }; |
| |
| struct atsc_cfg { |
| int adr; |
| int dat; |
| int rw; |
| }; |
| |
| struct agc_power_tab { |
| char name[128]; |
| int level; |
| int ncalcE; |
| int *calcE; |
| }; |
| |
| struct dtmb_cfg { |
| int dat; |
| int adr; |
| int rw; |
| }; |
| |
| void dtvpll_lock_init(void); |
| void dtvpll_init_flag(int on); |
| void demod_set_irq_mask(void); |
| void demod_clr_irq_stat(void); |
| int demod_set_adc_core_clk(int adc_clk, int sys_clk, struct aml_demod_sta *demod_sta); |
| void demod_set_adc_core_clk_fix(int clk_adc, int clk_dem); |
| void calculate_cordic_para(void); |
| /*extern int aml_fe_analog_set_frontend(struct dvb_frontend *fe);*/ |
| int get_dtvpll_init_flag(void); |
| void demod_set_mode_ts(struct aml_dtvdemod *demod, enum fe_delivery_system delsys); |
| |
| #if defined AML_DEMOD_SUPPORT_J83B || defined AML_DEMOD_SUPPORT_DVBC |
| void qam_write_reg(struct aml_dtvdemod *demod, |
| unsigned int reg_addr, unsigned int reg_data); |
| unsigned int qam_read_reg(struct aml_dtvdemod *demod, unsigned int reg_addr); |
| void qam_write_bits(struct aml_dtvdemod *demod, |
| u32 reg_addr, const u32 reg_data, |
| const u32 start, const u32 len); |
| void dvbc_write_reg(unsigned int addr, unsigned int data); |
| unsigned int dvbc_read_reg(unsigned int addr); |
| #endif |
| |
| void demod_top_write_reg(unsigned int addr, unsigned int data); |
| void demod_top_write_bits(u32 reg_addr, const u32 reg_data, const u32 start, const u32 len); |
| unsigned int demod_top_read_reg(unsigned int addr); |
| void demod_init_mutex(void); |
| void demod_mutex_lock(void); |
| void demod_mutex_unlock(void); |
| void front_write_reg(unsigned int addr, unsigned int data); |
| void front_write_bits(u32 reg_addr, const u32 reg_data, |
| const u32 start, const u32 len); |
| unsigned int front_read_reg(unsigned int addr); |
| unsigned int isdbt_read_reg_v4(unsigned int addr); |
| void isdbt_write_reg_v4(unsigned int addr, unsigned int data); |
| int dd_hiu_reg_write(unsigned int reg, unsigned int val); |
| unsigned int dd_hiu_reg_read(unsigned int addr); |
| void dtvdemod_dmc_reg_write(unsigned int reg, unsigned int val); |
| unsigned int dtvdemod_dmc_reg_read(unsigned int addr); |
| void dtvdemod_ddr_reg_write(unsigned int reg, unsigned int val); |
| unsigned int dtvdemod_ddr_reg_read(unsigned int addr); |
| int reset_reg_write(unsigned int reg, unsigned int val); |
| unsigned int reset_reg_read(unsigned int addr); |
| |
| int clocks_set_sys_defaults(struct aml_dtvdemod *demod, unsigned int adc_clk); |
| void demod_set_demod_default(void); |
| unsigned int demod_get_adc_clk(struct aml_dtvdemod *demod); |
| unsigned int demod_get_sys_clk(struct aml_dtvdemod *demod); |
| |
| /*register access api new*/ |
| #if defined AML_DEMOD_SUPPORT_ISDBT || defined AML_DEMOD_SUPPORT_DVBT |
| void dvbt_isdbt_wr_reg(unsigned int addr, unsigned int data); |
| void dvbt_isdbt_wr_reg_new(unsigned int addr, unsigned int data); |
| void dvbt_isdbt_wr_bits_new(u32 reg_addr, const u32 reg_data, |
| const u32 start, const u32 len); |
| unsigned int dvbt_isdbt_rd_reg(unsigned int addr); |
| unsigned int dvbt_isdbt_rd_reg_new(unsigned int addr); |
| #endif |
| |
| #if defined AML_DEMOD_SUPPORT_DVBT |
| void dvbt_t2_wrb(unsigned int addr, unsigned char data); |
| void dvbt_t2_write_w(unsigned int addr, unsigned int data); |
| void dvbt_t2_wr_byte_bits(u32 addr, const u32 data, const u32 start, const u32 len); |
| void dvbt_t2_wr_word_bits(u32 addr, const u32 data, const u32 start, const u32 len); |
| unsigned int dvbt_t2_read_w(unsigned int addr); |
| char dvbt_t2_rdb(unsigned int addr); |
| void riscv_ctl_write_reg(unsigned int addr, unsigned int data); |
| unsigned int riscv_ctl_read_reg(unsigned int addr); |
| #endif |
| |
| #if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC |
| void dvbs_write_bits(u32 reg_addr, const u32 reg_data, |
| const u32 start, const u32 len); |
| void dvbs_wr_byte(unsigned int addr, unsigned char data); |
| unsigned char dvbs_rd_byte(unsigned int addr); |
| void dvbs2_reg_initial(unsigned int symb_rate_kbs, unsigned int is_blind_scan); |
| #endif |
| |
| int aml_demod_init(void); |
| void aml_demod_exit(void); |
| unsigned int write_riscv_ram(void); |
| unsigned int dvbs_get_quality(void); |
| int dvbs_get_signal_strength_off(void); |
| void t3_revb_set_ambus_state(bool enable, bool is_t2); |
| void t5w_write_ambus_reg(u32 addr, |
| const u32 data, const u32 start, const u32 len); |
| unsigned int t5w_read_ambus_reg(unsigned int addr); |
| |
| //move from amlfrontend.c |
| int timer_set_max(struct aml_dtvdemod *demod, |
| enum ddemod_timer_s tmid, unsigned int max_val); |
| int timer_begain(struct aml_dtvdemod *demod, enum ddemod_timer_s tmid); |
| int timer_disable(struct aml_dtvdemod *demod, enum ddemod_timer_s tmid); |
| int timer_is_en(struct aml_dtvdemod *demod, enum ddemod_timer_s tmid); |
| int timer_not_enough(struct aml_dtvdemod *demod, enum ddemod_timer_s tmid); |
| int timer_is_enough(struct aml_dtvdemod *demod, enum ddemod_timer_s tmid); |
| int timer_tuner_not_enough(struct aml_dtvdemod *demod); |
| int amdemod_qam(enum fe_modulation qam); |
| enum fe_modulation amdemod_qam_fe(enum qam_md_e qam); |
| const char *get_qam_name(enum qam_md_e qam); |
| void real_para_clear(struct aml_demod_para_real *para); |
| enum fe_bandwidth dtvdemod_convert_bandwidth(unsigned int input); |
| void demod_enable_frontend_agc(struct aml_dtvdemod *demod, |
| enum fe_delivery_system delsys, bool enable); |
| #if defined AML_DEMOD_SUPPORT_DVBS || defined AML_DEMOD_SUPPORT_DVBC |
| void fe_l2a_set_symbol_rate(struct fe_l2a_internal_param *pparams, unsigned int symbol_rate); |
| #endif |
| void fe_l2a_get_agc2accu(struct fe_l2a_internal_param *pparams, unsigned int *pintegrator); |
| |
| #endif |