inwudriver-weibo/bsp/drivers/io_cfg/io_config.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;
}
}