On Sun, Nov 29, 2020 at 3:05 PM Fritz Koenig <frkoenig@xxxxxxxxxxxx> wrote: > > V4L2_ENC_CMD_STOP and V4L2_ENC_CMD_START are already > supported. Add a way to query for support. I think your Signed-off-by is missing (checkpatch.pl should warn you about such problems). > > --- > drivers/media/platform/qcom/venus/venc.c | 26 ++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c > index 2ddfeddf98514..e05db3c4bfb24 100644 > --- a/drivers/media/platform/qcom/venus/venc.c > +++ b/drivers/media/platform/qcom/venus/venc.c > @@ -507,6 +507,27 @@ static int venc_enum_frameintervals(struct file *file, void *fh, > return 0; > } > > +static int > +venc_try_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) > +{ > + struct venus_inst *inst = to_inst(file); > + struct device *dev = inst->core->dev_dec; > + > + switch (cmd->cmd) { > + case V4L2_ENC_CMD_STOP: > + case V4L2_ENC_CMD_START: > + if (cmd->flags != 0) { > + dev_dbg(dev, "flags=%u are not supported", cmd->flags); > + return -EINVAL; > + } > + break; > + default: > + return -EINVAL; > + } > + > + return 0; > +} > + > static int > venc_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) I am not seeing venc_encoder_cmd() in the media tree, does this patch depend on others that are not yet merged? If so they should be submitted together as a series. > { > @@ -514,6 +535,10 @@ venc_encoder_cmd(struct file *file, void *fh, struct v4l2_encoder_cmd *cmd) > struct hfi_frame_data fdata = {0}; > int ret = 0; > > + ret = venc_try_encoder_cmd(file, fh, cmd); > + if (ret < 0) > + return ret; > + v4l2_m2m_ioctl_try_encoder_cmd() is called right below, and AFAICT does the same thing as the newly-defined venc_try_encoder_cmd(). So IIUC this patch can be turned into a one-liner that does just the following: @@ -575,6 +600,7 @@ static const struct v4l2_ioctl_ops venc_ioctl_ops = { .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, .vidioc_unsubscribe_event = v4l2_event_unsubscribe, .vidioc_encoder_cmd = venc_encoder_cmd, + .vidioc_try_encoder_cmd = v4l2_m2m_ioctl_try_encoder_cmd, }; > ret = v4l2_m2m_ioctl_try_encoder_cmd(file, fh, cmd); > if (ret) > return ret; > @@ -575,6 +600,7 @@ static const struct v4l2_ioctl_ops venc_ioctl_ops = { > .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, > .vidioc_unsubscribe_event = v4l2_event_unsubscribe, > .vidioc_encoder_cmd = venc_encoder_cmd, > + .vidioc_try_encoder_cmd = venc_try_encoder_cmd, > }; > > static int venc_set_properties(struct venus_inst *inst) > -- > 2.29.2.454.gaff20da3a2-goog >