/*
 *brief: get lcd control backlight type
 */
hw_lcd_ctrl_bl_type get_hw_lcd_ctrl_bl_type(void)
{
    hw_lcd_ctrl_bl_type ctrl_bl_type = CTRL_BL_BY_UNKNOW;
	/*control backlight by MSM pwm*/
	/* U8661 uses PM pwm. */
	/* C8820VC uses PM pwm. */
	if (machine_is_msm7x27a_umts() || machine_is_msm7x27a_cdma()
		|| machine_is_msm7x27a_U8815() || machine_is_msm7x27a_U8655_EMMC()
		|| machine_is_msm7x27a_U8185() || machine_is_msm7x27a_U8655()
		|| machine_is_msm7x27a_M660()  || machine_is_msm7x27a_U8661()
		|| (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
		)
	{
		ctrl_bl_type = CTRL_BL_BY_MSM;
	}
	/*control backlight by LCD output pwm*/
	else if(machine_is_msm7x27a_C8655_NAND()
	        || (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VA == get_hw_sub_board_id()))
		    || machine_is_msm7x27a_C8825D())
	{
		ctrl_bl_type = CTRL_BL_BY_LCD;
	}
	else
	{
		ctrl_bl_type = CTRL_BL_BY_LCD;
	}

    return ctrl_bl_type;
}
/* get sensors list by product */
static int get_sensors_list(void)
{
	int sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
	/*version A and version B has compass, since version C don't have compass*/
	/*add M866*/
	if( machine_is_msm7x27a_U8661() || ( machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
		  || ( machine_is_msm7x27a_C8655_NAND() && (HW_VER_SUB_VE > get_hw_sub_board_id())) )
	{
	    sensors_list = G_SENSOR + L_SENSOR + P_SENSOR;
	}
	else if (machine_is_msm7x27a_U8655() ||
	    machine_is_msm7x27a_U8655_EMMC()||
	    machine_is_msm7x27a_C8655_NAND() ||
	    machine_is_msm7x27a_M660()||
	    machine_is_msm7x27a_U8815()||
	    machine_is_msm7x27a_C8820()||
	    machine_is_msm7x27a_C8825D())
	{
	    sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
	}
	/* move this part to up */
	else if(machine_is_msm7x27a_U8185())
	{
	    sensors_list = G_SENSOR;
	}
	else
	{
	    sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
	}
	return sensors_list;
}
/*===========================================================================


FUNCTION     get_compass_gs_position

DESCRIPTION
  This function probe which G-sensor & Campass status type should be used

DEPENDENCIES
  
RETURN VALUE
  None

SIDE EFFECTS
  None
===========================================================================*/
compass_gs_position_type  get_compass_gs_position(void)
{
	compass_gs_position_type compass_gs_position=COMPASS_TOP_GS_TOP;
	/* modify compass and gs position by board id */
    //move C8820\25D define from TOP to BOTTOM
	if (machine_is_msm7x27a_surf() 
	 || machine_is_msm7x27a_ffa() 
	 || machine_is_msm7x27a_umts() 
	 || machine_is_msm7x27a_cdma()
	 || machine_is_msm7x27a_U8815()) 
	{
		compass_gs_position=COMPASS_TOP_GS_TOP;
	}
	/*< DTS2012022006500 yangbo 20120220 begin */
	/*version A and version B has compass, since version C don't have compass*/
	else if(machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
	{
		compass_gs_position=COMPASS_NONE_GS_BOTTOM;
	}
	/* DTS2012022006500 yangbo 20120220 end > */
	/* add U8655_EMMC, use the u8655 configuration */
	else if (machine_is_msm7x27a_U8655() 
		  || machine_is_msm7x27a_U8655_EMMC()  
		  || machine_is_msm7x27a_C8655_NAND()  
		  || machine_is_msm7x27a_M660()  
		  || machine_is_msm7x27a_U8661()    
		  || machine_is_msm7x27a_C8820()   
		  || machine_is_msm7x27a_C8825D()
		  || machine_is_msm7x30_u8800()
		  || machine_is_msm7x30_u8820() 
		  || machine_is_msm7x30_u8800_51()
		  || machine_is_msm8255_u8800_pro()
		  || machine_is_msm8255_u8860() 
		  || machine_is_msm8255_c8860() 
		  || machine_is_msm8255_u8860lp()
          /* < DTS2012022905490 ganfan 20120301 begin */
          || machine_is_msm8255_u8860_r()
          /* DTS2012022905490 ganfan 20120301 end > */
		  || machine_is_msm8255_u8860_92()            
		  || machine_is_msm8255_u8860_51())
	{
		compass_gs_position=COMPASS_BOTTOM_GS_BOTTOM;
	}
	else if (machine_is_msm7x27a_U8185())	
	{
		compass_gs_position=COMPASS_NONE_GS_TOP;
	}
	else if(machine_is_msm8255_u8680() 
	     || machine_is_msm8255_u8730())
	{
	    compass_gs_position=COMPASS_TOP_GS_TOP;
	}
	/*< DTS2012022300887 fengwei 20120224 begin */
    else if (machine_is_msm7x27a_C8668D() )	
	{
		compass_gs_position = COMPASS_BOTTOM_GS_TOP;
	}
	/* DTS2012022300887 fengwei 20120224 end >*/
	return compass_gs_position;
}
/*===========================================================================


FUNCTION     get_compass_gs_position

DESCRIPTION
  This function probe which G-sensor & Campass status type should be used

DEPENDENCIES
  
RETURN VALUE
  None

SIDE EFFECTS
  None
===========================================================================*/
compass_gs_position_type  get_compass_gs_position(void)
{
	compass_gs_position_type compass_gs_position=COMPASS_TOP_GS_TOP;
	/* modify compass and gs position by board id */
    //move C8820\25D define from TOP to BOTTOM
    if (machine_is_msm7x27a_surf() 
        || machine_is_msm7x27a_ffa() 
        || machine_is_msm7x27a_U8815()
        || machine_is_msm8x25_C8950D()
        || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VB <= get_hw_sub_board_id()))
        || machine_is_msm8x25_U8950D()
        )
	{
		compass_gs_position=COMPASS_TOP_GS_TOP;
	}
	/*version A and version B has compass, since version C don't have compass*/
	else if(machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
	{
		compass_gs_position=COMPASS_NONE_GS_BOTTOM;
	}
	/* add U8655_EMMC, use the u8655 configuration */
	else if (machine_is_msm7x27a_U8655() 
		  || machine_is_msm7x27a_U8655_EMMC()  
		  || machine_is_msm7x27a_C8655_NAND()  
		  || machine_is_msm7x27a_M660()  
		  || machine_is_msm7x27a_U8661()    
		  || machine_is_msm7x27a_C8820()   
		  || machine_is_msm8x25_C8825D()
		  || machine_is_msm7x30_u8800()
		  || machine_is_msm7x30_u8820() 
		  || machine_is_msm7x30_u8800_51()
		  || machine_is_msm8255_u8800_pro()
		  || machine_is_msm8255_u8860() 
		  || machine_is_msm8255_c8860()
		  || machine_is_msm8x25_U8825()
          || machine_is_msm8x25_U8825D()
		  || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VA == get_hw_sub_board_id()))
		  || machine_is_msm8255_u8860lp()
          || machine_is_msm8255_u8860_r()
		  || machine_is_msm8255_u8860_92()            
		  || machine_is_msm8255_u8860_51())
	{
		compass_gs_position=COMPASS_BOTTOM_GS_BOTTOM;
	}
	else if (machine_is_msm7x27a_U8185())	
	{
		compass_gs_position=COMPASS_NONE_GS_TOP;
	}
	else if(machine_is_msm8255_u8680() 
	     || machine_is_msm8255_u8730())
	{
	    compass_gs_position=COMPASS_TOP_GS_TOP;
	}
    else if (machine_is_msm7x27a_C8668D() )	
	{
		compass_gs_position = COMPASS_BOTTOM_GS_TOP;
	}
	return compass_gs_position;
}
/* C8820VC uses PM pwm. */
hw_lcd_ctrl_bl_type get_hw_lcd_ctrl_bl_type(void)
{
    hw_lcd_ctrl_bl_type ctrl_bl_type = CTRL_BL_BY_UNKNOW;
	/*< DTS2012021602342 zhongjinrong 20120224 begin */
	/*control backlight by MSM pwm*/
	/*< DTS2012022300887 fengwei 20120224 begin */
	/* C8668D uses PM pwm. */
	if (machine_is_msm7x27a_umts() 
		|| machine_is_msm7x27a_cdma()
		|| machine_is_msm7x27a_U8815() 
		|| machine_is_msm7x27a_U8655_EMMC()
		|| machine_is_msm7x27a_U8185() 
		|| machine_is_msm7x27a_U8655()
		|| machine_is_msm7x27a_M660()
		|| machine_is_msm7x30_u8800()
		|| machine_is_msm7x30_u8820() 
		|| machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro()
		|| machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860()
		|| machine_is_msm8255_u8860_92()
		|| (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
		||machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D() 
		)
	/* DTS2012022300887 fengwei 20120224 end >*/
		/* DTS2012021602342 zhongjinrong 20120224 end >*/
	{
		ctrl_bl_type = CTRL_BL_BY_MSM;
	}
	/*control backlight by LCD output pwm*/
/*< DTS2012021007223 lijianzhao 20120211 begin */
	else if(machine_is_msm7x27a_C8655_NAND()
		|| (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VA == get_hw_sub_board_id()))
		|| machine_is_msm7x27a_C8825D()
        /* < DTS2012022905490 ganfan 20120301 begin */
        || machine_is_msm8255_u8860_r()
        /* DTS2012022905490 ganfan 20120301 end > */
		|| machine_is_msm8255_u8860lp()
		|| machine_is_msm8255_u8860_51()
		/*< DTS2012042605475 zhongjinrong 20120426 begin  */
		|| machine_is_msm8255_u8667()
     	|| machine_is_msm8255_u8680()
	 	|| machine_is_msm8255_u8730())
		/* DTS2012042605475 zhongjinrong 20120426 end >*/
/* DTS2012021007223 lijianzhao 20120211 end >*/
	{
		ctrl_bl_type = CTRL_BL_BY_LCD;
	}
	else
	{
		ctrl_bl_type = CTRL_BL_BY_LCD;
	}
    return ctrl_bl_type;
}
/*
 *brief: get lcd panel resolution
 */
