diff --git a/package/libcamera/0011-libcamera-support-isp-driver.patch b/package/libcamera/0011-libcamera-support-isp-driver.patch new file mode 100644 index 00000000..101bc5e4 --- /dev/null +++ b/package/libcamera/0011-libcamera-support-isp-driver.patch @@ -0,0 +1,195 @@ +From 43ac4b2e62f6998a24b6b42e2ce25917f674b18b Mon Sep 17 00:00:00 2001 +From: liuxl0327 +Date: Fri, 8 Apr 2022 09:27:55 +0800 +Subject: [PATCH] libcamera support isp driver + +--- + src/libcamera/pipeline/starfive/starfive.cpp | 94 ++++++++++++++------ + 1 file changed, 65 insertions(+), 29 deletions(-) + +diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp +index 0de22f2c..1689ad9d 100644 +--- a/src/libcamera/pipeline/starfive/starfive.cpp ++++ b/src/libcamera/pipeline/starfive/starfive.cpp +@@ -73,55 +73,61 @@ std::vector sensorConfigs; + + typedef struct { + std::string source; +- std::string link; ++ unsigned int sourceIdx; ++ std::string sink; ++ unsigned int sinkIdx; + } PipelineConfigLink; + + const std::vector dvpyuvConfig = { +- {"stf_dvp0", "stf_vin0_wr"}, ++ {"stf_dvp0", 1, "stf_vin0_wr", 0}, + }; + + const std::vector mipicsi0yuvConfig = { +- {"stf_csiphy0", "stf_csi0"}, +- {"stf_csi0", "stf_vin0_wr"} ++ {"stf_csiphy0", 1, "stf_csi0", 0}, ++ {"stf_csi0", 1, "stf_vin0_wr", 0} + }; + + const std::vector mipicsi1yuvConfig = { +- {"stf_csiphy1", "stf_csi1"}, +- {"stf_csi1", "stf_vin0_wr"} ++ {"stf_csiphy1", 1, "stf_csi1", 0}, ++ {"stf_csi1", 1, "stf_vin0_wr", 0} + }; + + const std::vector dvpraw0Config = { +- {"stf_dvp0", "stf_isp0"}, +- {"stf_isp0", "stf_vin0_isp0"} ++ {"stf_dvp0", 1, "stf_isp0", 0}, + }; + + const std::vector mipicsi0raw0Config = { +- {"stf_csiphy0", "stf_csi0"}, +- {"stf_csi0", "stf_isp0"}, +- {"stf_isp0", "stf_vin0_isp0"} ++ {"stf_csiphy0", 1, "stf_csi0", 0}, ++ {"stf_csi0", 1, "stf_isp0", 0}, + }; + + const std::vector mipicsi1raw0Config = { +- {"stf_csiphy1", "stf_csi1"}, +- {"stf_csi1", "stf_isp0"}, +- {"stf_isp0", "stf_vin0_isp0"} ++ {"stf_csiphy1", 1, "stf_csi1", 0}, ++ {"stf_csi1", 1, "stf_isp0", 0}, + }; + + const std::vector dvpraw1Config = { +- {"stf_dvp0", "stf_isp1"}, +- {"stf_isp1", "stf_vin0_isp1"} ++ {"stf_dvp0", 1, "stf_isp1", 0}, + }; + + const std::vector mipicsi0raw1Config = { +- {"stf_csiphy0", "stf_csi0"}, +- {"stf_csi0", "stf_isp1"}, +- {"stf_isp1", "stf_vin0_isp1"} ++ {"stf_csiphy0", 1, "stf_csi0", 0}, ++ {"stf_csi0", 1, "stf_isp1", 0}, + }; + + const std::vector mipicsi1raw1Config = { +- {"stf_csiphy1", "stf_csi1"}, +- {"stf_csi1", "stf_isp1"}, +- {"stf_isp1", "stf_vin0_isp1"} ++ {"stf_csiphy1", 1, "stf_csi1", 0}, ++ {"stf_csi1", 1, "stf_isp1", 0}, ++}; ++ ++const std::vector isp0Config = { ++ {"stf_isp0", 1, "stf_vin0_isp0", 0}, ++ {"stf_isp0", 6, "stf_vin0_isp0_raw", 0} ++}; ++ ++const std::vector isp1Config = { ++ {"stf_isp1", 1, "stf_vin0_isp1", 0}, ++ {"stf_isp1", 6, "stf_vin0_isp1_raw", 0} + }; + + const std::vector pipelineConfigs[SENSORTYPE_MAX] = { +@@ -248,9 +254,9 @@ private: + { + LOG(STARFIVE, Debug) << __func__; + if ( videoEntityName_ == "stf_vin0_isp0_video1") +- return "stf_vin0_isp0_raw_video3"; ++ return "stf_vin0_isp0_raw_video11"; + else if (videoEntityName_ == "stf_vin0_isp1_video2") +- return "stf_vin0_isp1_raw_video4"; ++ return "stf_vin0_isp1_raw_video12"; + else + return "unknow"; + } +@@ -438,6 +444,7 @@ private: + int registerCameras(); + std::string getVideoEntityNameById(unsigned int id); + std::string findSensorEntityName(std::string entityName); ++ int enableLinks(int sensorType); + int enableLinks(std::vector config); + + MediaDevice *starFiveMediaDev_; +@@ -544,7 +551,7 @@ PipelineHandlerStarFive::generateConfiguration(Camera *camera, + if (roles.empty()) + return config; + +- int ret = enableLinks(pipelineConfigs[sensorConfig.sensorType_]); ++ int ret = enableLinks(sensorConfig.sensorType_); + if (ret < 0) { + LOG(STARFIVE, Error) + << sensorConfig.sensorEntityName_ +@@ -942,9 +949,9 @@ std::string PipelineHandlerStarFive::getVideoEntityNameById(unsigned int id) + case 2: + return "stf_vin0_isp1_video2"; + case 3: +- return "stf_vin0_isp0_raw_video3"; ++ return "stf_vin0_isp0_raw_video11"; + case 4: +- return "stf_vin0_isp1_raw_video4"; ++ return "stf_vin0_isp1_raw_video12"; + default: + return "unknow"; + } +@@ -1028,7 +1035,7 @@ int PipelineHandlerStarFive::registerCameras() + MediaEntity *sensorEntity = + starFiveMediaDev_->getEntityByName(it.sensorEntityName_); + if (sensorEntity != nullptr) { +- int ret = enableLinks(pipelineConfigs[it.sensorType_]); ++ int ret = enableLinks(it.sensorType_); + if (ret < 0) { + LOG(STARFIVE, Error) + << it.sensorEntityName_ +@@ -1097,7 +1104,7 @@ int PipelineHandlerStarFive::enableLinks(std::vector config) + + LOG(STARFIVE, Debug) << __func__; + for (PipelineConfigLink it : config) { +- MediaLink *link = starFiveMediaDev_->link(it.source, 1, it.link, 0); ++ MediaLink *link = starFiveMediaDev_->link(it.source, it.sourceIdx, it.sink, it.sinkIdx); + if (!link) + return -ENODEV; + +@@ -1126,6 +1133,35 @@ int PipelineHandlerStarFive::enableLinks(std::vector config) + return ret; + } + ++int PipelineHandlerStarFive::enableLinks(int sensorType) ++{ ++ int ret = 0; ++ ++ LOG(STARFIVE, Debug) << __func__; ++ if (sensorType > SENSORTYPE_MAX || sensorType < DVP_YUV) ++ return -ENODEV; ++ ++ ret = enableLinks(pipelineConfigs[sensorType]); ++ if (ret) ++ return ret; ++ switch (sensorType) { ++ case DVP_ISP0: ++ case MIPICSI0_ISP0: ++ case MIPICSI1_ISP0: ++ ret = enableLinks(isp0Config); ++ break; ++ case DVP_ISP1: ++ case MIPICSI0_ISP1: ++ case MIPICSI1_ISP1: ++ ret = enableLinks(isp1Config); ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ + static void loaddefaultSensorConfig(void) + { + LOG(STARFIVE, Debug) << __func__; +-- +2.17.1 + diff --git a/package/libcamera/0012-Adjust-StarFive-pipeline-video-device-entity-name.patch b/package/libcamera/0012-Adjust-StarFive-pipeline-video-device-entity-name.patch new file mode 100644 index 00000000..bfc23a66 --- /dev/null +++ b/package/libcamera/0012-Adjust-StarFive-pipeline-video-device-entity-name.patch @@ -0,0 +1,63 @@ +From 6d4c962f44084b0e01ec49d37818fcdd10e9c01d Mon Sep 17 00:00:00 2001 +From: "Kevin.xie" +Date: Wed, 8 Jun 2022 14:38:08 +0800 +Subject: [PATCH] Adjust StarFive pipeline video device entity name + +Signed-off-by: Kevin.xie +--- + src/libcamera/pipeline/starfive/starfive.cpp | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp +index 7f02baf..03f0949 100755 +--- a/src/libcamera/pipeline/starfive/starfive.cpp ++++ b/src/libcamera/pipeline/starfive/starfive.cpp +@@ -199,7 +199,7 @@ public: + videoEntityName_ = entityName; + if ( videoEntityName_ == "stf_vin0_isp0_video1") + ispEntityName_ = "stf_isp0"; +- else if (videoEntityName_ == "stf_vin0_isp1_video2") ++ else if (videoEntityName_ == "stf_vin0_isp1_video8") + ispEntityName_ = "stf_isp1"; + else + ispEntityName_ = "unknow"; +@@ -258,9 +258,9 @@ private: + { + LOG(STARFIVE, Debug) << __func__; + if ( videoEntityName_ == "stf_vin0_isp0_video1") +- return "stf_vin0_isp0_raw_video11"; +- else if (videoEntityName_ == "stf_vin0_isp1_video2") +- return "stf_vin0_isp1_raw_video12"; ++ return "stf_vin0_isp0_raw_video6"; ++ else if (videoEntityName_ == "stf_vin0_isp1_video8") ++ return "stf_vin0_isp1_raw_video13"; + else + return "unknow"; + } +@@ -983,11 +983,11 @@ std::string PipelineHandlerStarFive::getVideoEntityNameById(unsigned int id) + case 1: + return "stf_vin0_isp0_video1"; + case 2: +- return "stf_vin0_isp1_video2"; ++ return "stf_vin0_isp1_video8"; + case 3: +- return "stf_vin0_isp0_raw_video11"; ++ return "stf_vin0_isp0_raw_video6"; + case 4: +- return "stf_vin0_isp1_raw_video12"; ++ return "stf_vin0_isp1_raw_video13"; + default: + return "unknow"; + } +@@ -1255,7 +1255,7 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator) + DeviceMatch dm("stf-vin"); + dm.add("stf_vin0_wr_video0"); + dm.add("stf_vin0_isp0_video1"); +- dm.add("stf_vin0_isp1_video2"); ++ dm.add("stf_vin0_isp1_video8"); + + LOG(STARFIVE, Debug) << __func__; + starFiveMediaDev_ = acquireMediaDevice(enumerator, dm); +-- +2.17.1 + diff --git a/package/libcamera/0013-Removed-isp1-config-from-pipeline-modified-imx219-co.patch b/package/libcamera/0013-Removed-isp1-config-from-pipeline-modified-imx219-co.patch new file mode 100644 index 00000000..5ce49ce9 --- /dev/null +++ b/package/libcamera/0013-Removed-isp1-config-from-pipeline-modified-imx219-co.patch @@ -0,0 +1,158 @@ +From 3c0db39c0acd04c9ddfd37279efb9bf47bf1f74c Mon Sep 17 00:00:00 2001 +From: "Kevin.xie" +Date: Thu, 9 Jun 2022 19:08:14 +0800 +Subject: [PATCH] Removed isp1 config from pipeline & modified imx219 config + +Signed-off-by: Kevin.xie +--- + .../pipeline/starfive/sensors_pipeline.yaml | 6 +-- + src/libcamera/pipeline/starfive/starfive.cpp | 47 +------------------ + 2 files changed, 2 insertions(+), 51 deletions(-) + +diff --git a/src/libcamera/pipeline/starfive/sensors_pipeline.yaml b/src/libcamera/pipeline/starfive/sensors_pipeline.yaml +index 3446b0a..dc4fc63 100644 +--- a/src/libcamera/pipeline/starfive/sensors_pipeline.yaml ++++ b/src/libcamera/pipeline/starfive/sensors_pipeline.yaml +@@ -25,11 +25,7 @@ + # + --- + sensors: +- - sensorentity: "imx219 0-0010" ++ - sensorentity: "imx219 4-0010" + ispfwimage: "stf_isp0_fw_dump.bin" + sensortype: 4 +- +- - sensorentity: "imx219 2-0010" +- ispfwimage: "stf_isp0_fw_dump.bin" +- sensortype: 8 + ... +diff --git a/src/libcamera/pipeline/starfive/starfive.cpp b/src/libcamera/pipeline/starfive/starfive.cpp +index cc4cd1e..7f97069 100644 +--- a/src/libcamera/pipeline/starfive/starfive.cpp ++++ b/src/libcamera/pipeline/starfive/starfive.cpp +@@ -55,9 +55,6 @@ typedef enum { + DVP_ISP0, // ISP0 + MIPICSI0_ISP0, + MIPICSI1_ISP0, +- DVP_ISP1, // ISP1 +- MIPICSI0_ISP1, +- MIPICSI1_ISP1, + SENSORTYPE_MAX + } SensorType; + +@@ -68,8 +65,7 @@ typedef struct { + } SensorConfig; + + const std::vector defaultSensorConfigs = { +- { "imx219 0-0010", "stf_isp0_fw_dump.bin", MIPICSI0_ISP0 }, +- { "imx219 2-0010", "stf_isp0_fw_dump.bin", MIPICSI1_ISP1 }, ++ { "imx219 4-0010", "stf_isp0_fw_dump.bin", MIPICSI0_ISP0 }, + }; + + std::vector sensorConfigs; +@@ -109,30 +105,11 @@ const std::vector mipicsi1raw0Config = { + {"stf_csi1", 1, "stf_isp0", 0}, + }; + +-const std::vector dvpraw1Config = { +- {"stf_dvp0", 1, "stf_isp1", 0}, +-}; +- +-const std::vector mipicsi0raw1Config = { +- {"stf_csiphy0", 1, "stf_csi0", 0}, +- {"stf_csi0", 1, "stf_isp1", 0}, +-}; +- +-const std::vector mipicsi1raw1Config = { +- {"stf_csiphy1", 1, "stf_csi1", 0}, +- {"stf_csi1", 1, "stf_isp1", 0}, +-}; +- + const std::vector isp0Config = { + {"stf_isp0", 1, "stf_vin0_isp0", 0}, + {"stf_isp0", 6, "stf_vin0_isp0_raw", 0} + }; + +-const std::vector isp1Config = { +- {"stf_isp1", 1, "stf_vin0_isp1", 0}, +- {"stf_isp1", 6, "stf_vin0_isp1_raw", 0} +-}; +- + const std::vector pipelineConfigs[SENSORTYPE_MAX] = { + dvpyuvConfig, + mipicsi0yuvConfig, +@@ -140,9 +117,6 @@ const std::vector pipelineConfigs[SENSORTYPE_MAX] = { + dvpraw0Config, + mipicsi0raw0Config, + mipicsi1raw0Config, +- dvpraw1Config, +- mipicsi0raw1Config, +- mipicsi1raw1Config, + }; + + } /* namespace */ +@@ -199,8 +173,6 @@ public: + videoEntityName_ = entityName; + if ( videoEntityName_ == "stf_vin0_isp0_video1") + ispEntityName_ = "stf_isp0"; +- else if (videoEntityName_ == "stf_vin0_isp1_video8") +- ispEntityName_ = "stf_isp1"; + else + ispEntityName_ = "unknow"; + +@@ -260,8 +232,6 @@ private: + LOG(STARFIVE, Debug) << __func__; + if ( videoEntityName_ == "stf_vin0_isp0_video1") + return "stf_vin0_isp0_raw_video6"; +- else if (videoEntityName_ == "stf_vin0_isp1_video8") +- return "stf_vin0_isp1_raw_video13"; + else + return "unknow"; + } +@@ -984,11 +954,7 @@ std::string PipelineHandlerStarFive::getVideoEntityNameById(unsigned int id) + case 1: + return "stf_vin0_isp0_video1"; + case 2: +- return "stf_vin0_isp1_video8"; +- case 3: + return "stf_vin0_isp0_raw_video6"; +- case 4: +- return "stf_vin0_isp1_raw_video13"; + default: + return "unknow"; + } +@@ -1060,11 +1026,6 @@ int PipelineHandlerStarFive::registerCameras() + case MIPICSI1_ISP0: + id = 1; + break; +- case DVP_ISP1: +- case MIPICSI0_ISP1: +- case MIPICSI1_ISP1: +- id = 2; +- break; + default: + continue; + } +@@ -1187,11 +1148,6 @@ int PipelineHandlerStarFive::enableLinks(int sensorType) + case MIPICSI1_ISP0: + ret = enableLinks(isp0Config); + break; +- case DVP_ISP1: +- case MIPICSI0_ISP1: +- case MIPICSI1_ISP1: +- ret = enableLinks(isp1Config); +- break; + default: + break; + } +@@ -1256,7 +1212,6 @@ bool PipelineHandlerStarFive::match(DeviceEnumerator *enumerator) + DeviceMatch dm("stf-vin"); + dm.add("stf_vin0_wr_video0"); + dm.add("stf_vin0_isp0_video1"); +- dm.add("stf_vin0_isp1_video8"); + + LOG(STARFIVE, Debug) << __func__; + starFiveMediaDev_ = acquireMediaDevice(enumerator, dm); +-- +2.17.1 +