예제 #1
0
static void cm3323_work_func_light(struct work_struct *work)
{
	struct cm3323_p *data = container_of((struct delayed_work *)work,
			struct cm3323_p, work);
	unsigned long delay = nsecs_to_jiffies(atomic_read(&data->delay));

	cm3323_i2c_read_word(data, REG_RED, &data->color[0]);
	cm3323_i2c_read_word(data, REG_GREEN, &data->color[1]);
	cm3323_i2c_read_word(data, REG_BLUE, &data->color[2]);
	cm3323_i2c_read_word(data, REG_WHITE, &data->color[3]);

	input_report_rel(data->input, REL_RED, data->color[0] + 1);
	input_report_rel(data->input, REL_GREEN, data->color[1] + 1);
	input_report_rel(data->input, REL_BLUE, data->color[2] + 1);
	input_report_rel(data->input, REL_WHITE, data->color[3] + 1);
	input_sync(data->input);

	if (((int64_t)atomic_read(&data->delay) * (int64_t)data->time_count)
		>= ((int64_t)LIGHT_LOG_TIME * NSEC_PER_SEC)) {
		pr_info("[SENSOR]: %s - r = %u g = %u b = %u w = %u\n",
			__func__, data->color[0], data->color[1],
			data->color[2], data->color[3]);
		data->time_count = 0;
	} else {
		data->time_count++;
	}

	schedule_delayed_work(&data->work, delay);
}
static void cm3323_work_func_light(struct work_struct *work)
{
	struct cm3323_p *data = container_of(work, struct cm3323_p,
						    work_light);

	mutex_lock(&data->read_lock);
	cm3323_i2c_read_word(data, REG_RED, &data->color[0]);
	cm3323_i2c_read_word(data, REG_GREEN, &data->color[1]);
	cm3323_i2c_read_word(data, REG_BLUE, &data->color[2]);
	cm3323_i2c_read_word(data, REG_WHITE, &data->color[3]);
	mutex_unlock(&data->read_lock);

	input_report_rel(data->input, REL_RED, data->color[0] + 1);
	input_report_rel(data->input, REL_GREEN, data->color[1] + 1);
	input_report_rel(data->input, REL_BLUE, data->color[2] + 1);
	input_report_rel(data->input, REL_WHITE, data->color[3] + 1);
	input_sync(data->input);

	if ((ktime_to_ms(data->poll_delay) * (int64_t)data->time_count)
		>= ((int64_t)LIGHT_LOG_TIME * MSEC_PER_SEC)) {
		pr_info("[SENSOR]: %s - r = %u g = %u b = %u w = %u\n",
			__func__, data->color[0], data->color[1],
			data->color[2], data->color[3]);
		data->time_count = 0;
	} else
		data->time_count++;
}
예제 #3
0
static void cm3323_work_func_light(struct work_struct *work)
{
	struct cm3323_p *data = container_of((struct delayed_work *)work,
			struct cm3323_p, work);
	unsigned long delay = nsecs_to_jiffies(atomic_read(&data->delay));

	cm3323_i2c_read_word(data, REG_RED, &data->color[0]);
	cm3323_i2c_read_word(data, REG_GREEN, &data->color[1]);
	cm3323_i2c_read_word(data, REG_BLUE, &data->color[2]);
	cm3323_i2c_read_word(data, REG_WHITE, &data->color[3]);

	input_report_rel(data->input, REL_RED, data->color[0] + 1);
	input_report_rel(data->input, REL_GREEN, data->color[1] + 1);
	input_report_rel(data->input, REL_BLUE, data->color[2] + 1);
	input_report_rel(data->input, REL_WHITE, data->color[3] + 1);
	input_sync(data->input);

#ifdef CONFIG_SENSORS_ESD_DEFENCE
	if ((data->color[0] == 0) && (data->color[1] == 0)
		&& (data->color[3] == 0) && (data->color[2] == 0)
		&& (data->reset_cnt < 20))
		data->zero_cnt++;
	else
		data->zero_cnt = 0;

	if (data->zero_cnt >= 25) {
		pr_info("[SENSOR]: %s - ESD Defence Reset!\n", __func__);
		cm3323_i2c_write(data, REG_CS_CONF1, als_reg_setting[1][1]);
		usleep_range(1000, 10000);
		cm3323_i2c_write(data, REG_CS_CONF1, als_reg_setting[0][1]);
		data->zero_cnt = 0;
		data->reset_cnt++;
	}
#endif

	if (((int64_t)atomic_read(&data->delay) * (int64_t)data->time_count)
		>= ((int64_t)LIGHT_LOG_TIME * NSEC_PER_SEC)) {
		pr_info("[SENSOR]: %s - r = %u g = %u b = %u w = %u\n",
			__func__, data->color[0], data->color[1],
			data->color[2], data->color[3]);
		data->time_count = 0;
	} else {
		data->time_count++;
	}

	schedule_delayed_work(&data->work, delay);
}
예제 #4
0
static void cm3323_work_func_light(struct work_struct *work)
{
	struct cm3323_data *cm3323 = container_of(work, struct cm3323_data,
						    work_light);

	mutex_lock(&cm3323->read_lock);
	cm3323_i2c_read_word(cm3323, REG_RED, &cm3323->color[0]);
	cm3323_i2c_read_word(cm3323, REG_GREEN, &cm3323->color[1]);
	cm3323_i2c_read_word(cm3323, REG_BLUE, &cm3323->color[2]);
	cm3323_i2c_read_word(cm3323, REG_WHITE, &cm3323->color[3]);
	mutex_unlock(&cm3323->read_lock);

	input_report_rel(cm3323->light_input_dev, REL_RED,
		cm3323->color[0]+1);
	input_report_rel(cm3323->light_input_dev, REL_GREEN,
		cm3323->color[1]+1);
	input_report_rel(cm3323->light_input_dev, REL_BLUE,
		cm3323->color[2]+1);
	input_report_rel(cm3323->light_input_dev, REL_WHITE,
		cm3323->color[3]+1);
	input_sync(cm3323->light_input_dev);

	if (cm3323->count_log_time >= LIGHT_LOG_TIME) {
		pr_info("%s, red = %u green = %u blue = %u white = %u\n",
			__func__, cm3323->color[0]+1, cm3323->color[1]+1,
			cm3323->color[2]+1, cm3323->color[3]+1);
		cm3323->count_log_time = 0;
	} else
		cm3323->count_log_time++;

#ifdef CM3323_DEBUG
	pr_info("%s, red = %u green = %u blue = %u white = %u\n",
		__func__, cm3323->color[0]+1, cm3323->color[1]+1,
		cm3323->color[2]+1, cm3323->color[3]1);
#endif
}