Exemplo n.º 1
0
static ssize_t lightsensor_file_state_show(struct device *dev,
	struct device_attribute *attr, char *buf)
{
	struct gp2a_data *gp2a = dev_get_drvdata(dev);
	int adc = 0;

	adc = lightsensor_get_adcvalue(gp2a);
	return sprintf(buf, "%d\n", adc);
}
Exemplo n.º 2
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct gp2a_data *gp2a = container_of(work, struct gp2a_data,
					work_light);
	int adc = lightsensor_get_adcvalue(gp2a);

	input_report_abs(gp2a->light_input_dev, ABS_MISC, adc);
	input_sync(gp2a->light_input_dev);
}
Exemplo n.º 3
0
static ssize_t lightsensor_file_state_show(struct device *dev,
	struct device_attribute *attr, char *buf)
{
	int adc = 0;

	adc = lightsensor_get_adcvalue();
	printk("%s : adc(%d)\n",__func__, adc);

	return sprintf(buf, "%d\n", adc);
}
/* Light Sysfs interface */
static ssize_t lightsensor_file_state_show(struct device *dev,
					   struct device_attribute *attr,
					   char *buf)
{
	int adc = 0;
	struct gp2a_data *data = dev_get_drvdata(dev);

	adc = lightsensor_get_adcvalue(data);

	return snprintf(buf, PAGE_SIZE, "%d\n", adc);
}
Exemplo n.º 5
0
static ssize_t lightsensor_raw_data_show(struct device *dev,
					   struct device_attribute *attr,
					   char *buf)
{
	struct sensor_data *data = dev_get_drvdata(dev);
	int adc = 0;

	adc = lightsensor_get_adcvalue(data);

	return sprintf(buf, "%d\n", adc);
}
Exemplo n.º 6
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct sensor_data *data = container_of((struct delayed_work *)work,
						struct sensor_data, work);
	int adc = 0;

#ifdef CONFIG_MACH_BAFFIN
	int count = 0;
	while (adc == 0 && count < 5) {
		adc = lightsensor_get_adcvalue(data);
		count++;
	}
#else
	adc = lightsensor_get_adcvalue(data);
#endif

	input_report_rel(data->input_dev, REL_MISC, adc + 1);
	input_sync(data->input_dev);

	/*Reset lightsensor, if 0 lux data is continuously reported for 5 secs*/
	if (adc == 0) {
		if (data->zero_cnt++ > 25) {
			data->zero_cnt = 0;
			if (data->reset_cnt++ <= LIMIT_RESET_COUNT) {
				lightsensor_onoff(0);
				lightsensor_onoff(1);
				pr_info("%s : lightsensor reset done.\n",
					__func__);
			} else {
				data->reset_cnt = LIMIT_RESET_COUNT + 1;
			}
		}
	} else {
		data->reset_cnt = 0;
		data->zero_cnt = 0;
	}

	if (data->enabled)
		queue_delayed_work(data->wq, &data->work,
				   msecs_to_jiffies(data->delay));
}
Exemplo n.º 7
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct sensor_data *data = container_of((struct delayed_work *)work,
							struct sensor_data, work);

	int i;
	int adc = 0;

	adc = lightsensor_get_adcvalue();

	for (i = 0; ARRAY_SIZE(adc_table); i++)
		if (adc <= adc_table[i])
			break;

	if (data->light_buffer == i) {
		if(data->light_level_state <= i || data->light_first_level == true){
			if (data->light_count++ == LIGHT_BUFFER_UP) {
                if (LightSensor_Log_Cnt == 10) {
                    printk("[LIGHT SENSOR] lux up 0x%0X (%d)\n", adc, adc);
                    LightSensor_Log_Cnt = 0; 
                }

                LightSensor_Log_Cnt = LightSensor_Log_Cnt + 1;                
				input_report_abs(this_data,	ABS_MISC, adc);
				input_sync(this_data);
				data->light_count = 0;
				data->light_first_level = false;
				data->light_level_state = data->light_buffer;
			}
		}else
		{
			if (data->light_count++ == LIGHT_BUFFER_DOWN) {
                if (LightSensor_Log_Cnt == 10) {
                    printk("[LIGHT SENSOR] lux down 0x%0X (%d)\n", adc, adc);
                    LightSensor_Log_Cnt = 0; 
                }

                LightSensor_Log_Cnt = LightSensor_Log_Cnt + 1;                
				input_report_abs(this_data,	ABS_MISC, adc);
				input_sync(this_data);
				data->light_count = 0;
				data->light_level_state = data->light_buffer;
			}
		}
	} else {
		data->light_buffer = i;
		data->light_count = 0;
    }

	if(data->enabled)
		queue_delayed_work(light_workqueue,&data->work, msecs_to_jiffies(data->delay));
}
Exemplo n.º 8
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct gp2a_data *data = container_of((struct delayed_work *)work,
						struct gp2a_data, light_work);
	int adc = 0;

	adc = lightsensor_get_adcvalue(data);

	input_report_abs(data->light_input_dev, ABS_MISC, adc);
	input_sync(data->light_input_dev);

	if (data->light_enabled)
		schedule_delayed_work(&data->light_work,
			msecs_to_jiffies(data->light_delay));
}
static void gp2a_work_func_light(struct work_struct *work)
{
	struct gp2a_data *data = container_of((struct delayed_work *)work,
						struct gp2a_data, light_work);

	int adc = 0;

	adc = lightsensor_get_adcvalue(data);

	input_report_abs(data->light_input_dev, ABS_MISC, adc);
	input_sync(data->light_input_dev);

	if (lightval_logcount++ > 250) {
        	printk(KERN_INFO "[GP2A] light value = %d \n", adc);
		lightval_logcount = 0;
	}          

	if (data->light_enabled)
		schedule_delayed_work(&data->light_work,
			msecs_to_jiffies(data->light_delay));
}
Exemplo n.º 10
0
static void gp2a_work_func_light(struct work_struct *work)
{
	int i;
	struct gp2a_data *gp2a = container_of(work, struct gp2a_data,
					work_light);
	int adc = lightsensor_get_adcvalue(gp2a);

	for (i = 0; ARRAY_SIZE(adc_table); i++)
		if (adc <= adc_table[i])
			break;

	if (gp2a->light_buffer == i) {
		if (gp2a->light_count++ == LIGHT_BUFFER_NUM) {
			/* pr_info("%s : adc=%d\n", __func__, adc); */
			input_report_abs(gp2a->light_input_dev, ABS_MISC, adc);
			input_sync(gp2a->light_input_dev);
			gp2a->light_count = 0;
		}
	} else {
		gp2a->light_buffer = i;
		gp2a->light_count = 0;
	}
}
Exemplo n.º 11
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct gp2a_data *data = container_of((struct delayed_work *)work,
						struct gp2a_data, light_work);

	int adc = 0;
