| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #include <linux/string.h>
- #include <linux/slab.h>
- #include "fm_typedef.h"
- #include "fm_rds.h"
- #include "fm_dbg.h"
- #include "fm_err.h"
- #include "fm_stdlib.h"
- #include "fm_patch.h"
- #include "fm_config.h"
- /* #include "fm_cust_cfg.h" */
- #include "mt6630_fm_cust_cfg.h"
- fm_cust_cfg mt6630_fm_config;
- /* static fm_s32 fm_index = 0; */
- static fm_s32 MT6630fm_cust_config_print(fm_cust_cfg *cfg)
- {
- WCN_DBG(FM_NTC | MAIN, "MT6630 rssi_l:\t%d\n", cfg->rx_cfg.long_ana_rssi_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 rssi_s:\t%d\n", cfg->rx_cfg.short_ana_rssi_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 pamd_th:\t%d\n", cfg->rx_cfg.pamd_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 mr_th:\t%d\n", cfg->rx_cfg.mr_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 atdc_th:\t%d\n", cfg->rx_cfg.atdc_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 prx_th:\t%d\n", cfg->rx_cfg.prx_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 atdev_th:\t%d\n", cfg->rx_cfg.atdev_th);
- WCN_DBG(FM_NTC | MAIN, "MT6630 smg_th:\t%d\n", cfg->rx_cfg.smg_th);
- WCN_DBG(FM_NTC | MAIN, "de_emphasis:\t%d\n", cfg->rx_cfg.deemphasis);
- WCN_DBG(FM_NTC | MAIN, "osc_freq:\t%d\n", cfg->rx_cfg.osc_freq);
- WCN_DBG(FM_NTC | MAIN, "aud path[%d]I2S state[%d]mode[%d]rate[%d]\n", cfg->aud_cfg.aud_path,
- cfg->aud_cfg.i2s_info.status, cfg->aud_cfg.i2s_info.mode, cfg->aud_cfg.i2s_info.rate);
- return 0;
- }
- static fm_s32 MT6630cfg_item_handler(fm_s8 *grp, fm_s8 *key, fm_s8 *val, fm_cust_cfg *cfg)
- {
- fm_s32 ret = 0;
- struct fm_rx_cust_cfg *rx_cfg = &cfg->rx_cfg;
- ret = cfg_item_match(key, val, "FM_RX_RSSI_TH_LONG_MT6630", &rx_cfg->long_ana_rssi_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_RSSI_TH_SHORT_MT6630", &rx_cfg->short_ana_rssi_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_DESENSE_RSSI_MT6630", &rx_cfg->desene_rssi_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_PAMD_TH_MT6630", &rx_cfg->pamd_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_MR_TH_MT6630", &rx_cfg->mr_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_ATDC_TH_MT6630", &rx_cfg->atdc_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_PRX_TH_MT6630", &rx_cfg->prx_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_SMG_TH_MT6630", &rx_cfg->smg_th);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_DEEMPHASIS_MT6630", &rx_cfg->deemphasis);
- if (0 <= ret)
- return ret;
- ret = cfg_item_match(key, val, "FM_RX_OSC_FREQ_MT6630", &rx_cfg->osc_freq);
- if (0 <= ret)
- return ret;
- WCN_DBG(FM_WAR | MAIN, "MT6630 invalid key\n");
- return -1;
- }
- static fm_s32 MT6630fm_cust_config_default(fm_cust_cfg *cfg)
- {
- if (cfg == NULL) {
- pr_err("%s,invalid pointer\n", __func__);
- return -FM_EPARA;
- }
- cfg->rx_cfg.long_ana_rssi_th = FM_RX_RSSI_TH_LONG_MT6630;
- cfg->rx_cfg.short_ana_rssi_th = FM_RX_RSSI_TH_SHORT_MT6630;
- cfg->rx_cfg.desene_rssi_th = FM_RX_DESENSE_RSSI_MT6630;
- cfg->rx_cfg.pamd_th = FM_RX_PAMD_TH_MT6630;
- cfg->rx_cfg.mr_th = FM_RX_MR_TH_MT6630;
- cfg->rx_cfg.atdc_th = FM_RX_ATDC_TH_MT6630;
- cfg->rx_cfg.prx_th = FM_RX_PRX_TH_MT6630;
- cfg->rx_cfg.smg_th = FM_RX_SMG_TH_MT6630;
- cfg->rx_cfg.deemphasis = FM_RX_DEEMPHASIS_MT6630;
- cfg->rx_cfg.osc_freq = FM_RX_OSC_FREQ_MT6630;
- cfg->tx_cfg.pamd_th = FM_TX_PAMD_TH_MT6630;
- cfg->tx_cfg.mr_th = FM_TX_MR_TH_MT6630;
- cfg->tx_cfg.smg_th = FM_TX_SMG_TH_MT6630;
- #ifdef CONFIG_MTK_MERGE_INTERFACE_SUPPORT
- cfg->aud_cfg.aud_path = FM_AUD_MRGIF;
- cfg->aud_cfg.i2s_info.status = FM_I2S_OFF;
- cfg->aud_cfg.i2s_info.mode = FM_I2S_SLAVE;
- cfg->aud_cfg.i2s_info.rate = FM_I2S_44K;
- cfg->aud_cfg.i2s_pad = FM_I2S_PAD_IO;
- #elif defined FM_DIGITAL_INPUT
- cfg->aud_cfg.aud_path = FM_AUD_I2S;
- cfg->aud_cfg.i2s_info.status = FM_I2S_OFF;
- cfg->aud_cfg.i2s_info.mode = FM_I2S_SLAVE;
- cfg->aud_cfg.i2s_info.rate = FM_I2S_44K;
- cfg->aud_cfg.i2s_pad = FM_I2S_PAD_IO;
- #elif defined FM_ANALOG_INPUT
- cfg->aud_cfg.aud_path = FM_AUD_ANALOG;
- cfg->aud_cfg.i2s_info.status = FM_I2S_STATE_ERR;
- cfg->aud_cfg.i2s_info.mode = FM_I2S_MODE_ERR;
- cfg->aud_cfg.i2s_info.rate = FM_I2S_SR_ERR;
- cfg->aud_cfg.i2s_pad = FM_I2S_PAD_ERR;
- #else
- cfg->aud_cfg.aud_path = FM_AUD_ERR;
- cfg->aud_cfg.i2s_info.status = FM_I2S_STATE_ERR;
- cfg->aud_cfg.i2s_info.mode = FM_I2S_MODE_ERR;
- cfg->aud_cfg.i2s_info.rate = FM_I2S_SR_ERR;
- cfg->aud_cfg.i2s_pad = FM_I2S_PAD_ERR;
- #endif
- return 0;
- }
- static fm_s32 MT6630fm_cust_config_file(const fm_s8 *filename, fm_cust_cfg *cfg)
- {
- fm_s32 ret = 0;
- fm_s8 *buf = NULL;
- fm_s32 file_len = 0;
- buf = fm_zalloc(4096);
- if (!buf) {
- WCN_DBG(FM_ALT | MAIN, "-ENOMEM\n");
- return -ENOMEM;
- }
- /* fm_index = 0; */
- file_len = fm_file_read(filename, buf, 4096, 0);
- if (file_len <= 0) {
- ret = -1;
- goto out;
- }
- ret = cfg_parser(buf, MT6630cfg_item_handler, cfg);
- out:
- if (buf)
- fm_free(buf);
- return ret;
- }
- #define MT6630_FM_CUST_CFG_PATH "etc/fmr/mt6630_fm_cust.cfg"
- fm_s32 MT6630fm_cust_config_setup(const fm_s8 *filepath)
- {
- fm_s32 ret = 0;
- fm_s8 *filep = NULL;
- fm_s8 file_path[51] = { 0 };
- MT6630fm_cust_config_default(&mt6630_fm_config);
- WCN_DBG(FM_NTC | MAIN, "MT6630 FM default config\n");
- MT6630fm_cust_config_print(&mt6630_fm_config);
- if (!filepath) {
- filep = MT6630_FM_CUST_CFG_PATH;
- } else {
- memcpy(file_path, filepath, (strlen(filepath) > 50) ? 50 : strlen(filepath));
- filep = file_path;
- trim_path(&filep);
- }
- ret = MT6630fm_cust_config_file(filep, &mt6630_fm_config);
- WCN_DBG(FM_NTC | MAIN, "MT6630 FM cust config\n");
- MT6630fm_cust_config_print(&mt6630_fm_config);
- return ret;
- }
|