static ssize_t proximity_cal_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct px3215_data *data = dev_get_drvdata(dev); bool do_calib; int err; if (sysfs_streq(buf, "1")) { /* calibrate cancelation value */ do_calib = true; } else if (sysfs_streq(buf, "0")) { /* reset cancelation value */ do_calib = false; } else { pr_err("%s: invalid value %d\n", __func__, *buf); err = -EINVAL; goto done; } err = proximity_do_calibrate(data, do_calib, false); if (err < 0) { pr_err("%s: proximity_store_offset() failed\n", __func__); goto done; } else err = size; done: return err; }
static ssize_t proximity_thresh_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct gp2a_data *data = dev_get_drvdata(dev); long thresh_value = 0; int err = 0; is_threshold_changed = 1; err = strict_strtol(buf, 10, &thresh_value); if (unlikely(err < 0)) { pr_err("%s, kstrtoint failed.", __func__); goto done; } data->threshold_high = (uint16_t)thresh_value; err = proximity_do_calibrate(data, true, true); if (err < 0) { pr_err("%s: thresh_store failed\n", __func__); goto done; } msleep(20); done: return size; }