| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- #ifndef __FM_MAIN_H__
- #define __FM_MAIN_H__
- #include "fm_typedef.h"
- #include "fm_dbg.h"
- #include "fm_err.h"
- #include "fm_rds.h"
- #include "fm_eint.h"
- #include "fm_link.h"
- #include "fm_interface.h"
- #include "fm_stdlib.h"
- #include "fm_private.h"
- #define FM_NAME "fm"
- #define FM_DEVICE_NAME "/dev/fm"
- #define FM_VOL_MAX 0x2B /* 43 volume(0-15) */
- #define FM_TIMER_TIMEOUT_DEFAULT 1000
- #define FM_TIMER_TIMEOUT_MIN 1000
- #define FM_TIMER_TIMEOUT_MAX 1000000
- /* FM Tx */
- #define FM_TX_PWR_LEVEL_MAX 120 /* FM transmitter power level, rang: 85db~120db, default 120db */
- #define FM_TX_PWR_CTRL_INVAL_DEFAULT 10
- #define FM_TX_PWR_CTRL_INVAL_MIN 5
- #define FM_TX_PWR_CTRL_INVAL_MAX 10000
- #define FM_TX_VCO_OFF_DEFAULT 5
- #define FM_TX_VCO_OFF_MIN 1
- #define FM_TX_VCO_OFF_MAX 10000
- #define FM_TX_VCO_ON_DEFAULT 100
- #define FM_TX_VCO_ON_MIN 10
- #define FM_TX_VCO_ON_MAX 10000
- #define FM_GPS_RTC_AGE_TH 2
- #define FM_GPS_RTC_DRIFT_TH 0
- #define FM_GPS_RTC_TIME_DIFF_TH 10
- #define FM_GPS_RTC_RETRY_CNT 1
- #define FM_GPS_RTC_DRIFT_MAX 5000
- enum {
- FM_GPS_RTC_INFO_OLD = 0,
- FM_GPS_RTC_INFO_NEW = 1,
- FM_GPS_RTC_INFO_MAX
- };
- typedef enum {
- FM_OVER_BT_DISABLE = 0,
- FM_OVER_BT_ENABLE
- } fm_over_bt_enable_state;
- #define FM_RDS_ENABLE 0x01 /* 1: enable RDS, 0:disable RDS */
- #define FM_RDS_DATA_READY (1 << 0)
- /* errno */
- #define FM_SUCCESS 0
- #define FM_FAILED 1
- #define FM_EPARM 2
- #define FM_BADSTATUS 3
- #define FM_TUNE_FAILED 4
- #define FM_SEEK_FAILED 5
- #define FM_BUSY 6
- #define FM_SCAN_FAILED 7
- struct fm_tune_parm {
- fm_u8 err;
- fm_u8 band;
- fm_u8 space;
- fm_u8 hilo;
- fm_u16 freq; /* IN/OUT parameter */
- };
- struct fm_seek_parm {
- fm_u8 err;
- fm_u8 band;
- fm_u8 space;
- fm_u8 hilo;
- fm_u8 seekdir;
- fm_u8 seekth;
- fm_u16 freq; /* IN/OUT parameter */
- };
- #ifdef CONFIG_MTK_FM_50KHZ_SUPPORT
- struct fm_scan_parm {
- fm_u8 err;
- fm_u8 band;
- fm_u8 space;
- fm_u8 hilo;
- fm_u16 freq; /* OUT parameter */
- fm_u16 ScanTBL[26]; /* need no less than the chip */
- fm_u16 ScanTBLSize; /* IN/OUT parameter */
- };
- #else
- struct fm_scan_parm {
- fm_u8 err;
- fm_u8 band;
- fm_u8 space;
- fm_u8 hilo;
- fm_u16 freq; /* OUT parameter */
- fm_u16 ScanTBL[16]; /* need no less than the chip */
- fm_u16 ScanTBLSize; /* IN/OUT parameter */
- };
- #endif
- struct fm_cqi {
- fm_s32 ch;
- fm_s32 rssi;
- fm_s32 reserve;
- };
- struct fm_cqi_req {
- fm_u16 ch_num;
- fm_s32 buf_size;
- fm_s8 *cqi_buf;
- };
- struct fm_ch_rssi {
- fm_u16 freq;
- fm_s32 rssi;
- };
- enum fm_scan_cmd_t {
- FM_SCAN_CMD_INIT = 0,
- FM_SCAN_CMD_START,
- FM_SCAN_CMD_GET_NUM,
- FM_SCAN_CMD_GET_CH,
- FM_SCAN_CMD_GET_RSSI,
- FM_SCAN_CMD_GET_CH_RSSI,
- FM_SCAN_CMD_MAX
- };
- struct fm_scan_t {
- enum fm_scan_cmd_t cmd;
- fm_s32 ret; /* 0, success; else error code */
- fm_u16 lower; /* lower band, Eg, 7600 -> 76.0Mhz */
- fm_u16 upper; /* upper band, Eg, 10800 -> 108.0Mhz */
- fm_s32 space; /* 5: 50KHz, 10: 100Khz, 20: 200Khz */
- fm_s32 num; /* valid channel number */
- void *priv;
- fm_s32 sr_size; /* scan result buffer size in bytes */
- union {
- fm_u16 *ch_buf; /* channel buffer */
- fm_s32 *rssi_buf; /* rssi buffer */
- struct fm_ch_rssi *ch_rssi_buf; /* channel and RSSI buffer */
- } sr;
- };
- struct fm_seek_t {
- fm_s32 ret; /* 0, success; else error code */
- fm_u16 freq;
- fm_u16 lower; /* lower band, Eg, 7600 -> 76.0Mhz */
- fm_u16 upper; /* upper band, Eg, 10800 -> 108.0Mhz */
- fm_s32 space; /* 5: 50KHz, 10: 100Khz, 20: 200Khz */
- fm_s32 dir; /* 0: up; 1: down */
- fm_s32 th; /* seek threshold in dbm(Eg, -95dbm) */
- void *priv;
- };
- struct fm_tune_t {
- fm_s32 ret; /* 0, success; else error code */
- fm_u16 freq;
- fm_u16 lower; /* lower band, Eg, 7600 -> 76.0Mhz */
- fm_u16 upper; /* upper band, Eg, 10800 -> 108.0Mhz */
- fm_s32 space; /* 5: 50KHz, 10: 100Khz, 20: 200Khz */
- void *priv;
- };
- #ifdef CONFIG_MTK_FM_50KHZ_SUPPORT
- struct fm_rssi_req {
- fm_u16 num;
- fm_u16 read_cnt;
- struct fm_ch_rssi cr[26 * 16];
- };
- #else
- struct fm_rssi_req {
- fm_u16 num;
- fm_u16 read_cnt;
- struct fm_ch_rssi cr[16 * 16];
- };
- #endif
- struct fm_rds_tx_parm {
- fm_u8 err;
- fm_u16 pi;
- fm_u16 ps[12]; /* 4 ps */
- fm_u16 other_rds[87]; /* 0~29 other groups */
- fm_u8 other_rds_cnt; /* # of other group */
- };
- typedef struct fm_rds_tx_req {
- unsigned char pty; /* 0~31 integer */
- unsigned char rds_rbds; /* 0:RDS, 1:RBDS */
- unsigned char dyn_pty; /* 0:static, 1:dynamic */
- unsigned short pi_code; /* 2-byte hex */
- unsigned char ps_buf[8]; /* hex buf of PS */
- unsigned char ps_len; /* length of PS, must be 0 / 8" */
- unsigned char af; /* 0~204, 0:not used, 1~204:(87.5+0.1*af)MHz */
- unsigned char ah; /* Artificial head, 0:no, 1:yes */
- unsigned char stereo; /* 0:mono, 1:stereo */
- unsigned char compress; /* Audio compress, 0:no, 1:yes */
- unsigned char tp; /* traffic program, 0:no, 1:yes */
- unsigned char ta; /* traffic announcement, 0:no, 1:yes */
- unsigned char speech; /* 0:music, 1:speech */
- } fm_rds_tx_req;
- #define TX_SCAN_MAX 10
- #define TX_SCAN_MIN 1
- struct fm_tx_scan_parm {
- fm_u8 err;
- fm_u8 band; /* 87.6~108MHz */
- fm_u8 space;
- fm_u8 hilo;
- fm_u16 freq; /* start freq, if less than band min freq, then will use band min freq */
- fm_u8 scandir;
- fm_u16 ScanTBL[TX_SCAN_MAX]; /* need no less than the chip */
- fm_u16 ScanTBLSize; /* IN: desired size, OUT: scan result size */
- };
- struct fm_gps_rtc_info {
- fm_s32 err; /* error number, 0: success, other: err code */
- fm_s32 retryCnt; /* GPS mnl can decide retry times */
- fm_s32 ageThd; /* GPS 3D fix time diff threshold */
- fm_s32 driftThd; /* GPS RTC drift threshold */
- struct timeval tvThd; /* time value diff threshold */
- fm_s32 age; /* GPS 3D fix time diff */
- fm_s32 drift; /* GPS RTC drift */
- union {
- unsigned long stamp; /* time stamp in jiffies */
- struct timeval tv; /* time stamp value in RTC */
- };
- fm_s32 flag; /* rw flag */
- };
- typedef struct {
- fm_s32 freq;
- fm_s32 rssi;
- } fm_desense_check_t;
- typedef struct {
- uint16_t lower; /* lower band, Eg, 7600 -> 76.0Mhz */
- uint16_t upper; /* upper band, Eg, 10800 -> 108.0Mhz */
- int space; /* 0x1: 50KHz, 0x2: 100Khz, 0x4: 200Khz */
- int cycle; /* repeat times */
- } fm_full_cqi_log_t;
- typedef enum {
- FM_RX = 0,
- FM_TX = 1
- } FM_PWR_T;
- struct fm_ctl_parm {
- fm_u8 err;
- fm_u8 addr;
- fm_u16 val;
- fm_u16 rw_flag; /* 0:write, 1:read */
- };
- struct fm_em_parm {
- fm_u16 group_idx;
- fm_u16 item_idx;
- fm_u32 item_value;
- };
- struct fm_top_rw_parm {
- fm_u8 err;
- fm_u8 rw_flag; /* 0:write, 1:read */
- fm_u16 addr;
- fm_u32 val;
- };
- struct fm_host_rw_parm {
- fm_u8 err;
- fm_u8 rw_flag; /* 0:write, 1:read */
- fm_u32 addr;
- fm_u32 val;
- };
- enum {
- FM_SUBSYS_RST_OFF,
- FM_SUBSYS_RST_START,
- FM_SUBSYS_RST_END,
- FM_SUBSYS_RST_MAX
- };
- enum {
- FM_TX_PWR_CTRL_DISABLE,
- FM_TX_PWR_CTRL_ENABLE,
- FM_TX_PWR_CTRL_MAX
- };
- enum {
- FM_TX_RTC_CTRL_DISABLE,
- FM_TX_RTC_CTRL_ENABLE,
- FM_TX_RTC_CTRL_MAX
- };
- enum {
- FM_TX_DESENSE_DISABLE,
- FM_TX_DESENSE_ENABLE,
- FM_TX_DESENSE_MAX
- };
- struct fm_softmute_tune_t {
- fm_s32 rssi; /* RSSI of current channel */
- fm_u16 freq; /* current frequency */
- fm_bool valid; /* current channel is valid(true) or not(false) */
- };
- struct fm_search_threshold_t {
- fm_s32 th_type; /* 0, RSSI. 1,desense RSSI. 2,SMG. */
- fm_s32 th_val; /* threshold value */
- fm_s32 reserve;
- };
- typedef struct {
- int which;
- bool stat;
- } fm_status_t;
- /* init and deinit APIs */
- extern fm_s32 fm_env_setup(void);
- extern fm_s32 fm_env_destroy(void);
- extern struct fm *fm_dev_init(fm_u32 arg);
- extern fm_s32 fm_dev_destroy(struct fm *fm);
- /* fm main basic APIs */
- extern enum fm_pwr_state fm_pwr_state_get(struct fm *fmp);
- extern enum fm_pwr_state fm_pwr_state_set(struct fm *fmp, enum fm_pwr_state sta);
- extern fm_s32 fm_open(struct fm *fmp);
- extern fm_s32 fm_close(struct fm *fmp);
- extern fm_s32 fm_rds_read(struct fm *fmp, fm_s8 *dst, fm_s32 len);
- extern fm_s32 fm_powerup(struct fm *fm, struct fm_tune_parm *parm);
- extern fm_s32 fm_powerdown(struct fm *fm, int type);
- extern fm_s32 fm_seek(struct fm *fm, struct fm_seek_parm *parm);
- extern fm_s32 fm_scan(struct fm *fm, struct fm_scan_parm *parm);
- extern fm_s32 fm_cqi_get(struct fm *fm, fm_s32 ch_num, fm_s8 *buf, fm_s32 buf_size);
- extern fm_s32 fm_get_hw_info(struct fm *pfm, struct fm_hw_info *req);
- extern fm_s32 fm_hwscan_stop(struct fm *fm);
- extern fm_s32 fm_ana_switch(struct fm *fm, fm_s32 antenna);
- extern fm_s32 fm_setvol(struct fm *fm, fm_u32 vol);
- extern fm_s32 fm_getvol(struct fm *fm, fm_u32 *vol);
- extern fm_s32 fm_mute(struct fm *fm, fm_u32 bmute);
- extern fm_s32 fm_getrssi(struct fm *fm, fm_s32 *rssi);
- extern fm_s32 fm_reg_read(struct fm *fm, fm_u8 addr, fm_u16 *val);
- extern fm_s32 fm_reg_write(struct fm *fm, fm_u8 addr, fm_u16 val);
- extern fm_s32 fm_top_read(struct fm *fm, fm_u16 addr, fm_u32 *val);
- extern fm_s32 fm_top_write(struct fm *fm, fm_u16 addr, fm_u32 val);
- extern fm_s32 fm_host_read(struct fm *fm, fm_u32 addr, fm_u32 *val);
- extern fm_s32 fm_host_write(struct fm *fm, fm_u32 addr, fm_u32 val);
- extern fm_s32 fm_chipid_get(struct fm *fm, fm_u16 *chipid);
- extern fm_s32 fm_monostereo_get(struct fm *fm, fm_u16 *ms);
- extern fm_s32 fm_monostereo_set(struct fm *fm, fm_s32 ms);
- extern fm_s32 fm_pamd_get(struct fm *fm, fm_u16 *pamd);
- extern fm_s32 fm_caparray_get(struct fm *fm, fm_s32 *ca);
- extern fm_s32 fm_em_test(struct fm *fm, fm_u16 group, fm_u16 item, fm_u32 val);
- extern fm_s32 fm_rds_onoff(struct fm *fm, fm_u16 rdson_off);
- extern fm_s32 fm_rds_good_bc_get(struct fm *fm, fm_u16 *gbc);
- extern fm_s32 fm_rds_bad_bc_get(struct fm *fm, fm_u16 *bbc);
- extern fm_s32 fm_rds_bler_ratio_get(struct fm *fm, fm_u16 *bbr);
- extern fm_s32 fm_rds_group_cnt_get(struct fm *fm, struct rds_group_cnt_t *dst);
- extern fm_s32 fm_rds_group_cnt_reset(struct fm *fm);
- extern fm_s32 fm_rds_log_get(struct fm *fm, struct rds_rx_t *dst, fm_s32 *dst_len);
- extern fm_s32 fm_rds_block_cnt_reset(struct fm *fm);
- extern fm_s32 fm_i2s_set(struct fm *fm, fm_s32 onoff, fm_s32 mode, fm_s32 sample);
- extern fm_s32 fm_get_i2s_info(struct fm *pfm, struct fm_i2s_info *req);
- extern fm_s32 fm_tune(struct fm *fm, struct fm_tune_parm *parm);
- extern fm_s32 fm_is_dese_chan(struct fm *pfm, fm_u16 freq);
- extern fm_s32 fm_desense_check(struct fm *pfm, fm_u16 freq, fm_s32 rssi);
- extern fm_s32 fm_sys_state_get(struct fm *fmp);
- extern fm_s32 fm_sys_state_set(struct fm *fmp, fm_s32 sta);
- extern fm_s32 fm_set_stat(struct fm *fmp, int which, bool stat);
- extern fm_s32 fm_get_stat(struct fm *fmp, int which, bool *stat);
- extern fm_s32 fm_subsys_reset(struct fm *fm);
- extern fm_s32 fm_scan_new(struct fm *fm, struct fm_scan_t *parm);
- extern fm_s32 fm_seek_new(struct fm *fm, struct fm_seek_t *parm);
- extern fm_s32 fm_tune_new(struct fm *fm, struct fm_tune_t *parm);
- extern fm_s32 fm_cust_config_setup(fm_s8 *filename);
- extern fm_s32 fm_cqi_log(void);
- extern fm_s32 fm_soft_mute_tune(struct fm *fm, struct fm_softmute_tune_t *parm);
- extern fm_s32 fm_pre_search(struct fm *fm);
- extern fm_s32 fm_restore_search(struct fm *fm);
- extern fm_s32 fm_dump_reg(void);
- extern fm_s32 fm_get_gps_rtc_info(struct fm_gps_rtc_info *src);
- extern fm_s32 fm_over_bt(struct fm *fm, fm_s32 flag);
- extern fm_s32 fm_set_search_th(struct fm *fm, struct fm_search_threshold_t parm);
- extern fm_s32 fm_get_aud_info(fm_audio_info_t *data);
- /*tx function*/
- extern fm_s32 fm_tx_support(struct fm *fm, fm_s32 *support);
- extern fm_s32 fm_powerup_tx(struct fm *fm, struct fm_tune_parm *parm);
- extern fm_s32 fm_tune_tx(struct fm *fm, struct fm_tune_parm *parm);
- extern fm_s32 fm_powerdowntx(struct fm *fm);
- extern fm_s32 fm_rds_tx(struct fm *fm, struct fm_rds_tx_parm *parm);
- extern fm_s32 fm_rdstx_support(struct fm *fm, fm_s32 *support);
- extern fm_s32 fm_rdstx_enable(struct fm *fm, fm_s32 enable);
- extern fm_s32 fm_tx_scan(struct fm *fm, struct fm_tx_scan_parm *parm);
- fm_s32 fm_full_cqi_logger(fm_full_cqi_log_t *setting);
- #endif /* __FM_MAIN_H__ */
|