int enable_get_sim_type(int md_id, unsigned int enable) { int ret = 0; unsigned int msg_id = EXT_MD_SIM_TYPE; unsigned int resv = enable; ret = eemcs_notify_md_by_sys_msg(MD_SYS5, msg_id, resv); DBGLOG(SMSG,INF,"enable_get_sim_type(enable=%d): %d", resv, ret); return ret; }
//------------For MD get Battery info from AP------------// void send_battery_info(int md_id) { int ret = 0; unsigned int para = 0; unsigned int resv = 0; unsigned int msg_id = EXT_MD_GET_BATTERY_INFO; resv = eemcs_get_bat_info(para); ret = eemcs_notify_md_by_sys_msg(md_id, msg_id, resv); DBGLOG(SMSG, INF, "send bat vol(%d) to md: %d", resv, ret); return; }
static void mtk_cl_mddtxpwr_set_mddtxpwr_limit(void) { // TODO: optimize int i = 0; int min_limit = 65535; for (; i < MAX_NUM_INSTANCE_MTK_COOLER_MDDTXPWR; i++) { unsigned long curr_state; MTK_CL_MDDTXPWR_GET_CURR_STATE(curr_state, cl_mddtxpwr_state[i]); if (1 == curr_state) { int limit; MTK_CL_MDDTXPWR_GET_LIMIT(limit, cl_mddtxpwr_state[i]); if ((min_limit > limit) && (limit > 0)) min_limit = limit; } } if (min_limit != cl_mddtxpwr_cur_limit) { cl_mddtxpwr_cur_limit = min_limit; #if 1 if (65535 <= cl_mddtxpwr_cur_limit) { int ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_DTX_REQ, 8); mtk_cooler_mddtxpwr_dprintk_always("mtk_cl_mddtxpwr_set_mddtxpwr_limit() ret %d limit=30\n", ret); } else { int ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_DTX_REQ, cl_mddtxpwr_cur_limit); mtk_cooler_mddtxpwr_dprintk_always("mtk_cl_mddtxpwr_set_mddtxpwr_limit() ret %d limit=%d\n", cl_mddtxpwr_cur_limit); } #endif } }
static int amdtxpwr_backoff(int level) { int ret; if (level == 0) { // no throttle //ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_DTX_REQ, 8); ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_TX_PWR_REDU_REQ, 23); // TODO: 30db as unlimit... mtk_cooler_amdtxctrl_dprintk_always("[%s] unlimit DTX and TX\n", __func__); } #if 0 else if (level >= 1 && level <= 7) { // only DTX ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_DTX_REQ, 8-level); ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_TX_PWR_REDU_REQ, 23); // TODO: 30db as unlimit... mtk_cooler_amdtxctrl_dprintk_always("[%s] limit DTX %d and unlimit TX\n", __func__, 8-level); } #endif else if (level >= 1 && level <= COOLER_STEPS-1) { // DTX 1/8 + Tx power back off //ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_DTX_REQ, 1); ret = eemcs_notify_md_by_sys_msg(MD_SYS5, EXT_MD_TX_PWR_REDU_REQ, (23- (level)*3)); // TODO: 30db as unlimit... mtk_cooler_amdtxctrl_dprintk_always("[%s] limit DTX 1 and limit TX %d\n", __func__, (23- (level)*3)); } else { // error... ret = -1; mtk_cooler_amdtxctrl_dprintk_always("[%s] ouf of range\n", __func__); } return ret; }
static void eemcs_low_battery_cb(unsigned int level) { int md_id; int ret; unsigned int reserve = 0xFFFFFFFF; /* * byte3 byte2 byte1 byte0 * 0 4G 3G 2G */ if(level == LOW_BATTERY_LEVEL_0) { reserve = 0;// 0 } else if(level == LOW_BATTERY_LEVEL_1 || level == LOW_BATTERY_LEVEL_2) { reserve = (1<<6);// 64 } if(reserve!=0xFFFFFFFF) { for(md_id = MD_EXT1; md_id < (MD_EXT1+MAX_EXT_MD_NUM); md_id++) { ret = eemcs_notify_md_by_sys_msg(md_id, EXT_MD_LOW_BATTERY_LEVEL, reserve); printk("[EEMCS/PLAT] eemcs_low_battery_cb: md_id=%d, msg=%x, reserve=%d, ret=%d\n", \ md_id, EXT_MD_LOW_BATTERY_LEVEL, reserve, ret); } } }
int eemcs_sysmsg_echo_test(int md_id, int data) { eemcs_notify_md_by_sys_msg(md_id, TEST_MSG_ID_AP2MD, data); return 0; }