lcd_type get_hw_lcd_resolution_type(void)
{
    lcd_type lcd_resolution = LCD_IS_HVGA;

	if ( machine_is_msm7x27a_U8815() || machine_is_msm7x27a_C8820()
		|| machine_is_msm7x27a_C8825D() )
	{
		lcd_resolution = LCD_IS_WVGA;
	}
	/* U8661 uses HVGA */
	else if ( machine_is_msm7x27a_M660() || machine_is_msm7x27a_U8655()	
		|| machine_is_msm7x27a_U8655_EMMC()|| machine_is_msm7x27a_C8655_NAND()
		|| machine_is_msm7x27a_U8661())
	{
		lcd_resolution = LCD_IS_HVGA;
	}
	else if (machine_is_msm7x27a_U8185())
	{
		lcd_resolution = LCD_IS_QVGA;
	}
	else
	{
		lcd_resolution = LCD_IS_HVGA;
	}
   
    return lcd_resolution;
}
/* C8820VC uses PM pwm. */
hw_lcd_ctrl_bl_type get_hw_lcd_ctrl_bl_type(void)
{
    hw_lcd_ctrl_bl_type ctrl_bl_type = CTRL_BL_BY_UNKNOW;
	/*control backlight by MSM pwm*/
	/* C8668D uses PM pwm. */
	if (machine_is_msm7x27a_U8815() 
		|| machine_is_msm7x27a_U8655_EMMC()
		|| machine_is_msm7x27a_U8185() 
		|| machine_is_msm7x27a_U8655()
		|| machine_is_msm7x27a_M660()
		|| machine_is_msm7x27a_H867G()
		|| machine_is_msm7x27a_H868C()
		|| machine_is_msm7x30_u8800()
		|| machine_is_msm7x30_u8820() 
		|| machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro()
		|| machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860()
		|| machine_is_msm8255_u8860_92()
		|| (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
		||machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D() 
		)
	{
		ctrl_bl_type = CTRL_BL_BY_MSM;
	}
	/*control backlight by LCD output pwm*/
	else
	{
		ctrl_bl_type = CTRL_BL_BY_LCD;
	}
    return ctrl_bl_type;
}
/* enable C8825D and U8825 huawei fir */
audio_property_type get_audio_fir_enabled(void)
{
    /* add the fir enabl for C8833D U8833D U8833 */
    /* add the fir for c8812e */
    /* add fir enable for G510U */
    if(machine_is_msm8x25_C8825D()
       || machine_is_msm8x25_U8825D()
       || machine_is_msm8x25_U8825()
       || machine_is_msm8x25_C8813()
       || machine_is_msm8x25_U8951()
       || machine_is_msm8x25_U8951D()
       || machine_is_msm8x25_H881C()
       || machine_is_msm8x25_C8812P()
       || machine_is_msm7x27a_C8820()
       || machine_is_msm7x27a_H867G()
       || machine_is_msm7x27a_H868C()
       || machine_is_msm8x25_C8833D()
       || machine_is_msm8x25_U8833D()
       || machine_is_msm8x25_U8833()
       )
    {
        return FIR_ENABLE;
    }
    else
    {
        return FIR_DISABLE;
    }
}
/*===========================================================================


FUNCTION     audio_property_type get_audio_mic_type

DESCRIPTION
       This function descripe the fluence of dual mic arithmetic is enable or disable

DEPENDENCIES
  
RETURN VALUE
  SINGLE_MIC  or DUAL_MIC

SIDE EFFECTS
  None
===========================================================================*/
audio_property_type get_audio_mic_type(void)
{
  if(machine_is_msm7x27a_U8185()
     || (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
     || machine_is_msm8x25_U8825()
     || machine_is_msm8x25_U8825D()
     || machine_is_msm8x25_C8950D()
     || machine_is_msm8x25_U8950()
     || machine_is_msm8x25_U8950D()
     || machine_is_msm8x25_C8825D()
     || machine_is_msm8x25_C8833D()
     || machine_is_msm8x25_U8951D()
     || machine_is_msm8x25_U8951()
     || machine_is_msm8x25_U8833D()
     || machine_is_msm8x25_U8833()     
     || machine_is_msm8x25_C8813()
     || machine_is_msm8x25_C8812P()
    )
  {
      return SINGLE_MIC;
  }
  else
  {
      return DUAL_MIC;
  }  
}
/*  FUNCTION  get_hw_sd_trigger_type
 *  DESCRIPTION 
 *      get the bt wakeup gpio type
 *
 *  RETURN VALUE
 *       the gpio number
 */
hw_bt_wakeup_gpio_type get_hw_bt_wakeup_gpio_type(void)
{
    hw_bt_wakeup_gpio_type bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_NONES;
    hw_ver_sub_type ver_sub_type = HW_VER_SUB_MAX;
    ver_sub_type = get_hw_sub_board_id();
	/* U8825 use qcom bt, does not need BT_WAKEUP_GPIO */
    if (machine_is_msm7x27a_U8815()
        || machine_is_msm7x27a_U8655()
        || machine_is_msm7x27a_U8655_EMMC()
        || machine_is_msm7x27a_C8668D())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm8x25_C8950D()
        || machine_is_msm8x25_U8950()
        || machine_is_msm7x27a_H867G()
        || machine_is_msm7x27a_H868C()
        || machine_is_msm8x25_H881C()
        || machine_is_msm8x25_U8950D())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
    }
    else if (machine_is_msm7x27a_C8655_NAND())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_M660())
    {
        if (ver_sub_type > HW_VER_SUB_VA)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8820())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    /* C8825D use qcom bt, does not need BT_WAKEUP_GPIO, and move C8668D above */
    	
    printk(KERN_INFO "the bt_wakeup_gpio_type is %d\n", bt_wakeup_gpio_type);
    return bt_wakeup_gpio_type;
}
/*  FUNCTION  get_hw_sd_trigger_type
 *  DESCRIPTION 
 *      get the bt wakeup gpio type
 *
 *  RETURN VALUE
 *       the gpio number
 */
