/*****************************************************************************
 函 数 名  : his_boot_probe
 功能描述  : power on
 输入参数  :
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :
*****************************************************************************/
static int __init his_boot_probe(struct platform_device *pdev)
{
    int rt;
    u32 channel_id = ICC_CHN_IFC << 16 | IFC_RECV_FUNC_ONOFF;

#ifndef HI_ONOFF_PHONE
    /* get early param */

    /* 清除reboot flag */
    power_on_reboot_flag_set(POWER_OFF_REASON_INVALID);

    /* normal模式下 clear misc partition */
    if(NORMAL_CHARGING_MODE == get_pd_charge_flag()){
        rt = clear_misc_message();
        if(rt < 0){
            pr_dbg("clear misc message failed.\n");
            return rt;
        }
    }

    /* get power on reason */
    power_on_reason_get();

    /* get power time */
    power_on_time_get();

    /* sysfs create */
    power_on_init_attrs();

    rt = (int)sysfs_create_group(&pdev->dev.kobj, &his_boot_group);
    if (rt < 0)
    {
        pr_dbg("create sys filesystem node failed.\n");
        return rt;
    }

    /* file create and power on info record */
    rt = power_on_log_save();
    if(rt < 0){
        pr_dbg("power on log record failed.\n");
        return rt;
    }
#endif
#if 0 /* #ifdef FEATURE_E5_ONOFF */
    /* 创建开机timer */
    power_on_timer_init();
#endif
    rt = bsp_icc_event_register(channel_id, (read_cb_func)bsp_power_ctrl_read_cb, NULL, NULL, NULL);
    if(rt != 0){
        pr_dbg("icc event register failed.\n");
    }

    return rt;
}
Example #2
0
/*****************************************************************************
 函 数 名  : his_boot_probe
 功能描述  : power on
 输入参数  :
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :
*****************************************************************************/
static int __init his_boot_probe(struct platform_device *pdev)
{
    int rt;
    u32 channel_id = ICC_CHN_IFC << 16 | IFC_RECV_FUNC_ONOFF;


    #if ( FEATURE_ON == MBB_MLOG )
    if (*(u32*)SRAM_ABNORMAL_REBOOT_ADDR == SRAM_ABNORAL_REBOOT_NUM)
    {
        mlog_print(MLOG_POWER, mlog_lv_info, "reboot flag POWER_OFF_REASON_CRASH\n");       
        mlog_set_statis_info("abnormal_reboot_times",1); 
    }
    *(u32*)SRAM_ABNORMAL_REBOOT_ADDR = SRAM_ABNORAL_REBOOT_CLEAR;
    #endif 



#ifndef HI_ONOFF_PHONE
    /* get early param */

    /* 清除reboot flag */
    power_on_reboot_flag_set(POWER_OFF_REASON_INVALID);

    /* normal模式下 clear misc partition */
#if (FEATURE_ON == MBB_COMMON)
#if 0
    if(NORMAL_CHARGING_MODE == get_pd_charge_flag()){
        /*在misc分区存在的情况下,才进行清除操作*/
        rt = mtd_partation_exist("misc");
        if(rt){ 
            printk("find misc partition\n"); 
            rt = clear_misc_message();
            if(rt < 0){
                pr_dbg("clear misc message failed.\n");
                return rt;
            }
        }
    }
#endif
#else
    if(NORMAL_CHARGING_MODE == get_pd_charge_flag()){
        rt = clear_misc_message();
        if(rt < 0){
            pr_dbg("clear misc message failed.\n");
            return rt;
        }
    }
#endif

#if (FEATURE_ON == MBB_COMMON)
    power_on_mode_get();
#endif

    /* get power on reason */
    power_on_reason_get();

    /* get power time */
    power_on_time_get();

    /* sysfs create */
    power_on_init_attrs();

    rt = (int)sysfs_create_group(&pdev->dev.kobj, &his_boot_group);
    if (rt < 0)
    {
        pr_dbg("create sys filesystem node failed.\n");
        return rt;
    }

    /* file create and power on info record */
    rt = power_on_log_save();
    if(rt < 0){
        pr_dbg("power on log record failed.\n");
        return rt;
    }
#endif

#ifdef FEATURE_E5_ONOFF
    /* 创建开机timer */
    power_on_timer_init();
#endif

    rt = bsp_icc_event_register(channel_id, (read_cb_func)bsp_power_ctrl_read_cb, NULL, NULL, NULL);
    if(rt != 0){
        pr_dbg("icc event register failed.\n");
    }

    return rt;
}