Ejemplo n.º 1
0
static int __init bcmpmu_init_platform_hw(struct bcmpmu *bcmpmu)
{
	int i;
	printk(KERN_INFO "%s: called.\n", __func__);

	for (i = 0; i < ARRAY_SIZE(bcmpmu_client_devices); i++)
		bcmpmu_client_devices[i]->dev.platform_data = bcmpmu;
	platform_add_devices(bcmpmu_client_devices,
			     ARRAY_SIZE(bcmpmu_client_devices));

	if (get_chip_version() == CAPRI_A2 &&
		bcmpmu->pmu_rev == BCMPMU_REV_B0)
		platform_device_register(&boost_device_5v);

	return 0;
}
Ejemplo n.º 2
0
static void get_md_postfix(int md_id, char k[], char buf[], char buf_ex[])
{
	// name format: modem_X_YY_K_Ex.img
	int X, Ex;
	char YY_K[IMG_POSTFIX_LEN];
	unsigned int feature_val = 0;

	if ((md_id<0) || (md_id>MAX_MD_NUM)) {
		CCCI_UTIL_ERR_MSG("wrong MD ID to get postfix %d\n", md_id);
		return;
	}

	// X
	X = md_id + 1;

	// YY_
	YY_K[0] = '\0';

	//#ifndef Flyme_EDIT
	//#[email protected] for load modem firmware by hardware info
	feature_val = mz_get_operator_type();
	CCCI_UTIL_INF_MSG("mz_get_operator_type = 0x%x\n",feature_val);
	if (IS_LWG(feature_val)){
		CCCI_UTIL_INF_MSG("modem type is china unicom\n");
		feature_val = modem_lwg;
	}else if (IS_LTG(feature_val)){
		CCCI_UTIL_INF_MSG("modem type is china mobile\n");
		feature_val = modem_ltg;
	}else {
		CCCI_UTIL_INF_MSG("modem type is public\n");
		switch(md_id) {
		case MD_SYS1:
			feature_val = get_modem_support_cap(MD_SYS1);
			break;
		case MD_SYS2:
			feature_val = get_modem_support_cap(MD_SYS2);
			break;
	  	case MD_SYS5:
	  		feature_val = get_modem_support_cap(MD_SYS5);
	  		break;
	  	default:
			CCCI_UTIL_ERR_MSG("request MD ID %d not supported\n", md_id);
	  		break;
		}
	}
	//#endif /*Flyme_EDIT*/
	if((feature_val==0) || (feature_val>=MAX_IMG_NUM)) {
  		CCCI_UTIL_ERR_MSG("request MD type %d not supported\n", feature_val);
  		feature_val = md_type_invalid;
	}

	// K
	if(k == NULL)
		snprintf(YY_K, IMG_POSTFIX_LEN, "_%s_n", type_str[feature_val]);
	else
		snprintf(YY_K, IMG_POSTFIX_LEN, "_%s_%s", type_str[feature_val], k);

	// [_Ex] Get chip version
#if 0
	if(get_chip_version() == CHIP_SW_VER_01)
		Ex = 1;
	else if(get_chip_version() == CHIP_SW_VER_02)
		Ex = 2;
#else
	Ex = 1;
#endif

	// Gen post fix
	if(buf) {
		snprintf(buf, IMG_POSTFIX_LEN, "%d%s", X, YY_K);
		CCCI_UTIL_INF_MSG("MD%d image postfix=%s\n", md_id+1, buf);
	}

	if(buf_ex) {
		snprintf(buf_ex, IMG_POSTFIX_LEN, "%d%s_E%d", X, YY_K, Ex);
		CCCI_UTIL_INF_MSG("MD%d image postfix=%s\n", md_id+1, buf_ex);
	}
}
static kal_int32 gt818_downloader_probe( kal_uint16 cur_ver, kal_uint8 *firmware_ptr )
{
	  //TODO: process file
    //struct file *fp;
    kal_uint32 rlen;	
    kal_uint16 length;
    kal_uint16 retry = 0;
    FS_HANDLE handle;
    int ret = 0;
    ctp_firmware_info_t *fw_info = (ctp_firmware_info_t *)firmware_ptr;    
    unsigned char *data_ptr = &(fw_info->data);
    kal_wchar   CTP_FIRMWARE_PATH[64];
    kal_int16   drv_letter;
    kal_bool    delete_firmware = KAL_FALSE;
    
    CTP_DWN_DEBUG_LINE_TRACE();
    
    length = 0;

    drv_letter = FS_GetDrive(FS_DRIVE_V_NORMAL, 2, FS_DRIVE_I_SYSTEM | FS_DRIVE_V_NORMAL); // phone memory
    kal_wsprintf( CTP_FIRMWARE_PATH, "%c:\\%s", drv_letter, GT818_FW_STRING );
    ret = FS_CheckFile(CTP_FIRMWARE_PATH);
    if(ret < 0)
    {
        drv_letter = FS_GetDrive( FS_DRIVE_V_REMOVABLE, 1, FS_NO_ALT_DRIVE );  //SD Card
        kal_wsprintf( CTP_FIRMWARE_PATH, "%c:\\%s", drv_letter, GT818_FW_STRING );
    }
    else
    {
        delete_firmware = KAL_TRUE; // need delete firmware after update
    }

    handle = FS_Open( CTP_FIRMWARE_PATH, FS_READ_ONLY );

    if ( handle >= 0 ) // file system first
    {        	
        do
        {
            rlen  = 0;

            ret = FS_Read( handle, &data_ptr[length], 256, &rlen );

            length += rlen;

            if ( rlen != 256 )
            {
                CTP_DWN_DEBUG_LINE_TRACE();
                break;
            } 
            else
            {
                drv_trace1( TRACE_GROUP_7, CTP_GOODIX_DWN_READ_IMAGE_TRACE, rlen);
            }

        } while ( 1 );

        FS_Close( handle );
    }
    else
    {
        const int MAGIC_NUMBER_1 = 0x4D454449;
        const int MAGIC_NUMBER_2 = 0x4154454B;
        unsigned short checksum = 0;
        int i;
        
        drv_trace2( TRACE_GROUP_7, CTP_GOODIX_DWN_MAGIC_NUM_TRACE, fw_info->magic_number_1, fw_info->magic_number_2 );
        drv_trace2( TRACE_GROUP_7, CTP_GOODIX_DWN_MAGIC_NUM_TRACE, MAGIC_NUMBER_1, MAGIC_NUMBER_2 );
        drv_trace2( TRACE_GROUP_7, CTP_GOODIX_DWN_VERSION_TRACE, cur_ver, fw_info->version );
        drv_trace2( TRACE_GROUP_7, CTP_GOODIX_DWN_IMAGE_INFO_TRACE, fw_info->length, fw_info->checksum );
        
        if ( fw_info->magic_number_1 != MAGIC_NUMBER_1 && fw_info->magic_number_2 != MAGIC_NUMBER_2 )
        {
            CTP_DWN_DEBUG_LINE_TRACE();
            goto exit_downloader;
        }
        if ( cur_ver >= fw_info->version )
        {
            CTP_DWN_DEBUG_LINE_TRACE();
            goto exit_downloader;
        }
        
        // check if it is the same chip version
        if ( get_chip_version( cur_ver ) != get_chip_version( fw_info->version ) )
        {
            CTP_DWN_DEBUG_LINE_TRACE();
            goto exit_downloader;        
        }
        
        for ( i = 0 ; i < fw_info->length ; i++ )
            checksum += data_ptr[i];
        
        checksum = checksum%0xFFFF;

        if ( checksum != fw_info->checksum )
        {
            CTP_DWN_DEBUG_LINE_TRACE();
            goto exit_downloader;
        }

        length = fw_info->length;

    }
 
    while ( gt818_update_proc( data_ptr, length ) == 0 && retry < 2 ) retry++;

    if ( (handle >= 0)  && delete_firmware) //delete firmware when firmware in phone memory
        FS_Delete( CTP_FIRMWARE_PATH );
    //free_ctrl_buffer( nvram );
    ret = 1;

exit_downloader:

    return ret;
}
Ejemplo n.º 4
0
void get_ext_md_post_fix(int md_id, char buf[], char buf_ex[])
{
	// name format: modem_X_YYY_Z_Ex.img
	int		X, Ex;
	char		YYY[16];
	unsigned int	feature_val = 0;

	if (md_id < MD_SYS5) {
  		printk("[EEMCS/PLAT] [Error]get_ext_md_post_fix: invalid md_id=%d\n", md_id);
  		return;
	}

	// X
	X = md_id + 1;

	// DFO start -------------------
	// YYY
	YYY[0] = '\0';
	switch(md_id) {
	  	case MD_SYS5:
	  		feature_val = ext_md_support[MD_SYS5-MD_EXT1];
	  		break;
			
	  	default:
	  		printk("[EEMCS/PLAT] [Error]get_ext_md_post_fix: invalid md_id=%d\n", md_id);
	  		break;
	}
	
	switch(feature_val) {
	  	case modem_2g:
	  		snprintf(YYY, 16, "_2g_n");
	  		break;
		case modem_3g:
			snprintf(YYY, 16, "_3g_n");
			break;
		case modem_wg:
			snprintf(YYY, 16, "_wg_n");
			break;
		case modem_tg:
			snprintf(YYY, 16, "_tg_n");
			break;
	  	case modem_lwg:
	  		snprintf(YYY, 16, "_lwg_n");
	  		break;
	  	case modem_ltg:
	  		snprintf(YYY, 16, "_ltg_n");
	  		break;
	  	case modem_sglte:
	  		snprintf(YYY, 16, "_sglte_n");
	  		break;
	  	default:
	  		printk("[EEMCS/PLAT] [Error]get_ext_md_post_fix: invalid feature=%d\n", feature_val);
	  		break;
	}
	// DFO end ---------------------

	// [_Ex] Get chip version
#if 0
	if(get_chip_version() == CHIP_SW_VER_01)
		Ex = 1;
	else if(get_chip_version() == CHIP_SW_VER_02)
		Ex = 2;
#else
	Ex = 1;
#endif

	// Gen post fix
	if(buf) {
  		snprintf(buf, 20, "%d%s", X, YYY);
  		printk("[EEMCS/PLAT] MD%d image postfix=%s\n", md_id, buf);
	}

	if(buf_ex) {
		snprintf(buf_ex, 12, "%d%s_E%d", X, YYY, Ex);
  		printk("[EEMCS/PLAT] MD%d image postfix=%s\n", md_id, buf_ex);
	}
}
static void get_md_postfix(int md_id, char k[], char buf[], char buf_ex[])
{
	/* name format: modem_X_YY_K_Ex.img */
	int X, Ex;
	char YY_K[IMG_POSTFIX_LEN];
	unsigned int feature_val = 0;

	if ((md_id < 0) || (md_id > MAX_MD_NUM)) {
		CCCI_UTIL_ERR_MSG_WITH_ID(md_id, "wrong MD ID to get postfix\n");
		return;
	}

	/* X */
	X = md_id + 1;

	/* YY_ */
	YY_K[0] = '\0';
	switch (md_id) {
	case MD_SYS1:
		feature_val = get_modem_support_cap(MD_SYS1);
		break;
	case MD_SYS2:
		feature_val = get_modem_support_cap(MD_SYS2);
		break;
	case MD_SYS5:
		feature_val = get_modem_support_cap(MD_SYS5);
		break;
	default:
		CCCI_UTIL_ERR_MSG_WITH_ID(md_id, "request MD ID %d not supported\n", md_id);
		break;
	}

	if ((feature_val == 0) || (feature_val >= MAX_IMG_NUM)) {
		CCCI_UTIL_ERR_MSG_WITH_ID(md_id, "request MD type %d not supported\n", feature_val);
		feature_val = md_type_invalid;
	}

	/* K */
	if (k == NULL)
		snprintf(YY_K, IMG_POSTFIX_LEN, "_%s_n", type_str[feature_val]);
	else
		snprintf(YY_K, IMG_POSTFIX_LEN, "_%s_%s", type_str[feature_val], k);

	/* [_Ex] Get chip version */
#if 0
	if (get_chip_version() == CHIP_SW_VER_01)
		Ex = 1;
	else if (get_chip_version() == CHIP_SW_VER_02)
		Ex = 2;
#else
	Ex = 1;
#endif

	/* Gen post fix */
	if (buf) {
		snprintf(buf, IMG_POSTFIX_LEN, "%d%s", X, YY_K);
		CCCI_UTIL_DBG_MSG_WITH_ID(md_id, "MD%d image postfix=%s\n", md_id + 1, buf);
	}

	if (buf_ex) {
		snprintf(buf_ex, IMG_POSTFIX_LEN, "%d%s_E%d", X, YY_K, Ex);
		CCCI_UTIL_DBG_MSG_WITH_ID(md_id, "MD%d image postfix=%s\n", md_id + 1, buf_ex);
	}
}
void get_ext_md_post_fix(int md_id, char buf[], char buf_ex[])
{
	// name format: modem_X_YYY_Z_Ex.img
	int		X, Ex;
	char		YYY[8];
#if defined(DFO_FEATURE_EN)
	unsigned int	feature_val = 0;
#endif

  if (md_id < MD_SYS5) {
    printk("[EEMCS]wrong MD ID to get postfix %d\n", md_id);
    return;
  }

	// X
	X = md_id + 1;

#if defined(DFO_FEATURE_EN)
	// DFO start -------------------
	// YYY
	YYY[0] = '\0';
	switch(md_id) {
  	case MD_SYS5:
  		feature_val = ext_md_support[MD_SYS5-MD_EXT1];
  		break;
  	default:
      printk("[EEMCS]request MD ID %d not supported\n", md_id);
  		break;
	}
	switch(feature_val) {
  	case modem_lwg:
  		snprintf(YYY, 8, "_lwg_n");
  		break;
  	case modem_ltg:
  		snprintf(YYY, 8, "_ltg_n");
  		break;
  	default:
  		printk("[EEMCS]request MD type %d not supported\n", feature_val);
  		break;
	}
	// DFO end ---------------------
#else
	// Static start -------------------
	// YYY
	snprintf(YYY, 8, "_lwg_n");
	// Static end ---------------------
#endif

	// [_Ex] Get chip version
#if 0
	if(get_chip_version() == CHIP_SW_VER_01)
		Ex = 1;
	else if(get_chip_version() == CHIP_SW_VER_02)
		Ex = 2;
#else
	Ex = 1;
#endif

	// Gen post fix
	if(buf) {
		snprintf(buf, 12, "%d%s", X, YYY);
    printk("[EEMCS]MD%d image postfix=%s\n", md_id, buf);
	}

	if(buf_ex) {
		snprintf(buf_ex, 12, "%d%s_E%d", X, YYY, Ex);
    printk("[EEMCS]MD%d image postfix=%s\n", md_id, buf_ex);
	}
}