コード例 #1
0
/*
 *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;
}
コード例 #2
0
/*===========================================================================


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;
}
コード例 #3
0
/* 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;
}
コード例 #4
0
/*< DTS2012042703826 lixin 20120427 begin */
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_msm7x27a_U8815() && (HW_VER_SUB_VC == get_hw_sub_board_id()))
	 )
  {
      return SINGLE_MIC;
  }
  else
  {
      return DUAL_MIC;
  }  
}
コード例 #5
0
/*  FUNCTION  get_hw_wifi_device_model
 *  DEPENDENCIES 
 *      get wifi device model.
 *      affect app_info.
 *  RETURN VALUE
 *      wifi device model:WIFI_QUALCOMM_6005 or WIFI_BROADCOM_4329 ro WIFI_BROADCOM_4330
 */
hw_wifi_device_model get_hw_wifi_device_model(void)
{
  /*< DTS2012042703826 lixin 20120427 begin */
  if(machine_is_msm7x27a_U8185()|| machine_is_msm7x27a_U8661()|| machine_is_msm7x27a_C8668D()
     || (machine_is_msm7x27a_U8815() && (HW_VER_SUB_VC == get_hw_sub_board_id())))
  {
      return WIFI_QUALCOMM_6005;
  }
  /* DTS2012042703826 lixin 20120427 end >*/
  else if(machine_is_msm8255_u8860() 
		|| machine_is_msm8255_c8860() 
		|| machine_is_msm8255_u8860lp()
        || machine_is_msm8255_u8860_r()
		|| machine_is_msm8255_u8860_92()
/* < DTS2012050801712 xiedayong 20120508 begin */
/* add msm8255_u8800_pro proudct,it uses BCM4329 chip */
        || machine_is_msm8255_u8860_51()
        || machine_is_msm8255_u8800_pro())
/* DTS2012050801712 xiedayong 20120508 end > */
  {
      return WIFI_BROADCOM_4329;
  }
  else
  {
      return WIFI_BROADCOM_4330;
  }
}
コード例 #6
0
/* 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;
}
コード例 #7
0
/*===========================================================================


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;
  }  
}
コード例 #8
0
/*  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;
}
コード例 #9
0
/*===========================================================================


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;
}
コード例 #10
0
/* 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;
}
コード例 #11
0
/*  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;
}
コード例 #12
0
static long hw_camera_led_ioctl(struct file *filep ,unsigned int cmd, unsigned long arg)
{
    int ret = 0;
    unsigned int camera_led_state;
    hw_product_sub_type product_sub_type = get_hw_sub_board_id();

    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
        {
            /*C8813Q support torch */
            if( machine_is_msm8x25_C8950D()
                    || machine_is_msm8x25_C8813()
                    || machine_is_msm8x25_C8813Q()
                    || machine_is_msm8x25_G610C()
                    || ( ( machine_is_msm8x25_U8951()
                           || machine_is_msm8x25_G520U())
                         && ( !IS_UMTS_DOUBLE_SIM(product_sub_type) ) ) )
            {
                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;
}
コード例 #13
0
/* U8951-1 U8951N-1 have submic in HW, need to test submic in MMI */
audio_property_type get_audio_mmi_submic_test_enable(void)
{
    if (machine_is_msm8x25_U8951() && (HW_VER_SUB_VA == get_hw_sub_board_id()))
    {
        return SMICMMI_ENABLE;
    }
	else
	{
	    return SMICMMI_DISABLE;
	}
}
コード例 #14
0
static int rmnet_cmn_get_max_mtu(void)
{
    if(machine_is_msm7x27_u8650()&& HW_VER_SUB_VG == get_hw_sub_board_id())
    {        

        return 1430;

    }
    else
    {
        return 2000;
    }

}
コード例 #15
0
/*  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_msm8x25_C8950D()
      || machine_is_msm7x27a_U8815()
      || machine_is_msm7x27a_U8655_EMMC()
      || machine_is_msm7x27a_H867G()
      || machine_is_msm8x25_H881C()
      || machine_is_msm7x27a_H868C()
	  || (machine_is_msm8x25_U8950() && (HW_VER_SUB_VA == get_hw_sub_board_id())) )
    {
        ret = HW_NODS;
    }
    else
    {
        ret = HW_DS;
    }
  return ret;
}
コード例 #16
0
/*  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;
}
コード例 #17
0
static int aps_12d_probe(
	
	struct i2c_client *client, const struct i2c_device_id *id)
{	
	/* define and initialization the value */
	int value_lsb = 0;
	int value_msb = 0;   
	int ret;
	struct aps_data *aps;
	/*the aps_12d sensors ispower on*/
	int i;
#ifdef CONFIG_ARCH_MSM7X30
	struct vreg *vreg_gp4=NULL;
	int rc;
	/*delete this line,27A don't have to match the power supply*/
	
    vreg_gp4 = vreg_get(NULL, VREG_GP4_NAME);
    if (IS_ERR(vreg_gp4)) 
    {
	    pr_err("%s:gp4 power init get failed\n", __func__);
    }

    /* set gp4 voltage as 2700mV for all */
    rc = vreg_set_level(vreg_gp4,VREG_GP4_VOLTAGE_VALUE_2700);
    
    if (rc) {
        pr_err("%s: vreg_gp4 vreg_set_level failed (%d)\n", __func__, rc);
        return rc;
    }
    rc = vreg_enable(vreg_gp4);
    if (rc) {
        pr_err("%s: vreg_gp4 vreg_enable failed (%d)\n", __func__, rc);
        return rc;
    }
#endif
    mdelay(5);
    if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
        printk(KERN_ERR "aps_12d_probe: need I2C_FUNC_I2C\n");
        ret = -ENODEV;
        goto err_check_functionality_failed;
    }

	/* if querry the board is T1 or T2 turn off the proximity */
    /* This modification for version A&B of U8800,only */
	if((machine_is_msm7x30_u8800())&&((get_hw_sub_board_id() == HW_VER_SUB_VA) || ((get_hw_sub_board_id() == HW_VER_SUB_VB))))
	{
		printk(KERN_ERR "aps_12d_probe: aps is not supported in U8800 and U8800 T1 board!\n");
		ret = -ENODEV;
		goto err_check_functionality_failed; 
	}    

	aps = kzalloc(sizeof(*aps), GFP_KERNEL);
	if (aps == NULL) {
		ret = -ENOMEM;
		goto err_alloc_data_failed;
	}

	mutex_init(&aps->mlock);
	
	INIT_WORK(&aps->work, aps_12d_work_func);
	aps->client = client;
	i2c_set_clientdata(client, aps);

	PROXIMITY_DEBUG(KERN_INFO "ghj aps_12d_probe send command 2\n ");
	
	/* Command 2 register: 25mA,DC,12bit,Range1 */
	/*power_down to avoid the iic read error */
	aps_i2c_reg_write(aps, APS_12D_REG_CMD1, APS_12D_POWER_DOWN);
	
	/*init the flag,because everlight's 0x06,0x07's register's value low 4 bit is 0*/
	value_lsb = aps_i2c_reg_read(aps, APS_INT_HT_LSB);
	value_msb = aps_i2c_reg_read(aps, APS_INT_HT_MSB);
	old_lsb = value_lsb;
	old_msb = value_msb;
	
	/* debug--- stare at the value of lsb & msb */
	APS_DBG("value_lsb=%d,value_msb=%d\n",value_lsb,value_msb);
	/* judge the device type */
	/* when 06 07 registers don't equal 0x00, we think it's a intersil hardware */
	if((0x00 == value_lsb) && (0x00 == value_msb))
	{
		intersil_flag = EVERLIGHT;
	}
	else
	{
		intersil_flag = INTERSIL;
	}
	
	/* write reg value for the two device */
	if(EVERLIGHT == intersil_flag)
	{
		ret = aps_i2c_reg_write(aps, APS_12D_REG_CMD2, \
							(uint8_t)(APS_12D_IRDR_SEL_50MA << 6 | \
										APS_12D_FREQ_SEL_DC << 4 | \
										APS_12D_RES_SEL_12 << 2 | \
										APS_12D_RANGE_SEL_ALS_1000));
	}
	else 
	{
		/*because Power-up and Power Supply Considerations is not good enough for intersil's datasheet,so avoid it via software*/
		ret = aps_i2c_reg_write(aps, APS_TEST, APS_12D_POWER_DOWN);
		if (ret < 0) 
		{
			PROXIMITY_DEBUG("APS_TEST error!\n");
		}
		msleep(10);
		ret = aps_i2c_reg_write(aps, APS_12D_REG_CMD1, APS_12D_POWER_DOWN);
		if (ret < 0) 
		{
			PROXIMITY_DEBUG("APS_12D_POWER_DOWN error!\n");
		}
		msleep(10);
		ret = aps_i2c_reg_write(aps, APS_12D_REG_CMD2, \
								(uint8_t)(APS_12D_IRDR_SEL_INTERSIL_50MA << 4 | \
										APS_FREQ_INTERSIL_DC << 6 | \
										APS_ADC_12 << 2 | \
										APS_INTERSIL_SCHEME_OFF| \
										APS_12D_RANGE_SEL_ALS_1000));
	}
	err_threshold_value[1] = 50;
	if (ret < 0) {
		goto err_detect_failed;
	}
	range_index = 0;
    #ifdef CONFIG_HUAWEI_HW_DEV_DCT
    /* detect current device successful, set the flag as present */
    set_hw_dev_flag(DEV_I2C_APS);
    #endif

	for(i = 0; i < TOTAL_RANGE_NUM; i++)
	{
		/* NOTE: do NOT use the last one */
		/* get the down_range_value */
		if(EVERLIGHT == intersil_flag)
		{
			up_range_value[i] = MAX_ADC_OUTPUT - high_threshold_value_U8661[i] - RANGE_FIX + 500; 
		}
		else
		{
			up_range_value[i] = MAX_ADC_OUTPUT - high_threshold_value_U8661_I[i] - RANGE_FIX + 500; 
		}
	}

	down_range_value[0] = 0;
	for(i = 1; i < TOTAL_RANGE_NUM; i++)
	{
		/* NOTE: do not use the first one */
		/* get the down_range_value */
		if(EVERLIGHT == intersil_flag)
		{
			down_range_value[i] = (MAX_ADC_OUTPUT - high_threshold_value_U8661[i-1] - (MAX_ADC_OUTPUT / ADJUST_GATE)) / 4 - 650;
		}
		else
		{
			down_range_value[i] = (MAX_ADC_OUTPUT - high_threshold_value_U8661_I[i-1] - (MAX_ADC_OUTPUT / ADJUST_GATE)) / 4 - 650;
		}
	}
	
	/*we don't use the input device sensors again */
	aps->input_dev = input_allocate_device();
	if (aps->input_dev == NULL) {
		ret = -ENOMEM;
		PROXIMITY_DEBUG(KERN_ERR "aps_12d_probe: Failed to allocate input device\n");
		goto err_input_dev_alloc_failed;
	}
	aps->input_dev->name = "sensors_aps";
	
	aps->input_dev->id.bustype = BUS_I2C;
	
	input_set_drvdata(aps->input_dev, aps);
	
	ret = input_register_device(aps->input_dev);
	if (ret) {
		printk(KERN_ERR "aps_probe: Unable to register %s input device\n", aps->input_dev->name);
		goto err_input_register_device_failed;
	}
	
	set_bit(EV_ABS, aps->input_dev->evbit);
	input_set_abs_params(aps->input_dev, ABS_LIGHT, 0, 10240, 0, 0);
	input_set_abs_params(aps->input_dev, ABS_DISTANCE, 0, 1, 0, 0);

	ret = misc_register(&light_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: light_device register failed\n");
		goto err_light_misc_device_register_failed;
	}

	ret = misc_register(&proximity_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: proximity_device register failed\n");
		goto err_proximity_misc_device_register_failed;
	}


	if( light_device.minor != MISC_DYNAMIC_MINOR ){
		light_device_minor = light_device.minor;
	}

	

	if( proximity_device.minor != MISC_DYNAMIC_MINOR ){
		proximity_device_minor = proximity_device.minor ;
	}

	wake_lock_init(&proximity_wake_lock, WAKE_LOCK_SUSPEND, "proximity");


	hrtimer_init(&aps->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	aps->timer.function = aps_timer_func;
	
	aps_wq = create_singlethread_workqueue("aps_wq");

	if (!aps_wq) 
	{
		ret = -ENOMEM;
		goto err_create_workqueue_failed;
	}
	
	this_aps_data =aps;
	ret = set_sensor_input(PS, aps->input_dev->dev.kobj.name);
	if (ret) {
		dev_err(&client->dev, "%s set_sensor_input failed\n", __func__);
		goto err_create_workqueue_failed;
	}
	ret = set_sensor_input(ALS, aps->input_dev->dev.kobj.name);
	if (ret) {
		dev_err(&client->dev, "%s set_sensor_input failed\n", __func__);
		goto err_create_workqueue_failed;
	}
	/* delete the redundant code */

	printk(KERN_INFO "aps_12d_probe: Start Proximity Sensor APS-12D\n");

	set_sensors_list(L_SENSOR + P_SENSOR);
	return 0;
	
err_create_workqueue_failed:
	misc_deregister(&proximity_device);
err_proximity_misc_device_register_failed:
	misc_deregister(&light_device);
err_light_misc_device_register_failed:
err_input_register_device_failed:
	input_free_device(aps->input_dev);
err_input_dev_alloc_failed:
err_detect_failed:
	kfree(aps);
err_alloc_data_failed:
err_check_functionality_failed:
#ifdef CONFIG_ARCH_MSM7X30
	if(NULL != vreg_gp4)
	{
        /* can't use the flag ret here, it will change the return value of probe function */
        vreg_disable(vreg_gp4);
        /* delete a line */
	}
#endif
	return ret;
  
}
コード例 #18
0
ファイル: app_info.c プロジェクト: markcn/kernel_huawei_c8812
/*===========================================================================


FUNCTION     set_s_board_hw_version_special

DESCRIPTION
  This function deal with special hw_version_id s_board_id and so on
DEPENDENCIES
  
RETURN VALUE
  None

SIDE EFFECTS
  None
===========================================================================*/
static void set_s_board_hw_version_special(char *hw_version_id,char *hw_version_sub_ver,
                                char *s_board_id,char *sub_ver)
{
                                             
    if ((NULL == s_board_id) || (NULL == sub_ver) || (NULL == hw_version_id) || (NULL == hw_version_sub_ver))
    {
         printk("app_info : parameter pointer is null!\n");    
         return ;
    }

	/* U8815 silk-screen display to VerB */
    if((HW_VER_SUB_VB <= get_hw_sub_board_id()) 
       &&(MACH_TYPE_MSM7X27A_U8815 == machine_arch_type))
    {
        memcpy(hw_version_id,"HD1U8815M ", BOARD_ID_LEN-1);
        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
        strcat(hw_version_id, hw_version_sub_ver);
        hw_version_id[HW_VERSION-1] = '\0';

    }    

    if((MACH_TYPE_MSM7X30_U8820 == machine_arch_type)
       &&(socinfo_get_msm_cpu() == MSM_CPU_8X55))
    {
        memcpy(s_board_id,"MSM8255_U8820", BOARD_ID_LEN-1);
    	sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
    	strcat(s_board_id, sub_ver);
        s_board_id[BOARD_ID_LEN-1] = '\0';
    }

	if((MACH_TYPE_MSM7X30_U8800_51 == machine_arch_type)
       &&(HW_VER_SUB_VD == get_hw_sub_board_id()))
    {
        memcpy(s_board_id,"MSM7X30_U8800-51", BOARD_ID_LEN-1);
        sprintf(sub_ver, ".Ver%c", 'C');
    	strcat(s_board_id, sub_ver);
        s_board_id[BOARD_ID_LEN-1] = '\0';
    }

    /* change U8185 hw_version to VerB */
    if(MACH_TYPE_MSM7X27A_U8185 == machine_arch_type) 
    {
        if(HW_VER_SUB_VE > get_hw_sub_board_id()) 
        {
            memcpy(hw_version_id,"HD1U8185M ", BOARD_ID_LEN-1);
            sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id() + 1);
            strcat(hw_version_id, hw_version_sub_ver);
            hw_version_id[HW_VERSION-1] = '\0';
        }
        /* add U8186 hw_version 
         * and the U8186 sub ver keep same as U8185 sub ver. 
         */ 
        else if(HW_VER_SUB_VE <= get_hw_sub_board_id())
        {
            memcpy(hw_version_id,"HD1U8186M ", BOARD_ID_LEN-1);
            sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id() - 3);
            strcat(hw_version_id, hw_version_sub_ver);
            hw_version_id[HW_VERSION-1] = '\0';
        }
    }

    /* change sub version to right version */
    if((HW_VER_SUB_VE <= get_hw_sub_board_id()) &&
           (MACH_TYPE_MSM7X27A_U8655_EMMC == machine_arch_type))
    {
       memcpy(hw_version_id,"HD2U8655M ", BOARD_ID_LEN-1);
       sprintf(hw_version_sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id() -3);
       strcat(hw_version_id, hw_version_sub_ver);
       hw_version_id[HW_VERSION-1] = '\0';
    }
}
コード例 #19
0
static int app_version_read_proc(char *page, char **start, off_t off,
				 int count, int *eof, void *data)
{
	int len;
	// char *ker_ver = "HUAWEI_KERNEL_VERSION";
	char *ker_ver = HUAWEI_KERNEL_VERSION;
	char *lcd_name = NULL;
	char * touch_info = NULL;
	char *wifi_device_name = NULL;
    char *bt_device_name = NULL;
	char audio_property[AUDIO_PROPERTY_LEN] = {0};
	char s_board_id[BOARD_ID_LEN + BOARD_ID_SUB_VER_LEN] = {0};
    char sub_ver[BOARD_ID_SUB_VER_LEN] = {0};
	char hw_version_id[HW_VERSION + HW_VERSION_SUB_VER] = {0};
	char hw_version_sub_ver[HW_VERSION_SUB_VER] = {0};	
	char *compass_gs_name = NULL;
	char *sensors_list_name = NULL;
    set_s_board_hw_version(s_board_id,hw_version_id);
    sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
   sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
    strcat(s_board_id, sub_ver);
    strcat(hw_version_id, hw_version_sub_ver);
    set_s_board_hw_version_special(hw_version_id,hw_version_sub_ver,s_board_id,sub_ver);
	compass_gs_name=get_compass_gs_position_name();
	sensors_list_name = get_sensors_list_name();
	lcd_name = get_lcd_panel_name();
	wifi_device_name = get_wifi_device_name();
	bt_device_name = get_bt_device_name();
	get_audio_property(audio_property);
	touch_info = get_touch_info();
	if (touch_info == NULL)
	{
		touch_info = "Unknow touch";
	}
	
#ifdef CONFIG_HUAWEI_POWER_DOWN_CHARGE
    charge_flag = get_charge_flag();
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"charge_flag:\n%d\n"
	"compass_gs_position:\n%s\n"
	"sensors_list:\n%s\n"
	"hw_version:\n%s\n"
    "wifi_chip:\n%s\n"
    "bt_chip:\n%s\n"
	"audio_property:\n%s\n"
	"touch_info:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id,charge_flag, compass_gs_name,sensors_list_name, hw_version_id,wifi_device_name,bt_device_name,audio_property, touch_info);
#else
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"compass_gs_position:\n%s\n"
	"sensors_list:\n%s\n"
	"hw_version:\n%s\n"
	"audio_property:\n%s\n"
	"touch_info:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, compass_gs_name,sensors_list_name, hw_version_id,audio_property, touch_info);
#endif
	
	return proc_calc_metrics(page, start, off, count, eof, len);
}
コード例 #20
0
static int aps_12d_probe(
	struct i2c_client *client, const struct i2c_device_id *id)
{	
	int ret;
	struct aps_data *aps;
	int i;

