media: v4l2-ctrls: Add helper to register properties
Add an helper function to v4l2-ctrls to register controls associated with a device property. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
e0837a6c08
commit
e0a360630d
2 changed files with 66 additions and 0 deletions
|
@ -16,6 +16,7 @@
|
|||
#include <media/v4l2-dev.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-fwnode.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
|
||||
#define dprintk(vdev, fmt, arg...) do { \
|
||||
|
@ -4621,3 +4622,42 @@ __poll_t v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
|
|||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(v4l2_ctrl_poll);
|
||||
|
||||
int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
|
||||
const struct v4l2_ctrl_ops *ctrl_ops,
|
||||
const struct v4l2_fwnode_device_properties *p)
|
||||
{
|
||||
if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
|
||||
u32 orientation_ctrl;
|
||||
|
||||
switch (p->orientation) {
|
||||
case V4L2_FWNODE_ORIENTATION_FRONT:
|
||||
orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
|
||||
break;
|
||||
case V4L2_FWNODE_ORIENTATION_BACK:
|
||||
orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
|
||||
break;
|
||||
case V4L2_FWNODE_ORIENTATION_EXTERNAL:
|
||||
orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
|
||||
V4L2_CID_CAMERA_ORIENTATION,
|
||||
V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
|
||||
orientation_ctrl))
|
||||
return hdl->error;
|
||||
}
|
||||
|
||||
if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
|
||||
if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
|
||||
V4L2_CID_CAMERA_SENSOR_ROTATION,
|
||||
p->rotation, p->rotation, 1,
|
||||
p->rotation))
|
||||
return hdl->error;
|
||||
}
|
||||
|
||||
return hdl->error;
|
||||
}
|
||||
EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);
|
||||
|
|
|
@ -30,6 +30,7 @@ struct v4l2_ctrl;
|
|||
struct v4l2_ctrl_handler;
|
||||
struct v4l2_ctrl_helper;
|
||||
struct v4l2_fh;
|
||||
struct v4l2_fwnode_device_properties;
|
||||
struct v4l2_subdev;
|
||||
struct v4l2_subscribed_event;
|
||||
struct video_device;
|
||||
|
@ -1428,4 +1429,29 @@ int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
|
|||
*/
|
||||
int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd);
|
||||
|
||||
/**
|
||||
* v4l2_ctrl_new_fwnode_properties() - Register controls for the device
|
||||
* properties
|
||||
*
|
||||
* @hdl: pointer to &struct v4l2_ctrl_handler to register controls on
|
||||
* @ctrl_ops: pointer to &struct v4l2_ctrl_ops to register controls with
|
||||
* @p: pointer to &struct v4l2_fwnode_device_properties
|
||||
*
|
||||
* This function registers controls associated to device properties, using the
|
||||
* property values contained in @p parameter, if the property has been set to
|
||||
* a value.
|
||||
*
|
||||
* Currently the following v4l2 controls are parsed and registered:
|
||||
* - V4L2_CID_CAMERA_ORIENTATION
|
||||
* - V4L2_CID_CAMERA_SENSOR_ROTATION;
|
||||
*
|
||||
* Controls already registered by the caller with the @hdl control handler are
|
||||
* not overwritten. Callers should register the controls they want to handle
|
||||
* themselves before calling this function.
|
||||
*
|
||||
* Return: 0 on success, a negative error code on failure.
|
||||
*/
|
||||
int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
|
||||
const struct v4l2_ctrl_ops *ctrl_ops,
|
||||
const struct v4l2_fwnode_device_properties *p);
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue