Loading msm/vidc/msm_v4l2_vidc.c +10 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #include <linux/debugfs.h> Loading Loading @@ -207,6 +207,14 @@ static int msm_v4l2_queryctrl(struct file *file, void *fh, return msm_vidc_query_ctrl((void *)vidc_inst, ctrl); } static int msm_v4l2_querymenu(struct file *file, void *fh, struct v4l2_querymenu *qmenu) { struct msm_vidc_inst *vidc_inst = get_vidc_inst(file, fh); return msm_vidc_query_menu((void *)vidc_inst, qmenu); } static long msm_v4l2_default(struct file *file, void *fh, bool valid_prio, unsigned int cmd, void *arg) { Loading @@ -232,6 +240,7 @@ const struct v4l2_ioctl_ops msm_v4l2_ioctl_ops = { .vidioc_s_ctrl = msm_v4l2_s_ctrl, .vidioc_g_ctrl = msm_v4l2_g_ctrl, .vidioc_queryctrl = msm_v4l2_queryctrl, .vidioc_querymenu = msm_v4l2_querymenu, .vidioc_subscribe_event = msm_v4l2_subscribe_event, .vidioc_unsubscribe_event = msm_v4l2_unsubscribe_event, .vidioc_decoder_cmd = msm_v4l2_decoder_cmd, Loading msm/vidc/msm_vidc.c +48 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #include <linux/dma-direction.h> Loading Loading @@ -143,22 +143,64 @@ int msm_vidc_query_ctrl(void *instance, struct v4l2_queryctrl *q_ctrl) } q_ctrl->minimum = ctrl->minimum; q_ctrl->maximum = ctrl->maximum; q_ctrl->default_value = ctrl->default_value; /* remove tier info for HEVC level */ if (q_ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_LEVEL) { q_ctrl->minimum &= ~(0xF << 28); q_ctrl->maximum &= ~(0xF << 28); } if (ctrl->type == V4L2_CTRL_TYPE_MENU) if (ctrl->type == V4L2_CTRL_TYPE_MENU) { q_ctrl->flags = ~(ctrl->menu_skip_mask); else } else { q_ctrl->flags = 0; s_vpr_h(inst->sid, "query ctrl: %s: min %d, max %d, flags %#x\n", ctrl->name, q_ctrl->minimum, q_ctrl->maximum, q_ctrl->flags); q_ctrl->step = ctrl->step; } s_vpr_h(inst->sid, "query ctrl: %s: min %d, max %d, default %d step %d flags %#x\n", ctrl->name, q_ctrl->minimum, q_ctrl->maximum, q_ctrl->default_value, q_ctrl->step, q_ctrl->flags); return rc; } EXPORT_SYMBOL(msm_vidc_query_ctrl); int msm_vidc_query_menu(void *instance, struct v4l2_querymenu *qmenu) { int rc = 0; struct msm_vidc_inst *inst = instance; struct v4l2_ctrl *ctrl; if (!inst || !qmenu) { d_vpr_e("%s: invalid params %pK %pK\n", __func__, inst, qmenu); return -EINVAL; } ctrl = v4l2_ctrl_find(&inst->ctrl_handler, qmenu->id); if (!ctrl) { s_vpr_e(inst->sid, "%s: get_ctrl failed for id %d\n", __func__, qmenu->id); return -EINVAL; } if (ctrl->type != V4L2_CTRL_TYPE_MENU) { s_vpr_e(inst->sid, "%s: ctrl: %s: type (%d) is not MENU type\n", __func__, ctrl->name, ctrl->type); return -EINVAL; } if (qmenu->index < ctrl->minimum || qmenu->index > ctrl->maximum) return -EINVAL; if (ctrl->menu_skip_mask & (1 << qmenu->index)) rc = -EINVAL; s_vpr_h(inst->sid, "%s: ctrl: %s: min %d, max %d, menu_skip_mask %#x, qmenu: id %d, index %d, %s\n", __func__, ctrl->name, ctrl->minimum, ctrl->maximum, ctrl->menu_skip_mask, qmenu->id, qmenu->index, rc ? "not supported" : "supported"); return rc; } EXPORT_SYMBOL(msm_vidc_query_menu); int msm_vidc_s_fmt(void *instance, struct v4l2_format *f) { int rc = 0; Loading msm/vidc/msm_vidc.h +2 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #ifndef _MSM_VIDC_H_ Loading Loading @@ -119,6 +119,7 @@ int msm_vidc_qbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_dqbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_streamon(void *instance, enum v4l2_buf_type i); int msm_vidc_query_ctrl(void *instance, struct v4l2_queryctrl *ctrl); int msm_vidc_query_menu(void *instance, struct v4l2_querymenu *qmenu); int msm_vidc_streamoff(void *instance, enum v4l2_buf_type i); int msm_vidc_comm_cmd(void *instance, union msm_v4l2_cmd *cmd); int msm_vidc_poll(void *instance, struct file *filp, Loading Loading
msm/vidc/msm_v4l2_vidc.c +10 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #include <linux/debugfs.h> Loading Loading @@ -207,6 +207,14 @@ static int msm_v4l2_queryctrl(struct file *file, void *fh, return msm_vidc_query_ctrl((void *)vidc_inst, ctrl); } static int msm_v4l2_querymenu(struct file *file, void *fh, struct v4l2_querymenu *qmenu) { struct msm_vidc_inst *vidc_inst = get_vidc_inst(file, fh); return msm_vidc_query_menu((void *)vidc_inst, qmenu); } static long msm_v4l2_default(struct file *file, void *fh, bool valid_prio, unsigned int cmd, void *arg) { Loading @@ -232,6 +240,7 @@ const struct v4l2_ioctl_ops msm_v4l2_ioctl_ops = { .vidioc_s_ctrl = msm_v4l2_s_ctrl, .vidioc_g_ctrl = msm_v4l2_g_ctrl, .vidioc_queryctrl = msm_v4l2_queryctrl, .vidioc_querymenu = msm_v4l2_querymenu, .vidioc_subscribe_event = msm_v4l2_subscribe_event, .vidioc_unsubscribe_event = msm_v4l2_unsubscribe_event, .vidioc_decoder_cmd = msm_v4l2_decoder_cmd, Loading
msm/vidc/msm_vidc.c +48 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #include <linux/dma-direction.h> Loading Loading @@ -143,22 +143,64 @@ int msm_vidc_query_ctrl(void *instance, struct v4l2_queryctrl *q_ctrl) } q_ctrl->minimum = ctrl->minimum; q_ctrl->maximum = ctrl->maximum; q_ctrl->default_value = ctrl->default_value; /* remove tier info for HEVC level */ if (q_ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_LEVEL) { q_ctrl->minimum &= ~(0xF << 28); q_ctrl->maximum &= ~(0xF << 28); } if (ctrl->type == V4L2_CTRL_TYPE_MENU) if (ctrl->type == V4L2_CTRL_TYPE_MENU) { q_ctrl->flags = ~(ctrl->menu_skip_mask); else } else { q_ctrl->flags = 0; s_vpr_h(inst->sid, "query ctrl: %s: min %d, max %d, flags %#x\n", ctrl->name, q_ctrl->minimum, q_ctrl->maximum, q_ctrl->flags); q_ctrl->step = ctrl->step; } s_vpr_h(inst->sid, "query ctrl: %s: min %d, max %d, default %d step %d flags %#x\n", ctrl->name, q_ctrl->minimum, q_ctrl->maximum, q_ctrl->default_value, q_ctrl->step, q_ctrl->flags); return rc; } EXPORT_SYMBOL(msm_vidc_query_ctrl); int msm_vidc_query_menu(void *instance, struct v4l2_querymenu *qmenu) { int rc = 0; struct msm_vidc_inst *inst = instance; struct v4l2_ctrl *ctrl; if (!inst || !qmenu) { d_vpr_e("%s: invalid params %pK %pK\n", __func__, inst, qmenu); return -EINVAL; } ctrl = v4l2_ctrl_find(&inst->ctrl_handler, qmenu->id); if (!ctrl) { s_vpr_e(inst->sid, "%s: get_ctrl failed for id %d\n", __func__, qmenu->id); return -EINVAL; } if (ctrl->type != V4L2_CTRL_TYPE_MENU) { s_vpr_e(inst->sid, "%s: ctrl: %s: type (%d) is not MENU type\n", __func__, ctrl->name, ctrl->type); return -EINVAL; } if (qmenu->index < ctrl->minimum || qmenu->index > ctrl->maximum) return -EINVAL; if (ctrl->menu_skip_mask & (1 << qmenu->index)) rc = -EINVAL; s_vpr_h(inst->sid, "%s: ctrl: %s: min %d, max %d, menu_skip_mask %#x, qmenu: id %d, index %d, %s\n", __func__, ctrl->name, ctrl->minimum, ctrl->maximum, ctrl->menu_skip_mask, qmenu->id, qmenu->index, rc ? "not supported" : "supported"); return rc; } EXPORT_SYMBOL(msm_vidc_query_menu); int msm_vidc_s_fmt(void *instance, struct v4l2_format *f) { int rc = 0; Loading
msm/vidc/msm_vidc.h +2 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. */ #ifndef _MSM_VIDC_H_ Loading Loading @@ -119,6 +119,7 @@ int msm_vidc_qbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_dqbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_streamon(void *instance, enum v4l2_buf_type i); int msm_vidc_query_ctrl(void *instance, struct v4l2_queryctrl *ctrl); int msm_vidc_query_menu(void *instance, struct v4l2_querymenu *qmenu); int msm_vidc_streamoff(void *instance, enum v4l2_buf_type i); int msm_vidc_comm_cmd(void *instance, union msm_v4l2_cmd *cmd); int msm_vidc_poll(void *instance, struct file *filp, Loading