	printk(KERN_INFO "aps_12d_probe enter\n ");
	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		printk(KERN_ERR "aps_12d_probe: need I2C_FUNC_I2C\n");
		ret = -ENODEV;
		goto err_check_functionality_failed;
	}

	if(machine_is_msm7x25_u8150() || machine_is_msm7x25_c8150())
	{
		if((get_hw_sub_board_id() == HW_VER_SUB_VA) || ((get_hw_sub_board_id() == HW_VER_SUB_VB)))
		{
			printk(KERN_ERR "aps_12d_probe: aps is not supported in c8150 and u8150 T1 board!\n");
			ret = -ENODEV;
			goto err_check_functionality_failed; 
		}
	}
	
	aps = kzalloc(sizeof(*aps), GFP_KERNEL);
	if (aps == NULL) {
		ret = -ENOMEM;
		goto err_alloc_data_failed;
	}

	mutex_init(&aps->mlock);

	INIT_WORK(&aps->work, aps_12d_work_func);
	aps->client = client;
	i2c_set_clientdata(client, aps);

	printk(KERN_INFO "aps_12d_probe send command 2\n ");
	/* Command 2 register: 25mA,DC,12bit,Range1 */
	ret = aps_i2c_reg_write(aps, APS_12D_REG_CMD2, \
	                         (uint8_t)(APS_12D_IRDR_SEL_50MA << 6 | \
	                                   APS_12D_FREQ_SEL_DC << 4 | \
	                                   APS_12D_RES_SEL_12 << 2 | \
	                                   APS_12D_RANGE_SEL_ALS_1000));
	if (ret < 0) {
		goto err_detect_failed;
	}

	if( machine_is_msm7x25_u8150() || machine_is_msm7x25_c8150() || machine_is_msm7x25_u8159()\
		|| machine_is_msm7x25_u8160() || machine_is_msm7x25_u8130() || machine_is_msm7x25_c8510())
	{
		range_index = 0;
		high_threshold = high_threshold_value[range_index];
		low_threshold = low_threshold_value[range_index];


		for(i = 0; i < TOTAL_RANGE_NUM; i++)
		{
			/* NOTE: do NOT use the last one */
			up_range_value[i] = MAX_ADC_OUTPUT - high_threshold_value[i] - UP_RANGE_FIX;
#ifdef DEBUG_AUTO_RANGE_ADJUST
			printk("up_range_value[%d] = %d.\n",i, up_range_value[i]);
#endif
		}

		down_range_value[0] = 0;
		for(i = 1; i < TOTAL_RANGE_NUM; i++)
		{
			/* NOTE: do not use the first one */
			down_range_value[i] = (MAX_ADC_OUTPUT - high_threshold_value[i-1] - (MAX_ADC_OUTPUT / ADJUST_GATE)) / 4;
#ifdef DEBUG_AUTO_RANGE_ADJUST
			printk("down_range_value[%d] = %d\n",i, down_range_value[i]);
#endif
		}

	}
	else if( machine_is_msm7x25_u8500() || machine_is_msm7x25_um840())
	{
		high_threshold = 300;
		low_threshold = 280;
	}
	else if( machine_is_msm7x25_u8300() )
	{
/* set shutter value for u8300 */
		high_threshold = 710;
		low_threshold = 650;
	}
	else
	{
		high_threshold = 780;
		low_threshold = 730;
	}
	
	if (sensor_dev == NULL) {
		aps->input_dev = input_allocate_device();
		if (aps->input_dev == NULL) {
			ret = -ENOMEM;
			printk(KERN_ERR "aps_12d_probe: Failed to allocate input device\n");
			goto err_input_dev_alloc_failed;
		}
		aps->input_dev->name = "sensors";
		
		aps->input_dev->id.bustype = BUS_I2C;
		
		input_set_drvdata(aps->input_dev, aps);
		
		ret = input_register_device(aps->input_dev);
		if (ret) {
			printk(KERN_ERR "aps_probe: Unable to register %s input device\n", aps->input_dev->name);
			goto err_input_register_device_failed;
		}
		sensor_dev = aps->input_dev;
	} else {
		aps->input_dev = sensor_dev;
	}

	set_bit(EV_ABS, aps->input_dev->evbit);
	input_set_abs_params(aps->input_dev, ABS_LIGHT, 0, 10240, 0, 0);
	input_set_abs_params(aps->input_dev, ABS_DISTANCE, 0, 1, 0, 0);

	ret = misc_register(&light_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: light_device register failed\n");
		goto err_light_misc_device_register_failed;
	}

	ret = misc_register(&proximity_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: proximity_device register failed\n");
		goto err_proximity_misc_device_register_failed;
	}

	if( light_device.minor != MISC_DYNAMIC_MINOR ){
		light_device_minor = light_device.minor;
	}
	
	if( proximity_device.minor != MISC_DYNAMIC_MINOR ){
		proximity_device_minor = proximity_device.minor ;
	}

	wake_lock_init(&proximity_wake_lock, WAKE_LOCK_SUSPEND, "proximity");

	hrtimer_init(&aps->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	aps->timer.function = aps_timer_func;
	
	aps_wq = create_singlethread_workqueue("aps_wq");

	if (!aps_wq) {
		ret = -ENOMEM;
		goto err_create_workqueue_failed;
	}
	
	this_aps_data =aps;

#ifdef CONFIG_HAS_EARLYSUSPEND
	aps->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
	aps->early_suspend.suspend = aps_12d_early_suspend;
	aps->early_suspend.resume = aps_12d_early_resume;
	register_early_suspend(&aps->early_suspend);
#endif

	#ifdef CONFIG_HUAWEI_HW_DEV_DCT
	/* detect current device successful, set the flag as present */
	set_hw_dev_flag(DEV_I2C_APS);
	#endif

	printk(KERN_INFO "aps_12d_probe: Start Proximity Sensor APS-12D\n");

#ifdef CONFIG_MELFAS_UPDATE_TS_FIRMWARE
	TS_updateFW_aps_data = this_aps_data;
	TS_updateFW_aps_wq = aps_wq;
#endif

	return 0;
	
err_create_workqueue_failed:
	misc_deregister(&proximity_device);
err_proximity_misc_device_register_failed:
	misc_deregister(&light_device);
err_light_misc_device_register_failed:
err_input_register_device_failed:
	input_free_device(aps->input_dev);
err_input_dev_alloc_failed:
err_detect_failed:
	kfree(aps);
err_alloc_data_failed:
err_check_functionality_failed:
	return ret;
  
}
コード例 #21
0
/*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;
}
コード例 #22
0
/*  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;
}
コード例 #23
0
/*  FUNCTION  get_hw_lcd_interface_type
 *  DEPENDENCIES 
 *      get lcd interface type
 *      affect nfc.
 *  RETURN VALUE
 *      lcd interface type:LCD_IS_MIPI or LCD_IS_RGB
 */
