int test_bsp_gpio_direction_output_invalid_value(void)
{
    bsp_gpio_direction_output(GPIO_TEST_NUM, 10);
    bsp_gpio_direction_output(GPIO_TEST_NUM, -1);

    return GPIO_OK;
}
void pintrl_config(struct pintrl_stru *iocfg_stru, unsigned int length)
{
    unsigned int i;
    unsigned int uregv, value, addr;
    unsigned int gpionum = 0;
    if(NULL == iocfg_stru || (0 == length))
    {
        return;
    }
    
    for (i = 0; i < length; i++) {
        
        //pintrl_data_convert(&iocfg_stru, &(iocfg_table[i]));
        
        /* gpio controller register */
        if ((!iocfg_stru[i].gpio_dir) && (PINCONFIG_NF_VAL != iocfg_stru[i].gpio_dir) ) {    /* direction is in */

            gpionum = 8*iocfg_stru[i].ugpiog + iocfg_stru[i].ugpio_bit;
            bsp_gpio_direction_input(gpionum);
            
        } else {    /* direction is out */
            if(PINCONFIG_NF_VAL!=iocfg_stru[i].gpio_val){                
                gpionum = 8*iocfg_stru[i].ugpiog + iocfg_stru[i].ugpio_bit;
                bsp_gpio_direction_output(gpionum , iocfg_stru[i].gpio_val);

            }
        }

        uregv = ((iocfg_stru[i].ugpiog << 3) + iocfg_stru[i].ugpio_bit);

        /* set iomg register */
        if ((0xfff != iocfg_stru[i].uiomg_off) &&
            (PINCONFIG_NF_VAL != iocfg_stru[i].iomg_val)) {
            value = iocfg_stru[i].iomg_val;

            if (uregv <= 164) {
                addr = HI_PINTRL_REG_ADDR + (iocfg_stru[i].uiomg_off);
            } else {
                addr = HI_PINTRL_SYS_REG_ADDR + (iocfg_stru[i].uiomg_off);
            }

            writel(value, addr);

        }

        /* set iocg register */
        if(PINCONFIG_NF_VAL != iocfg_stru[i].iocg_val){
            if (uregv <= 164) {
                addr = HI_PINTRL_REG_ADDR + 0x800 + (iocfg_stru[i].uiocg_off);
            } else {
                addr = HI_PINTRL_SYS_REG_ADDR + 0x800 + (iocfg_stru[i].uiocg_off);
            }
            value = readl(addr) & (~0x03);
            writel(value | iocfg_stru[i].iocg_val, addr);
        }

    }

}
int test_gpio_llt(void)
{
    bsp_gpio_direction_input(GPIO_TEST_NUM);
    bsp_gpio_get_value(GPIO_TEST_NUM);
    bsp_gpio_direction_get(GPIO_TEST_NUM);

    bsp_gpio_direction_output(GPIO_TEST_NUM, 0);
    bsp_gpio_set_value(GPIO_TEST_NUM, 1);
    bsp_gpio_direction_get(GPIO_TEST_NUM);

    return GPIO_OK;
}
int test_bsp_gpio_direction_output(void)
{
	bsp_gpio_direction_output(GPIO_TEST_NUM,1);

	if(1 == gpio_reg_get_bits(GPIO_TEST_BASEADDR,HI_GPIO_SWPORT_DDR_OFFSET,GPIO_PIN_BITS))
	{

		logMsg("Test_bsp_gpio_direction_output is passed!!\n",0,0,0,0,0,0);
        return GPIO_OK;
	}
	else
	{
		logMsg("Test_bsp_gpio_direction_output is fail!!\n",0,0,0,0,0,0);
        return GPIO_ERROR;
	}

}
static int fem_iocfg_group_gpio(u32 nv_index, u32 mux)
{
    u32 i;
    int ret;
    u32 pin_mask  = g_femio_info.cfg[nv_index].gpio_ctrl.pin_mask.value;
    u32 pin_value = g_femio_info.cfg[nv_index].gpio_ctrl.pin_level.level;
    u32 gpio_num  = 0;

    if((nv_index > FEM_IO_CFG_MAX) || (mux > 1)){
        anten_print_error("para error ! nv index is %d,mux is %d\n", nv_index, mux);
        return -1;
    }

    for(i=0; i<FEM_PIN_MAX; i++){
        if(pin_mask & ((u32)1 << i)){
            gpio_num = rf_pin_to_gpio(i);
            if(GPIO_NUM_INVAILId == gpio_num){
                anten_print_error("get gpio num is error %d!\n",gpio_num);
                return -1;
            }
            /*set pin mux*/
            bsp_pinctrl_modify_dts(MODEM_PIN_NORMAL, MODEM_IO_MUX, gpio_num, mux);
            ret = bsp_pinctrl_mux_set(gpio_num, mux);
            if(ret){
                anten_print_error("set pin mux error! gpio num=%d,mux=%d\n",gpio_num,mux);
                return ret;
            }

            /*if pin is gpio function,set direction and pin level*/
            if(0 == mux){
                pin_value = (u32)!!(pin_value & ((u32)1<<i));
                bsp_pinctrl_modify_dts(MODEM_PIN_NORMAL, MODEM_GPIO_OUTPUT, gpio_num, pin_value);                
                bsp_gpio_direction_output(gpio_num, pin_value);
            }
        }
    }

    return 0;
}
int test_bsp_gpio_direction_output_invalid_num(void)
{
    bsp_gpio_direction_output(GPIO_INVALID_NUM,1);
    return GPIO_OK;
}