[libcamera-devel] [PATCH v4 4/9] libcamera: camera_sensor: Discover VCMs through ancillary links
Daniel Scally
djrscally at gmail.com
Thu Feb 3 10:40:43 CET 2022
Morning Laurent
On 03/02/2022 00:19, Laurent Pinchart wrote:
> Hi Dan,
>
> Thank you for the patch.
>
> On Mon, Jan 31, 2022 at 10:33:25PM +0000, Daniel Scally wrote:
>> Add a function to check for and initialise any VCMs linked to the
>> CameraSensor's entity by ancillary links. This should initialise
>> the lens_ member with the linked entity. Call the new function
>> during CameraSensor::init().
>>
>> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>> Signed-off-by: Daniel Scally <djrscally at gmail.com>
>> ---
>> Changes in v4:
>>
>> - Fixed typo (Laurent)
>>
>> Changes in v3:
>>
>> - Fixed some style errors
>> - Replaced the flash case by printing the entity function in the
>> default case.
>>
>> include/libcamera/internal/camera_sensor.h | 1 +
>> src/libcamera/camera_sensor.cpp | 39 ++++++++++++++++++++++
>> 2 files changed, 40 insertions(+)
>>
>> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
>> index 2fa11567..7fb4eded 100644
>> --- a/include/libcamera/internal/camera_sensor.h
>> +++ b/include/libcamera/internal/camera_sensor.h
>> @@ -81,6 +81,7 @@ private:
>> void initTestPatternModes();
>> int initProperties();
>> int applyTestPatternMode(controls::draft::TestPatternModeEnum mode);
>> + int discoverAncillaryDevices();
>>
>> const MediaEntity *entity_;
>> std::unique_ptr<V4L2Subdevice> subdev_;
>> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
>> index 64f7f12c..f00c0aca 100644
>> --- a/src/libcamera/camera_sensor.cpp
>> +++ b/src/libcamera/camera_sensor.cpp
>> @@ -172,6 +172,10 @@ int CameraSensor::init()
>> if (ret)
>> return ret;
>>
>> + ret = discoverAncillaryDevices();
>> + if (ret)
>> + return ret;
>> +
>> return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
>> }
>>
>> @@ -443,6 +447,41 @@ int CameraSensor::initProperties()
>> return 0;
>> }
>>
>> +/**
>> + * \brief Check for and initialise any ancillary devices
>> + *
>> + * Sensors sometimes have ancillary devices such as a Lens or Flash that could
>> + * be linked to their MediaEntity by the kernel. Search for and handle any
>> + * such device.
>> + *
>> + * \todo Handle MEDIA_ENT_F_FLASH too.
>> + */
>> +int CameraSensor::discoverAncillaryDevices()
>> +{
>> + int ret;
>> +
>> + for (MediaEntity *ancillary : entity_->ancillaryEntities()) {
>> + switch (ancillary->function()) {
>> + case MEDIA_ENT_F_LENS:
>> + focusLens_ = std::make_unique<CameraLens>(ancillary);
>> + ret = focusLens_->init();
>> + if (ret) {
>> + LOG(CameraSensor, Error)
>> + << "CameraLens initialisation failed";
>> + return ret;
>> + }
>> + break;
>> +
>> + default:
>> + LOG(CameraSensor, Warning)
>> + << "Unsupported ancillary entity function "
>> + << ancillary->function();
> A break would be good here too, even if not strictly required.
Okedokey - I'll add it in v5. Thanks for the comments on the other
patches also :)
>
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>> /**
>> * \fn CameraSensor::model()
>> * \brief Retrieve the sensor model name
More information about the libcamera-devel
mailing list