예제 #1
0
// 1v == 1000000 uv
// this function voltage Unit is uv
int IMM_GetOneChannelValue_Cali(int Channel, int*voltage)
{
     int ret = 0, data[4], rawvalue;
     long a =0;
     // long b =0;
     long slop = 0;
     long offset =0;
     
     ret = IMM_GetOneChannelValue( Channel,  data, &rawvalue);
     if(ret)
     {
         ret = IMM_GetOneChannelValue( Channel,  data, &rawvalue);
	   if(ret)
	   {
	        printf("[adc_api]:IMM_GetOneChannelValue_Cali  get raw value error %d \n",ret);
		  return -1;
	   }
     }

     a = (1000000+g_adc_ge)*(g_y_vbg-g_adc_oe)/((g_o_vbg+1800)-g_adc_oe);
     // b = g_adc_oe;
     slop = ((1500000/4096)*1000000)/a;
     offset = 1500000*g_adc_oe/a; 

     *voltage = rawvalue*slop + offset;
	     
      //printk("[adc_api]:IMM_GetOneChannelValue_Cali  voltage= %d uv \n",*voltage);

      return 0;
     
}
예제 #2
0
static int get_hw_battery2_temp(void)
{

	int ret = 0, data[4], i, ret_value = 0, ret_temp = 0, output;
	int times=1, Channel=0;//6589=1,6582=0(AUX_IN0_NTC)

	if( IMM_IsAdcInitReady() == 0 )
	{
        printk("[thermal_auxadc_get_data]: AUXADC is not ready\n");
		return 0;
	}

	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
		mtktsbattery2_dprintk("[thermal_auxadc_get_data(AUX_IN0_NTC)]: ret_temp=%d\n",ret_temp);
	}

#if 0
	Channel = 0;
	ret = 0 ;
	ret_temp = 0;
	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
		printk("[thermal_auxadc_get_data(ADCIN %d)]: ret_temp=%d\n",Channel,ret_temp);
	}

	Channel = 2;
	ret = 0 ;
	ret_temp = 0;
	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
		printk("[thermal_auxadc_get_data(ADCIN %d)]: ret_temp=%d\n",Channel,ret_temp);
	}