hw_bt_wakeup_gpio_type get_hw_bt_wakeup_gpio_type(void)
{
    hw_bt_wakeup_gpio_type bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_NONES;
    hw_ver_sub_type ver_sub_type = HW_VER_SUB_MAX;
    ver_sub_type = get_hw_sub_board_id();
	
    if (machine_is_msm7x27a_U8815())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm7x27a_U8655())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm7x27a_U8655_EMMC())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm7x27a_C8655_NAND())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_M660())
    {
        if (ver_sub_type > HW_VER_SUB_VA)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8820())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8825D())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    	
    printk(KERN_INFO "the bt_wakeup_gpio_type is %d\n", bt_wakeup_gpio_type);
    return bt_wakeup_gpio_type;
}
/*
 *brief: get lcd panel resolution
 */
lcd_type get_hw_lcd_resolution_type(void)
{
    lcd_type lcd_resolution = LCD_IS_HVGA;

/*< DTS2012020306500 lijianzhao 20120204 begin */
/* add 8x55 paltform products */
	if ( machine_is_msm7x27a_U8815() 
		|| machine_is_msm7x27a_C8820()
		|| machine_is_msm7x27a_C8825D()
		|| machine_is_msm7x30_u8800()
		|| machine_is_msm7x30_u8820() 
		|| machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro()
		|| machine_is_msm8255_u8680()
		|| machine_is_msm8255_u8730())
	{
		lcd_resolution = LCD_IS_WVGA;
	}
	else if (machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860() 
		|| machine_is_msm8255_u8860lp()
        /* < DTS2012022905490 ganfan 20120301 begin */
        || machine_is_msm8255_u8860_r()
        /* DTS2012022905490 ganfan 20120301 end > */
		|| machine_is_msm8255_u8860_92()
		|| machine_is_msm8255_u8860_51())
	{
		lcd_resolution = LCD_IS_FWVGA;
	}
/* DTS2012020306500 lijianzhao 20120204 end >*/
/*< DTS2012021602342 zhongjinrong 20120224 begin */
/*< DTS2012021007223 lijianzhao 20120211 begin */
	/*< DTS2012022300887 fengwei 20120224 begin */
	/* C8668D uses HVGA. */
	else if ( machine_is_msm7x27a_M660() 
		|| machine_is_msm7x27a_U8655()	
		|| machine_is_msm7x27a_U8655_EMMC()
		|| machine_is_msm7x27a_C8655_NAND()
		|| machine_is_msm8255_u8667()
		|| machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D())
	/* DTS2012022300887 fengwei 20120224 end >*/
/* DTS2012021007223 lijianzhao 20120211 end >*/
/* DTS2012021602342 zhongjinrong 20120224 end >*/
	{
		lcd_resolution = LCD_IS_HVGA;
	}
	else if (machine_is_msm7x27a_U8185())
	{
		lcd_resolution = LCD_IS_QVGA;
	}
	else
	{
		lcd_resolution = LCD_IS_HVGA;
	}

    return lcd_resolution;
}
/*
 *brief: get lcd panel resolution
 */
lcd_type get_hw_lcd_resolution_type(void)
{
    lcd_type lcd_resolution = LCD_IS_HVGA;

/* add 8x55 paltform products */
    /*delete some lines for changing the lcd resolution of C8950D/U8950*/
    if ( machine_is_msm7x27a_U8815() 
        || machine_is_msm8x25_U8825()
        || machine_is_msm8x25_U8825D()
        || machine_is_msm7x27a_C8820()
        || machine_is_msm8x25_C8825D()
        || machine_is_msm7x30_u8800()
        || machine_is_msm7x30_u8820() 
        || machine_is_msm7x30_u8800_51() 
        || machine_is_msm8255_u8800_pro()
        || machine_is_msm8255_u8680()
        || machine_is_msm8255_u8730())
	{
		lcd_resolution = LCD_IS_WVGA;
	}
	else if (machine_is_msm8x25_C8950D()
		|| machine_is_msm8x25_U8950()
		|| machine_is_msm8x25_U8950D())
	{
		lcd_resolution = LCD_IS_QHD;
	}
	else if (machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860() 
		|| machine_is_msm8255_u8860lp()
        || machine_is_msm8255_u8860_r()
		|| machine_is_msm8255_u8860_92()
		|| machine_is_msm8255_u8860_51())
	{
		lcd_resolution = LCD_IS_FWVGA;
	}
	/* C8668D uses HVGA. */
	else if ( machine_is_msm7x27a_M660() 
		|| machine_is_msm7x27a_U8655()	
		|| machine_is_msm7x27a_U8655_EMMC()
		|| machine_is_msm7x27a_C8655_NAND()
		|| machine_is_msm8255_u8667()
		|| machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D())
	{
		lcd_resolution = LCD_IS_HVGA;
	}
	else if (machine_is_msm7x27a_U8185())
	{
		lcd_resolution = LCD_IS_QVGA;
	}
	else
	{
		lcd_resolution = LCD_IS_HVGA;
	}

    return lcd_resolution;
}
/*  FUNCTION  get_hw_ds_type
 *  DEPENDENCIES 
 *      get single sim card or double sim card,
 *      affect led.
 *  RETURN VALUE
 *      single sim card:sim card type HW_NODS 
 *      double sim card:sim card type HW_DS
 */