hw_lcd_interface_type get_hw_lcd_interface_type(void)
{
	hw_lcd_interface_type lcd_interface_type;
	lcd_panel_type  hw_lcd_panel = LCD_NONE;
	
	hw_lcd_panel = get_lcd_panel_type();	

	if (machine_is_msm7x30_u8800())
	{
		lcd_interface_type = LCD_IS_MDDI_TYPE1;
	}	
	/* U8820 board version A is MMDI type1, so config it type1 
	 * Version B and other is MDDI type2, so config it according to LCD
	 */
	else if(machine_is_msm7x30_u8820())
	{
		if(HW_VER_SUB_VA == get_hw_sub_board_id())
		{
			lcd_interface_type = LCD_IS_MDDI_TYPE1;
		}
		else
		{
			switch(hw_lcd_panel)
			{
				case LCD_NT35582_BYD_WVGA:
				case LCD_NT35582_TRULY_WVGA:
					lcd_interface_type = LCD_IS_MDDI_TYPE1;
					break;
				case LCD_NT35510_ALPHA_SI_WVGA:
					lcd_interface_type = LCD_IS_MDDI_TYPE1;
					break;
				case LCD_NT35510_ALPHA_SI_WVGA_TYPE2:
					lcd_interface_type = LCD_IS_MDDI_TYPE2;
					break;
				default:
					lcd_interface_type = LCD_IS_MDDI_TYPE1;
					break;
			}
		}
	}
	else if (machine_is_msm7x30_u8800_51() 
		|| machine_is_msm8255_u8800_pro())
	{
		switch(hw_lcd_panel)
		{
			case LCD_NT35582_BYD_WVGA:
			case LCD_NT35582_TRULY_WVGA:
				lcd_interface_type = LCD_IS_MDDI_TYPE1;
				break;
			case LCD_NT35510_ALPHA_SI_WVGA:
				lcd_interface_type = LCD_IS_MDDI_TYPE1;
				break;
			case LCD_NT35510_ALPHA_SI_WVGA_TYPE2:
				lcd_interface_type = LCD_IS_MDDI_TYPE2;
				break;
			default:
				lcd_interface_type = LCD_IS_MDDI_TYPE1;
				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_u8680()
		|| machine_is_msm8255_u8860_51()
		|| machine_is_msm8255_u8730())
	{
		lcd_interface_type = LCD_IS_MDDI_TYPE2;
	}

	else if (machine_is_msm8255_u8667())
	{
		lcd_interface_type = LCD_IS_MDDI_TYPE1;
	}
	else if(machine_is_msm7x27a_U8185()
		||machine_is_msm7x27a_M660())
	{
		lcd_interface_type = LCD_IS_RGB;
	}
	else
	{
		lcd_interface_type = LCD_IS_MIPI_CMD;
	}
	return lcd_interface_type;
}
コード例 #24
0
/*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;
}
コード例 #25
0
/* < DTS2011042703449  liujinggang 20110427 begin */
static int app_version_read_proc(char *page, char **start, off_t off,
				 int count, int *eof, void *data)
{
	int len;
    /* <BU5D10533 duangan 2010-5-26 begin */
	// char *ker_ver = "HUAWEI_KERNEL_VERSION";
	char *ker_ver = HUAWEI_KERNEL_VERSION;
    /* BU5D10533 duangan 2010-5-26 end> */
	char *lcd_name = NULL;
	char s_board_id[BOARD_ID_LEN] = {0};
    char sub_ver[10] = {0};
	/* < DTS2011082201029 liwei 20110819 begin */
	char hw_version_id[HW_VERSION] = {0};
	char hw_version_sub_ver[HW_VERSION_SUB_VER] = {0};	
	/* DTS2011082201029 liwei 20110819 end > */
	char *compass_gs_name = NULL;
    
	switch(machine_arch_type)
	{
		case MACH_TYPE_MSM7X25_U8100:
			strcpy(s_board_id, "MSM7X25_U8100");
			break;
		case MACH_TYPE_MSM7X25_U8105:
			strcpy(s_board_id, "MSM7X25_U8105");
			break;
		case MACH_TYPE_MSM7X25_U8107:
			strcpy(s_board_id, "MSM7X25_U8107");
			break;
		case MACH_TYPE_MSM7X25_U8109:
			strcpy(s_board_id, "MSM7X25_U8109");
			break;
		case MACH_TYPE_MSM7X25_U8110:
			strcpy(s_board_id, "MSM7X25_U8110");
			break;
		case MACH_TYPE_MSM7X25_U8120:
			strcpy(s_board_id, "MSM7X25_U8120");
			break;
		case MACH_TYPE_MSM7X25_U7610:
			strcpy(s_board_id, "MSM7X25_U7610");
			break;
		case MACH_TYPE_MSM7X25_U8500:
			strcpy(s_board_id, "MSM7X25_U8500");
			break;
		case MACH_TYPE_MSM7X25_U8300:
			strcpy(s_board_id, "MSM7X25_U8300");
			break;
		/*U8150_EU and U8150_JP*/
		case MACH_TYPE_MSM7X25_U8150:
			strcpy(s_board_id, "MSM7X25_U8150");
			break;
		case MACH_TYPE_MSM7X25_C8500:
			strcpy(s_board_id, "MSM7X25_C8500");
			break;
	    case MACH_TYPE_MSM7X25_C8600:
			strcpy(s_board_id, "MSM7X25_C8600");
			break;
        case MACH_TYPE_MSM7X30_U8800:
			strcpy(s_board_id, "MSM7X30_U8800");
			break;
        /*< DTS2010092400487  lijianzhao 20100924 begin */       
        case MACH_TYPE_MSM7X30_U8820:
/*< DTS2011010505694  muyongquan 20110218 begin */     
      		 	if (socinfo_get_msm_cpu()==MSM_CPU_8X55)
			strcpy(s_board_id, "MSM8255_U8820");
			if(socinfo_get_msm_cpu()==MSM_CPU_7X30)
/* DTS2011010505694  muyongquan 220110218 end >*/    
			strcpy(s_board_id, "MSM7x30_U8820");
			break;
        /* DTS2010092400487  lijianzhao 20100924 end >*/
        /*< DTS2011030802106 renxigang 20100308 begin */     
        /*< DTS2010112702297 wangquanli 201001125 begin */
        case MACH_TYPE_MSM7X30_U8800_51:
			strcpy(s_board_id, "MSM7X30_U8800-51");
			break;
        /* DTS2010112702297 wangquanli 201001125 end >*/
        /* DTS2011030802106 renxigang 20100308 end >*/
        /*< DTS2011030802106 renxigang 20100308 begin */
        /*< DTS2011030202729  liliang 20110302  begin */		
        case MACH_TYPE_MSM8255_U8800_PRO:
			strcpy(s_board_id, "MSM8255_U8800-PRO");
			break;
        /* DTS2011030202729  liliang 20110302 end >*/
        /* DTS2011030802106 renxigang 20100308 end >*/
		/* < DTS2011082201029 liwei 20110819 begin */
        /* <DTS2011041501614 duangan 2011-4-18 begin */
        case MACH_TYPE_MSM8255_U8860:
            strcpy(s_board_id, "MSM8255_U8860");
            strcpy(hw_version_id, "HD2U886M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
        /* DTS2011041501614 duangan 2011-4-18 end> */
		/* <DTS2011050700551 zhangbo 20110505 begin */
        case MACH_TYPE_MSM8255_C8860:
            strcpy(s_board_id, "MSM8255_C8860");
            strcpy(hw_version_id, "HC1C886M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
        /* DTS2011050700551 zhangbo 20110505 end> */
        /* <DTS2011062600102 sunhonghui 20110626 begin */
        case MACH_TYPE_MSM8255_U8860LP:
            strcpy(s_board_id, "MSM8255_U8860LP");
            strcpy(hw_version_id, "HD2U886M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
        /* DTS2011062600102 sunhonghui 20110626 end> */
		/*<DTS2011091502092 liyuping 20110915 begin */		
		/* <DTS2011110206054 liyuping 20111108 begin */	
		/* change HW_VERSION number */
        case MACH_TYPE_MSM8255_U8860_51:
            strcpy(s_board_id, "MSM8255_U8860-51");
            strcpy(hw_version_id, "HD2U886M01 ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
		/* DTS2011110206054 liyuping 20111108 end> */
		/* DTS2011091502092 liyuping 20110915 end> */
		/* <DTS2011071600361 liyuping 20110716 begin */
		case MACH_TYPE_MSM8255_U8860_92:
            strcpy(s_board_id, "MSM8255_U8860-92");
            strcpy(hw_version_id, "HD4U886M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
		/* DTS2011071600361 liyuping 20110716 end> */
		/* < DTS2011082302564 liwei 20110823 begin */
		case MACH_TYPE_MSM8255_U8680:
            strcpy(s_board_id, "MSM8255_U8680");
            strcpy(hw_version_id, "HD1U868M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
		/* DTS2011082302564 liwei 20110823 end > */
		/* < DTS2011102401822 liwei 20111024 begin */
		case MACH_TYPE_MSM8255_U8667:
		    strcpy(s_board_id, "MSM8255_U8667");
            strcpy(hw_version_id, "HD1U866M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
		/* DTS2011102401822 liwei 20111024 end > */
		/* DTS2011082201029 liwei 20110819 end > */
		/* <DTS2011091200073 zhangbo 20110912 begin */
        case MACH_TYPE_MSM8255_U8730:
            strcpy(s_board_id, "MSM8255_U8730");
            strcpy(hw_version_id, "HD1U873M ");
	        sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
            break;
    /* DTS2011091200073 zhangbo 20110912 end> */
		default:
			strcpy(s_board_id, "ERROR");
			break;
	}
    if(MACH_TYPE_MSM7X25_U8120 == machine_arch_type)
    {
        sprintf(sub_ver, ".Ver%c", 'B');
    }
    /*U8150_EU==U8150_Ver.A and U8150_JP==U8150_Ver.B*/
    else if(MACH_TYPE_MSM7X25_U8150 == machine_arch_type)
    {
        /*if sub_board_id is equal to 0(VerA), the product is U8150_EU.*/
        if(HW_VER_SUB_VA == get_hw_sub_board_id())
        {
            sprintf(sub_ver, "_EU.%c", 'A'+(char)get_hw_sub_board_id());
        }
        /*if sub_board_id is equal to 1(VerB), the product is U8150_Japan.*/
        else if(HW_VER_SUB_VB == get_hw_sub_board_id())
        {
            sprintf(sub_ver, "_JP.%c", 'A'+(char)get_hw_sub_board_id());
        }
        else
        {
            sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
        }
    }
	/* < DTS2011052400629 caomingxing 20110524 begin */
	else if(MACH_TYPE_MSM7X30_U8800_51 == machine_arch_type)
    {
        if(HW_VER_SUB_VD == get_hw_sub_board_id())
        {
            sprintf(sub_ver, ".Ver%c", 'C');
        }
        else
        {
            sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
        }
    }
	/* DTS2011052400629 caomingxing 20110524 end > */
    else
    {
        sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
    }
    strcat(s_board_id, sub_ver);
    /* < DTS2011082201029 liwei 20110819 begin */
    strcat(hw_version_id, hw_version_sub_ver);
	/* DTS2011082201029 liwei 20110819 end > */

/* < BU5D10365 liujinggang 20100521 begin*/
	lcd_name = get_lcd_panel_name();
/* BU5D10365 liujinggang 20100521 end > */
	compass_gs_name=get_compass_gs_position_name();
	
/* <DTS2010071502918 shenjinming 20101008 begin */
#ifdef CONFIG_HUAWEI_POWER_DOWN_CHARGE
    charge_flag = get_charge_flag();
    /* < DTS2011082201029 liwei 20110819 begin */
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"charge_flag:\n%d\n"
	"compass_gs_position:\n%s\n"
	"hw_version:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id,charge_flag, compass_gs_name, hw_version_id);
#else
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"compass_gs_position:\n%s\n"
	"hw_version:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, compass_gs_name, hw_version_id);
	/* DTS2011082201029 liwei 20110819 end > */
#endif
/* DTS2010071502918 shenjinming 20101008 end> */ 	
	
	return proc_calc_metrics(page, start, off, count, eof, len);
}
コード例 #26
0
/*write the position of compass into the file of "/proc/app_info" */
static int app_version_read_proc(char *page, char **start, off_t off,
				 int count, int *eof, void *data)
{
	int len;
	char *ker_ver = HUAWEI_KERNEL_VERSION;
	char *lcd_name = NULL;
	char s_board_id[BOARD_ID_LEN] = {0};
	char sub_ver[SUB_VER_LEN] = {0};
	char hw_version_id[HW_VERSION] = {0};
	char hw_version_sub_ver[HW_VERSION_SUB_VER] = {0};	
	char *compass_gs_name = NULL;
	char *wifi_name = NULL;

	switch(machine_arch_type)
	{
		case MACH_TYPE_MSM7X27_U8510:
			strcpy(s_board_id, "MSM7X27_U8510");
			break;

		case MACH_TYPE_MSM7X27_U8510_1:
			strcpy(s_board_id, "MSM7X27_U8510_1");
			break;
			
		case MACH_TYPE_MSM7X27_M650:
			strcpy(s_board_id, "MSM7X27_M650");
			break;

		case MACH_TYPE_MSM7X27_C8800:
			strcpy(s_board_id, "MSM7X27_C8800");
			break;

        case MACH_TYPE_MSM7X27_U8650:
			strcpy(s_board_id, "MSM7X27_U8650");
			break;
		
		case MACH_TYPE_MSM7X27_M865:
			strcpy(s_board_id, "MSM7X27_M865");
			break;
		case MACH_TYPE_MSM7X27_C8650:
			strcpy(s_board_id, "MSM7X27_C8650");
			break;

		default:
			strcpy(s_board_id, "ERROR");
			break;
	}

    sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
    strcat(s_board_id, sub_ver);
  
    strcat(hw_version_id, hw_version_sub_ver);
   
	lcd_name = get_lcd_panel_name();
	
	compass_gs_name=get_compass_gs_position_name();

	wifi_name = get_wifi_device_name();
	
#ifdef CONFIG_HUAWEI_KERNEL	
    memset(str_flash_nand_id,0,PROC_MANUFACTURER_STR_LEN);
    get_flash_id(str_flash_nand_id,PROC_MANUFACTURER_STR_LEN);
#endif	
    /* write the power down charge flag to the file /proc/app_info,
     * so we can read the flag in recovery mode to decide we enter  
     * the recovery mode or power down charge movie
     */
    #ifdef CONFIG_HUAWEI_POWER_DOWN_CHARGE    
    charge_flag = get_charge_flag();
    
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"hw_version:\n%s\n"
	"charge_flag:\n%d\n"
	"compass_gs_position:\n%s\n"
	"wifi_name:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, hw_version_id, charge_flag,compass_gs_name,wifi_name);
    #else
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"hw_version:\n%s\n"
	"compass_gs_position:\n%s\n"
	"wifi_name:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, hw_version_id,compass_gs_name,wifi_name);
    #endif
	
	return proc_calc_metrics(page, start, off, count, eof, len);
}
コード例 #27
0
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");
}
コード例 #28
0
ファイル: app_info.c プロジェクト: markcn/kernel_huawei_c8812
static int app_version_read_proc(char *page, char **start, off_t off,
				 int count, int *eof, void *data)
{
	int len;
	// char *ker_ver = "HUAWEI_KERNEL_VERSION";
	char *ker_ver = HUAWEI_KERNEL_VERSION;
	char *lcd_name = NULL;
	char * touch_info = NULL;
	char *wifi_device_name = NULL;
	char audio_property[AUDIO_PROPERTY_LEN] = {0};
	/*print sensor info into app_info*/
	/*< DTS2012032003522 zengxiangguang 20120320 begin */
	/* Array **_**_id must be large enough to hold both id and sub id */
	/* 'cause the following code would call strcat function to connect */
	/* sub id to array **_**_id[] */
	char s_board_id[BOARD_ID_LEN + BOARD_ID_SUB_VER_LEN] = {0};
    char sub_ver[BOARD_ID_SUB_VER_LEN] = {0};
	char hw_version_id[HW_VERSION + HW_VERSION_SUB_VER] = {0};
	char hw_version_sub_ver[HW_VERSION_SUB_VER] = {0};	
	/* DTS2012032003522 zengxiangguang 20120320 end >*/
	char *compass_gs_name = NULL;
	char *sensors_list_name = NULL;
    set_s_board_hw_version(s_board_id,hw_version_id);
    sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
   sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
    strcat(s_board_id, sub_ver);
    strcat(hw_version_id, hw_version_sub_ver);
    set_s_board_hw_version_special(hw_version_id,hw_version_sub_ver,s_board_id,sub_ver);
	compass_gs_name=get_compass_gs_position_name();
	sensors_list_name = get_sensors_list_name();
	lcd_name = get_lcd_panel_name();
	wifi_device_name = get_wifi_device_name();
	get_audio_property(audio_property);
	touch_info = get_touch_info();
	if (touch_info == NULL)
	{
		touch_info = "Unknow touch";
	}
	
#ifdef CONFIG_HUAWEI_POWER_DOWN_CHARGE
    charge_flag = get_charge_flag();
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"charge_flag:\n%d\n"
	"compass_gs_position:\n%s\n"
	"sensors_list:\n%s\n"
	"hw_version:\n%s\n"
    "wifi_chip:\n%s\n"
	"audio_property:\n%s\n"
	"touch_info:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id,charge_flag, compass_gs_name,sensors_list_name, hw_version_id,wifi_device_name,audio_property, touch_info);
#else
	len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
	"%s\n"
	"KERNEL_VER:\n"
	"%s\n"
	 "FLASH_ID:\n"
	"%s\n"
	"board_id:\n%s\n"
	"lcd_id:\n%s\n"
	"cam_id:\n%d\n"
	"ts_id:\n%d\n"
	"compass_gs_position:\n%s\n"
	"sensors_list:\n%s\n"
	"hw_version:\n%s\n"
	"audio_property:\n%s\n"
	"touch_info:\n%s\n",
	appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, compass_gs_name,sensors_list_name, hw_version_id,audio_property, touch_info);
#endif
	
	return proc_calc_metrics(page, start, off, count, eof, len);
}
コード例 #29
0
/*<BU5D08118 zhangtao 20100419 begin*/
static int aps_12d_probe(
	
	struct i2c_client *client, const struct i2c_device_id *id)
{	
	int ret;
	struct aps_data *aps;
	/*the aps_12d sensors ispower on*/
	/* <BU5D07679 zhangtao 20100413 begin */
	struct vreg *vreg_gp4=NULL;
	int rc;
/* <DTS2010100800714 liugaofei 20101008 begin */
	int i;
/* DTS2010100800714 liugaofei 20101008 end */
	
    vreg_gp4 = vreg_get(NULL, VREG_GP4_NAME);
    /* < DTS2010061200552 zhangtao 20100612 begin */
    if (IS_ERR(vreg_gp4)) 
    {
	    pr_err("%s:gp4 power init get failed\n", __func__);
    }
    /* DTS2010061200552 zhangtao 20100612 end> */

    /* <DTS2011012600839 liliang 20110215 begin */
    /* set gp4 voltage as 2700mV for all */
    rc = vreg_set_level(vreg_gp4,VREG_GP4_VOLTAGE_VALUE_2700);
    /* <DTS2011012600839 liliang 20110215 end >*/
    
	if (rc) {
		PROXIMITY_DEBUG("%s: vreg_gp4  vreg_set_level failed \n", __func__);
		return rc;
	}
	rc = vreg_enable(vreg_gp4);
	if (rc) {
		pr_err("%s: vreg_gp4    vreg_enable failed \n", __func__);
		return rc;
	}
	mdelay(5);
       /* BU5D07679 zhangtao 20100413 end> */
	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		PROXIMITY_DEBUG(KERN_ERR "aps_12d_probe: need I2C_FUNC_I2C\n");
		ret = -ENODEV;
		goto err_check_functionality_failed;
	}

	/* < DTS2010091001474 zhangtao 20100910 begin */
	/* if querry the board is T1 or T2 turn off the proximity */
    /*< DTS2010092400487  lijianzhao 20100924 begin */
    /* This modification for version A&B of U8800,only */
	if((machine_is_msm7x30_u8800())&&((get_hw_sub_board_id() == HW_VER_SUB_VA) || ((get_hw_sub_board_id() == HW_VER_SUB_VB))))
	{
		printk(KERN_ERR "aps_12d_probe: aps is not supported in U8800 and U8800 T1 board!\n");
		ret = -ENODEV;
		goto err_check_functionality_failed; 
	}    
    /* DTS2010092400487  lijianzhao 20100924 end >*/ 
	/* DTS2010091001474 zhangtao 20100910 end > */

	aps = kzalloc(sizeof(*aps), GFP_KERNEL);
	if (aps == NULL) {
		ret = -ENOMEM;
		goto err_alloc_data_failed;
	}

	mutex_init(&aps->mlock);
	
	INIT_WORK(&aps->work, aps_12d_work_func);
	aps->client = client;
	i2c_set_clientdata(client, aps);

	PROXIMITY_DEBUG(KERN_INFO "ghj aps_12d_probe send command 2\n ");
	
	/* Command 2 register: 25mA,DC,12bit,Range1 */

	/* < DTS2010081803338 zhangtao 20100818 begin */
	/* make the rang smaller can make the ir changge bigger */
	ret = aps_i2c_reg_write(aps, APS_12D_REG_CMD2, \
/* < DTS2010102103994 zhangtao 20101112 begin */
	                         (uint8_t)(APS_12D_IRDR_SEL_50MA << 6 | \
	                                   APS_12D_FREQ_SEL_DC << 4 | \
	                                   APS_12D_RES_SEL_12 << 2 | \
	                                   APS_12D_RANGE_SEL_ALS_1000));
/* DTS2010102103994 zhangtao 20101112 end > */
	/* DTS2010081803338 zhangtao 20100818 end > */
	if(ret < 0)
	{
		goto err_detect_failed;
	}
/* <DTS2010100800714 liugaofei 20101008 begin */
	range_index = 0;

	for(i = 0; i < TOTAL_RANGE_NUM; i++)
	{
		/* NOTE: do NOT use the last one */
		up_range_value[i] = MAX_ADC_OUTPUT - high_threshold_value[i] - RANGE_FIX; 
	}

	down_range_value[0] = 0;
	for(i = 1; i < TOTAL_RANGE_NUM; i++)
	{
		/* NOTE: do not use the first one */
		down_range_value[i] = (MAX_ADC_OUTPUT - high_threshold_value[i-1] - (MAX_ADC_OUTPUT / ADJUST_GATE)) / 4; 
	}
/* DTS2010100800714 liugaofei 20101008 end */

	/* < DTS2011042705601 zhangtao 20110427 begin */
	/*we don't use the input device sensors again */
	aps->input_dev = input_allocate_device();
	if (aps->input_dev == NULL) {
		ret = -ENOMEM;
		PROXIMITY_DEBUG(KERN_ERR "aps_12d_probe: Failed to allocate input device\n");
		goto err_input_dev_alloc_failed;
	}
	aps->input_dev->name = "sensors_aps";
	
	aps->input_dev->id.bustype = BUS_I2C;
	
	input_set_drvdata(aps->input_dev, aps);
	
	ret = input_register_device(aps->input_dev);
	if (ret) {
		printk(KERN_ERR "aps_probe: Unable to register %s input device\n", aps->input_dev->name);
		goto err_input_register_device_failed;
	}
	/* DTS2011042705601 zhangtao 20110427 end > */
	
	set_bit(EV_ABS, aps->input_dev->evbit);
	input_set_abs_params(aps->input_dev, ABS_LIGHT, 0, 10240, 0, 0);
	input_set_abs_params(aps->input_dev, ABS_DISTANCE, 0, 1, 0, 0);

	ret = misc_register(&light_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: light_device register failed\n");
		goto err_light_misc_device_register_failed;
	}

	ret = misc_register(&proximity_device);
	if (ret) {
		printk(KERN_ERR "aps_12d_probe: proximity_device register failed\n");
		goto err_proximity_misc_device_register_failed;
	}

	/* < DTS2010090300997 zhangtao 20100903 begin */

	if( light_device.minor != MISC_DYNAMIC_MINOR ){
		light_device_minor = light_device.minor;
	}

	

	if( proximity_device.minor != MISC_DYNAMIC_MINOR ){
		proximity_device_minor = proximity_device.minor ;
	}

	wake_lock_init(&proximity_wake_lock, WAKE_LOCK_SUSPEND, "proximity");
	/* DTS2010090300997 zhangtao 20100903 end > */


	hrtimer_init(&aps->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	aps->timer.function = aps_timer_func;
	
	aps_wq = create_singlethread_workqueue("aps_wq");

	if (!aps_wq) 
	{
		ret = -ENOMEM;
		goto err_create_workqueue_failed;
	}
	
	this_aps_data =aps;

    /* <DTS2011032104626 shenjinming 20110321 begin */
    #ifdef CONFIG_HUAWEI_HW_DEV_DCT
    /* detect current device successful, set the flag as present */
    set_hw_dev_flag(DEV_I2C_APS);
    #endif
    /* <DTS2011032104626 shenjinming 20110321 end> */
/* < DTS2011052606009 jiaxianghong 20110527 end */	  

	printk(KERN_INFO "aps_12d_probe: Start Proximity Sensor APS-12D\n");
/* DTS2010072801000 zhangtao 20100728 end > */

	return 0;
	
err_create_workqueue_failed:
	misc_deregister(&proximity_device);
err_proximity_misc_device_register_failed:
	misc_deregister(&light_device);
err_light_misc_device_register_failed:
err_input_register_device_failed:
	input_free_device(aps->input_dev);
err_input_dev_alloc_failed:
err_detect_failed:
	kfree(aps);
err_alloc_data_failed:
err_check_functionality_failed:
/* < DTS2010061200552 zhangtao 20100612 begin */
	if(NULL != vreg_gp4)
	{
	    /* < DTS2011052101089 shenjinming 20110521 begin */
        /* can't use the flag ret here, it will change the return value of probe function */
        vreg_disable(vreg_gp4);
        /* delete a line */
        /* DTS2011052101089 shenjinming 20110521 end > */
	}
/* DTS2010061200552 zhangtao 20100612 end > */
	return ret;
  
}