#endif

	//ret = ret*1500/4096	;
	ret = ret*1800/4096;//82's ADC power
	mtktsbattery2_dprintk("Battery output mV = %d\n",ret);
	output = BattVoltToTemp(ret);
	mtktsbattery2_dprintk("Battery output temperature = %d\n",output);

	return output;
}
예제 #3
0
static int get_pcb_version(void)
{

    int data[4] = {0, 0, 0, 0};
    int rawvalue    = 0;
    int ret         = 0;
    int PCBvoltage  = 0;

    ret = IMM_GetOneChannelValue(1, data, &rawvalue);
    if (ret == 0)
    {
        LCM_PRINT("[%s] success to get adc value channel(1)=(0x%x) (%d) (ret=%d)\n", __func__, rawvalue, rawvalue, ret);
        LCM_PRINT("[%s] data[0]=0x%x, data[1]=0x%x\n\n",__func__, data[0], data[1]);
    } else {
        LCM_PRINT("[%s] fail to get adc value (ret=%d)\n", __func__, ret);
    }

    PCBvoltage = (int)(rawvalue * 150 / 4096);

    if ( PCBvoltage>HW_REV_B_RANGE )
        g_PCBver = HW_REV_B;    // rev.b
    else if ( (PCBvoltage>HW_REV_A_RANGE) && (PCBvoltage<HW_REV_B_RANGE) )
        g_PCBver = HW_REV_A_2;    // rev.a-2
    else
        g_PCBver = HW_REV_A;    // rev.a
    
    LCM_PRINT("PCBvoltage(%d), g_PCBver(%d)\n", PCBvoltage, g_PCBver);
    
    return g_PCBver;
}
예제 #4
0
static int get_hw_btsmdpa_temp(void)
{

	int ret = 0, data[4], i, ret_value = 0, ret_temp = 0, output;
	int times=1, Channel=g_RAP_ADC_channel;//6752=0(AUX_IN1_NTC)

	if( IMM_IsAdcInitReady() == 0 )
	{
        printk("[thermal_auxadc_get_data]: AUXADC is not ready\n");
		return 0;
	}

	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
		mtkts_btsmdpa_dprintk("[thermal_auxadc_get_data(AUX_IN1_NTC)]: ret_temp=%d\n",ret_temp);
        mtkts_btsmdpa_dprintk("[thermal_auxadc_get_data(AUX_IN1_NTC)]: ret_temp=%d\n",ret_temp);
	}


	//ret = ret*1500/4096	;
	ret = ret*1800/4096;//82's ADC power
	mtkts_btsmdpa_dprintk("APtery output mV = %d\n",ret);
	output = mtk_ts_btsmdpa_volt_to_temp(ret);
	mtkts_btsmdpa_dprintk("BTSMDPA output temperature = %d\n",output);
	return output;
}
예제 #5
0
void dynamic_switch_i2c_address()
{
	printk("dynamic_switch_i2c_address +\n");
	int res;
	int data[4];
	res = IMM_GetOneChannelValue(12, data, NULL);
	if(res == 0)
	{
		printk("data: %d,%d, %d, %d\n", data[0], data[1], data[2], data[3]);
		if((data[1] >= 73 && data[1] <= 81)  ||  //ID 2.5
		   (data[1] >= 95 && data[1] <= 103) ||  //ID 3
		   (data[1] >= 131 && data[1] <= 139))   //ID 4
		{
			printk("ID 2.5, ID 3, ID 4, Need switch I2C address\n");
			Need_Switch_I2C_Address = 1;

			i2c_mhl.addr = 0x3B;
		}
		else
		{
			printk("ID 2, Do not need switch I2C address\n");
			Need_Switch_I2C_Address = 0;
		}
	}
}
// zhoulidong  add for lcm detect (start)
static unsigned int rgk_lcm_compare_id(void)
{
    int data[4] = {0,0,0,0};
    int res = 0;
    int rawdata = 0;
    int lcm_vol = 0;

#ifdef AUXADC_LCM_VOLTAGE_CHANNEL
    res = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL,data,&rawdata);
    if(res < 0)

    {
    #ifdef BUILD_LK
    printf("[adc_uboot]: get data error\n");
    #endif
    return 0;

    }
