}
+static ssize_t show_fixed_sensor_fps(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ return snprintf(buf, PAGE_SIZE, "current_fps(%d), max_fps(%d)\n",
+ sysfs_sensor.frame_duration,
+ sysfs_sensor.max_fps);
+}
+
+static ssize_t store_fixed_sensor_fps(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ int ret;
+ int input_val;
+
+ ret = kstrtoint(buf, 0, &input_val);
+ if (ret) {
+ err("Fail to conversion on success(%d)\n", ret);
+ return ret;
+ }
+
+ if (sysfs_sensor.is_fps_en) {
+ if (input_val > sysfs_sensor.max_fps) {
+ warn("Over max fps(%d), setting current fps to max(%d -> %d)\n",
+ FIXED_MAX_FPS_VALUE, input_val, FIXED_MAX_FPS_VALUE);
+
+ sysfs_sensor.set_fps = input_val;
+ input_val = sysfs_sensor.max_fps;
+ } else if (input_val < FIXED_MIN_FPS_VALUE) {
+ warn("Lower than enable to sensor fps setting, setting to (%d -> %d)\n",
+ input_val, FIXED_MIN_FPS_VALUE);
+
+ input_val = FIXED_MIN_FPS_VALUE;
+ }
+
+ sysfs_sensor.frame_duration = input_val;
+ } else
+ warn("Not enable a is_fps_en, has to first setting is_fps_en\n");
+
+ return count;
+}
+
+static ssize_t show_en_fixed_sensor_fps(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ if (sysfs_sensor.is_fps_en)
+ return snprintf(buf, PAGE_SIZE, "%s\n", "enabled");
+ else
+ return snprintf(buf, PAGE_SIZE, "%s\n", "disabled");
+}
+
+static ssize_t store_en_fixed_sensor_fps(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ if (buf[0] == '1')
+ sysfs_sensor.is_fps_en = true;
+ else {
+ sysfs_sensor.is_fps_en = false;
+ sysfs_sensor.frame_duration = FIXED_MAX_FPS_VALUE;
+ }
+
+ return count;
+}
+
static ssize_t show_en_fixed_sensor(struct device *dev, struct device_attribute *attr,
char *buf)
{
#ifdef FIXED_SENSOR_DEBUG
static DEVICE_ATTR(fixed_sensor_val, 0644, show_fixed_sensor_val, store_fixed_sensor_val);
+static DEVICE_ATTR(fixed_sensor_fps, 0644, show_fixed_sensor_fps, store_fixed_sensor_fps);
+static DEVICE_ATTR(en_fixed_sensor_fps, 0644, show_en_fixed_sensor_fps, store_en_fixed_sensor_fps);
static DEVICE_ATTR(en_fixed_sensor, 0644, show_en_fixed_sensor, store_en_fixed_sensor);
#endif
#endif
&dev_attr_fixed_position.attr,
#ifdef FIXED_SENSOR_DEBUG
&dev_attr_fixed_sensor_val.attr,
+ &dev_attr_fixed_sensor_fps.attr,
+ &dev_attr_en_fixed_sensor_fps.attr,
&dev_attr_en_fixed_sensor.attr,
#endif
#endif
}
#ifdef FIXED_SENSOR_DEBUG
sysfs_sensor.is_en = false;
- sysfs_sensor.frame_duration = FIXED_FPS_VALUE;
+ sysfs_sensor.is_fps_en = false;
+ sysfs_sensor.frame_duration = FIXED_MAX_FPS_VALUE;
+ sysfs_sensor.max_fps = FIXED_MAX_FPS_VALUE;
+ sysfs_sensor.set_fps = FIXED_MAX_FPS_VALUE;
sysfs_sensor.long_exposure_time = FIXED_EXPOSURE_VALUE;
sysfs_sensor.short_exposure_time = FIXED_EXPOSURE_VALUE;
sysfs_sensor.long_analog_gain = FIXED_AGAIN_VALUE;
sensor_peri = (struct fimc_is_device_sensor_peri *)module->private_data;
#ifdef FIXED_SENSOR_DEBUG
- if (unlikely(sysfs_sensor.is_en == true)) {
+ sysfs_sensor.max_fps = sensor_peri->cis.cis_data->max_fps;
+
+ if (unlikely(sysfs_sensor.is_en == true) || unlikely(sysfs_sensor.is_fps_en == true)) {
+ if (sysfs_sensor.set_fps < sysfs_sensor.max_fps) {
+ sysfs_sensor.frame_duration = sysfs_sensor.set_fps;
+ } else if (sysfs_sensor.frame_duration > sysfs_sensor.max_fps) {
+ sysfs_sensor.frame_duration = sysfs_sensor.max_fps;
+ }
+
frame_duration = FPS_TO_DURATION_US(sysfs_sensor.frame_duration);
dbg_sensor(1, "sysfs_sensor.frame_duration = %d\n", sysfs_sensor.frame_duration);
- }
+ } else
+ sysfs_sensor.frame_duration = FPS_TO_DURATION_US(frame_duration);
#endif
ret = CALL_CISOPS(&sensor_peri->cis, cis_set_frame_duration, sensor_peri->subdev_cis, frame_duration);