You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
324 lines
13 KiB
324 lines
13 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2017-2021. All rights reserved.
|
|
* Description: frontend
|
|
* Author: Hisilicon
|
|
* Created: 2017-06-30
|
|
*/
|
|
#ifndef __DRV_FRONTEND_H__
|
|
#define __DRV_FRONTEND_H__
|
|
|
|
#include "soc_log.h"
|
|
#include "soc_errno.h"
|
|
#include "drv_ioctl_frontend.h"
|
|
#include "drv_i2c_ext.h"
|
|
#include "drv_gpioi2c_ext.h"
|
|
#include "drv_gpio_ext.h"
|
|
#include "osal_ext.h"
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
|
|
#undef LOG_MODULE_ID
|
|
#define LOG_MODULE_ID SOC_ID_FRONTEND
|
|
|
|
#define TIME_CONSUMING 0
|
|
|
|
#if TIME_CONSUMING
|
|
#define time_cost_define(lable) osal_timeval st_start_time##lable, st_end_time##lable
|
|
|
|
#define time_cost_start(lable) osal_gettimeofday(&st_start_time##lable)
|
|
|
|
#define time_cost_end(lable, msg) do { \
|
|
long total; \
|
|
osal_gettimeofday(&st_end_time##lable); \
|
|
total = (st_end_time##lable.tv_sec - st_start_time##lable.tv_sec) * 1000 \
|
|
+ (st_end_time##lable.tv_usec - st_start_time##lable.tv_usec) / 1000; \
|
|
soc_log_warn(msg " cost %dms.\n", total); \
|
|
} while (0)
|
|
#else
|
|
#define time_cost_define(lable)
|
|
#define time_cost_start(lable)
|
|
#define time_cost_end(lable, msg)
|
|
#endif
|
|
|
|
#define soc_warn_print_reg8(reg, val) soc_log_warn("%s : %02x\n", #reg, val)
|
|
#define soc_info_print_reg8(reg, val) soc_log_info("%s : %02x\n", #reg, val)
|
|
#define soc_dbg_print_reg8(reg, val) soc_log_dbg("%s : %02x\n", #reg, val)
|
|
#define fe_check_param(val, err_code_print, err_code_ret) do { \
|
|
if (val) { \
|
|
soc_err_print_err_code(err_code_print); \
|
|
return err_code_ret; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define fe_check(func) do { \
|
|
td_s32 err_code_ = func; \
|
|
if (err_code_ != TD_SUCCESS) { \
|
|
soc_warn_print_call_fun_err(#func, err_code_); \
|
|
} \
|
|
} while (0)
|
|
|
|
#define drv_fe_check_pointer(p) \
|
|
fe_check_param(((p) == TD_NULL), SOC_ERR_FRONTEND_INVALID_POINT, SOC_ERR_FRONTEND_INVALID_POINT)
|
|
|
|
#define drv_fe_check_func_pointer(pfn) \
|
|
fe_check_param(((pfn) == TD_NULL), SOC_ERR_FRONTEND_INVALID_POINT, SOC_ERR_FRONTEND_INVALID_POINT)
|
|
|
|
#define drv_fe_ctrl_check_is_dtv_c(sig_type) \
|
|
fe_check_param(((sig_type) < EXT_DRV_FRONTEND_SIG_TYPE_DVB_C || (sig_type) > EXT_DRV_FRONTEND_SIG_TYPE_J83B), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_is_dtv_t(sig_type) \
|
|
fe_check_param(((sig_type) < EXT_DRV_FRONTEND_SIG_TYPE_DVB_T || (sig_type) > EXT_DRV_FRONTEND_SIG_TYPE_DTMB), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_is_dtv_s(sig_type) \
|
|
fe_check_param(((sig_type) < EXT_DRV_FRONTEND_SIG_TYPE_DVB_S || (sig_type) > EXT_DRV_FRONTEND_SIG_TYPE_ABSS), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_port(port) \
|
|
fe_check_param(((port) >= DRV_FRONTEND_NUM), SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_tuner_type(tuner_type) \
|
|
fe_check_param(((tuner_type) >= EXT_DRV_TUNER_DEV_TYPE_MAX), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_demod_type(demod_type) \
|
|
fe_check_param(((demod_type) >= EXT_DRV_DEMOD_DEV_TYPE_MAX), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
|
|
#define drv_fe_ctrl_check_is_atv(signal_type) \
|
|
fe_check_param(((signal_type) != EXT_DRV_FRONTEND_SIG_TYPE_ATV), \
|
|
SOC_ERR_FRONTEND_INVALID_PARA, SOC_ERR_FRONTEND_INVALID_PARA)
|
|
#define BIT_0 0
|
|
#define BIT_1 1
|
|
#define BIT_2 2
|
|
#define BIT_3 3
|
|
#define BIT_4 4
|
|
#define BIT_5 5
|
|
#define BIT_6 6
|
|
#define BIT_7 7
|
|
|
|
#define BIT_OFFSET_0 0
|
|
#define BIT_OFFSET_1 1
|
|
#define BIT_OFFSET_2 2
|
|
#define BIT_OFFSET_3 3
|
|
#define BIT_OFFSET_4 4
|
|
#define BIT_OFFSET_5 5
|
|
#define BIT_OFFSET_6 6
|
|
#define BIT_OFFSET_7 7
|
|
#define BIT_OFFSET_8 8
|
|
#define BIT_OFFSET_9 9
|
|
#define BIT_OFFSET_10 10
|
|
#define BIT_OFFSET_11 11
|
|
#define BIT_OFFSET_12 12
|
|
#define BIT_OFFSET_13 13
|
|
#define BIT_OFFSET_14 14
|
|
#define BIT_OFFSET_15 15
|
|
#define BIT_OFFSET_16 16
|
|
#define BIT_OFFSET_17 17
|
|
#define BIT_OFFSET_18 18
|
|
#define BIT_OFFSET_19 19
|
|
#define BIT_OFFSET_20 20
|
|
#define BIT_OFFSET_21 21
|
|
#define BIT_OFFSET_22 22
|
|
#define BIT_OFFSET_23 23
|
|
#define BIT_OFFSET_24 24
|
|
#define BIT_OFFSET_25 25
|
|
#define BIT_OFFSET_26 26
|
|
#define BIT_OFFSET_27 27
|
|
#define BIT_OFFSET_28 28
|
|
#define BIT_OFFSET_29 29
|
|
#define BIT_OFFSET_30 30
|
|
#define BIT_OFFSET_31 31
|
|
|
|
#define ARRAY_INDEX_0 0
|
|
#define ARRAY_INDEX_1 1
|
|
#define ARRAY_INDEX_2 2
|
|
#define ARRAY_INDEX_3 3
|
|
#define ARRAY_INDEX_4 4
|
|
#define ARRAY_INDEX_5 5
|
|
#define ARRAY_INDEX_6 6
|
|
#define ARRAY_INDEX_7 7
|
|
#define ARRAY_INDEX_8 8
|
|
#define ARRAY_INDEX_9 9
|
|
#define ARRAY_INDEX_10 10
|
|
#define ARRAY_INDEX_11 11
|
|
#define ARRAY_INDEX_12 12
|
|
#define ARRAY_INDEX_13 13
|
|
#define ARRAY_INDEX_14 14
|
|
#define ARRAY_INDEX_15 15
|
|
#define ARRAY_INDEX_16 16
|
|
|
|
typedef enum {
|
|
DRV_FE_TV_SYSTEM_PAL_BG = 0,
|
|
DRV_FE_TV_SYSTEM_PAL_DK = 1,
|
|
DRV_FE_TV_SYSTEM_PAL_I = 2,
|
|
DRV_FE_TV_SYSTEM_PAL_M = 3,
|
|
DRV_FE_TV_SYSTEM_PAL_N = 4,
|
|
DRV_FE_TV_SYSTEM_SECAM_BG = 5,
|
|
DRV_FE_TV_SYSTEM_SECAM_DK = 6,
|
|
DRV_FE_TV_SYSTEM_SECAM_L_PRIME = 7,
|
|
DRV_FE_TV_SYSTEM_SECAM_LL = 8,
|
|
DRV_FE_TV_SYSTEM_NTSC_M = 9,
|
|
DRV_FE_TV_SYSTEM_QAM_6MHz = 10,
|
|
DRV_FE_TV_SYSTEM_QAM_8MHz = 11,
|
|
DRV_FE_TV_SYSTEM_DVBT_1_7MHz = 12,
|
|
DRV_FE_TV_SYSTEM_DVBT_6MHz = 13,
|
|
DRV_FE_TV_SYSTEM_DVBT_7MHz = 14,
|
|
DRV_FE_TV_SYSTEM_DVBT_8MHz = 15,
|
|
DRV_FE_TV_SYSTEM_DVBT_10MHz = 16,
|
|
DRV_FE_TV_SYSTEM_DTMB_8MHz = 17,
|
|
DRV_FE_TV_SYSTEM_ATSC_6MHz = 18,
|
|
DRV_FE_TV_SYSTEM_ISDBT_6MHz = 19,
|
|
DRV_FE_TV_SYSTEM_FM_RADIO = 20,
|
|
DRV_FE_TV_SYSTEM_NTSC_I = 21,
|
|
DRV_FE_TV_SYSTEM_NTSC_DK = 22,
|
|
DRV_FE_TV_SYSTEM_SAT = 23,
|
|
DRV_FE_TV_SYSTEM_DVBT2_8MHz = 24,
|
|
|
|
DRV_FE_TV_SYSTEM_MAX,
|
|
} drv_fe_tv_system;
|
|
|
|
typedef enum {
|
|
I2C_TUNER_TYPE = 0,
|
|
I2C_DEMOD_TYPE,
|
|
I2C_LNB_TYPE,
|
|
I2C_DEVICE_TYPE_MAX
|
|
} i2c_device_type;
|
|
|
|
typedef enum {
|
|
ODU_CHANNEL_CHANGE = 0x70,
|
|
ODU_CHANNEL_CHANGE_PIN = 0x71,
|
|
ODU_UB_AVAIL = 0x7A,
|
|
ODU_UB_PIN = 0x7B,
|
|
ODU_UB_INUSE = 0x7C,
|
|
ODU_UB_FREQ = 0x7D,
|
|
ODU_UB_SWITCHES = 0x7E,
|
|
ODU_UB_MAX
|
|
} unicable2_msg_cmd;
|
|
|
|
typedef struct {
|
|
td_u32 mcu_svn_commit_ver; /* svn code version */
|
|
td_char *mcu_git_commit_id; /* git commit id */
|
|
td_char *mcu_commit_date; /* svn or git code commit date */
|
|
}drv_fe_mcu_info;
|
|
|
|
typedef struct {
|
|
i2c_ext_func *i2c_func;
|
|
gpio_i2c_ext_func *gpio_i2c_func;
|
|
gpio_ext_func *gpio_func;
|
|
} drv_fe_ctrl_func;
|
|
|
|
typedef struct {
|
|
td_s32 (*init)(td_u32 fe_port);
|
|
td_s32 (*deinit)(td_u32 fe_port);
|
|
td_s32 (*set_system)(td_u32 fe_port, drv_fe_tv_system tv_system);
|
|
td_s32 (*set_freq)(td_u32 fe_port, td_u32 freq); /* khz */
|
|
td_s32 (*set_freq_symb)(td_u32 fe_port, td_u32 freq, td_u32 symb); /* khz */
|
|
td_void (*resume)(td_u32 fe_port);
|
|
td_s32 (*monitor)(td_u32 port);
|
|
td_s32 (*get_signal_strength)(td_u32 fe_port, td_u32 signal_strength[3]); /* 3:index */
|
|
td_s32 (*i2c_read_byte)(td_u32 fe_port, td_u8 reg_addr, td_u8 *reg_val);
|
|
td_s32 (*i2c_write_byte)(td_u32 fe_port, td_u8 reg_addr, td_u8 reg_val);
|
|
/* for ATV */
|
|
td_s32 (*get_pif)(td_u32 *pif);
|
|
td_s32 (*set_top_adjust)(td_u32 top);
|
|
td_s32 (*set_step)(ext_drv_frontend_atv_step step);
|
|
td_s32 (*get_step)(ext_drv_frontend_atv_step *step);
|
|
td_s32 (*get_band)(td_u32 frequency, ext_drv_frontend_atv_band *band);
|
|
td_s32 (*get_band_freq)(ext_drv_frontend_atv_band band, ext_drv_frontend_atv_band_range *band_freq);
|
|
td_s32 (*set_fine_tune)(td_s8 step);
|
|
td_bool (*check_tuner_chip_id)(td_void);
|
|
} drv_fe_tuner_ops;
|
|
|
|
typedef struct {
|
|
td_s32 (*init)(td_u32 fe_port);
|
|
td_s32 (*connect)(td_u32 fe_port, frontend_acc_qam_params *connect_attr);
|
|
td_s32 (*deinit)(td_u32 fe_port);
|
|
td_s32 (*get_status)(td_u32 fe_port, ext_drv_frontend_lock_status *frontend_status);
|
|
td_s32 (*standby)(td_u32 fe_port, td_u32 standby);
|
|
td_s32 (*get_signal_info)(td_u32 fe_port, ext_drv_frontend_signal_info *info);
|
|
td_s32 (*i2c_bypass)(td_u32 fe_port, td_bool bypass);
|
|
td_s32 (*get_ber)(td_u32 fe_port, ext_drv_frontend_scientific_num *num);
|
|
td_s32 (*get_per)(td_u32 fe_port, ext_drv_frontend_scientific_num *num);
|
|
td_s32 (*get_snr)(td_u32 fe_port, td_s32 *pu32_snr);
|
|
td_s32 (*get_signal_strength)(td_u32 fe_port, td_u32 signal_strength[3]); /* 3:index */
|
|
td_s32 (*get_signal_quality)(td_u32 fe_port, td_u32 *signal_quality);
|
|
td_s32 (*get_freq_symb_offset)(td_u32 fe_port, td_s32 *freq_offset, td_u32 *symb);
|
|
td_void (*manage_after_chipreset)(td_u32 fe_port);
|
|
td_void (*recalculate_signal_strength)(td_u32 fe_port, td_u32 *strength);
|
|
td_void (*connect_timeout)(td_u32 fe_port, td_u32 connect_timeout);
|
|
td_s32 (*set_ts_out)(td_u32 fe_port, ext_drv_demod_ts_out *ts_out);
|
|
td_s32 (*set_sig_type)(td_u32 fe_port, ext_drv_frontend_sig_type sig_type);
|
|
td_bool (*is_ctrl_tuner)(td_u32 fe_port);
|
|
td_s32 (*get_rs)(td_u32 u32TunerPort, td_u32 *pu32Rs);
|
|
td_s32 (*qamadc_power)(td_u32 fe_port, td_bool power_status);
|
|
/* PROC */
|
|
td_void (*get_registers)(td_u32 fe_port, td_void *p);
|
|
td_s32 (*i2c_read_byte)(td_u32 fe_port, td_u8 u8_reg_addr, td_u8 *reg_val);
|
|
td_s32 (*i2c_write_byte)(td_u32 fe_port, td_u8 u8_reg_addr, td_u8 reg_val);
|
|
td_s32 (*set_pll_value)(td_u32 pll_value);
|
|
td_s32 (*get_cir)(td_u32 fe_port); /* channel_impulse_response */
|
|
td_s32 (*catch_data)(td_u32 fe_port, td_u8 u8_catch_sel, td_u8 u8_iq_sel);
|
|
td_s32 (*mcu_operate)(td_u32 fe_port, const td_char *p_mcu_cmd);
|
|
td_s32 (*mcu_info)(td_u32 fe_port, drv_fe_mcu_info *pst_mcu_info);
|
|
|
|
/* SAT */
|
|
td_s32 (*set_sat_attr)(td_u32 fe_port, ext_drv_frontend_sat_attr *sat_frontend_attr);
|
|
td_s32 (*blindscan_init)(td_u32 fe_port, frontend_blindscan_initpara *init_para);
|
|
td_s32 (*blindscan_action)(td_u32 fe_port, frontend_blindscan_para *para);
|
|
td_s32 (*blindscan_abort)(td_u32 fe_port, td_u32 stop_quit);
|
|
td_s32 (*set_lnb_out)(td_u32 fe_port, frontend_lnb_out_level out);
|
|
td_s32 (*send_continuous22k)(td_u32 fe_port, td_u32 continuous22k);
|
|
td_s32 (*send_tone)(td_u32 fe_port, td_u32 tone);
|
|
td_s32 (*diseqc_send_msg)(td_u32 fe_port, ext_drv_frontend_diseqc_send_msg *send_msg);
|
|
td_s32 (*diseqc_recv_msg)(td_u32 fe_port, ext_drv_frontend_diseqc_recv_msg *recv_msg);
|
|
td_s32 (*set_func_mode)(td_u32 fe_port, frontend_func_mode func_mode);
|
|
td_s32 (*tp_verify)(td_u32 fe_port, frontend_tp_verify_params *channel);
|
|
td_s32 (*set_isi_id)(td_u32 fe_port, td_u8 isi_id);
|
|
td_s32 (*get_isi_id)(td_u32 fe_port, td_u8 stream, td_u8 *isi_id);
|
|
td_s32 (*get_stream_num)(td_u32 fe_port, td_u32 *stream_num);
|
|
|
|
/* DVB-T2 */
|
|
td_s32 (*get_plp_num)(td_u32 fe_port, td_u8 *plp_num);
|
|
td_s32 (*set_plp_para)(td_u32 fe_port, ext_drv_frontend_dvbt2_plp_para *plp_para);
|
|
td_s32 (*get_plp_info)(td_u32 fe_port, td_u32 index, ext_drv_frontend_dvbt2_plp_info *plp_info);
|
|
td_s32 (*set_antena_power)(td_u32 port, ext_drv_frontend_ter_antenna_power power);
|
|
|
|
/* ISDB-T */
|
|
td_s32 (*monitor_layers_config)(td_u32 fe_port, ext_drv_frontend_isdbt_receive_config *receive_config);
|
|
/* ATV */
|
|
td_s32 (*set_pif)(td_u32 pif);
|
|
td_s32 (*move_pll_freq)(hal_aifadc_pll_freq en_mode);
|
|
} drv_fe_demod_ops;
|
|
|
|
typedef struct {
|
|
td_s32 (*init)(td_u32 fe_port, td_u8 i2c_channel, td_u8 dev_addr);
|
|
td_s32 (*deinit)(td_u32 fe_port);
|
|
td_s32 (*standby)(td_u32 fe_port, td_u32 standby);
|
|
td_s32 (*set_lnb_out)(td_u32 fe_port, frontend_lnb_out_level lnb_out_level);
|
|
td_s32 (*i2c_read_byte)(td_u32 fe_port, td_u8 reg_addr, td_u8 *reg_val);
|
|
td_s32 (*i2c_write_byte)(td_u32 fe_port, td_u8 reg_addr, td_u8 reg_val);
|
|
} drv_fe_lnb_ops;
|
|
|
|
typedef struct {
|
|
ext_drv_frontend_lock_status lock_status;
|
|
bool set_ts_out;
|
|
ext_drv_demod_ts_out ts_out;
|
|
frontend_lnb_out_level lnb_out_level;
|
|
td_u32 continuous22k;
|
|
} drv_fe_resume_info;
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __cplusplus */
|
|
|
|
#endif
|
|
|