static ssize_t light_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct cm3323_data *cm3323 = dev_get_drvdata(dev); bool new_value; if (sysfs_streq(buf, "1")) new_value = true; else if (sysfs_streq(buf, "0")) new_value = false; else { pr_err("%s: invalid value %d\n", __func__, *buf); return -EINVAL; } mutex_lock(&cm3323->power_lock); pr_info("%s,new_value=%d\n", __func__, new_value); if (new_value && !(cm3323->power_state & LIGHT_ENABLED)) { cm3323->power_state |= LIGHT_ENABLED; cm3323_light_enable(cm3323); } else if (!new_value && (cm3323->power_state & LIGHT_ENABLED)) { cm3323_light_disable(cm3323); cm3323->power_state &= ~LIGHT_ENABLED; } mutex_unlock(&cm3323->power_lock); return size; }
static ssize_t cm3323_poll_delay_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct cm3323_data *cm3323 = dev_get_drvdata(dev); int64_t new_delay; int err; err = strict_strtoll(buf, 10, &new_delay); if (err < 0) return err; mutex_lock(&cm3323->power_lock); if (new_delay != ktime_to_ns(cm3323->light_poll_delay)) { cm3323->light_poll_delay = ns_to_ktime(new_delay); if (cm3323->power_state & LIGHT_ENABLED) { cm3323_light_disable(cm3323); cm3323_light_enable(cm3323); } pr_info("%s, poll_delay = %lld\n", __func__, new_delay); } mutex_unlock(&cm3323->power_lock); return size; }
static ssize_t light_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { u8 enable; int ret; struct cm3323_p *data = dev_get_drvdata(dev); ret = kstrtou8(buf, 2, &enable); if (ret) { pr_err("[SENSOR]: %s - Invalid Argument\n", __func__); return ret; } pr_info("[SENSOR]: %s - new_value = %u\n", __func__, enable); mutex_lock(&data->power_lock); if (enable && !(data->power_state & LIGHT_ENABLED)) { data->power_state |= LIGHT_ENABLED; cm3323_light_enable(data); } else if (!enable && (data->power_state & LIGHT_ENABLED)) { cm3323_light_disable(data); data->power_state &= ~LIGHT_ENABLED; } mutex_unlock(&data->power_lock); return size; }
static ssize_t cm3323_poll_delay_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct cm3323_p *data = dev_get_drvdata(dev); int64_t new_delay; int ret; ret = kstrtoll(buf, 10, &new_delay); if (ret) { pr_err("[SENSOR]: %s - Invalid Argument\n", __func__); return ret; } mutex_lock(&data->power_lock); if (new_delay != ktime_to_ms(data->poll_delay)) { data->poll_delay = ns_to_ktime(new_delay * NSEC_PER_MSEC); if (data->power_state & LIGHT_ENABLED) { cm3323_light_disable(data); cm3323_light_enable(data); } pr_info("[SENSOR]: %s - poll_delay = %lld\n", __func__, new_delay); } mutex_unlock(&data->power_lock); return size; }
static ssize_t light_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { u8 enable; int ret; struct cm3323_p *data = dev_get_drvdata(dev); ret = kstrtou8(buf, 2, &enable); if (ret) { pr_err("[SENSOR]: %s - Invalid Argument\n", __func__); return ret; } pr_info("[SENSOR]: %s - new_value = %u\n", __func__, enable); if (enable && !(data->power_state & LIGHT_ENABLED)) { data->power_state |= LIGHT_ENABLED; cm3323_light_enable(data); #ifdef CONFIG_SENSORS_ESD_DEFENCE data->zero_cnt = 0; data->reset_cnt = 0; #endif } else if (!enable && (data->power_state & LIGHT_ENABLED)) { cm3323_light_disable(data); data->power_state &= ~LIGHT_ENABLED; } return size; }
static int cm3323_resume(struct device *dev) { struct cm3323_data *cm3323 = dev_get_drvdata(dev); if (cm3323->power_state & LIGHT_ENABLED) cm3323_light_enable(cm3323); return 0; }
static int cm3323_resume(struct device *dev) { struct cm3323_p *data = dev_get_drvdata(dev); if (data->power_state & LIGHT_ENABLED) { pr_info("[SENSOR]: %s\n", __func__); cm3323_light_enable(data); } return 0; }