hw_ds_type get_hw_ds_type(void)
{
    hw_ds_type ret = HW_NONES;
    if( machine_is_msm7x27a_C8820() || machine_is_msm7x27a_C8825D() || machine_is_msm7x27a_U8661())
    {
	    ret = HW_DS;
    }
    else
    {
      ret = HW_NODS;
    }
  return ret;
}
/* add C8820VC for SINGLE_MIC */
audio_property_type get_audio_mic_type(void)
{
  if(machine_is_msm7x27a_U8185() || machine_is_msm7x27a_U8661()
     || (machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()))
	 )
  {
      return SINGLE_MIC;
  }
  else
  {
      return DUAL_MIC;
  }  
}
/* if you want to enable fir function, please return FIR_ENABLE for adapted project */
audio_property_type get_audio_fir_enabled(void)
{
    /* < DTS2012040701964 taohanwen 20120407 begin */
    if (machine_is_msm7x27a_C8820())
    {
        return FIR_ENABLE;
    }
    else
    {
        return FIR_DISABLE;
    }
    /* DTS2012040701964 taohanwen 20120407 end > */
}
hw_camera_type get_hw_camera_mirror_type(void)
{
    hw_camera_type ret = HW_CAMERA_NONES;
    if( machine_is_msm7x27a_C8820() || machine_is_msm7x27a_U8661())
    {
        ret = HW_MIRROR_AND_FLIP;
    }
    else
    {
      ret = HW_NOT_MIRROR_OR_FLIP;
    }
  return ret;
}
/*return config array for tp performance*/
unsigned char * get_config_array()
{
	if (machine_is_msm7x27a_C8820() 
		|| machine_is_msm7x27a_C8825D() )		
	{
		return get_c8820_config_array();
	}
	else if (machine_is_msm7x27a_C8655_NAND())
	{
		return get_c8655_config_array();
	}
	else if (machine_is_msm7x27a_M660())
	{
		return get_m660_config_array();
	}

	return NULL;	
}
hw_camera_type get_hw_camera_mirror_type(void)
{
    hw_camera_type ret = HW_NOT_MIRROR_OR_FLIP;
    if( machine_is_msm7x27a_C8820() || machine_is_msm7x27a_U8661() 
    || machine_is_msm7x27a_U8655_EMMC()
    || machine_is_msm7x27a_H867G()
    || machine_is_msm7x27a_H868C())
    {
        /*back camera should mirror and flip*/
        ret |= HW_MIRROR_AND_FLIP;
    }
    if(machine_is_msm8x25_U8951()
    ||machine_is_msm8x25_U8951D())
    {
        /*front camera should mirror and flip*/
        ret |= HW_MIRROR_AND_FLIP << 1;
    }
  return ret;
}
/*  FUNCTION  get_hw_ds_type
 *  DEPENDENCIES 
 *      get single sim card or double sim card,
 *      affect led.
 *  RETURN VALUE
 *      single sim card:sim card type HW_NODS 
 *      double sim card:sim card type HW_DS
 */
hw_ds_type get_hw_ds_type(void)
{
    hw_ds_type ret = HW_NONES;
	/*add C8668D type*/
    if( machine_is_msm7x27a_C8820()
      || machine_is_msm8x25_C8825D()
      || machine_is_msm8x25_U8825()
      || machine_is_msm8x25_U8825D()
      || machine_is_msm8x25_U8950D()
	  || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VB <= get_hw_sub_board_id()))
      || machine_is_msm7x27a_U8661()
      || machine_is_msm7x27a_C8668D())
    {
	    ret = HW_DS;
    }
    else
    {
      ret = HW_NODS;
    }
  return ret;
}
/*  FUNCTION  get_hw_ds_type
 *  DEPENDENCIES 
 *      get single sim card or double sim card,
 *      affect led.
 *  RETURN VALUE
 *      single sim card:sim card type HW_NODS 
 *      double sim card:sim card type HW_DS
 */
hw_ds_type get_hw_ds_type(void)
{
    hw_ds_type ret = HW_NONES;
    /* < DTS2011122105081  niguodong 20111222 begin */
	/*< DTS2012022300887 fengwei 20120224 begin */
	/*add C8668D type*/
    if( machine_is_msm7x27a_C8820()
 	  || machine_is_msm7x27a_C8825D() 
	  || machine_is_msm7x27a_U8661()
	  || machine_is_msm7x27a_C8668D())
	/* DTS2012022300887 fengwei 20120224 end >*/
    /* DTS2011122105081  niguodong 20111222 end > */
    {
	    ret = HW_DS;
    }
    else
    {
      ret = HW_NODS;
    }
  return ret;
}
lcd_panel_type get_lcd_panel_type(void)
{
	lcd_panel_type hw_lcd_panel = LCD_NONE;

	if ( machine_is_msm7x30_u8800()
		|| machine_is_msm7x30_u8820() 
		|| machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:  
				hw_lcd_panel = LCD_NT35582_BYD_WVGA;
				break;
			case LCD_HW_ID1:  
				hw_lcd_panel = LCD_NT35582_TRULY_WVGA;
				break;
			case LCD_HW_ID2:  
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA;
				break;
			case LCD_HW_ID3:  
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA_TYPE2;
				break;
			default : 
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA;
				break;					  
		}
	}
	else if (machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860() 
		|| machine_is_msm8255_u8860lp()
        || machine_is_msm8255_u8860_r()
		|| machine_is_msm8255_u8860_92()
		|| machine_is_msm8255_u8860_51())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_NT35560_TOSHIBA_FWVGA;
				break;
			default : 
				hw_lcd_panel = LCD_NT35560_TOSHIBA_FWVGA;
				break;					  
		}
	}
	else if( machine_is_msm8255_u8680()
		|| machine_is_msm8255_u8730())

	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MDDI_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MDDI_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MDDI_RSP61408_BYD_WVGA;
				break;
			default : 
				hw_lcd_panel = MDDI_RSP61408_CHIMEI_WVGA;
				break;
		}
	}
	else if( machine_is_msm8255_u8667())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_HVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = MDDI_HX8357C_TIANMA_HVGA;
				break;
			default:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_HVGA;
				break;		
		}
	}
    /*delete some lines for changing the lcd panel type of C8950D/U8950D*/
    else if( machine_is_msm7x27a_U8815() 
        || machine_is_msm7x27a_C8820()
        || machine_is_msm8x25_U8825()
        || machine_is_msm8x25_U8825D()
        || machine_is_msm8x25_C8825D()
        )
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MIPI_RSP61408_BYD_WVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = MIPI_RSP61408_TRULY_WVGA;
				break;
			default:
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = MIPI_RSP61408_CHIMEI_WVGA;
				break;
		}
	}
	else if (machine_is_msm8x25_C8950D()
		|| machine_is_msm8x25_U8950()
		|| machine_is_msm8x25_U8950D())  
	{
		switch (lcd_id)
		{
			case LCD_HW_ID3:
				hw_lcd_panel = MIPI_NT35516_TIANMA_QHD;
				break;
			default: 
				hw_lcd_panel = MIPI_NT35516_TIANMA_QHD;
				break;
		}
	}
	else if( machine_is_msm7x27a_U8655() 
		|| machine_is_msm7x27a_U8655_EMMC() 
		|| machine_is_msm7x27a_C8655_NAND()
		|| machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_HVGA;
				break;
			case LCD_HW_ID1:
			    hw_lcd_panel = MIPI_HX8357C_TIANMA_IPS_HVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = MIPI_HX8357C_TIANMA_HVGA;
				break;
			default: 
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		}
	}
	else if( machine_is_msm7x27a_U8185())
	{
		switch(lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_HX8347D_TRULY_QVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = LCD_HX8347D_CHIMEI_QVGA;
				break;
			default:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
		}
	}
	else if(machine_is_msm7x27a_M660())
	{
		switch(lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
			default:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
		}
	}
	else
	{
		hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
	}
	return hw_lcd_panel;
}
Example #23
0
/*configure GPIO 25 Of PIMIC as PWM to driver LED*/
int led_pwm_gpio_config(void)
{
    int rc;
    struct pm_gpio backlight_drv = 
    {
        .direction      = PM_GPIO_DIR_OUT,
        .output_buffer  = PM_GPIO_OUT_BUF_CMOS,
        .output_value   = 0,
        .pull           = PM_GPIO_PULL_NO,
        .vin_sel        = 0,
        .out_strength   = PM_GPIO_STRENGTH_HIGH,
        .function       = PM_GPIO_FUNC_2,
        .inv_int_pol 	= 1,
    };
    if(machine_is_msm8255_u8860lp()
    || machine_is_msm8255_u8860_r()
	 ||machine_is_msm8255_u8860_51())
    {
        rc = pm8xxx_gpio_config( 24, &backlight_drv);
    }
    else
    {
        rc = -1;
    }
	
    if (rc) 
    {
        pr_err("%s LED backlight GPIO config failed\n", __func__);
        return rc;
    }
    return 0;
}
#endif

