/*****************************************************************************
 函 数 名  : bsp_hi6559_volt_setget_test
 功能描述  : 电压源的电压值设置/获取测试
 输入参数  : @test_times 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_volt_setget_test(u32 test_times)
{
    u32 test_counts = 0;
    s32 fail_times[2] = {0,0};

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        if(BSP_PMU_OK != hi6559_volt_set_get_voltage_test())
        {
            fail_times[0]++;
        }
        if(BSP_PMU_OK != hi6559_volt_setget_err_test())
        {
            fail_times[1]++;
        }
    }

    if((0 != fail_times[0])||(0 != fail_times[1]))
    {
        pmic_print_error("test %d times ,setget %d times failed,err check %d failed!!\n",test_times,fail_times[0],fail_times[1]);
        return BSP_PMU_ERROR;
    }
    else
    {
        pmic_print_error("test %d times ok!!\n",test_times);
        return BSP_PMU_OK;
    }

}
/*****************************************************************************
 函 数 名  : bsp_hi6559_volttable_test
 功能描述  : 电压属性表测试
 输入参数  : @test_times 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_volttable_test(u32 test_times)
{
    s32 fail_times[2] = {0,0};
    u32 test_counts = 0;

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        if(BSP_PMU_OK != hi6559_volttable_magic_start_test())
        {
            fail_times[0]++;
        }

        if(BSP_PMU_OK != hi6559_volttable_magic_end_test())
        {
            fail_times[1]++;
        }
    }

    if((0 != fail_times[0])||(0 != fail_times[1]))
    {
        pmic_print_error("test %d times ,magic start: %d times failed,magic end: %d times failed!!\n",\
                        test_times,fail_times[0],fail_times[1]);
        return BSP_PMU_ERROR;
    }
    else
    {
        pmic_print_error("test %d times ok!!\n",test_times);
        return BSP_PMU_OK;
    }
}
예제 #3
0
/*****************************************************************************
 函 数 名  : hi6551_dr_bre_time_list_show
 功能描述  : 设置dr的呼吸时间(包括长亮,长暗、渐亮、渐暗时间)
 输入参数  : dr_id:要设置的电流源编号;dr_bre_time_st:呼吸时间参数结构体;
            没有找到设置的时间,就设置为长亮
 输出参数  : 无
 返 回 值  : 档位时间
 调用函数  :
 备注说明  : 对应寄存器只有设置时间的功能,不需要互斥锁
*****************************************************************************/
void hi6551_dr_bre_time_list_show(void)
{
    dr_id_e dr_id;
    unsigned dr_bre_time,selector = 0;
    PMIC_HI6551_DRS_ATTR *hi6551_dr;

    for(dr_id = PMU_DR01;dr_id <= PMU_DR05; dr_id++)
    {
        hi6551_dr = &hi6551_dr_attr[dr_id];

        for(selector = 0;selector < hi6551_dr->size_of_onoff_time_list;selector++)
        {
            dr_bre_time = hi6551_dr_bre_time_list(dr_id,PMU_DRS_BRE_ON_MS,selector);
            pmic_print_error("dr_id[%d],BRE_ON_MS,selector %d , %dms!\n",dr_id,selector,dr_bre_time);
        }
        for(selector = 0;selector < hi6551_dr->size_of_onoff_time_list;selector++)
        {
            dr_bre_time = hi6551_dr_bre_time_list(dr_id,PMU_DRS_BRE_OFF_MS,selector);
            pmic_print_error("dr_id[%d],BRE_OFF_MS,selector %d , %dms!\n",dr_id,selector,dr_bre_time);
        }

        for(selector = 0;selector < hi6551_dr->size_of_risefall_time_list;selector++)
        {
            dr_bre_time = hi6551_dr_bre_time_list(dr_id,PMU_DRS_BRE_RISE_MS,selector);
            pmic_print_error("dr_id[%d],BRE_RISE_MS, selector %d , %dms!\n",dr_id,selector,dr_bre_time);
        }
        for(selector = 0;selector < hi6551_dr->size_of_risefall_time_list;selector++)
        {
            dr_bre_time = hi6551_dr_bre_time_list(dr_id,PMU_DRS_BRE_FALL_MS,selector);
            pmic_print_error("dr_id[%d],BRE_FALL_MS, selector %d , %dms!\n",dr_id,selector,dr_bre_time);
        }
    }
}
/*****************************************************************************
 函 数 名  : bsp_hi6559_volt_onoff_test
 功能描述  : 电压源开关测试
 输入参数  : @test_times 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_volt_onoff_test(u32 test_times)
{
    s32 fail_times[3] = {0,0,0};
    u32 test_counts = 0;

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        if(BSP_PMU_OK != hi6559_volt_enable_test())
        {
            fail_times[0]++;
        }

        if(BSP_PMU_OK != hi6559_volt_disable_test())
        {
            fail_times[1]++;
        }

        if(BSP_PMU_OK != hi6559_volt_onoff_err_test())
        {
            fail_times[2]++;
        }
    }

    if((0 != fail_times[0]) || (0 != fail_times[1]) || (0 != fail_times[2]))
    {
        pmic_print_error("test %d times ,enable %d times failed,disable %d times failed,err check %d times failed!!\n",test_times,fail_times[0],fail_times[1],fail_times[2]);
        return BSP_PMU_ERROR;
    }
    else
    {
        pmic_print_error("test %d times ok!!\n",test_times);
        return BSP_PMU_OK;
    }
}
/*****************************************************************************
 函 数 名  : hi6559_follow_mode_set_get_test
 功能描述  : follow模式设置测试
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
s32 hi6559_follow_mode_set_get_test(void)
{
    s32 i,iret = 0;
    s32 result = BSP_PMU_OK;
    s32 test_num = (sizeof(mode_set_get_test)/sizeof(int));

    for(i = 0; i< test_num; i++)
    {
        iret = bsp_hi6559_volt_set_mode(mode_set_get_test[i],PMU_MODE_ECO_FOLLOW);
        if(BSP_PMU_OK != iret)
        {
            pmic_print_error("hi6559 volt %d set_follow_mode error, iret %d\n", mode_set_get_test[i], iret);
            result = BSP_PMU_ERROR;
        }
        else
        {
            if(PMU_MODE_ECO_FOLLOW != bsp_hi6559_volt_get_mode(mode_set_get_test[i]))
            {
                pmic_print_error("hi6559_follow_mode_set_get_test error\n");
                result = BSP_PMU_ERROR;
            }
        }
    }

    return result;
}
/*压力测试*/
int bsp_hi6451_volt_onoff_test(u32 test_times)
{
    int fail_times[2] = {0,0};
    int test_counts = 0;
    int result = BSP_PMU_OK;

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        result = hi6451_volt_enable_test();
        if(BSP_PMU_OK != result)
        {
            pmic_print_error("hi6451_volt_enable_test failed!!\n");
            fail_times[0]++;
        }
        result = hi6451_volt_disable_test();
        if(BSP_PMU_OK != result)
        {
            pmic_print_error("hi6451_volt_disable_test failed!!\n");
            fail_times[1]++;
        }
    }

    pmic_print_error("test %d times ,enable %d times failed,disable %d times failed!!\n",test_times,fail_times[0],fail_times[1]);

    if((0 != fail_times[0])||(0 != fail_times[1]))
        return BSP_PMU_ERROR;
    else
        return BSP_PMU_OK;

}
/*****************************************************************************
 函 数 名  : bsp_hi6559_dr_setget_test
 功能描述  : DR电流设置/获取功能测试
 输入参数  : @test_times - 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_dr_setget_test(u32 test_times)
{
    u32 fail_times[2] = {0,0};
    u32 test_counts = 0;
    s32 result = BSP_PMU_OK;
    s32 ret = BSP_PMU_OK;

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        ret = hi6559_dr_current_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[0]++;
            result |= ret;
        }
        
        ret = hi6559_dr_current_err_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[1]++;
            result |= ret;
        }
    }

    if((0 != fail_times[0])||(0 != fail_times[1]))
    {
        pmic_print_error("ERROR bsp_hi6559_dr_setget_test: test %d times ,current setget %d times failed,err check %d times failed!!\n",test_times,fail_times[0],fail_times[1]);
    }
    else
    {
        pmic_print_error("bsp_hi6559_dr_setget_test %d times ok!!\n",test_times);
    }

    return result;
}
예제 #8
0
/*****************************************************************************
 函 数 名  : hi6551_dr_fla_time_show
 功能描述  : 显示dr的闪烁周期时间和点亮时间
 输入参数  : dr_fla_time_st:闪烁时间参数结构体;单位:us
 输出参数  : 无
 返 回 值  : 设置成功或者失败
 调用函数  :
 备注说明  :
*****************************************************************************/
void hi6551_dr_fla_time_show(void)
{
    DR_FLA_TIME dr_fla_time_st={0,0};

    hi6551_dr_fla_time_get(&dr_fla_time_st);
    pmic_print_error("dr fla feriod is %d us!!\n",dr_fla_time_st.fla_on_us + dr_fla_time_st.fla_off_us);
    pmic_print_error("dr fla on_time is %d us!!\n",dr_fla_time_st.fla_on_us);
    pmic_print_error("dr fla off_time is %d us!!\n",dr_fla_time_st.fla_off_us);
}
예제 #9
0
/*****************************************************************************
 函 数 名  : hi6551_dr_start_delay_show
 功能描述  : 获取dr的启动延时时间
 输入参数  : dr_id:要设置的电流源编号;delay_ms:启动延时的时间,单位:ms
             设置范围:[0 , 32768]ms
 输出参数  : 无
 返 回 值  : 设置成功或失败
 调用函数  :
 备注说明  : 对应寄存器只有设置时间的功能,不需要互斥锁,只有DR3/4/5有此功能
*****************************************************************************/
unsigned hi6551_dr_start_delay_show(dr_id_e dr_id)
{
    int iret = BSP_DR_OK;
    unsigned delay_ms = 0;
    /* 有效性检查*/
    iret = hi6551_dr_start_delay_get(dr_id,&delay_ms);
    if(BSP_DR_OK == iret)
        pmic_print_error("dr_id[%d] start delay time is %d!\n", dr_id, delay_ms);
    else
        pmic_print_error("dr_id[%d] start delay time get error!\n", dr_id);

    return delay_ms;
}
예제 #10
0
/*para check func*/
static __inline__ int hi6551_dr_para_check(int dr_id)
{
    /* 有效性检查*/
    if ((PMIC_HI6551_DR_MAX < dr_id) || (PMIC_HI6551_DR_MIN > dr_id))
    {
        pmic_print_error("PMIC doesn't have dr%d!\n",dr_id);
        pmic_print_error("the dr you can use in this PMIC is from %d to %d,please check!\n",PMIC_HI6551_DR_MIN,PMIC_HI6551_DR_MAX);

        return BSP_PMU_ERROR;
    }
    else
        return BSP_PMU_OK;
}
/*****************************************************************************
 函 数 名  : hi6559_volt_set_get_voltage_test
 功能描述  : 电源电压获取/设置功能测试
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
s32 hi6559_volt_set_get_voltage_test(void)
{
    PMIC_HI6559_VLTGS_TABLE *hi6559_volt_table = (PMIC_HI6559_VLTGS_TABLE *)SHM_PMU_VOLTTABLE_ADDR;
    PMIC_HI6559_VLTGS_ATTR *hi6559_volt;
    u32 selector = 0;
    s32 voltage = 0;
    s32 test_sub, iret = 0;
    s32 test_num = (sizeof(volt_setget_test)/sizeof(int));
    u8 j = 0;

    /* 电压属性表安全性检查 */
    iret = hi6559_volt_test_table_check(hi6559_volt_table);
    if(BSP_PMU_OK != iret)
    {
        return  BSP_PMU_VOLTTABLE_ERROR;
    }

    /* 依次对每路电压源的每档电压进行设置、获取,并获取list volt */
    for(test_sub = 0;test_sub < test_num; test_sub++)
    {
        hi6559_volt = &hi6559_volt_table->hi6559_volt_attr[volt_setget_test[test_sub]];

        for(j = 0; j <= hi6559_volt->voltage_nums;j++)
        {
            voltage = hi6559_volt->voltage_list[j];
            iret = bsp_hi6559_volt_set_voltage(volt_setget_test[test_sub],voltage,voltage,&selector);
            if(BSP_PMU_OK != iret)
            {
                pmic_print_error("ERROR: volt%d set voltage failed, iret %d!!\n", 
                    volt_setget_test[test_sub], iret);
            }            

            if(voltage != bsp_hi6559_volt_get_voltage(volt_setget_test[test_sub]))
            {
                pmic_print_error("ERROR: volt%d get voltage failed!!\n", volt_setget_test[test_sub]);
            }
            
            if(voltage != bsp_hi6559_volt_list_voltage(volt_setget_test[test_sub],selector))
            {
                pmic_print_error("ERROR: volt%d get list voltage failed, selector %d!!\n", 
                    volt_setget_test[test_sub], selector);
            }
        }
    }
    
    pmic_print_info("hi6559_volt_set_get_voltage_test ok!!\n",volt_setget_test[test_sub]);
    
    return BSP_PMU_OK;
}
/*****************************************************************************
* 函 数 名  : hi6559_dr_para_check
*
* 功能描述  : 检查dr_id是否合法
*
* 输入参数  : @dr_id:待检查的dr_id
*
* 输出参数  : 无
*
* 返 回 值  : BSP_PMU_OK:合法;   BSP_PMU_ERROR:不合法
*****************************************************************************/
static __inline__ s32 hi6559_dr_para_check(s32 dr_id)
{
    /* 有效性检查*/
    if ((PMIC_HI6559_DR_MAX < dr_id) || (PMIC_HI6559_DR_MIN > dr_id))
    {
        pmic_print_error("PMIC doesn't have dr %d!\n", dr_id);
        pmic_print_error("Valid dr is from %d to %d!\n", PMIC_HI6559_DR_MIN, PMIC_HI6559_DR_MAX);

        return BSP_PMU_ERROR;
    }
    else
    {
        return BSP_PMU_OK;
    }
}
/*****************************************************************************
 函 数 名  : dummy_dr_bre_time_set
 功能描述  : DR呼吸时间配置,默认打桩函数
 输入参数  : void
 输出参数  : 无
 返 回 值  : pmu问题或ok
 调用函数  :
 被调函数  : LED模块
*****************************************************************************/
int dummy_dr_bre_time_set(dr_id_e dr_id, DR_BRE_TIME* dr_bre_time_st)
{
    pmic_print_info("on_ms is %d,off_ms is %d,rise_ms is %d,fall_ms is %d!\n",\
        dr_bre_time_st->bre_on_ms,dr_bre_time_st->bre_off_ms,dr_bre_time_st->bre_rise_ms,dr_bre_time_st->bre_fall_ms);
    pmic_print_error("no pmic macro defined,use dummy!");
    return  BSP_PMU_NO_PMIC;
}
/*****************************************************************************
 函 数 名  : bsp_hi6559_test_init
 功能描述  : hi6559 test模块的初始化
 输入参数  : void
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  : 异常定位
*****************************************************************************/
s32 bsp_hi6559_test_init(void)
{
    s32 iret = BSP_PMU_OK;

    struct pmu_test_ops hi6559_test_ops = {
        .pmu_volt_onoff_test = bsp_hi6559_volt_onoff_test,
        .pmu_volt_setget_test = bsp_hi6559_volt_setget_test,
        .pmu_volt_mode_test = bsp_hi6559_volt_mode_test,
        .pmu_volt_table_test = bsp_hi6559_volttable_test,
#ifdef __KERNEL__
        .pmu_dr_onoff_test = bsp_hi6559_dr_onoff_test,
        .pmu_dr_setget_test = bsp_hi6559_dr_setget_test,
        .pmu_dr_mode_test = bsp_hi6559_dr_mode_test,
#endif
    };

    iret = bsp_pmu_test_register(PMIC_HI6559,hi6559_test_ops);

    if(BSP_PMU_OK != iret)
        pmic_print_error("bsp_pmu_test_register error!\n");
    else
        pmic_print_info("bsp_hi6559_test_init ok!\n");

    return iret;
}
예제 #15
0
/*****************************************************************************
 函 数 名  : hi6559_irq_is_masked
 功能描述  : 检查某个中断是否被屏蔽
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
s32 hi6559_irq_is_masked(u32 irq)
{
    u32 offset = 0;
    u8 reg_temp = 0;

    /* 参数合法性检查 */
    if (irq > IRQ_HI6559_NR_BASE+HI6559_IRQ_NR) 
    {
        pmic_print_error("hi6559 irq is error,please check irq=%d\n", (s32)irq);
        return HI6559_IRQ_ERROR;
    }

    offset = irq - IRQ_HI6559_NR_BASE;
    if (offset < HI6559_IRQM2_BASE_OFFSET) 
    {
        bsp_hi6559_reg_read(HI6559_IRQ1_MASK_OFFSET, &reg_temp);
    } 
    else if(offset < HI6559_IRQM3_BASE_OFFSET)
    {
        offset -= HI6559_IRQM2_BASE_OFFSET;
        bsp_hi6559_reg_read(HI6559_IRQ2_MASK_OFFSET, &reg_temp);
    }
    else if(offset < HI6559_IRQM4_BASE_OFFSET)
    {
        offset = HI6559_IRQM3_BASE_OFFSET;
        bsp_hi6559_reg_read(HI6559_IRQ3_MASK_OFFSET, &reg_temp);
    }
    else 
    {
        offset = HI6559_IRQM4_BASE_OFFSET;
        bsp_hi6559_reg_read(HI6559_IRQ4_MASK_OFFSET, &reg_temp);
    }    

    return  (reg_temp & ((u32)1 << offset)) ;
}
/*设置eco模式测试*/
int bsp_hi6451_mode_test(u32 test_times)
{
    int fail_times[2] = {0,0,0};
    int test_counts = 0;
    int result = BSP_PMU_OK;

    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        result = hi6451_eco_mode_set_get_test();
        if(BSP_PMU_OK != result)
        {
            fail_times[0]++;
        }
        result = hi6451_normal_mode_set_get_test();
        if(BSP_PMU_OK != result)
        {
            fail_times[1]++;
        }
    }

    pmic_print_error("test %d times ,force mode: %d times failed,normal mode: %d times failed,eco mode :%d times failed!!\n",\
                        test_times,fail_times[0],fail_times[1],fail_times[2]);

    if((0 != fail_times[0])||(0 != fail_times[1]))
        return BSP_PMU_ERROR;
    else
        return BSP_PMU_OK;
}
예제 #17
0
/*****************************************************************************
 函 数 名  : hi6559_boot_om_log_save
 功能描述  : 将非下电状态记录寄存器保存到全局变量
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
 备注说明  : 无
*****************************************************************************/
void hi6559_boot_om_log_save(void)
{
    u32 timeout = 0;
    u16 j = 0;

    if(true != (s32)pmu_om_flag)
    {
        for(j = 0; j < HI6559_NP_RECORD_REG_NUM; j++)
        {
            bsp_hi6559_reg_read((HI6559_NP_IRQ1_RECORD_OFFSET + j), &pmu_hi6559_om_boot[j]);
        }
        pmu_om_flag = true;
    }

    /* 记录重启后,pmu的最初状态,分析重启原因,记录日志时间长,采用工作队列完成 */
    g_hi6559_exc_st.hi6559_om_wq = create_singlethread_workqueue("bsp_hi6559_om");
    if (!g_hi6559_exc_st.hi6559_om_wq)
    {
        pmic_print_error("%s: create_singlethread_workqueue fail\n", __FUNCTION__);
        return;
    }
    
    INIT_DELAYED_WORK(&g_hi6559_exc_st.hi6559_om_wk, (void *)hi6559_om_wk_handler);
    queue_delayed_work(g_hi6559_exc_st.hi6559_om_wq, &g_hi6559_exc_st.hi6559_om_wk, timeout);

    return;
}
예제 #18
0
int bsp_hi6551_dr_list_current(int dr_id, unsigned selector)
{
    PMIC_HI6551_DRS_ATTR *hi6551_dr;
    int iret = BSP_PMU_OK;
    int cur = 0;

    /*参数有效性检查*/
    iret = hi6551_dr_para_check(dr_id);
    if(BSP_PMU_OK != iret)
        return BSP_PMU_PARA_ERROR;


    hi6551_dr = &hi6551_dr_attr[dr_id];

    /*检查档位有效性*/
    if (selector > NUM_OF_DR_CURRENT) {
        pmic_print_error("selector is %d,not exist,-EINVAL,please input new\n", selector);
        return BSP_PMU_ERROR;
    }

    cur =  hi6551_dr->current_list[selector];

    pmic_print_info("volt %d selector %d is %d uA!!\n",dr_id,selector,cur);

    return cur;

}
/*****************************************************************************
 函 数 名  : dummy_dr_fla_time_set
 功能描述  : DR闪烁时间配置,默认打桩函数
 输入参数  : void
 输出参数  : reset.log
 返 回 值  : pmu问题或ok
 调用函数  :
 被调函数  : LED模块
*****************************************************************************/
int dummy_dr_fla_time_set(DR_FLA_TIME* dr_fla_time_st)
{
    pmic_print_info("fla_on_us is %d,fla_off_us is %d!\n",\
        dr_fla_time_st->fla_on_us,dr_fla_time_st->fla_off_us);
    pmic_print_error("no pmic macro defined,use dummy!");
    return  BSP_PMU_NO_PMIC;
}
예제 #20
0
/*****************************************************************************
 函 数 名  : hi6551_dr_bre_time_selector_get
 功能描述  : 获取dr 呼吸时间总共档位值
 输入参数  : dr_id:要设置的电流源编号;bre_time_enum:所要查询的时间类型;
 输出参数  : 无
 返 回 值  : 档位时间
 调用函数  :
 备注说明  :
*****************************************************************************/
unsigned hi6551_dr_bre_time_selectors_get(dr_id_e dr_id, dr_bre_time_e bre_time_enum)
{
    PMIC_HI6551_DRS_ATTR *hi6551_dr;
    int iret = BSP_PMU_OK;
    unsigned selectors = 0;

    /*参数有效性检查*/
    iret = hi6551_dr_para_check((int)dr_id);
    if(BSP_PMU_OK != iret)
        return BSP_PMU_PARA_ERROR;

    hi6551_dr = &hi6551_dr_attr[dr_id];

    switch(bre_time_enum)
    {
        case PMU_DRS_BRE_ON_MS:
        case PMU_DRS_BRE_OFF_MS:
            selectors = hi6551_dr->size_of_onoff_time_list;
            break;
        case PMU_DRS_BRE_RISE_MS:
        case PMU_DRS_BRE_FALL_MS:
            selectors = hi6551_dr->size_of_risefall_time_list;
            break;
        default:
            pmic_print_error("don't support this bre time!\n");
            return BSP_PMU_PARA_ERROR;
    }
    pmic_print_info("dr_id[%d],enum %d 's selector %d time is %d!\n",dr_id,bre_time_enum,selectors);
    return selectors;
}
예제 #21
0
/*热启动标志测试*/
void bsp_pmu_hreset_test(void)
{
    bool state = 0;
    state = bsp_pmu_hreset_state_get();
    pmic_print_error("bsp_pmu_hreset_state is %d!",state);
    bsp_pmu_hreset_state_clear();
}
/*****************************************************************************
 函 数 名  : hi6559_volt_mode_err_test
 功能描述  : 模式错误分支测试
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
s32 hi6559_volt_mode_err_test(void)
{
    PMIC_HI6559_VLTGS_TABLE *hi6559_volt_table = (PMIC_HI6559_VLTGS_TABLE *)SHM_PMU_VOLTTABLE_ADDR;
    s32 iret = 0;
    s32 result = BSP_PMU_OK;

    /* 异常id */
    iret = bsp_hi6559_volt_set_mode(PMIC_HI6559_VOLT_MIN - 1,PMU_MODE_NORMAL);/*lint !e415 !e831*/
    if(BSP_PMU_PARA_ERROR != iret)
    {
        pmic_print_error("bsp_hi6559_volt_set_mode err para test error, iret %d!\n", iret);
        result = BSP_PMU_ERROR;
    }
    /* 异常id */
    if(PMU_MODE_BUTTOM != bsp_hi6559_volt_get_mode(PMIC_HI6559_VOLT_MAX + 1))
    {
        pmic_print_error("bsp_hi6559_volt_get_mode err para test error!\n");
        result = BSP_PMU_ERROR;
    }

    /* 人为改写table前的魔幻数 */
    hi6559_volt_table->magic_start = 0xa0a0a0;
    iret = bsp_hi6559_volt_set_mode(mode_set_get_test[0],PMU_MODE_NORMAL);/*lint !e415 !e831*/
    if(BSP_PMU_VOLTTABLE_ERROR != iret)
    {
        pmic_print_error("bsp_hi6559_volt_set_mode err table test error, iret %d!\n", iret);
        result = BSP_PMU_ERROR;
    }
    if(PMU_MODE_BUTTOM != bsp_hi6559_volt_get_mode(mode_set_get_test[0]))
    {
        pmic_print_error("bsp_hi6559_volt_get_mode err table test error!\n");
        result = BSP_PMU_ERROR;
    }

    /* 恢复table前的魔幻数 */
    hi6559_volt_table->magic_start = SHM_PMU_VOLTTABLE_MAGIC_START_DATA;

    /* 模式错误 */
    iret = bsp_hi6559_volt_set_mode(mode_set_get_test[0],PMU_MODE_BUTTOM);
    if(BSP_PMU_ERROR != iret)
    {
        pmic_print_error("bsp_hi6559_volt_set_mode err mode test error, iret %d!\n", iret);
        result = BSP_PMU_ERROR;
    }

    return result;
}
예제 #23
0
/*****************************************************************************
 函 数 名  : hi6551_dr_bre_time_get
 功能描述  : 显示dr的呼吸时间(包括长亮,长暗、渐亮、渐暗时间)
 输入参数  : dr_id:要设置的电流源编号;dr_bre_time_st:呼吸时间参数结构体;
            没有找到设置的时间,就设置为长亮
 输出参数  : 无
 返 回 值  : 获取成功或者失败
 调用函数  :
 备注说明  :
*****************************************************************************/
void hi6551_dr_bre_time_show(dr_id_e dr_id)
{
    int iret = BSP_PMU_OK;
    DR_BRE_TIME dr_bre_time_st ={0,0,0,0};

    iret = hi6551_dr_bre_time_get(dr_id, &dr_bre_time_st);

    if(BSP_DR_OK == iret)
    {
        pmic_print_error("dr_id %d bre_on_time is %d ms!!\n",dr_id,dr_bre_time_st.bre_on_ms);
        pmic_print_error("dr_id %d bre_off_time is %d ms!!\n",dr_id,dr_bre_time_st.bre_off_ms);
        pmic_print_error("dr_id %d bre_rise_time is %d ms!!\n",dr_id,dr_bre_time_st.bre_rise_ms);
        pmic_print_error("dr_id %d bre_fall_time is %d ms!!\n",dr_id,dr_bre_time_st.bre_fall_ms);
    }
    else
        pmic_print_error("dr_id %d bre_time get error!!\n",dr_id);
}
/*****************************************************************************
 函 数 名  : hi6559_dr_current_test
 功能描述  : DR电流set/get测试
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 hi6559_dr_current_test(void)
{
    PMIC_HI6559_DRS_ATTR *hi6559_dr = NULL;
    u32 selector = 0;
    s32 i = 0, j = 0;
    s32 result = BSP_PMU_OK;
    s32 dr_current = 0;

    for(i = PMIC_HI6559_DR_MIN; i <= PMIC_HI6559_DR_MAX; i++)
    {
        hi6559_dr = &hi6559_dr_attr[i];
        for(j = 0; j < NUM_OF_DR_CURRENT; j++)
        {
            dr_current = hi6559_dr->current_list[j];
            
            result = bsp_hi6559_dr_set_current(i,dr_current,dr_current,&selector);
            if(BSP_PMU_OK != result)
            {
                pmic_print_error("ERROR bsp_hi6559_dr_set_current err, ret %d!\n", result);
            }            

            if(dr_current != bsp_hi6559_dr_get_current(i))
            {
                pmic_print_error("ERROR bsp_hi6559_dr_get_current error dr_id %d!!\n", i);
                result |= BSP_PMU_ERROR;
            }
            
            if(dr_current != bsp_hi6559_dr_list_current(i,selector))
            {
                pmic_print_error("ERROR bsp_hi6559_dr_list_current error dr_id %d!!\n", i);
                result |= BSP_PMU_ERROR;
            }
        }
    }

    if(!result)
    {
        pmic_print_error("hi6559_dr_current_test ok!!\n");
    }
    else
    {
        pmic_print_error("hi6559_dr_current_test failed, return %d!!\n", result);
    }

    return result;
}
예제 #25
0
/*****************************************************************************
 函 数 名  : hi6559_irq_cnt_show
 功能描述  : 显示中断号
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
void hi6559_irq_cnt_show(void)
{
    s32 i = 0;

    for (i = 0; i < HI6559_IRQ_NR; i++)
    {
      pmic_print_error("hi6559 irq %d is %d!\n", i, Hi6559IrqInfo[i].cnt);
    }
}
예제 #26
0
/*****************************************************************************
 函 数 名  : hi6551_dr_bre_time_list
 功能描述  : 陈列dr的呼吸时间(包括长亮,长暗、渐亮、渐暗时间)各档位的时间值
 输入参数  : dr_id:要设置的电流源编号;bre_time_enum:所要查询的时间类型;
             selector,时间档位
 输出参数  : 无
 返 回 值  : 档位时间
 调用函数  :
 备注说明  :
*****************************************************************************/
unsigned hi6551_dr_bre_time_list(dr_id_e dr_id, dr_bre_time_e bre_time_enum ,unsigned selector)
{
    PMIC_HI6551_DRS_ATTR *hi6551_dr;
    int iret = BSP_PMU_OK;
    unsigned dr_bre_time = 0;

    /*参数有效性检查*/
    iret = hi6551_dr_para_check((int)dr_id);
    if(BSP_PMU_OK != iret)
        return BSP_PMU_PARA_ERROR;

    hi6551_dr = &hi6551_dr_attr[dr_id];

    switch(bre_time_enum)
    {
        case PMU_DRS_BRE_ON_MS:
        case PMU_DRS_BRE_OFF_MS:
            if(selector > hi6551_dr->size_of_onoff_time_list)
            {
                pmic_print_error("dr_id[%d] bre_onoff_time don't support selector %d!\n",dr_id,selector);
                pmic_print_error("max selector is %d!\n",hi6551_dr->size_of_onoff_time_list);
                return BSP_PMU_PARA_ERROR;
            }
            else
                dr_bre_time = hi6551_dr->bre_onoff_time_list[selector];
            break;
        case PMU_DRS_BRE_RISE_MS:
        case PMU_DRS_BRE_FALL_MS:
            if(selector > hi6551_dr->size_of_risefall_time_list)
            {
                pmic_print_error("dr_id[%d] bre_risefall_time don't support selector %d!\n",dr_id,selector);
                pmic_print_error("max selector is %d!\n",hi6551_dr->size_of_risefall_time_list);
                return BSP_PMU_PARA_ERROR;
            }
            else
                dr_bre_time = hi6551_dr->bre_risefall_time_list[selector];
            break;
        default:
            pmic_print_error("don't support this bre time!\n");
            return BSP_PMU_PARA_ERROR;
    }
    pmic_print_info("dr_id[%d],enum %d 's selector %d time is %dms!\n",dr_id,bre_time_enum,selector,dr_bre_time);
    return dr_bre_time;
}
/*****************************************************************************
 函 数 名  : bsp_hi6559_dr_mode_test
 功能描述  : DR模式设置/获取功能测试
 输入参数  : @test_times - 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_dr_mode_test(u32 test_times)
{
    u32 fail_times[3] = {0,0,0};
    u32 test_counts = 0;
    s32 result = BSP_PMU_OK;
    s32 ret = BSP_PMU_OK;

    for(test_counts = 0; test_counts < test_times; test_counts++)
    {
        ret = hi6559_dr_bre_mode_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[0]++;
            result |= ret;
        }
        
        ret = hi6559_dr_fla_mode_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[1]++;
            result |= ret;
        }
        
        ret = hi6559_dr_mode_err_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[2]++;
            result |= ret;
        }
    }

    if((0 != fail_times[0]) || (0 != fail_times[1]) || (0 != fail_times[2]))
    {
        pmic_print_error("ERROR bsp_hi6559_dr_mode_test %d times ,bre mode: %d times failed,fla mode: %d times failed,mode err :%d times failed!!\n",\
                        test_times,fail_times[0],fail_times[1],fail_times[2]);
    }
    else
    {
        pmic_print_error("bsp_hi6559_dr_mode_test ok!!\n",test_times);
    }

    return result;
}
/*****************************************************************************
 函 数 名  : bsp_hi6451_test_init
 功能描述  : hi6451 test模块的初始化
 输入参数  : void
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  : 异常定位
*****************************************************************************/
int bsp_hi6451_test_init(void)
{
    int iret = BSP_PMU_OK;

    struct pmu_test_ops hi6451_test_ops = {
        .pmu_volt_onoff_test = bsp_hi6451_volt_onoff_test,
        .pmu_volt_setget_test = bsp_hi6451_volt_setget_test,
        .pmu_volt_mode_test = bsp_hi6451_mode_test,
    };

    iret = bsp_pmu_test_register(PMIC_HI6451,hi6451_test_ops);

    if(BSP_PMU_OK != iret)
        pmic_print_error("bsp_pmu_dbg_register error!\n");
    else
        pmic_print_error("bsp_hi6451_debug_init ok!\n");

    return iret;
}
/*****************************************************************************
 函 数 名  : bsp_hi6559_dr_onoff_test
 功能描述  : DR开关测试
 输入参数  : @test_times - 测试次数
 输出参数  : 无
 返 回 值  : 0 - 成功;else - 失败
*****************************************************************************/
s32 bsp_hi6559_dr_onoff_test(u32 test_times)
{
    u32 fail_times[3] = {0,0,0};
    u32 test_counts = 0;
    s32 result = BSP_PMU_OK;
    s32 ret = BSP_PMU_OK;
    
    for(test_counts = 0; test_counts < test_times ; test_counts++)
    {
        ret = hi6559_dr_enable_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[0]++;
            result |= ret;
        }

        ret = hi6559_dr_disable_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[1]++;
            result |= ret;
        }

        ret = hi6559_dr_onoff_err_test();
        if(BSP_PMU_OK != ret)
        {
            fail_times[2]++;
            result |= ret;
        }
    }

    if((0 != fail_times[0]) || (0 != fail_times[1]) || (0 != fail_times[2]))
    {
        pmic_print_error("test %d times ,enable %d times failed,disable %d times failed,err check %d times failed!!\n",test_times,fail_times[0],fail_times[1],fail_times[2]);
    }
    else
    {
        pmic_print_error("bsp_hi6559_dr_onoff_test %d times ok!!\n", test_times);
    }

    return result;
}
예제 #30
0
/*****************************************************************************
 函 数 名  : hi6551_dr_start_delay_set
 功能描述  : 设置dr的启动延时时间
 输入参数  : dr_id:要设置的电流源编号;delay_ms:启动延时的时间,单位:ms
             设置范围:[0 , 32768]ms
 输出参数  : 无
 返 回 值  : 设置成功或失败
 调用函数  :
 备注说明  : 对应寄存器只有设置时间的功能,不需要互斥锁,只有DR3/4/5有此功能
*****************************************************************************/
int hi6551_dr_start_delay_set(dr_id_e dr_id, unsigned delay_ms)
{
    PMIC_HI6551_DRS_ATTR *hi6551_dr;
    /* 有效性检查*/
    if (dr_id< PMU_DR03)
    {
        pmic_print_error("This DR %d can not set start delay time!\n",dr_id);
        return BSP_PMU_PARA_ERROR;
    }
    if (DR345_START_DELAY_MAX < delay_ms)
    {
        pmic_print_error("This dr start delay time can be set form 0 to 32768ms!\n");
        return BSP_PMU_PARA_ERROR;
    }

    hi6551_dr = &hi6551_dr_attr[dr_id];
    bsp_dr_reg_write(hi6551_dr->start_del_reg_addr,delay_ms/DR345_START_DELAY_STEP);

    return BSP_DR_OK;
}