On 09/25/2018 12:14 PM, Sakari Ailus wrote: > Add support for exponential bases, prefixes as well as units for V4L2 > controls. This makes it possible to convey information on the relation > between the control value and the hardware feature being controlled. > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > --- > include/uapi/linux/videodev2.h | 32 +++++++++++++++++++++++++++++++- > 1 file changed, 31 insertions(+), 1 deletion(-) > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index ae083978988f1..23b02f2db85a1 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -1652,6 +1652,32 @@ struct v4l2_queryctrl { > __u32 reserved[2]; > }; > > +/* V4L2 control exponential bases */ > +#define V4L2_CTRL_BASE_UNDEFINED 0 > +#define V4L2_CTRL_BASE_LINEAR 1 I'm not really sure you need BASE_LINEAR. That is effectively the same as UNDEFINED since what else can you do? It's also weird to have this as 'base' if the EXPONENTIAL flag is set. I don't see why you need the EXPONENTIAL flag at all: if this is non-0, then you know the exponential base. > +#define V4L2_CTRL_BASE_2 2 > +#define V4L2_CTRL_BASE_10 10 > + > +/* V4L2 control unit prefixes */ > +#define V4L2_CTRL_PREFIX_NANO -9 > +#define V4L2_CTRL_PREFIX_MICRO -6 > +#define V4L2_CTRL_PREFIX_MILLI -3 > +#define V4L2_CTRL_PREFIX_1 0 I would prefer PREFIX_NONE, since there is no prefix in this case. I assume this prefix is only valid if the unit is not UNDEFINED and not NONE? Is 'base' also dependent on a valid unit? (it doesn't appear to be) > +#define V4L2_CTRL_PREFIX_KILO 3 > +#define V4L2_CTRL_PREFIX_MEGA 6 > +#define V4L2_CTRL_PREFIX_GIGA 9 > + > +/* V4L2 control units */ > +#define V4L2_CTRL_UNIT_UNDEFINED 0 > +#define V4L2_CTRL_UNIT_NONE 1 > +#define V4L2_CTRL_UNIT_SECOND 2 > +#define V4L2_CTRL_UNIT_AMPERE 3 > +#define V4L2_CTRL_UNIT_LINE 4 > +#define V4L2_CTRL_UNIT_PIXEL 5 > +#define V4L2_CTRL_UNIT_PIXELS_PER_SEC 6 > +#define V4L2_CTRL_UNIT_HZ 7 > + > + > /* Used in the VIDIOC_QUERY_EXT_CTRL ioctl for querying extended controls */ > struct v4l2_query_ext_ctrl { > __u32 id; > @@ -1666,7 +1692,10 @@ struct v4l2_query_ext_ctrl { > __u32 elems; > __u32 nr_of_dims; > __u32 dims[V4L2_CTRL_MAX_DIMS]; > - __u32 reserved[32]; > + __u8 base; > + __s8 prefix; > + __u16 unit; > + __u32 reserved[31]; > }; > > /* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */ > @@ -1692,6 +1721,7 @@ struct v4l2_querymenu { > #define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x00000100 > #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x00000200 > #define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x00000400 > +#define V4L2_CTRL_FLAG_EXPONENTIAL 0x00000800 > > /* Query flags, to be ORed with the control ID */ > #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 > Regards, Hans