static void msm_keypad_bl_led_set(struct led_classdev *led_cdev,
	enum led_brightness value)
{
#ifdef CONFIG_HUAWEI_LEDS_PMIC
    int ret = 0;
/* 7x27a platform use mpp7 as keypad backlight */
	#ifdef CONFIG_ARCH_MSM7X27A
	    if(machine_is_msm7x27a_C8820())
	    {
	        ret = pmic_secure_mpp_config_i_sink(PM_MPP_7, PM_MPP__I_SINK__LEVEL_5mA, \
	            (!!value) ? PM_MPP__I_SINK__SWITCH_ENA : PM_MPP__I_SINK__SWITCH_DIS);
	    }
	    else
	    {
	        /* use pwm to control the brightness of keypad backlight*/
	        /* make sure the led is drived by pwm when */
	        /* the system sleep indicator switch is on */
	        pmapp_button_backlight_init();

	        ret = pmapp_button_backlight_set_brightness(value);
	    }
	#else
	    if(machine_is_msm7x30_u8800() || machine_is_msm7x30_u8800_51() || machine_is_msm8255_u8800_pro() ) 
	    {
	      ret = pmic_set_led_intensity(LED_KEYPAD, !( ! value));
	    }
	    else if( machine_is_msm8255_u8860lp()	
        || machine_is_msm8255_u8860_r()
		       ||machine_is_msm8255_u8860_51())
	    {
	        pwm_config(bl_pwm, LED_PWM_DUTY_LEVEL*value/NSEC_PER_USEC, LED_PWM_PERIOD/NSEC_PER_USEC);
	        pwm_enable(bl_pwm);
	    }
	    else if(machine_is_msm7x30_u8820()
		    || (machine_is_msm8255_u8730()))
	    {   
	      ret = pmic_set_mpp6_led_intensity(!( ! value));
	    }
		/*< when the value between 0 and 255,set the key brightness is LED_BRIGHRNESS_LEVEL or set the brightness is 0 */
		else if( machine_is_msm8255_u8860() 
		      || machine_is_msm8255_c8860() 
			  || machine_is_msm8255_u8860_92())
		{
	       if(LED_BRIGHTNESS_OFF >= value || LED_PWM_LEVEL < value )
	       {
		   	   ret = pmic_set_keyled_intensity(LED_KEYPAD,LED_BRIGHTNESS_OFF  );
	       }
		   else 
		   {
		   	   ret = pmic_set_keyled_intensity(LED_KEYPAD, LED_BRIGHTNESS_LEVEL);
		   }
		}
    else if(machine_is_msm8255_u8680())
    {   
	    /* Set keypad led brightness level 12 for U8680 */
        if(LED_BRIGHTNESS_OFF >= value || LED_PWM_LEVEL < value)
        {
            ret = pmic_set_keyled_intensity(LED_KEYPAD,LED_BRIGHTNESS_OFF);
        }
        else 
        {
            ret = pmic_set_keyled_intensity(LED_KEYPAD, LED_BRIGHTNESS_LEVEL_U8680);
        }	
    }
    else if(machine_is_msm8255_u8667())
    {   
        /* Set keypad led brightness level 16 for U8667 */
        if(LED_BRIGHTNESS_OFF >= value || LED_PWM_LEVEL < value)
        {
            ret = pmic_set_keyled_intensity(LED_KEYPAD, LED_BRIGHTNESS_OFF);
        }
        else 
        {
            ret = pmic_set_keyled_intensity(LED_KEYPAD, LED_BRIGHTNESS_LEVEL_U8667);
        }	
    }
	#endif
    if (ret)
		dev_err(led_cdev->dev, "can't set keypad backlight\n");
#else
	int ret;

	ret = pmic_set_led_intensity(LED_KEYPAD, value / MAX_KEYPAD_BL_LEVEL);
	if (ret)
		dev_err(led_cdev->dev, "can't set keypad backlight\n");
#endif
}
lcd_panel_type get_lcd_panel_type(void)
{
	lcd_panel_type hw_lcd_panel = LCD_NONE;

	if ( machine_is_msm7x30_u8800()
		|| machine_is_msm7x30_u8820() 
		|| machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:  
				hw_lcd_panel = LCD_NT35582_BYD_WVGA;
				break;
			case LCD_HW_ID1:  
				hw_lcd_panel = LCD_NT35582_TRULY_WVGA;
				break;
			case LCD_HW_ID2:  
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA;
				break;
			case LCD_HW_ID3:  
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA_TYPE2;
				break;
			default : 
				hw_lcd_panel = LCD_NT35510_ALPHA_SI_WVGA;
				break;					  
		}
	}
	else if (machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860() 
		|| machine_is_msm8255_u8860lp()
        /* < DTS2012022905490 ganfan 20120301 begin */
        || machine_is_msm8255_u8860_r()
        /* DTS2012022905490 ganfan 20120301 end > */
		|| machine_is_msm8255_u8860_92()
		|| machine_is_msm8255_u8860_51())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_NT35560_TOSHIBA_FWVGA;
				break;
			default : 
				hw_lcd_panel = LCD_NT35560_TOSHIBA_FWVGA;
				break;					  
		}
	}
	else if( machine_is_msm8255_u8680()
		|| machine_is_msm8255_u8730())

	{
/*< DTS2012021007223 lijianzhao 20120211 begin */
/*< DTS2012021602342 zhongjinrong 20120224 begin */
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MDDI_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MDDI_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MDDI_RSP61408_BYD_WVGA;
				break;
			/*< DTS2012042605475 zhongjinrong 20120426 begin  */
			/* <DTS2012030102766 sunkai 20120301 begin */
            case LCD_HW_ID3:
                hw_lcd_panel = MDDI_RSP61408_TRULY_WVGA;
                break;
			/* DTS2012030102766 sunkai 20120301 end> */
			/* DTS2012042605475 zhongjinrong 20120426 end >*/
			default : 
				hw_lcd_panel = MDDI_RSP61408_CHIMEI_WVGA;
				break;
		}
