int oem_fact_get_option_bit( unsigned char item, unsigned char bit )
{
        int           result    = 0;
        unsigned char *smem_ptr = NULL;
        unsigned int  offset;

        if ( ( item >= OEM_FACT_OPTION_ITEM_SMEM_MIN ) && ( item <= OEM_FACT_OPTION_ITEM_SMEM_MAX ) ) {
                if ( bit > 7 ) {
                        return result;
                }
                smem_ptr = kc_smem_alloc( OEM_FACT_OPTION_SMEM_ID, OEM_FACT_OPTION_SMEM_SIZE );
                if ( smem_ptr ) {
                        offset = item - OEM_FACT_OPTION_ITEM_SMEM_MIN;
                        result = ( *( smem_ptr + offset ) & ( 0x01 << bit ) ) > 0 ? 1 : 0;
                }
        }

        return result;
}
Esempio n. 2
0
void oem_chg_param_init(void)
{
	uint32_t *smem_ptr = NULL;
	uint32_t *cmp_ptr  = NULL;

	if (init_flag) {
		return;
	}

	smem_ptr = (uint32_t *)kc_smem_alloc(SMEM_CHG_PARAM, CHG_PARAM_SIZE);
	if (smem_ptr == NULL) {
		pr_err("chg param read error.\n");
		init_flag = 1;
		return;
	}

	cmp_ptr = kmalloc(CHG_PARAM_SIZE - SMEM_CHG_PARAM_SHARE, GFP_KERNEL);
	if (cmp_ptr == NULL) {
		pr_err("kmalloc error.\n");
		init_flag = 1;
		return;
	}

	memset(cmp_ptr, 0x00, CHG_PARAM_SIZE);
	if (0 == memcmp(smem_ptr, cmp_ptr, CHG_PARAM_SIZE - SMEM_CHG_PARAM_SHARE)) {
		pr_err("smem data all '0'\n");
		memset(smem_ptr, 0xFF, CHG_PARAM_SIZE-SMEM_CHG_PARAM_SHARE);
		oem_cmp_zero_flag = 1;
	}

	oem_param_charger_init((pm8921_oem_chg_param*)smem_ptr);
	oem_param_hkadc_init((pm8921_oem_chg_param*)smem_ptr);
	oem_param_bms_init((pm8921_oem_chg_param*)smem_ptr);
	oem_param_share_init((pm8921_oem_chg_param*)smem_ptr);

	kfree(cmp_ptr);
	init_flag = 1;

}