Not sure. I have inherited this part of the code from a previous proyect writen by another engineer that is not working here now. I looks like the ADC is not using DMA, but the error code given by linux kernell says something different. This is the ADC1 initialization routine I’m using:
void GPIO_Ctrl_InitADC1()
{
RDC_SetPdapAccess(RDC, BOARD_ADC_RDC_PDAP, 3 << (BOARD_DOMAIN_ID * 2), false, false);
CCM_UpdateRoot(CCM, ccmRootIpg, ccmRootmuxIpgAHB, 0, 0);
CCM_EnableRoot(CCM, ccmRootIpg);
CCM_ControlGate(CCM, BOARD_ADC_CCM_CCGR, ccmClockNeededAll);
RDC_SEMAPHORE_Lock(BOARD_ADC_RDC_PDAP);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHA_COV_SHIFT), false);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHA_COV_INT_EN_SHIFT), false);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHB_COV_SHIFT), false);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHB_COV_INT_EN_SHIFT), false);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHC_COV_SHIFT), false);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHC_COV_INT_EN_SHIFT), false);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHD_COV_SHIFT), false);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHD_COV_INT_EN_SHIFT), false);
ADC_LogicChDeinit(BOARD_ADC_BASEADDR, adcLogicChA);
ADC_LogicChDeinit(BOARD_ADC_BASEADDR, adcLogicChB);
ADC_LogicChDeinit(BOARD_ADC_BASEADDR, adcLogicChC);
ADC_LogicChDeinit(BOARD_ADC_BASEADDR, adcLogicChD);
ADC_LogicChDeinit(BOARD_ADC_BASEADDR, adcLogicChSW);
ADC1_Init_Config.sampleRate = 1000000;
ADC1_Init_Config.levelShifterEnable = true;
ADC_Init(BOARD_ADC_BASEADDR, &ADC1_Init_Config);
// Power up ADC module
// not continuous, not comp., average 32 samples, channel 0
ADC1_Channel_Init_Config.averageEnable = true;
ADC1_Channel_Init_Config.averageNumber = adcAvgNum32;
ADC1_Channel_Init_Config.convertRate = 100000;
ADC1_Channel_Init_Config.coutinuousEnable = false;
ADC1_Channel_Init_Config.inputChannel = BOARD_ADC_SW12_CHANNEL;
ADC_LogicChInit(BOARD_ADC_BASEADDR, adcLogicChA, &ADC1_Channel_Init_Config);
ADC1_Channel_Init_Config.inputChannel = BOARD_ADC_SW34_CHANNEL;
ADC_LogicChInit(BOARD_ADC_BASEADDR, adcLogicChB, &ADC1_Channel_Init_Config);
ADC1_Channel_Init_Config.inputChannel = BOARD_ADC_LID_OPEN_CHANNEL;
ADC_LogicChInit(BOARD_ADC_BASEADDR, adcLogicChC, &ADC1_Channel_Init_Config);
ADC1_Channel_Init_Config.inputChannel = BOARD_ADC_FLASH_CHANNEL;
ADC_LogicChInit(BOARD_ADC_BASEADDR, adcLogicChD, &ADC1_Channel_Init_Config);
ADC_SetCmpMode(BOARD_ADC_BASEADDR, adcLogicChA, adcCmpModeDisable);
ADC_SetCmpMode(BOARD_ADC_BASEADDR, adcLogicChB, adcCmpModeDisable);
ADC_SetCmpMode(BOARD_ADC_BASEADDR, adcLogicChC, adcCmpModeDisable);
ADC_SetCmpMode(BOARD_ADC_BASEADDR, adcLogicChD, adcCmpModeDisable);
ADC_SetAutoDisableCmd(BOARD_ADC_BASEADDR, adcLogicChA, false);
ADC_SetAutoDisableCmd(BOARD_ADC_BASEADDR, adcLogicChB, false);
ADC_SetAutoDisableCmd(BOARD_ADC_BASEADDR, adcLogicChC, false);
ADC_SetAutoDisableCmd(BOARD_ADC_BASEADDR, adcLogicChD, false);
// DMA disable
ADC_SetDmaReset(BOARD_ADC_BASEADDR, true);
ADC_SetDmaCmd(BOARD_ADC_BASEADDR, false);
ADC_SetDmaFifoCmd(BOARD_ADC_BASEADDR, false);
// Interrupts
ADC_ClearStatusFlag(BOARD_ADC_BASEADDR, 0x003F1FEF); // Clear all flags excepts reserved
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHA_COV_SHIFT), true);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHA_COV_INT_EN_SHIFT), true);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHB_COV_SHIFT), true);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHB_COV_INT_EN_SHIFT), true);
ADC_SetIntSigCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_STATUS_CHC_COV_SHIFT), true);
ADC_SetIntCmd(BOARD_ADC_BASEADDR, (1<<ADC_INT_EN_CHC_COV_INT_EN_SHIFT), true);
RDC_SEMAPHORE_Unlock(BOARD_ADC_RDC_PDAP);
}