/* DTS2012021602342 zhongjinrong 20120224 end >*/
	}
	else if( machine_is_msm8255_u8667())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_HVGA;
				break;
			/*< DTS2012042605475 zhongjinrong 20120426 begin  */
			/*< DTS2012022401352 qitongliang 20120224 begin */
			case LCD_HW_ID1:
				hw_lcd_panel = MDDI_HX8357C_TIANMA_IPS_HVGA;
				break;
			/* DTS2012022401352 qitongliang 20120224 end >*/
			/* DTS2012042605475 zhongjinrong 20120426 end >*/

			case LCD_HW_ID2:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = MDDI_HX8357C_TIANMA_HVGA;
				break;
			default:
				hw_lcd_panel = MDDI_HX8357C_CHIMEI_HVGA;
				break;		
		}
	}
/* DTS2012021007223 lijianzhao 20120211 end >*/
	else if( machine_is_msm7x27a_umts()
		|| machine_is_msm7x27a_cdma())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_NT35560_TOSHIBA_FWVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
			default:
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		}

	}
	else if( machine_is_msm7x27a_U8815() 
		|| machine_is_msm7x27a_C8820()
		|| machine_is_msm7x27a_C8825D() )

	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MIPI_RSP61408_BYD_WVGA;
				break;
			/* <DTS2012022501992 liguosheng 20120229 begin */
			case LCD_HW_ID3:
				hw_lcd_panel = MIPI_RSP61408_TRULY_WVGA;
				break;
			/* DTS2012022501992 liguosheng 20120229 end> */
			default:
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		}
	}

	/*< DTS2012022300887 fengwei 20120224 begin */
	else if( machine_is_msm7x27a_U8655() 
		|| machine_is_msm7x27a_U8655_EMMC() 
		|| machine_is_msm7x27a_C8655_NAND()
		|| machine_is_msm7x27a_U8661()
		|| machine_is_msm7x27a_C8668D())
	/* DTS2012022300887 fengwei 20120224 end >*/
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_HVGA;
				break;
			/* <DTS2012022501992 liguosheng 20120229 begin */
			case LCD_HW_ID1:
			    hw_lcd_panel = MIPI_HX8357C_TIANMA_IPS_HVGA;
				break;
			/* DTS2012022501992 liguosheng 20120229 end> */
			case LCD_HW_ID2:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = MIPI_HX8357C_TIANMA_HVGA;
				break;
			default: 
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		}
	}
	else if( machine_is_msm7x27a_U8185())
	{
		switch(lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_HX8347D_TRULY_QVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
			case LCD_HW_ID3:
				hw_lcd_panel = LCD_HX8347D_CHIMEI_QVGA;
				break;
			default:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
		}
	}
	else if(machine_is_msm7x27a_M660())
	{
		switch(lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
			default:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
		}
	}
	else
	{
		hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
	}
	return hw_lcd_panel;
}
/*modify lcd name*/
lcd_panel_type get_lcd_panel_type(void)
{
	lcd_panel_type hw_lcd_panel = LCD_NONE;
	/*remove two products to adjust new LCD type*/
	/* separate Y300 from 8825 serials and make sure it can run BOE LCD well */
	/* Add Oem LCD driver */
	if ( machine_is_msm8x25_C8833D() 
		|| machine_is_msm8x25_U8833D()	
		|| machine_is_msm8x25_U8833()
	)
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_OTM8009A_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID2:
				hw_lcd_panel = MIPI_VIDEO_HX8369B_TIANMA_WVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
			/*Add nt35512 video mode for byd*/
			case LCD_HW_ID6:
				hw_lcd_panel = MIPI_VIDEO_NT35512_BYD_WVGA;
				break;
			/*Add otm8018b for video mode*/
			case LCD_HW_ID8:
				hw_lcd_panel = MIPI_VIDEO_OTM8018B_CHIMEI_WVGA;
				break;
			/*Add nt35512 for video mode*/
			case LCD_HW_ID9:
				hw_lcd_panel = MIPI_VIDEO_NT35512_BOE_WVGA;
				break;
            case LCD_HW_IDA:
                hw_lcd_panel = MIPI_CMD_NT35510_CHIMEI_WVGA;
				break;
			default:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
		}
	}
	else if (machine_is_msm8x25_H881C())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_NT35510_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
			default:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
		}
	}
	else if(  machine_is_msm8x25_U8825()
		|| machine_is_msm8x25_U8825D()	
		|| machine_is_msm8x25_C8825D()
		|| machine_is_msm8x25_C8812P()
	)
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID4:
				hw_lcd_panel = MIPI_CMD_RSP61408_BYD_WVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_RSP61408_TRULY_WVGA;
				break;
			case LCD_HW_IDA:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
			default:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_WVGA;
				break;
		}
	}
	else if (machine_is_msm8x25_C8950D()
		|| machine_is_msm8x25_U8950()
		|| machine_is_msm8x25_U8950D())  
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_NT35516_CHIMEI_QHD;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_NT35516_TIANMA_QHD;
				break;
			default: 
				hw_lcd_panel = MIPI_CMD_NT35516_TIANMA_QHD;
				break;
		}
	}
	else if ( machine_is_msm8x25_U8951D()
        || machine_is_msm8x25_C8813()
		|| machine_is_msm8x25_U8951())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_NT35510_BOE_FWVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_FWVGA;
				break;
			case LCD_HW_ID4:
				hw_lcd_panel = MIPI_CMD_OTM8009A_CHIMEI_FWVGA;
				break;
			default:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_FWVGA;
				break;
		}
	}
	else if( machine_is_msm7x27a_U8815() 
		|| machine_is_msm7x27a_C8820())

	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_RSP61408_CHIMEI_WVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_HX8369A_TIANMA_WVGA;
				break;
			case LCD_HW_ID4:
				hw_lcd_panel = MIPI_CMD_RSP61408_BYD_WVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_RSP61408_TRULY_WVGA;
				break;
			default:
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		}
	}
	else if( machine_is_msm7x27a_U8655_EMMC())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_HX8357C_CHIMEI_HVGA;
				break;
			case LCD_HW_ID1:
			    hw_lcd_panel = MIPI_CMD_HX8357C_TIANMA_IPS_HVGA;
				break;
			case LCD_HW_ID4:
				hw_lcd_panel = MIPI_CMD_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_HX8357C_TIANMA_HVGA;
				break;
			default: 
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = MIPI_CMD_HX8357C_CHIMEI_IPS_HVGA;
				break;
		}
	}
	else if(machine_is_msm7x27a_H867G())
	{
		/* U8686 is H867G ver.E,use tianma IPS and chimei IPS LCD */
		if(HW_VER_SUB_VE == get_hw_sub_board_id())
		{
			switch (lcd_id)
			{
				case LCD_HW_ID0:
					hw_lcd_panel = MIPI_CMD_NT35310_BYD_HVGA;
					break;
				case LCD_HW_ID1:
					hw_lcd_panel = MIPI_CMD_HX8357C_TIANMA_IPS_HVGA;
					break;
				case LCD_HW_ID4:
					hw_lcd_panel = MIPI_CMD_HX8357C_CHIMEI_IPS_HVGA;
					break;
				case LCD_HW_ID5:
					hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
					break;
				default:
					hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
					break;
			}
		}
		else
		{
			switch (lcd_id)
			{
				case LCD_HW_ID0:
					hw_lcd_panel = MIPI_CMD_NT35310_BYD_HVGA;
					break;
				case LCD_HW_ID1:
					hw_lcd_panel = MIPI_CMD_NT35310_TIANMA_HVGA;
					break;
				case LCD_HW_ID5:
					hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
					break;
				default:
					hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
					break;
			}
		}
	}
	else if(machine_is_msm7x27a_H868C())
	{
		switch (lcd_id)
		{
			case LCD_HW_ID0:
				hw_lcd_panel = MIPI_CMD_NT35310_BYD_HVGA;
				break;
			case LCD_HW_ID1:
				hw_lcd_panel = MIPI_CMD_NT35310_TIANMA_HVGA;
				break;
			case LCD_HW_ID5:
				hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
				break;
			default:
				hw_lcd_panel = MIPI_CMD_NT35310_BOE_HVGA;
				break;
		}
	}
	else
	{
		hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
	}
	return hw_lcd_panel;
}
lcd_panel_type get_lcd_panel_type(void)
{
	 lcd_panel_type hw_lcd_panel = LCD_NONE;
	 unsigned int lcd_id = LCD_NONE;

	 lcd_id = get_hw_lcd_id();

	 if( machine_is_msm7x27a_umts()||machine_is_msm7x27a_cdma())
	 {
		 switch (lcd_id)
		 {
			case 0:
				hw_lcd_panel = MIPI_NT35560_TOSHIBA_FWVGA;
				break;
			case 1:
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;

			default: 
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		 }
	 }
    else if( machine_is_msm7x27a_U8815() ||
             machine_is_msm7x27a_C8820() ||
             machine_is_msm7x27a_C8825D() )
	 {
		 switch (lcd_id)
		 {
			case 0:
				hw_lcd_panel = MIPI_RSP61408_CHIMEI_WVGA;
				break;
			case 1:
				hw_lcd_panel = MIPI_HX8369A_TIANMA_WVGA;
				break;			
			case 2:
				hw_lcd_panel = MIPI_RSP61408_BYD_WVGA;
				break;
			case 3:
				hw_lcd_panel = MIPI_RSP61408_TRULY_WVGA;
				break;

			default: 
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		 }
	 }
	 /* add U8655_EMMC, use the u8655 configuration */
	 else if( machine_is_msm7x27a_U8655() || machine_is_msm7x27a_U8655_EMMC() || machine_is_msm7x27a_C8655_NAND()||
	          machine_is_msm7x27a_U8661())
	 {
		 switch (lcd_id)
		 {
			/*this IC stand id number 0 and 3,temp add*/
			case 0:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_HVGA;
				break;
			case 1:
			    hw_lcd_panel = MIPI_HX8357C_TIANMA_IPS_HVGA;
				break;
			case 2:
				hw_lcd_panel = MIPI_HX8357C_CHIMEI_IPS_HVGA;
				break;
			case 3:
				hw_lcd_panel = MIPI_HX8357C_TIANMA_HVGA;
				break;

			default: 
				/*no mipi LCD lead to block, so default lcd RGB */
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;
		 }
	 }
	 else if( machine_is_msm7x27a_U8185())
	 {
	 	switch(lcd_id)
		{
			case 0:
				hw_lcd_panel = LCD_HX8347D_TRULY_QVGA;
				break;
			case 2:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
			case 3:
				hw_lcd_panel = LCD_HX8347D_CHIMEI_QVGA;
				break;
			default:
				hw_lcd_panel = LCD_HX8347G_TIANMA_QVGA;
				break;
	 	}
	 }
	 else if(machine_is_msm7x27a_M660())
 	 {
 	 	switch(lcd_id)
 	 	{
 	 		case 0:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
			case 1:
				hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
				break;		
			default:
				hw_lcd_panel = LCD_HX8357C_TIANMA_HVGA;
				break;
 	 	}
 	 }	 
	 else 
	 {
		hw_lcd_panel = LCD_HX8357B_TIANMA_HVGA;
	 }
	 return hw_lcd_panel;
}
/*  FUNCTION  get_hw_sd_trigger_type
 *  DESCRIPTION 
 *      get the bt wakeup gpio type
 *
 *  RETURN VALUE
 *       the gpio number
 */
