Beispiel #1
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));
}
static void ssp_sensorhub_report_library(struct ssp_sensorhub_data *hub_data)
{
	input_report_rel(hub_data->sensorhub_input_dev, DATA, DATA);
	input_sync(hub_data->sensorhub_input_dev);
	wake_lock_timeout(&hub_data->sensorhub_wake_lock, WAKE_LOCK_TIMEOUT);
}
Beispiel #3
0
void wacom_report_rel(void *wcombo, unsigned int rel_type, int rel_data)
{
    input_report_rel(get_input_dev((struct wacom_combo *)wcombo), rel_type, rel_data);
    return;
}