#endif
    lcm_vol = data[0]*1000+data[1]*10;


    #ifdef BUILD_LK
    printf("@@@@@@@[adc_uboot]: lcm_vol= %d , file : %s, line : %d\n",lcm_vol, __FILE__, __LINE__);
    #endif

    if (lcm_vol>=MIN_VOLTAGE &&lcm_vol <= MAX_VOLTAGE &&lcm_compare_id())
    {
    return 1;
    }

    return 0;

}
예제 #7
0
int get_hdmi_i2c_addr(void)
{
#ifdef SII_I2C_ADDR;
    return (SII_I2C_ADDR);
#else
    printk("dynamic_switch_i2c_address +\n");

    int res;
    int addr = 0x72;
    int data[4];

    res = IMM_GetOneChannelValue(12, data, NULL);
    printk("IMM_GetOneChannelValue - res=%d\n", res);
    if(res == 0)
    {
        printk("data: %d,%d, %d, %d\n", data[0], data[1], data[2], data[3]);
        if((data[1] >= 73 && data[1] <= 81)  ||  //ID 2.5
                (data[1] >= 95 && data[1] <= 103) ||  //ID 3
                (data[1] >= 131 && data[1] <= 139))   //ID 4
        {
            printk("ID 2.5, ID 3, ID 4, Need switch I2C address\n");
            addr = 0x76;
        }
        else
        {
            printk("ID 2, Do not need switch I2C address\n");
        }
    }
    return addr;
#endif

}
static unsigned int lcm_check_idpin_adc(unsigned char count)
{
    int idpin_auxadc = 0;
    //int idpin_auxadc_check = 0;
    int i = 0;
    int realcount = 0;
    int ret = 0, data[4] = {0,0,0,0};

    for(i = 0;i < count;i++)
    {
        ret = IMM_GetOneChannelValue(AUXADC_LCM_IDPIN_CHANNEL,data,NULL);
        if(ret < 0)
        { 
	     printf("[lcm_check_idpin_adc]: get data error\n");
			   
        }
        else
        {
            idpin_auxadc += (data[0]*100+data[1]); 
            realcount ++;
            printf("LK+++:LCM Check ID pin ADC value[%d]=%d,realcount=%d\n",i,data[0]*100+data[1],realcount);
        }

    }
    idpin_auxadc = (idpin_auxadc / realcount);
    printf("LK+++:LCM Check ID pin ADC average value=%d\n",idpin_auxadc);
    return idpin_auxadc;
}
예제 #9
0
// 1v == 1000000 uv
// this function voltage Unit is uv
int IMM_GetOneChannelValue_Cali(int Channel, int*voltage)
{
     int ret = 0, data[4], rawvalue;
     
     ret = IMM_GetOneChannelValue( Channel,  data, &rawvalue);
     if(ret)
     {
         ret = IMM_GetOneChannelValue( Channel,  data, &rawvalue);
	   if(ret)
	   {
	        printf("[adc_api]:IMM_GetOneChannelValue_Cali  get raw value error %d \n",ret);
		  return -1;
	   }
     }

     //*voltage = rawvalue*1500000 / 4096;
     *voltage = (int)((long long)rawvalue*1500000 / (long long)4096);     
      //printf("[adc_api]:IMM_GetOneChannelValue_Cali  voltage= %d uv \n",*voltage);

      return 0;
     
}
예제 #10
0
static int multi_key_detection(void)
{
        int current_status = 0;
	int index = 0;
	int count = long_press_time / ( KEY_SAMPLE_PERIOD + 40 ); //ADC delay
	count = count / 2; // make it 3 times faster !!! DAP
	int m_key = 0;
	int cur_key = 0;
	int adc_data[4] = {0, 0, 0, 0};
	int adc_raw;
	int channel = MULTIKEY_ADC_CHANNEL;

	IMM_GetOneChannelValue(channel, adc_data, &adc_raw);
	m_key = cur_key = key_check(adc_data[0], adc_data[1]);

	while(index++ < count)
	{

		/* Check if the current state has been changed */
		current_status = INREG32(ACCDET_MEMORIZED_IN) & 0x3;
		if(current_status != 0)
		{
			return (m_key | SHORT_PRESS);
		}

		/* Check if the voltage has been changed (press one key and another) */
		IMM_GetOneChannelValue(channel, adc_data, &adc_raw);
		cur_key = key_check(adc_data[0], adc_data[1]);
		if(m_key != cur_key)
			return (m_key | SHORT_PRESS);
		else
			m_key = cur_key;
		
		msleep(KEY_SAMPLE_PERIOD);
	}
	
	return (m_key | LONG_PRESS);
}
예제 #11
0
static unsigned int lcm_compare_id(void)
{ 
    unsigned int xx_temp = 0;
    LCM_DEBUG("[LCM_truly_r61408: lcm_compare_id. \n");
    xx_temp= IMM_GetOneChannelValue(COMPARE_ADC_CHANNEL,500);
    LCM_DEBUG("xx_temp=%d \n",xx_temp);    
#ifndef GN_MTK_BSP_LCD_ID_CHECK 
    if(xx_temp >= COMPARE_ID_V_LEVEL_1)
        return 0; 
    xx_temp =  compare_ic_id(); 
    return xx_temp;
#else
    return (xx_temp < COMPARE_ID_V_LEVEL_1)?1:0;       
#endif
}
예제 #12
0
static int IMM_auxadc_get_evrage_data(int times, int Channel)
{
	int ret = 0, data[4], i, ret_value = 0, ret_temp = 0;

	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
		printf("[auxadc_get_data(channel%d)]: ret_temp=%d, ret = ret_value.\n",Channel,ret_temp,ret_value);        
	}

	ret = ret / times;
	return ret;
}
static int GN_IMM_GetOneChannelValue(int dwChannel, int deCount)
{
    int data[4], i;
    unsigned int ret = 0,ret_value1=0,ret_value2=0;

    i = deCount;
    while(i--){
    IMM_GetOneChannelValue(dwChannel, data, 0);
    ret_value1 += data[0];
    ret_value2 += data[1];
    }

    ret = ret_value1*1000/deCount + ret_value2*10/deCount;
    return ret;
}
int get_md_adc_val(int md_id, unsigned int num)
{
	int data[4] = {0,0,0,0};
	int val = 0;
	int ret = 0;
	
	#if defined (FEATURE_GET_MD_ADC_VAL)
	ret = IMM_GetOneChannelValue(num, data, &val);
	if (ret == 0)
		return val;
	else
		return ret;
	
	#else
	return -1;
	#endif
}
static unsigned int lcm_compare_id(void)
{
	unsigned int id=0, id1 = 0,id2 = 0;
	unsigned int check_esd = 0;
	unsigned int array[16]; 
	unsigned char buffer[4];
       int volt = 0;
	unsigned int data[4];
	
	array[0] = 0x00043700;// read id return 4 bytes,version and id
	dsi_set_cmdq(array, 1, 1);
	MDELAY(10);	
	read_reg_v2(0xA1, buffer, 4);
       id1 = buffer[2];
       id2 = buffer[3];
       id = (id1<<8 | id2);
       LCM_DBG("lcm_compare_id read id=0x%x, id1=0x%x, id2=0x%x",id, id1,id2);
    
	array[0] = 0x00033700;// read esd return 3 bytes
	dsi_set_cmdq(array, 1, 1);	
	MDELAY(10);
	read_reg_v2(0x0A, buffer, 3);    
       check_esd = buffer[0];
       LCM_DBG("lcm_compare_id read check_esd=0x%x",check_esd);
 
       if(LCM_ID_OTM1283 == id)
       {
           IMM_GetOneChannelValue(0, data, &volt);
      	    #ifndef BUILD_LK
      	        printk(" lcm_compare_id tcl_oncell lishengli    volt = %d ", volt);
      	    #else
      	        printf(" lcm_compare_id tcl_onclee lishengli   volt = %d ", volt);
      	    #endif
      
      	    if(volt > 100)
      	 	 return 1;
      	    else
      		return 0;
	}
	else
	    return 0;

	//return (LCM_ID_OTM1283 == id)?1:0;
}                                     
예제 #16
0
int auxadc_test(void ) 
{
   int i = 0, data[4] = {0,0,0,0};
   int res =0;
   int rawdata=0;
   //int Voltiage_cali =0;
   
      for (i = 0; i < 16; i++) 
      {
        //printf("[adc_driver]: i=%d\n",i);
       
		res = IMM_GetOneChannelValue(i,data,&rawdata);
		if(res < 0)
		{ 
			   printf("[adc_lk]: get data error\n");
			   break;
			   
		}
		else
		{
		       printf("[adc_lk]: channel[%d]raw =%d\n",i,rawdata);
		       //printf("[adc_lk]: channel[%d]=%d.%.02d \n",i,data[0],data[1]);
			  
		}
#if 0		
		res= IMM_GetOneChannelValue_Cali(i, &Voltiage_cali);
		if(res < 0)
		{ 
			   printf("[adc_driver]: get cali voltage error\n");
			   break;
			   
		}
		else
		{
		       printf("[adc_driver]: channel[%d] cali_voltage =%d\n",i,Voltiage_cali);
  
		}	
#endif		
      } 


   return 0;
}
static int get_hw_battery2_temp(void)
{
	int data[4], ret_value = 0, ret_temp = 0, output;

	if( IMM_IsAdcInitReady() == 0 )
	{
		mtktsbattery2_dprintk("[thermal_auxadc_get_data]: AUXADC is not ready\n");
		return 0;
	}

	ret_value = IMM_GetOneChannelValue(AUXADC_CHANNEL, data, &ret_temp);
	mtktsbattery2_dprintk("[thermal_auxadc_get_data(ADCIN1)]: ret_temp=%d\n",ret_temp);

	ret_temp = ret_temp*1500/4096;
	output = BattVoltageToTemp(ret_temp);
	mtktsbattery2_dprintk("Battery output temperature mV= %d  %d\n",output, ret_temp);

	return output;
}
예제 #18
0
static unsigned int lcm_adc_read_chip_id()
{
	int data[4] = {0, 0, 0, 0};
	int tmp = 0, rc = 0, iVoltage = 0;
	rc = IMM_GetOneChannelValue(AUXADC_LCD_ID_CHANNEL, data, &tmp);
	if(rc < 0) {
		printf("read LCD_ID vol error--Liu\n");
		return 0;
	}
	else {
		iVoltage = (data[0]*1000) + (data[1]*10) + (data[2]);
		printf("read LCD_ID success, data[0]=%d, data[1]=%d, data[2]=%d, data[3]=%d, iVoltage=%d\n", 
			data[0], data[1], data[2], data[3], iVoltage);
		if(	LCM_MIN_VOLTAGE < iVoltage &&
			iVoltage < LCM_MAX_VOLTAGE)
			return 1;
		else
			return 0;
	}
	return 0;
}
static int thermal_auxadc_get_data(int times, int Channel)
{
	int ret = 0, data[4], i, ret_value = 0, ret_temp = 0;

	if( IMM_IsAdcInitReady() == 0 )
	{
//        mtktscpu_dprintk("[thermal_auxadc_get_data]: AUXADC is not ready\n");
		return 0;
	}

	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		ret += ret_temp;
//		mtktscpu_dprintk("[thermal_auxadc_get_data(ADCIN5)]: ret_temp=%d\n",ret_temp);        
	}

	ret = ret / times;
	return ret;
}
static unsigned int lcm_adc_read_chip_id()
{
	int data[4] = {0, 0, 0, 0};
	int tmp = 0, rc = 0, iVoltage = 0;
	rc = IMM_GetOneChannelValue(AUXADC_LCD_ID_CHANNEL, data, &tmp);
	if(rc < 0) {
		LCM_DBG("read LCD_ID vol error--Liu\n");
		return 0;
	}
	else {
		iVoltage = (data[0]*1000) + (data[1]*10) + (data[2]);
		LCM_DBG("Magnum read LCD_ID success, data[0]=%d, data[1]=%d, data[2]=%d, data[3]=%d, iVoltage=%d\n", data[0], data[1], data[2], data[3], iVoltage);
		if( (LCM_MIN_VOLTAGE == iVoltage) ||(LCM_MIN_VOLTAGE < iVoltage &&iVoltage < LCM_MAX_VOLTAGE))
		{
			LCM_DBG("LCM compare sucessfuell ..+++++++++++++++++\n");
			return 1;
		}
		else
			return 0;
	}
	return 0;
}
예제 #21
0
static int get_hw_bts_temp(void)
{

	int ret = 0, data[4], i, ret_value = 0, ret_temp = 0, output;
	int times=1, Channel=g_RAP_ADC_channel;//6752=0(AUX_IN0_NTC)
	static int valid_temp;

	if( IMM_IsAdcInitReady() == 0 )
	{
        printk("[thermal_auxadc_get_data]: AUXADC is not ready\n");
		return 0;
	}

	i = times;
	while (i--)
	{
		ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
		if (ret_value == -1) // AUXADC is busy
		{
			ret_temp = valid_temp;
		}
		else
		{
			valid_temp = ret_temp;
		}
		ret += ret_temp;
		mtkts_bts_dprintk("[thermal_auxadc_get_data(AUX_IN0_NTC)]: ret_temp=%d\n",ret_temp);
	}

	//Mt_auxadc_hal.c
	//#define VOLTAGE_FULL_RANGE  1500 // VA voltage
	//#define AUXADC_PRECISE      4096 // 12 bits
	ret = ret*1500/4096	;
	//ret = ret*1800/4096;//82's ADC power
	mtkts_bts_dprintk("APtery output mV = %d\n",ret);
	output = mtk_ts_bts_volt_to_temp(ret);
	mtkts_bts_dprintk("BTS output temperature = %d\n",output);
	return output;
}
// zhoulidong  add for lcm detect (start)
static int rgk_lcm_compare_id(void)
{
	int data[4] = {0,0,0,0};
	int res = 0;
	int rawdata = 0;
	int lcm_vol = 0;


#ifdef AUXADC_LCM_VOLTAGE_CHANNEL
	res = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL,data,&rawdata);
	if(res < 0)
	{ 
	#ifdef BUILD_LK
		printf("[adc_uboot]: get data error\n");
	#endif
		return 0;
	}
