/***************************************************************************** 函 数 名 : 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; } }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : 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); }
/***************************************************************************** 函 数 名 : 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; }
/*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; }
/***************************************************************************** 函 数 名 : 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, ®_temp); } else if(offset < HI6559_IRQM3_BASE_OFFSET) { offset -= HI6559_IRQM2_BASE_OFFSET; bsp_hi6559_reg_read(HI6559_IRQ2_MASK_OFFSET, ®_temp); } else if(offset < HI6559_IRQM4_BASE_OFFSET) { offset = HI6559_IRQM3_BASE_OFFSET; bsp_hi6559_reg_read(HI6559_IRQ3_MASK_OFFSET, ®_temp); } else { offset = HI6559_IRQM4_BASE_OFFSET; bsp_hi6559_reg_read(HI6559_IRQ4_MASK_OFFSET, ®_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; }
/***************************************************************************** 函 数 名 : 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; }
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; }
/***************************************************************************** 函 数 名 : 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; }
/*热启动标志测试*/ 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; }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : 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); } }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : 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; }