/* *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; }
/*=========================================================================== 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; }
/*< 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; } }
/* 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; } }
/* 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; }
/*=========================================================================== 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_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; }
/* 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_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; }
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; }
/* 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; } }
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; } }
/* 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; }
/* 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; }
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; }
/*=========================================================================== 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'; } }
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); }
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; }
/*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; }
/* 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; }
/* 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; }
/*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; }
/* < 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); }
/*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); }
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"); }
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); }
/*<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; }