hw_bt_wakeup_gpio_type get_hw_bt_wakeup_gpio_type(void)
{
    hw_bt_wakeup_gpio_type bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_NONES;
    hw_ver_sub_type ver_sub_type = HW_VER_SUB_MAX;
    ver_sub_type = get_hw_sub_board_id();
	
    if (machine_is_msm7x27a_U8815())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm7x27a_U8655())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
    else if (machine_is_msm7x27a_U8655_EMMC())
    {
        if ((ver_sub_type > HW_VER_SUB_VB && ver_sub_type < HW_VER_SUB_VE) || ver_sub_type > HW_VER_SUB_VE)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8655_NAND())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_M660())
    {
        if (ver_sub_type > HW_VER_SUB_VA)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8820())
    {
        if (ver_sub_type > HW_VER_SUB_VB)
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_27;
		}
		else
		{
            bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
		}
    }
    else if (machine_is_msm7x27a_C8825D())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
	/*< DTS2012022300887 fengwei 20120224 begin */
    else if (machine_is_msm7x27a_C8668D())
    {
        bt_wakeup_gpio_type = HW_BT_WAKEUP_GPIO_IS_83;
    }
	/* DTS2012022300887 fengwei 20120224 end >*/
    	
    printk(KERN_INFO "the bt_wakeup_gpio_type is %d\n", bt_wakeup_gpio_type);
    return bt_wakeup_gpio_type;
}
/*hasGyro is a flag to note if has gyro,c8860e has gyro but M886 doesn't*/
static int get_sensors_list(void)
{
	/* < DTS2012020902104 zhangmin 20120209 begin */
	/*add 7x30's list*/
	int sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
	int hasgyro = 0;
//	hasgyro = hasGyro;
	/*< DTS2012022006500 yangbo 20120220 begin */
	if(machine_is_msm8255_u8860()
	|| machine_is_msm8255_u8860_92()
	|| machine_is_msm8255_u8860_51()
	/* < DTS2012022905490 ganfan 20120301 begin */
	|| machine_is_msm8255_u8860_r()
	/* DTS2012022905490 ganfan 20120301 end > */
	|| machine_is_msm8255_u8860lp()
	||(machine_is_msm8255_c8860() && hasgyro ))
	{
		sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR + GY_SENSOR;
		printk("####This device has gyro\n");
	}
	
	/*version A and version B has compass, since version C don't have compass*/
	else if( (  machine_is_msm7x27a_C8820() && (HW_VER_SUB_VC <= get_hw_sub_board_id()) )
		||  machine_is_msm7x27a_U8661())
	{
		sensors_list = G_SENSOR + L_SENSOR + P_SENSOR;
	}
	/*< DTS2012022300887 fengwei 20120224 begin */
	else if (machine_is_msm7x27a_U8655()
	||  machine_is_msm7x27a_U8655_EMMC()
	||  machine_is_msm7x27a_C8655_NAND()
	||  machine_is_msm7x27a_M660()
	|| 	machine_is_msm7x27a_U8815()	
	|| 	machine_is_msm7x27a_C8820()	
	|| 	machine_is_msm7x27a_C8825D()
	||  machine_is_msm7x27a_C8668D()
	|| 	machine_is_msm7x30_u8800()	
	|| 	machine_is_msm7x30_u8820()	
	|| 	machine_is_msm7x30_u8800_51()
	|| 	machine_is_msm8255_u8800_pro()
	||	machine_is_msm8255_c8860()
	||	machine_is_msm8255_u8667()
	||	machine_is_msm8255_u8680()
	||	machine_is_msm8255_u8730())
	/* DTS2012022300887 fengwei 20120224 end >*/
	{
		sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
		printk("####This device doesn't own gyro\n");
	}
	/* move this else if to above for avoid C8820 without compass can not run in */
	/* DTS2012022006500 yangbo 20120220 end > */
	else if(machine_is_msm7x27a_U8185())
	{
		sensors_list = G_SENSOR;
	}
	else
	{
		sensors_list = G_SENSOR + L_SENSOR + P_SENSOR + M_SENSOR;
	}
	/* DTS2012020902104 zhangmin 20120209 end > */
	return sensors_list;
}
Example #29
0
static long hw_camera_led_ioctl(struct file *filep ,unsigned int cmd, unsigned long arg)
{
	int ret = 0;
	unsigned int camera_led_state;
	
	CDBG("function %s enterence\n",__func__);
	switch(cmd)
	{
		case CAMERA_LED_GET :
			
			camera_led_state = atomic_read(&camera_led_flag);
			if(copy_to_user((void __user *)arg,&camera_led_state,sizeof(camera_led_state))) 
			{
				pr_err("function copy_to_user fail");
				ret = -EFAULT;
			}
			break;
		case CAMERA_LED_SET :
			if(copy_from_user(&camera_led_state,(void __user *)arg,sizeof(camera_led_state)))
			{
				pr_err("function copy_from_user fail");
				ret = -EFAULT;
			}
			else
			{
				/*these handset use tps61310 as flash*/
				if(machine_is_msm8x25_U8825()
				|| machine_is_msm8x25_U8825D()
				|| machine_is_msm8x25_U8833D()
				|| machine_is_msm8x25_U8833()
				|| machine_is_msm8x25_C8825D()
				|| machine_is_msm8x25_C8950D()
				|| machine_is_msm8x25_U8950D()
				|| machine_is_msm8x25_U8951()
				|| machine_is_msm8x25_C8813()
				|| machine_is_msm8x25_H881C()
				|| machine_is_msm8x25_U8950()
				|| machine_is_msm8x25_Y300_J1()
				|| machine_is_msm7x27a_C8820())
				{
			
					ret = call_led_set_state(camera_led_state);
				}
				else
				{
					ret = msm_camera_flash_set_led_state(&hw_camera_led_data, camera_led_state);
				}
				
				if(!ret)
				{
					atomic_set(&camera_led_flag,camera_led_state);
				}
			}
			break;
		default:
			pr_err("hw_camera_led_ioctl:error ioctl cmd");
			ret = -EINVAL;
		
	}
	
	return ret;
}
static void __init virtualkeys_init(void)
{
    struct kobject *properties_kobj;
    int ret=0;
    /*Modify the virtualkeys of touchsreen*/
    if(machine_is_msm7x27a_U8815()
        || machine_is_msm8x25_U8825()
        || machine_is_msm8x25_U8825D()
        || machine_is_msm8x25_C8825D()
        || machine_is_msm8x25_C8833D()
        || machine_is_msm8x25_U8833D()
        || machine_is_msm8x25_U8833()
		|| machine_is_msm7x27a_C8820()
        || machine_is_msm8x25_H881C()
        || machine_is_msm8x25_C8812P())
    {
    	buf_vkey_size = sprintf(buf_virtualkey,
        			__stringify(EV_KEY) ":" __stringify(KEY_BACK)  ":57:850:100:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":240:850:100:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":423:850:100:80"
        		   "\n"); 
    }

    else if(machine_is_msm8x25_C8950D()
        || machine_is_msm8x25_U8950D()
        || machine_is_msm8x25_U8950())
    {
        buf_vkey_size = sprintf(buf_virtualkey,
        			__stringify(EV_KEY) ":" __stringify(KEY_BACK)  ":80:1035:160:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":270:1035:160:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":460:1035:160:80"
        		   "\n"); 
    }
    /*New add FWVGA virtual keys */
    else if (machine_is_msm8x25_U8951D()
        || machine_is_msm8x25_C8813()
        || machine_is_msm8x25_U8951())
	/* modify the area of virtualkeys */
    {
    	buf_vkey_size = sprintf(buf_virtualkey,
        			__stringify(EV_KEY) ":" __stringify(KEY_BACK)  ":71:900:142:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":240:900:142:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":409:900:142:80"
        		   "\n"); 
    }
    else if (machine_is_msm7x27a_H867G()
           ||machine_is_msm7x27a_H868C()
           )
    {
	    /* 3 key configuration for 3.5" TP */
    /*calibrate virtualkey for H867G and H868C*/
        buf_vkey_size = sprintf(buf_virtualkey,
                  __stringify(EV_KEY) ":" __stringify(KEY_BACK)  ":50:510:80:50"
                  ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":160:510:80:50"
                  ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":270:510:80:50"
                  "\n");
    }
    else if (machine_is_msm7x27a_U8655_EMMC())
    {
    	/*4 virtual keys for att */
    	if (HW_VER_SUB_VE <= get_hw_sub_board_id())
    	{
    	    buf_vkey_size = sprintf(buf_virtualkey,
        		          __stringify(EV_KEY) ":" __stringify(KEY_MENU)  ":30:510:60:50"
        		          ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":115:510:80:50"
        		          ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":205:510:80:50"
        		          ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":290:510:60:50"
        		          "\n"); 
    	}
    	else
    	{
            buf_vkey_size = sprintf(buf_virtualkey,
        		          __stringify(EV_KEY) ":" __stringify(KEY_MENU)  ":30:510:60:50"
        		          ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":165:510:100:50"
        		          ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":290:510:60:50"
        		          "\n"); 
    	}
    }
    else
    {
    	buf_vkey_size = sprintf(buf_virtualkey,
        			__stringify(EV_KEY) ":" __stringify(KEY_MENU)  ":57:850:100:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_HOME)   ":240:850:100:80"
        		   ":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":423:850:100:80"
        		   "\n"); 
    }

    properties_kobj = kobject_create_and_add("board_properties", NULL);
	if (properties_kobj)
		ret = sysfs_create_group(properties_kobj,
					 &virtualkey_properties_attr_group);
	if (!properties_kobj || ret)
		pr_err("failed to create board_properties\n");
}