#endif

	lcm_vol = data[0]*1000+data[1]*10;

#ifdef BUILD_LK
	printf("sym j5010  [adc_uboot]: lcm_vol= %d\n",lcm_vol);
#else
	printk("sym j5010 [adc_uboot]: lcm_vol= %d\n",lcm_vol);
#endif
	if( lcm_compare_id())
	      ;
	else
		return 0;
	
	if (lcm_vol>=MIN_VOLTAGE &&lcm_vol <= MAX_VOLTAGE) 
	{
		return 1;
	}
	else
		return 0;
}
예제 #23
0
static kal_int32 read_adc_v_bat_temp(void *data)
{
#if defined(CONFIG_POWER_EXT)
    *(kal_int32*)(data) = 0;
#else
#if defined(MTK_PCB_TBAT_FEATURE)

    int ret = 0, data[4], i, ret_value = 0, ret_temp = 0;
    int Channel=1;

    if( IMM_IsAdcInitReady() == 0 )
    {
        bm_print(BM_LOG_CRTI, "[get_tbat_volt] AUXADC is not ready");
        return 0;
    }

    i = times;
    while (i--)
    {
        ret_value = IMM_GetOneChannelValue(Channel, data, &ret_temp);
        ret += ret_temp;
        bm_print(BM_LOG_FULL, "[get_tbat_volt] ret_temp=%d\n",ret_temp);
    }

    ret = ret*1500/4096 ;
    ret = ret/times;
    bm_print(BM_LOG_CRTI, "[get_tbat_volt] Battery output mV = %d\n",ret);

    *(kal_int32*)(data) = ret;

#else
    bm_print(BM_LOG_FULL, "[read_adc_v_charger] return PMIC_IMM_GetOneChannelValue(4,times,1);\n");
    *(kal_int32*)(data) = PMIC_IMM_GetOneChannelValue(VBATTEMP_CHANNEL_NUMBER,*(kal_int32*)(data),1);
#endif
#endif

    return STATUS_OK;
}
예제 #24
0
// zhoulidong  add for lcm detect (start)
static unsigned int rgk_lcm_compare_id(void)
{
    int data[4] = {0,0,0,0};
    int res = 0;
    int rawdata = 0;
    int lcm_vol = 0;

#ifdef AUXADC_LCM_VOLTAGE_CHANNEL
    res = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL,data,&rawdata);
    if(res < 0)
    {
    #ifdef BUILD_LK
    printf("[adc_uboot]: get data error\n");
    #endif
    return 0;

    }
