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++; }
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); }
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 }