[libcamera-devel] [PATCH v3 3/3] ipa: rkisp1: fail on init if hw revision is not RKISP1_V10

Dafna Hirschfeld dafna.hirschfeld at collabora.com
Tue Mar 9 07:38:29 CET 2021


In kernel 5.11 the rkisp1 uapi had changed to support
different hardware revisions. Currently only revision 10
is supported by the rkisp1 IPA and therefore 'init'
should fail if the revision is not 10.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld at collabora.com>
---
 include/libcamera/ipa/rkisp1.mojom       |  2 +-
 src/ipa/rkisp1/rkisp1.cpp                | 17 +++++++++++++----
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 10 ++++------
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom
index 95fa0d93..29f726e1 100644
--- a/include/libcamera/ipa/rkisp1.mojom
+++ b/include/libcamera/ipa/rkisp1.mojom
@@ -25,7 +25,7 @@ struct RkISP1Action {
 };
 
 interface IPARkISP1Interface {
-	init(IPASettings settings) => (int32 ret);
+	init(uint32 hwRevision) => (int32 ret);
 	start() => (int32 ret);
 	stop();
 
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 0b0f31e4..197c2389 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -31,10 +31,7 @@ LOG_DEFINE_CATEGORY(IPARkISP1)
 class IPARkISP1 : public ipa::rkisp1::IPARkISP1Interface
 {
 public:
-	int init([[maybe_unused]] const IPASettings &settings) override
-	{
-		return 0;
-	}
+	int init(unsigned int hwRevision) override;
 	int start() override { return 0; }
 	void stop() override {}
 
@@ -69,6 +66,18 @@ private:
 	uint32_t maxGain_;
 };
 
+int IPARkISP1::init(unsigned int hwRevision)
+{
+	/* todo add support for other revisions */
+	if (hwRevision != RKISP1_V10) {
+		LOG(IPARkISP1, Error) << "Hardware version " << hwRevision <<
+			" is currently not supported";
+		return -ENODEV;
+	}
+	LOG(IPARkISP1, Info) << "Hardware revision is " << hwRevision;
+	return 0;
+}
+;
 /**
  * \todo The RkISP1 pipeline currently provides an empty CameraSensorInfo
  * if the connected sensor does not provide enough information to properly
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 34814f62..24c622a8 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -85,7 +85,7 @@ public:
 	{
 	}
 
-	int loadIPA();
+	int loadIPA(unsigned int hwRevision);
 
 	Stream mainPathStream_;
 	Stream selfPathStream_;
@@ -300,7 +300,7 @@ RkISP1FrameInfo *RkISP1Frames::find(Request *request)
 	return nullptr;
 }
 
-int RkISP1CameraData::loadIPA()
+int RkISP1CameraData::loadIPA(unsigned int hwRevision)
 {
 	ipa_ = IPAManager::createIPA<ipa::rkisp1::IPAProxyRkISP1>(pipe_, 1, 1);
 	if (!ipa_)
@@ -309,9 +309,7 @@ int RkISP1CameraData::loadIPA()
 	ipa_->queueFrameAction.connect(this,
 				       &RkISP1CameraData::queueFrameAction);
 
-	ipa_->init(IPASettings{});
-
-	return 0;
+	return ipa_->init(hwRevision);
 }
 
 void RkISP1CameraData::queueFrameAction(unsigned int frame,
@@ -952,7 +950,7 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
 	isp_->frameStart.connect(data->delayedCtrls_.get(),
 				 &DelayedControls::applyControls);
 
-	ret = data->loadIPA();
+	ret = data->loadIPA(media_->hwRevision());
 	if (ret)
 		return ret;
 
-- 
2.17.1



More information about the libcamera-devel mailing list