void mmdvfs_handle_cmd(MTK_MMDVFS_CMD *cmd) { #if !MMDVFS_ENABLE return; #endif MMDVFSMSG("MMDVFS cmd %u %d\n", cmd->type, cmd->scen); switch (cmd->type) { case MTK_MMDVFS_CMD_TYPE_SET: /* save cmd */ mmdvfs_update_cmd(cmd); cmd->ret = mmdvfs_set_step(cmd->scen, mmdvfs_query(cmd->scen, cmd)); break; case MTK_MMDVFS_CMD_TYPE_QUERY: { /* query with some parameters */ if (mmdvfs_get_lcd_resolution() == MMDVFS_LCD_SIZE_FHD) { /* QUERY ALWAYS HIGH for FHD */ cmd->ret = (unsigned int)MMDVFS_STEP_HIGH2HIGH; } else { /* FHD */ mmdvfs_voltage_enum query_voltage = mmdvfs_query(cmd->scen, cmd); mmdvfs_voltage_enum current_voltage = mmdvfs_get_current_step(); if (current_voltage < query_voltage) { cmd->ret = (unsigned int)MMDVFS_STEP_LOW2HIGH; } else if (current_voltage > query_voltage) { cmd->ret = (unsigned int)MMDVFS_STEP_HIGH2LOW; } else { cmd->ret = (unsigned int)(query_voltage == MMDVFS_VOLTAGE_HIGH ? MMDVFS_STEP_HIGH2HIGH : MMDVFS_STEP_LOW2LOW); } } MMDVFSMSG("query %d\n", cmd->ret); /* cmd->ret = (unsigned int)query_voltage; */ break; } default: MMDVFSMSG("invalid mmdvfs cmd\n"); BUG(); break; } }
void mmdvfs_notify_scenario_enter(MTK_SMI_BWC_SCEN scen) { #if !MMDVFS_ENABLE return; #endif MMDVFSMSG("enter %d\n", scen); /* ISP ON = high */ switch (scen) { #if defined(SMI_D2) /* d2 sensor > 6M */ case SMI_BWC_SCEN_VR: mmdvfs_set_step(scen, mmdvfs_query(scen, NULL)); break; case SMI_BWC_SCEN_VR_SLOW: #elif defined(SMI_D1) /* default VR high */ case SMI_BWC_SCEN_VR: case SMI_BWC_SCEN_VR_SLOW: #else /* D3 */ case SMI_BWC_SCEN_WFD: case SMI_BWC_SCEN_VSS: #endif /* Fall through */ case SMI_BWC_SCEN_ICFP: /* Fall through */ case SMI_BWC_SCEN_FORCE_MMDVFS: mmdvfs_set_step(scen, MMDVFS_VOLTAGE_HIGH); break; default: break; } }
void mmdvfs_notify_scenario_enter(MTK_SMI_BWC_SCEN scen) { #if !MMDVFS_ENABLE return; #endif MMDVFSMSG("enter %d\n", scen); if (mmdvfs_get_lcd_resolution() == MMDVFS_LCD_SIZE_WQHD) { #if MMDVFS_ENABLE_WQHD if (scen == SMI_BWC_SCEN_VP) { mmdvfs_start_gpu_monitor(&g_mmdvfs_mgr->gpu_monitor); } #endif /* MMDVFS_ENABLE_WQHD */ } else { /* FHD */ switch (scen) { case SMI_BWC_SCEN_ICFP: mmdvfs_set_step(scen, MMDVFS_VOLTAGE_HIGH); break; case SMI_BWC_SCEN_VR: case SMI_BWC_SCEN_VR_SLOW: mmdvfs_set_step(scen, mmdvfs_query(scen, NULL)); /* workaround for ICFP...its mmdvfs_set() will come after leaving ICFP */ mmdvfs_set_step(SMI_BWC_SCEN_ICFP, mmdvfs_get_default_step()); break; default: break; } } }
//----------------------------------------------------------------------------- RES_MGR_DRV_CONTROL_ENUM ResMgrDrvImp:: queryCtrlType() { Mutex::Autolock lock(mLock); // LOG_MSG("+"); if( mBwcParams.profileType == BWCPT_NONE || mBwcParams.sensorSize == 0 || mBwcParams.sensorFps == 0) { LOG_MSG("profileType(%d),sensorSize(%d),sensorFps(%d)", mBwcParams.profileType, mBwcParams.sensorSize, mBwcParams.sensorFps); return RES_MGR_DRV_CONTROL_BEFORE; } // #if 1 mBwcParams.step = mmdvfs_query( mBwcParams.profileType, MMDVFS_SENSOR_SIZE, mBwcParams.sensorSize, MMDVFS_SENSOR_FPS, mBwcParams.sensorFps, MMDVFS_PARAMETER_EOF); #endif LOG_MSG("step(%d),profileType(%d),sensorSize(%d),sensorFps(%d)", mBwcParams.step, mBwcParams.profileType, mBwcParams.sensorSize, mBwcParams.sensorFps); // if(mBwcParams.step == MMDVFS_STEP_HIGH2LOW) { return RES_MGR_DRV_CONTROL_AFTER; } else { return RES_MGR_DRV_CONTROL_BEFORE; } }