70 lines
2.0 KiB
C
70 lines
2.0 KiB
C
/*
|
|
* Copyright (c) CompanyNameMagicTag 2012-2019. All rights reserved.
|
|
* Description: Add io driver capability interface, and modify the app layer to
|
|
* configure the io_config.c code for flash-related io drivers.
|
|
* Author: CompanyName
|
|
* Create: 2012-11-19
|
|
*/
|
|
#include "io_config.h"
|
|
#include "dw21_platform_rom.h"
|
|
#include "soc_mdm_io.h"
|
|
#include "soc_mdm_isr.h"
|
|
#include "soc_errno.h"
|
|
|
|
#define IO_DRV_OFFSET_MIN 0x800
|
|
#define IO_DRV_OFFSET_MAX 0x948
|
|
#define IO_DRV_MASK_BITS 0x3
|
|
#define IO_DRV_MOV_BITS 0x4
|
|
#define IO_PU_MASK_BITS 0x1
|
|
#define IO_PU_MOV_BITS 0x8
|
|
|
|
EXT_PRV td_u32 reg_val_process(ext_io_ctl_idx_e id, td_u32 val, td_u32 mask_bits, td_u32 mov_bits)
|
|
{
|
|
td_u32 reg_val = 0;
|
|
td_u32 int_val;
|
|
|
|
if ((id < IO_DRV_OFFSET_MIN) || (id > IO_DRV_OFFSET_MAX)) {
|
|
return EXT_ERR_INVALID_PARAMETER;
|
|
}
|
|
|
|
int_val = uapi_int_lock();
|
|
UAPI_REG_READ32(((td_u32)EXT_IOCFG_REG_BASE + id), reg_val);
|
|
reg_val &= ~((td_u32)mask_bits << mov_bits);
|
|
reg_val |= ((td_u32)val & (td_u32)mask_bits) << mov_bits;
|
|
UAPI_REG_WRITE32(((td_u32)EXT_IOCFG_REG_BASE + id), reg_val);
|
|
uapi_int_restore(int_val);
|
|
|
|
return EXT_ERR_SUCCESS;
|
|
}
|
|
|
|
td_u32 uapi_io_set_driver_strength(ext_io_ctl_idx_e id, ext_io_driver_strength_e level)
|
|
{
|
|
td_u32 ret;
|
|
|
|
if (level >= EXT_IO_DRIVER_STRENGTH_MAX) {
|
|
return EXT_ERR_INVALID_PARAMETER;
|
|
}
|
|
|
|
ret = reg_val_process(id, level, IO_DRV_MASK_BITS, IO_DRV_MOV_BITS);
|
|
if (ret == EXT_ERR_INVALID_PARAMETER) {
|
|
return EXT_ERR_INVALID_PARAMETER;
|
|
} else {
|
|
return EXT_ERR_SUCCESS;
|
|
}
|
|
}
|
|
|
|
td_u32 uapi_io_set_pull(ext_io_ctl_idx_e id, ext_io_pull_e pu)
|
|
{
|
|
td_u32 ret;
|
|
if (pu >= EXT_GPIO_PU_MAX) {
|
|
return EXT_ERR_INVALID_PARAMETER;
|
|
}
|
|
|
|
ret = reg_val_process(id, pu, IO_PU_MASK_BITS, IO_PU_MOV_BITS);
|
|
if (ret == EXT_ERR_INVALID_PARAMETER) {
|
|
return EXT_ERR_INVALID_PARAMETER;
|
|
} else {
|
|
return EXT_ERR_SUCCESS;
|
|
}
|
|
}
|