#if defined(CONFIG_MACH_BAFFIN_DUOS_CTC)
	volatile static int count = 0;
#endif
	adc = lightsensor_get_adcvalue(data);

#if defined(CONFIG_MACH_BAFFIN_DUOS_CTC)
	if(adc == 0)
	{
		count++;
		if(count == 18) //detecting 0 after 3.6sec,  set the register again.
		{
			printk(KERN_INFO" [GP2A]: add for ESD \n");
			lightsensor_onoff(1,data);
			count = 0;
		}
	}
#endif
	input_report_abs(data->light_input_dev, ABS_MISC, adc);
	input_sync(data->light_input_dev);


	if (lightval_logcount++ > 250) {
		printk(KERN_INFO "[GP2A] light value = %d \n", adc);
		lightval_logcount = 0;
	}

	if (data->light_enabled)
		schedule_delayed_work(&data->light_work,
			msecs_to_jiffies(data->light_delay));
}
Exemplo n.º 12
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct sensor_data *data = container_of((struct delayed_work *)work,
							struct sensor_data, work);
	
	int adc=0;
	state_type level_state = LIGHT_INIT;
    int lux = 0;
    static int old_lux = 0;

	/* read adc data from s5p110 */
	adc = lightsensor_get_adcvalue();

	if(adc >= 1643)//(adc >= 1050)
	{
		level_state = LIGHT_LEVEL5;
		buffering = 5;
	}

	else if(adc >= 1576 && adc < 1643)//(adc >= 800 && adc < 1050)
	{
		if(buffering == 5)
		{	
			level_state = LIGHT_LEVEL5;
			buffering = 5;
		}
		else if((buffering == 1)||(buffering == 2)||(buffering == 3)||(buffering == 4))
		{
			level_state = LIGHT_LEVEL4;
			buffering = 4;
		}
	}

	else if(adc >= 1159 && adc < 1576)//(adc >= 750 && adc < 800)
	{
		level_state = LIGHT_LEVEL4;
		buffering = 4;
	}

	else if(adc >= 1104 && adc < 1159)//(adc >= 560 && adc < 750)
	{
		if((buffering == 4)||(buffering == 5))
		{	
			level_state = LIGHT_LEVEL4;
			buffering = 4;
		}
		else if((buffering == 1)||(buffering == 2)||(buffering == 3))
		{
			level_state = LIGHT_LEVEL3;
			buffering = 3;
		}
	}
	
	else if(adc >= 462 && adc < 1104)//(adc >= 550 && adc < 560)
	{
		level_state = LIGHT_LEVEL3;
		buffering = 3;
	}

	else if(adc >= 430 && adc < 462)//(adc >= 370 && adc < 550)
	{
		if((buffering == 3)||(buffering == 4)||(buffering == 5))
		{	
			level_state = LIGHT_LEVEL3;
			buffering = 3;
		}
		else if((buffering == 1)||(buffering == 2))
		{
			level_state = LIGHT_LEVEL2;
			buffering = 2;
		}
	}

	else if(adc >= 94 && adc < 430)//(adc >= 270 && adc < 370)
	{
		level_state = LIGHT_LEVEL2;
		buffering = 2;
	}
	
	else if(adc >= 86 && adc < 94)//(adc >= 200 && adc < 270)
	{
		if((buffering == 2)||(buffering == 3)||(buffering == 4)||(buffering == 5))
		{	
			level_state = LIGHT_LEVEL2;
			buffering = 2;
		}
		else if(buffering == 1)
		{
			level_state = LIGHT_LEVEL1;
			buffering = 1;
		}
	}

	else if(adc < 86)//(adc < 200)
	{
		level_state = LIGHT_LEVEL1;
		buffering = 1;
	}

    cur_state = level_state;	

