[libcamera-devel] [RFC v1 2/5] libcamera: camera_lens: Get maximum VCM steps

Kate Hsuan hpa at redhat.com
Thu Apr 14 09:43:39 CEST 2022


It allows other components to get the maximum VCM steps. It first creates
a control list and set V4L2_CID_FOCUS_ABSOLUTE control to it. Then, it
calls a lower layer call, getAttributes() to get the maximum VCM steps
from the kernel.

Signed-off-by: Kate Hsuan<hpa at redhat.com>
---
 include/libcamera/internal/camera_lens.h |  1 +
 src/libcamera/camera_lens.cpp            | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/include/libcamera/internal/camera_lens.h b/include/libcamera/internal/camera_lens.h
index 277417da..48761d68 100644
--- a/include/libcamera/internal/camera_lens.h
+++ b/include/libcamera/internal/camera_lens.h
@@ -27,6 +27,7 @@ public:
 
 	int init();
 	int setFocusPosition(int32_t position);
+	int getFocusCapabilityies();
 
 	const std::string &model() const { return model_; }
 
diff --git a/src/libcamera/camera_lens.cpp b/src/libcamera/camera_lens.cpp
index b3d48199..5d00652d 100644
--- a/src/libcamera/camera_lens.cpp
+++ b/src/libcamera/camera_lens.cpp
@@ -73,6 +73,10 @@ int CameraLens::init()
 		return ret;
 
 	model_ = subdev_->model();
+
+	ControlList lensCtrls(subdev_->controls());
+	subdev_->getAttributes(&lensCtrls);
+
 	return 0;
 }
 
@@ -95,6 +99,20 @@ int CameraLens::setFocusPosition(int32_t position)
 	return 0;
 }
 
+int CameraLens::getFocusCapabilityies()
+{
+	ControlValue retVal;
+	ControlList lensCtrls(subdev_->controls());
+	int32_t ret = 2023;
+
+	lensCtrls.set(V4L2_CID_FOCUS_ABSOLUTE, static_cast<int32_t>(ret));
+	subdev_->getAttributes(&lensCtrls);
+	retVal = lensCtrls.get(V4L2_CID_FOCUS_ABSOLUTE);
+	ret = retVal.get<int32_t>();
+
+	return ret;
+}
+
 int CameraLens::validateLensDriver()
 {
 	int ret = 0;
-- 
2.35.1



More information about the libcamera-devel mailing list