pipeline: rpi: pisp: Use correct cfe devices
* Raspberry Pi 5 ISP (PiSP) support submitted to upstream libcamera is
different from their own libcamera fork [1].
* These match the naming used in driver that was merged in upstream
Linux 6.13 kernel [2].
* Revert back to the correct cfe devices that match the current kernel [3].
[1]: https://github.com/raspberrypi/libcamera
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c#n126
[3]: 317477113b/drivers/media/platform/raspberrypi/rp1_cfe/cfe.c (L139-L194)
This commit is contained in:
@@ -882,9 +882,9 @@ bool PipelineHandlerPiSP::match(DeviceEnumerator *enumerator)
|
||||
*/
|
||||
for (unsigned int i = 0; i < numCfeDevices; i++) {
|
||||
DeviceMatch cfe("rp1-cfe");
|
||||
cfe.add("rp1-cfe-fe-image0");
|
||||
cfe.add("rp1-cfe-fe-stats");
|
||||
cfe.add("rp1-cfe-fe-config");
|
||||
cfe.add("rp1-cfe-fe_image0");
|
||||
cfe.add("rp1-cfe-fe_stats");
|
||||
cfe.add("rp1-cfe-fe_config");
|
||||
std::shared_ptr<MediaDevice> cfeDevice = acquireMediaDevice(enumerator, cfe);
|
||||
|
||||
if (!cfeDevice) {
|
||||
@@ -1072,10 +1072,10 @@ int PipelineHandlerPiSP::platformRegister(std::unique_ptr<RPi::CameraData> &came
|
||||
PiSPCameraData *data = static_cast<PiSPCameraData *>(cameraData.get());
|
||||
int ret;
|
||||
|
||||
MediaEntity *cfeImage = cfe->getEntityByName("rp1-cfe-fe-image0");
|
||||
MediaEntity *cfeEmbedded = cfe->getEntityByName("rp1-cfe-csi2-ch1");
|
||||
MediaEntity *cfeStats = cfe->getEntityByName("rp1-cfe-fe-stats");
|
||||
MediaEntity *cfeConfig = cfe->getEntityByName("rp1-cfe-fe-config");
|
||||
MediaEntity *cfeImage = cfe->getEntityByName("rp1-cfe-fe_image0");
|
||||
MediaEntity *cfeEmbedded = cfe->getEntityByName("rp1-cfe-embedded");
|
||||
MediaEntity *cfeStats = cfe->getEntityByName("rp1-cfe-fe_stats");
|
||||
MediaEntity *cfeConfig = cfe->getEntityByName("rp1-cfe-fe_config");
|
||||
MediaEntity *ispInput = isp->getEntityByName("pispbe-input");
|
||||
MediaEntity *IpaPrepare = isp->getEntityByName("pispbe-config");
|
||||
MediaEntity *ispOutput0 = isp->getEntityByName("pispbe-output0");
|
||||
@@ -1630,26 +1630,12 @@ int PiSPCameraData::platformConfigure(const RPi::RPiCameraConfiguration *rpiConf
|
||||
* Configure the CFE embedded data output format only if the sensor
|
||||
* supports it.
|
||||
*/
|
||||
V4L2SubdeviceFormat embeddedFormat = sensor_->embeddedDataFormat();
|
||||
V4L2SubdeviceFormat embeddedFormat;
|
||||
if (sensorMetadata_) {
|
||||
static const std::map<uint32_t, V4L2PixelFormat> metaFormats{
|
||||
{ MEDIA_BUS_FMT_META_8, V4L2PixelFormat(V4L2_META_FMT_GENERIC_8) },
|
||||
{ MEDIA_BUS_FMT_META_10, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_10) },
|
||||
{ MEDIA_BUS_FMT_META_12, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_12) },
|
||||
{ MEDIA_BUS_FMT_META_14, V4L2PixelFormat(V4L2_META_FMT_GENERIC_CSI2_14) },
|
||||
};
|
||||
|
||||
const auto metaFormat = metaFormats.find(embeddedFormat.code);
|
||||
if (metaFormat == metaFormats.end()) {
|
||||
LOG(RPI, Error)
|
||||
<< "Unsupported metadata format "
|
||||
<< utils::hex(embeddedFormat.code, 4);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
sensor_->device()->getFormat(1, &embeddedFormat);
|
||||
format = {};
|
||||
format.fourcc = metaFormat->second;
|
||||
format.size = embeddedFormat.size;
|
||||
format.fourcc = V4L2PixelFormat(V4L2_META_FMT_SENSOR_DATA);
|
||||
format.planes[0].size = embeddedFormat.size.width * embeddedFormat.size.height;
|
||||
|
||||
LOG(RPI, Debug) << "Setting embedded data format " << format;
|
||||
ret = cfe_[Cfe::Embedded].dev()->setFormat(&format);
|
||||
@@ -2174,8 +2160,9 @@ int PiSPCameraData::configureEntities(V4L2SubdeviceFormat sensorFormat,
|
||||
int ret = 0;
|
||||
|
||||
constexpr unsigned int csiVideoSinkPad = 0;
|
||||
constexpr unsigned int csiVideoSourcePad = 1;
|
||||
constexpr unsigned int csiMetaSourcePad = 2;
|
||||
constexpr unsigned int csiMetaSinkPad = 1;
|
||||
constexpr unsigned int csiVideoSourcePad = 4;
|
||||
constexpr unsigned int csiMetaSourcePad = 5;
|
||||
|
||||
constexpr unsigned int feVideoSinkPad = 0;
|
||||
constexpr unsigned int feConfigSinkPad = 1;
|
||||
@@ -2187,7 +2174,7 @@ int PiSPCameraData::configureEntities(V4L2SubdeviceFormat sensorFormat,
|
||||
const MediaEntity *fe = feSubdev_->entity();
|
||||
|
||||
for (MediaLink *link : csi2->pads()[csiVideoSourcePad]->links()) {
|
||||
if (link->sink()->entity()->name() == "rp1-cfe-csi2-ch0")
|
||||
if (link->sink()->entity()->name() == "rp1-cfe-csi2_ch0")
|
||||
link->setEnabled(false);
|
||||
else if (link->sink()->entity()->name() == "pisp-fe")
|
||||
link->setEnabled(true);
|
||||
@@ -2200,34 +2187,16 @@ int PiSPCameraData::configureEntities(V4L2SubdeviceFormat sensorFormat,
|
||||
fe->pads()[feVideo1SourcePad]->links()[0]->setEnabled(false);
|
||||
fe->pads()[feStatsSourcePad]->links()[0]->setEnabled(true);
|
||||
|
||||
const V4L2Subdevice::Stream imageStream{
|
||||
csiVideoSinkPad,
|
||||
sensor_->imageStream().stream
|
||||
};
|
||||
const V4L2Subdevice::Stream embeddedDataStream{
|
||||
csiVideoSinkPad,
|
||||
sensor_->embeddedDataStream().value_or(V4L2Subdevice::Stream{}).stream
|
||||
};
|
||||
|
||||
V4L2Subdevice::Routing routing;
|
||||
routing.emplace_back(imageStream, V4L2Subdevice::Stream{ csiVideoSourcePad, 0 },
|
||||
V4L2_SUBDEV_ROUTE_FL_ACTIVE);
|
||||
|
||||
if (sensorMetadata_)
|
||||
routing.emplace_back(embeddedDataStream,
|
||||
V4L2Subdevice::Stream{ csiMetaSourcePad, 0 },
|
||||
V4L2_SUBDEV_ROUTE_FL_ACTIVE);
|
||||
|
||||
ret = csi2Subdev_->setRouting(&routing);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = csi2Subdev_->setFormat(imageStream, &sensorFormat);
|
||||
ret = csi2Subdev_->setFormat(csiVideoSinkPad, &sensorFormat);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (sensorMetadata_) {
|
||||
ret = csi2Subdev_->setFormat(embeddedDataStream, &embeddedFormat);
|
||||
ret = csi2Subdev_->setFormat(csiMetaSinkPad, &embeddedFormat);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = csi2Subdev_->setFormat(csiMetaSourcePad, &embeddedFormat);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user