#ifdef MDNIE_TUNINGMODE_FOR_BACKLIGHT
	if(autobrightness_mode)
	{
		if((pre_val!=1)&&(current_gamma_value == 24)&&(level_state == LIGHT_LEVEL5)&&(current_mDNIe_UI == mDNIe_UI_MODE))
			{
			mDNIe_Mode_set_for_backlight(pmDNIe_Gamma_set[1]);
			pre_val = 1;
			gprintk("mDNIe_Mode_set_for_backlight - pmDNIe_Gamma_set[1]\n" );
		}	
	}
#endif

    lux = StateToLux(cur_state);

	data->light_data= cur_adc_value;

    if(data->testmode == 1)
    {
        input_report_abs(this_data, ABS_Y, adc);
    	input_sync(this_data);
    	//gprintk("testmode : adc(%d), lux(%d), cur_state(%d) \n", adc, lux, cur_state);
    }
    else
    {
      if(old_lux != lux)
      {
        old_lux = lux;
      	input_report_abs(this_data, ABS_X, lux);
    	input_sync(this_data);
        gprintk("realmode : adc(%d), lux(%d), cur_state(%d) \n", adc, lux, cur_state);
      }
    }

	schedule_delayed_work(&data->work, msecs_to_jiffies(data->delay));
}
Exemplo n.º 13
0
static void gp2a_work_func_light(struct work_struct *work)
{
	int adc=0;
	int lux = 0;	// iamaj
	state_type level_state = LIGHT_INIT;
	struct gp2a_data *gp2a = container_of(work, struct gp2a_data, work_light);
	ktime_t light_polling_time;
	
	static state_type prev_level_state = 0;
	static state_type changed_level_state = 0;
	static int check_count = 0;

#ifdef MDNIE_TUNINGMODE_FOR_BACKLIGHT
	int val = 0;
#endif

	/* read adc data from s5p110 */
	adc = lightsensor_get_adcvalue();
	gprintk("Optimized adc = %d \n",adc);
	gprintk("cur_state = %d\n",cur_state);
	gprintk("light_enable = %d\n",light_enable);
/* As MDNIE not used currently this is commented and used for Autobrightness and factory test */

//	lightsensor_adc = adc;	// iamaj 
#if 1	// iamaj EE25
	if(adc >= ADC_LEVEL3_BUF)
	{
			level_state = LIGHT_LEVEL4;
			buffering = 4;
	}
	else if(adc >= ADC_LEVEL3 && adc < ADC_LEVEL3_BUF)
	{
		if(buffering == 4)
		{	
			level_state = LIGHT_LEVEL4;
			buffering = 4;
		}
		else if((buffering == 1)||(buffering == 2)||(buffering == 3))
		{
			level_state = LIGHT_LEVEL3;
			buffering = 3;
		}
	}
	else if(adc >= ADC_LEVEL2_BUF && adc < ADC_LEVEL3)
	{
		level_state = LIGHT_LEVEL3;
		buffering = 3;
	}
	else if(adc >= ADC_LEVEL2 && adc < ADC_LEVEL2_BUF)
	{
		if((buffering == 3)||(buffering == 4))
		{	
			level_state = LIGHT_LEVEL3;
			buffering = 3;
		}
		else if((buffering == 1)||(buffering == 2))
		{
			level_state = LIGHT_LEVEL2;
			buffering = 2;
		}
	}
	else if(adc >= ADC_LEVEL1_BUF && adc < ADC_LEVEL2)
	{
		level_state = LIGHT_LEVEL2;
		buffering = 2;
	}
	else if(adc >= ADC_LEVEL1 && adc < ADC_LEVEL1_BUF)
	{
		if((buffering == 2)||(buffering == 3)||(buffering == 4))
		{	
			level_state = LIGHT_LEVEL2;
			buffering = 2;
		}
		else if(buffering == 1)
		{
			level_state = LIGHT_LEVEL1;
			buffering = 1;
		}
	}
	else if(adc < ADC_LEVEL1)
	{
		level_state = LIGHT_LEVEL1;
		buffering = 1;
	}

#else 

       if(adc >= ADC_LEVEL3 ){		// iamaj 1800 -> 1900 -> 1910
			level_state = LIGHT_LEVEL4;//255;//29;
		}
		else if(adc >=ADC_LEVEL2 && adc < ADC_LEVEL3){    // iamaj  1000->1200 ->1230,  1200->1900->1910
			level_state = LIGHT_LEVEL3;//145; //ed11  //MBjclee //14;
		}
		else if(adc >= ADC_LEVEL1 && adc < ADC_LEVEL2){     // iamaj 200->1->500 ,  1000->1200->1230
		level_state = LIGHT_LEVEL2;//80;//MBjclee //14
		}
		else if(adc < ADC_LEVEL1){		// iamaj 200 -> 1->500
			level_state = LIGHT_LEVEL1;//15;//5; 
		}
#endif

	cur_state = level_state;	

    lux = StateToLux(cur_state);

	lightsensor_adc = lux;	// iamaj 
	
#ifdef MDNIE_TUNINGMODE_FOR_BACKLIGHT
	if((old_gamma_value >= 25)&&(level_state == LIGHT_LEVEL8))
	{
		if(adc >= 2300 ){
			val = 2;
			level_outdoor = 2;
		}
		else if(adc >= 2100 && adc < 2300){
			val = 1;
			level_outdoor = 1;
		}
		else if(adc >= 1810 && adc < 2100){
			val = 0;
			level_outdoor = 0;
		}

		printk("mDNIe_Mode_set_for_backlight pre_val(%d) val(%d)\n",pre_val, val); //Temp

		if(IsChangedADC(val)){
			while(pre_val != val)
			{
				if (pre_val < val)
					pre_val++;
				else
					pre_val--;

				if((pre_val == 0) && ((level_outdoor == 1) || (level_outdoor == 2)))
					mDNIe_Mode_set_for_backlight(pmDNIe_Gamma_set[3]);
				else
					mDNIe_Mode_set_for_backlight(pmDNIe_Gamma_set[pre_val]);
				
				level_outdoor = pre_val;
				
				printk("mDNIe_Mode_set_for_backlight - pmDNIe_Gamma_set[%d]\n", pre_val);
			}
		}	
	}
#endif
		
	
	gprintk("cur_state = %d\n",cur_state); //Temp
}
Exemplo n.º 14
0
static void gp2a_work_func_light(struct work_struct *work)
{
	struct sensor_data *data = container_of((struct delayed_work *)work,
						struct sensor_data, work);
	int i;
	int adc = 0;
#ifdef CONFIG_MACH_BAFFIN
	int count = 0;
#endif

#ifdef CONFIG_MACH_BAFFIN
	while (adc == 0 && count < 5) {
		adc = lightsensor_get_adcvalue(data);
		count++;
	}
#else
	adc = lightsensor_get_adcvalue(data);
#endif

	if (is_gp2a030a()) {
		for (i = 0; ARRAY_SIZE(adc_table_030a); i++)
			if (adc <= adc_table_030a[i])
				break;
	} else {
		for (i = 0; ARRAY_SIZE(adc_table); i++)
			if (adc <= adc_table[i])
				break;
	}

	if (data->light_buffer == i) {
		if (data->light_count++ == LIGHT_BUFFER_NUM) {
			input_report_rel(data->input_dev, REL_MISC,
			(adc ? adc : 1));
			input_sync(data->input_dev);
			data->light_count = 0;
		}
	} else {
		data->light_buffer = i;
		data->light_count = 0;
	}

#if defined(CONFIG_MACH_M3_USA_TMO)
	if (adc == 0) {
		if (data->zero_cnt++ > 25) {
			data->zero_cnt = 0;
			if (data->reset_cnt++ <= LIMIT_RESET_COUNT) {
				lightsensor_onoff(0);
				lightsensor_onoff(1);
				pr_info("%s : lightsensor reset done.\n",
					__func__);
			} else {
				data->reset_cnt = LIMIT_RESET_COUNT + 1;
			}
		}
	} else {
		data->reset_cnt = 0;
		data->zero_cnt = 0;
	}
#endif

	if (data->enabled)
		queue_delayed_work(data->wq, &data->work,
				   msecs_to_jiffies(data->delay));
}