以IR LED GPIO为例 1. 查看board.ini的配置 //id对应的值是E_MI_SYS_BOARD_INFO_ID_GPIO_LED_CTL的值,,PAD_NO是GPIO的实际number
BOARD_GPIO_18_ID = 0x326; #E_MI_SYS_BOARD_INFO_ID_GPIO_LED_CTLBoard_GPIO_18_INVERTOR = 0Board_GPIO_18_PAD_NO = 5; #PAD_PWM_PM
2. 加载board.ini ///vendor/mediatek/proprietary_tv/apollo/linux_core/misdk/mi/mi/modules/sys/src/mi_sys_cfg.c
static MI_BOOL _MI_SYS_CfgLoadAndSetBoardInfo(void) { .... //加载BOARD_GPIO_SETTING:BOARD_GPIO_NUM u8GpioNum = _INIPARSER_GET_INT(_pstBoardCfgIni, "BOARD_GPIO_SETTING:BOARD_GPIO_NUM", 0); //将GPIO的单独配置加载到pstMiConfigData->astGpioColl for (u8Num = 0; u8Num < u8GpioNum; u8Num++)
{
if (pszKey != NULL)
{
_SNPRINTF((char *)pszKey, MI_SYS_CONFIG_KEYNAME_LEN, "BOARD_GPIO_SETTING:BOARD_GPIO_%d_ID", u8Num);
_pstMiConfigData->astGpioColl[u8Num].eId = _INIPARSER_GET_INT(_pstBoardCfgIni, pszKey, 0);
_SNPRINTF((char *)pszKey, MI_SYS_CONFIG_KEYNAME_LEN, "BOARD_GPIO_SETTING:Board_GPIO_%d_INVERTOR", u8Num);
_pstMiConfigData->astGpioColl[u8Num].u8Invertor = _INIPARSER_GET_INT(_pstBoardCfgIni, pszKey, 0);
_SNPRINTF((char *)pszKey, MI_SYS_CONFIG_KEYNAME_LEN, "BOARD_GPIO_SETTING:Board_GPIO_%d_PAD_NO", u8Num);
_pstMiConfigData->astGpioColl[u8Num].u32PadNo = _INIPARSER_GET_INT(_pstBoardCfgIni, pszKey, 0);
}
} }
3. 配置NameId //vendor/mediatek/proprietary_tv/apollo/linux_core/misdk/mi/mi/modules/gpio/src/mi_gpio.c static MI_RESULT _MI_GPIO_ConfigGpioInfo(void) { .... case E_MI_SYS_BOARD_INFO_ID_GPIO_LED_CTL:
_astGpioInfo[u16Count].eNameId = E_MI_GPIO_NAME_LED_CTL; .... }
4. 实际调用 //vendor/mediatek/proprietary_tv/apollo/linux_core/misdk/mi/mi/modules/dispout/src/mi_dispout.c //通过step3配置的NameId获取GPIO的配置,所以查找这个NameId就可以看到有哪些调用 mi_gpio_GetGpioNumByName(E_MI_GPIO_NAME_LED_CTL, &(_astPanelInfo[u32PortIndex].u16LedPadNo)))
|