void bsp_wakelock_init(void){
	void* dump_base_addr = NULL;
	dump_base_addr=bsp_pm_dump_get(PM_OM_WAKE,sizeof(struct wakelock_om_s));
	if(dump_base_addr){
		record = (struct wakelock_om_s*)dump_base_addr;
	}

	dump_base_addr = NULL;
	dump_base_addr = (void *)bsp_dump_register_field(DUMP_CP_DRX, "DRX_CCORE", 0, 0, PM_DUMP_CCORE_DRX_SIZE, 0);
	if(dump_base_addr){
		wakelock_dump_addr = dump_base_addr;
	}
}
void pmom_dump_test_func(u32 magic, u32 size)
{
	char *dump_addr;
	char name[5];

	(*(unsigned *)(name)) = magic;
	name[4]=0;

	dump_addr = bsp_pm_dump_get((u32)magic, size);
	if (NULL == dump_addr)
	{
		pmom_pr_err("no pm om mem\n");
	}
	else
	{
		pmom_pr_err("[%s]0x%p\n", name, dump_addr);
	}
}
void bsp_abb_init(void)
{
    int ret = 0;

    u32 abb_version = 0;
    u32 is_supported = 0;

    bsp_abb_deassert_reset();

    if (!g_abb_inited) {
        g_abb_base_addr = bsp_bbp_part_addr_get(BBP_ABB);

        ret = (int)bsp_nvm_read(NV_ID_DRV_NV_PWC_SWITCH, (u8*)&g_abb_pm_switch, sizeof(g_abb_pm_switch));
        if (ret) {
            (void)memset_s((void *)&g_abb_pm_switch, sizeof(g_abb_pm_switch), 0, sizeof(g_abb_pm_switch));
            bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "ABB read nv fail, ret = %d\n", ret);
        }
    }

    if (!g_abb_base_addr) {
        bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "fail to get abb base address\n");
        return;
    }

    (void)bsp_abb_read(ABB_VERSION_ADDR, &abb_version);

extern int bsp_abb_tv201_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv201_init(abb_version, &is_supported);

extern int bsp_abb_tv210_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv210_init(abb_version, &is_supported);

extern int bsp_abb_tv220_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv220_init(abb_version, &is_supported);

extern int bsp_abb_tv230_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv230_init(abb_version, &is_supported);

extern int bsp_abb_tv260_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv260_init(abb_version, &is_supported);

extern int bsp_abb_tv300_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv300_init(abb_version, &is_supported);

extern int bsp_abb_tv310_init(u32 abb_version, u32 *is_supported);
    ret |= bsp_abb_tv310_init(abb_version, &is_supported);

    if (bsp_rsracc_support()) {
        ret |= bsp_rsracc_register(&g_abb_rsracc_device, 1);
    } else {
#ifdef CONFIG_CCORE_PM
        if (!g_abb_inited) {
            ret |= bsp_device_pm_add(&g_abb_dpm_device);
            if (ret) {
                bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "fail to add abb dpm device\r\n");
                return;
            }
        }
#endif
    }

    if (ret) {
        bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "ABB init fail\n");
        return;
    }

    if (!is_supported) {
        bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "don't support this ABB version: 0x%x\n", abb_version);
        return;
    }

    if (!g_abb_inited) {
        g_abb_inited = 1;
        g_abb_ops.abb_om = (struct abb_om_info*)bsp_pm_dump_get(PM_OM_ABB, sizeof(struct abb_om_info));
        if (!g_abb_ops.abb_om)
            g_abb_ops.abb_om = &g_abb_om_info;

        (void)memset_s((void *)(g_abb_ops.abb_om), sizeof(struct abb_om_info), 0, sizeof(struct abb_om_info));

        bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_ABB, "ABB init ok, version: 0x%x\n", abb_version);
    }
}