From 68863657530812a21073fa463987fd414e1236bb Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 28 Apr 2020 00:53:01 +0300 Subject: libcamera: camera_sensor: Add model() function Add a new model() function to the CameraSensor class to report the camera sensor model. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/libcamera/camera_sensor.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/libcamera/camera_sensor.cpp') diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index 7c1d9b9e..3d7cedca 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include @@ -87,6 +88,35 @@ int CameraSensor::init() return -EINVAL; } + /* + * Extract the camera sensor model name from the media entity name. + * + * There is no standardized naming scheme for sensor entities in the + * Linux kernel at the moment. + * + * - The most common rule, used by I2C sensors, associates the model + * name with the I2C bus number and address (e.g. 'imx219 0-0010'). + * + * - When the sensor exposes multiple subdevs, the model name is + * usually followed by a function name, as in the smiapp driver (e.g. + * 'jt8ew9 pixel_array 0-0010'). + * + * - The vimc driver names its sensors 'Sensor A' and 'Sensor B'. + * + * Other schemes probably exist. As a best effort heuristic, use the + * part of the entity name before the first space if the name contains + * an I2C address, and use the full entity name otherwise. + */ + std::string entityName = entity_->name(); + std::regex i2cRegex{ " [0-9]+-[0-9a-f]{4}" }; + std::smatch match; + + if (std::regex_search(entityName, match, i2cRegex)) + model_ = entityName.substr(0, entityName.find(' ')); + else + model_ = entityName; + + /* Open the subdev. */ ret = subdev_->open(); if (ret < 0) return ret; @@ -163,6 +193,16 @@ int CameraSensor::init() return 0; } +/** + * \fn CameraSensor::model() + * \brief Retrieve the sensor model name + * + * The sensor model name is a free-formed string that uniquely identifies the + * sensor model. + * + * \return The sensor model name + */ + /** * \fn CameraSensor::entity() * \brief Retrieve the sensor media entity -- cgit v1.2.1