On 15/04/2022 13:18, Benjamin Mugnier wrote: > Add V4L2_CID_TEMPERATURE control to get temperature from sensor in > celsius as a volatile and read-only control, and its documentation. celsius -> degrees Celsius (see https://en.wikipedia.org/wiki/Celsius) > Useful to monitor thermals from v4l controls for sensors that support > this. > > Signed-off-by: Benjamin Mugnier <benjamin.mugnier@xxxxxxxxxxx> > --- > Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst | 3 +++ > drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 ++++ > include/uapi/linux/v4l2-controls.h | 2 ++ > 3 files changed, 9 insertions(+) > > diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst > index 4c5061aa9cd4..26fa21f5c45a 100644 > --- a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst > +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst > @@ -661,3 +661,6 @@ enum v4l2_scene_mode - > .. [#f1] > This control may be changed to a menu control in the future, if more > options are required. > + > +``V4L2_CID_TEMPERATURE (integer)`` > + The temperature of the sensor in celsius. This is a read-only control. Ditto > diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c > index 54ca4e6b820b..45ad3edd59e0 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c > @@ -1042,6 +1042,7 @@ const char *v4l2_ctrl_get_name(u32 id) > case V4L2_CID_UNIT_CELL_SIZE: return "Unit Cell Size"; > case V4L2_CID_CAMERA_ORIENTATION: return "Camera Orientation"; > case V4L2_CID_CAMERA_SENSOR_ROTATION: return "Camera Sensor Rotation"; > + case V4L2_CID_TEMPERATURE: return "Temperature in °C"; I am not sure how well this ° symbol will work. The V4L2 spec says that this is an ASCII string, so that doesn't allow for this symbol. I would just call it "Temperature". > > /* FM Radio Modulator controls */ > /* Keep the order of the 'case's the same as in v4l2-controls.h! */ > @@ -1597,6 +1598,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, > case V4L2_CID_RF_TUNER_PLL_LOCK: > *flags |= V4L2_CTRL_FLAG_VOLATILE; > break; > + case V4L2_CID_TEMPERATURE: > + *flags |= V4L2_CTRL_FLAG_READ_ONLY | > + V4L2_CTRL_FLAG_VOLATILE; Add a break! > } > } > EXPORT_SYMBOL(v4l2_ctrl_fill); > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h > index bb40129446d4..705b4043c2de 100644 > --- a/include/uapi/linux/v4l2-controls.h > +++ b/include/uapi/linux/v4l2-controls.h > @@ -1008,6 +1008,8 @@ enum v4l2_auto_focus_range { > > #define V4L2_CID_CAMERA_SENSOR_ROTATION (V4L2_CID_CAMERA_CLASS_BASE+35) > > +#define V4L2_CID_TEMPERATURE (V4L2_CID_CAMERA_CLASS_BASE+36) Does it make sense to add this to CAMERA_CLASS? Can't this be a generic temperature control? (i.e. in USER_BASE) Any device can have a temperature sensor. I also think that making this an array control would make sense as well in case there are multiple temperature sensors. Brainstorming some more: does this even belong here? Isn't this more a hwmon thing? E.g. compare this to drivers/nvme/host/hwmon.c. A hwmon implementation seems to be a more natural mechanism. Regards, Hans > + > /* FM Modulator class control IDs */ > > #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900)