#endif
    lcm_vol = data[0]*1000+data[1]*10;


    #ifdef BUILD_LK
    printf("[adc_uboot]: lcm_vol= %d\n",lcm_vol);
    #endif
#if 0
    if (lcm_vol>=MIN_VOLTAGE &&lcm_vol <= MAX_VOLTAGE &&lcm_compare_id())
#else
    if (lcm_vol>=MIN_VOLTAGE &&lcm_vol <= MAX_VOLTAGE)  // remove compare_id func for mt6582 temply by xiaoanxiang 2013-09-05
#endif
    {
    return 1;
    }

    return 0;

}
예제 #25
0
static unsigned int lcm_compare_id(void)
{

#if 1
	int array[4];
	char buffer[5];
	char id_high=0;
	char id_low=0;
	int id=0;

	SET_RESET_PIN(1);
	SET_RESET_PIN(0);
	MDELAY(10);
	SET_RESET_PIN(1);
	MDELAY(200);

	array[0] = 0x00053700;
	dsi_set_cmdq(array, 1, 1);
	read_reg_v2(0xa1, buffer, 5);

	id_high = buffer[2];
	id_low = buffer[3];
	id = (id_high<<8) | id_low;

	#if defined(BUILD_LK)
		printf("OTM8018B CS uboot %s \n", __func__);
		printf("%s id = 0x%08x \n", __func__, id);
	#else
		printk("OTM8018B CS kernel %s \n", __func__);
		printk("%s id = 0x%08x \n", __func__, id);
	#endif

	return (LCM_ID_OTM8019A_CS == id)?1:0;
#else
	int adcdata[4];
	int result = 0;
	int lcmid;
		
	IMM_GetOneChannelValue(1,adcdata,&lcmid);
       #if defined(BUILD_LK)
	printf("Otm8018b channelValue=%d\n",lcmid);
	#else 
        printk("Otm8018b channelValue=%d\n",lcmid);
        #endif

	lcmid = lcmid * 1500/4096; //LiuHuojun 20130503 1500?<C1><D9>??
	#if defined(BUILD_LK)
			printf("Otm8018b uboot %s \n", __func__);
			printf("%s lcmid = %d \n", __func__, lcmid);
	#else
			printk("Otm8018b kernel %s \n", __func__);
			printk("%s lcmid = %d \n", __func__, lcmid);
	#endif
	if(lcmid >800 && lcmid<=1200) //add by liutao for lingda:0V tianma:0.7V
	{
			return 1;
	}
	else
	{
			return 0;
	}
#endif
}
static unsigned int lcm_compare_id(void)
{
#if 0
  	unsigned int ret = 0;

	ret = mt_get_gpio_in(GPIO92);
#if defined(BUILD_LK)
	printf("%s, [jx]hx8394a GPIO92 = %d \n", __func__, ret);
#endif	

	return (ret == 0)?1:0; 
#else
	unsigned int id=0;
	unsigned char buffer[2] = {0,0};
	unsigned int array[16];  

	dct_pmic_VGP2_enable(1);

	mt_set_gpio_mode(GPIO112,GPIO_MODE_00);
	mt_set_gpio_dir(GPIO112,GPIO_DIR_OUT);
	mt_set_gpio_out(GPIO112,GPIO_OUT_ONE);
	MDELAY(5); 
		    
	//SET_RESET_PIN(0);
	mt_set_gpio_out(GPIO112,GPIO_OUT_ZERO);
	MDELAY(50);
			
	//SET_RESET_PIN(1);
	mt_set_gpio_out(GPIO112,GPIO_OUT_ONE);
	MDELAY(105); 

	array[0] = 0x00043902;
	array[1] = 0x9483FFB9;// page enable
	dsi_set_cmdq(&array, 2, 1);
	MDELAY(10);

	array[0] = 0x00023902;
	array[1] = 0x000013BA;       	  
	dsi_set_cmdq(array, 2, 1);
	MDELAY(10);

	array[0] = 0x00013700;// return byte number
	dsi_set_cmdq(&array, 1, 1);
	MDELAY(10);

	read_reg_v2(0xF4, buffer, 1);
	id = buffer[0]; 

	#ifdef BUILD_LK
	printf("[LK]---cmd---hx8394_hd720_dsi_vdo_truly----%s------[0x%x]\n",__func__,buffer[0]);
    #else
	printk("[KERNEL]---cmd---hx8394_hd720_dsi_vdo_truly----%s------[0x%x]\n",__func__,buffer[0]);
    #endif	
	if(id==HX8394_LCM_ID)
	{
		int adcdata[4];
		int lcmadc=0;
		IMM_GetOneChannelValue(0,adcdata,&lcmadc);
		lcmadc = lcmadc * 1500/4096; 
		#ifdef BUILD_LK
		printf("[LK]---cmd---hx8394_hd720_dsi_vdo_truly----%s------adc[%d]\n",__func__,lcmadc);
		#else
		printk("[KERNEL]---cmd---hx8394_hd720_dsi_vdo_truly----%s------adc[%d]\n",__func__,lcmadc);
		#endif	
		if(lcmadc < 200)
			return 1;
	}
	return 0;//(id == HX8394_LCM_ID)?1:0;
#endif
}