Commit a4b3675f authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

media: vivid: add req_validate error injection

Add a new vivid button control to inject an error into the
req_validate request callback.

This will help testing with v4l2-compliance.
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 191cf8b0
...@@ -630,8 +630,19 @@ static void vivid_dev_release(struct v4l2_device *v4l2_dev) ...@@ -630,8 +630,19 @@ static void vivid_dev_release(struct v4l2_device *v4l2_dev)
} }
#ifdef CONFIG_MEDIA_CONTROLLER #ifdef CONFIG_MEDIA_CONTROLLER
static int vivid_req_validate(struct media_request *req)
{
struct vivid_dev *dev = container_of(req->mdev, struct vivid_dev, mdev);
if (dev->req_validate_error) {
dev->req_validate_error = false;
return -EINVAL;
}
return vb2_request_validate(req);
}
static const struct media_device_ops vivid_media_ops = { static const struct media_device_ops vivid_media_ops = {
.req_validate = vb2_request_validate, .req_validate = vivid_req_validate,
.req_queue = vb2_request_queue, .req_queue = vb2_request_queue,
}; };
#endif #endif
......
...@@ -294,6 +294,7 @@ struct vivid_dev { ...@@ -294,6 +294,7 @@ struct vivid_dev {
bool buf_prepare_error; bool buf_prepare_error;
bool start_streaming_error; bool start_streaming_error;
bool dqbuf_error; bool dqbuf_error;
bool req_validate_error;
bool seq_wrap; bool seq_wrap;
bool time_wrap; bool time_wrap;
u64 time_wrap_offset; u64 time_wrap_offset;
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
#define VIVID_CID_START_STR_ERROR (VIVID_CID_VIVID_BASE + 69) #define VIVID_CID_START_STR_ERROR (VIVID_CID_VIVID_BASE + 69)
#define VIVID_CID_QUEUE_ERROR (VIVID_CID_VIVID_BASE + 70) #define VIVID_CID_QUEUE_ERROR (VIVID_CID_VIVID_BASE + 70)
#define VIVID_CID_CLEAR_FB (VIVID_CID_VIVID_BASE + 71) #define VIVID_CID_CLEAR_FB (VIVID_CID_VIVID_BASE + 71)
#define VIVID_CID_REQ_VALIDATE_ERROR (VIVID_CID_VIVID_BASE + 72)
#define VIVID_CID_RADIO_SEEK_MODE (VIVID_CID_VIVID_BASE + 90) #define VIVID_CID_RADIO_SEEK_MODE (VIVID_CID_VIVID_BASE + 90)
#define VIVID_CID_RADIO_SEEK_PROG_LIM (VIVID_CID_VIVID_BASE + 91) #define VIVID_CID_RADIO_SEEK_PROG_LIM (VIVID_CID_VIVID_BASE + 91)
...@@ -1002,6 +1003,9 @@ static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -1002,6 +1003,9 @@ static int vivid_streaming_s_ctrl(struct v4l2_ctrl *ctrl)
case VIVID_CID_START_STR_ERROR: case VIVID_CID_START_STR_ERROR:
dev->start_streaming_error = true; dev->start_streaming_error = true;
break; break;
case VIVID_CID_REQ_VALIDATE_ERROR:
dev->req_validate_error = true;
break;
case VIVID_CID_QUEUE_ERROR: case VIVID_CID_QUEUE_ERROR:
if (vb2_start_streaming_called(&dev->vb_vid_cap_q)) if (vb2_start_streaming_called(&dev->vb_vid_cap_q))
vb2_queue_error(&dev->vb_vid_cap_q); vb2_queue_error(&dev->vb_vid_cap_q);
...@@ -1087,6 +1091,15 @@ static const struct v4l2_ctrl_config vivid_ctrl_queue_error = { ...@@ -1087,6 +1091,15 @@ static const struct v4l2_ctrl_config vivid_ctrl_queue_error = {
.type = V4L2_CTRL_TYPE_BUTTON, .type = V4L2_CTRL_TYPE_BUTTON,
}; };
#ifdef CONFIG_MEDIA_CONTROLLER
static const struct v4l2_ctrl_config vivid_ctrl_req_validate_error = {
.ops = &vivid_streaming_ctrl_ops,
.id = VIVID_CID_REQ_VALIDATE_ERROR,
.name = "Inject req_validate() Error",
.type = V4L2_CTRL_TYPE_BUTTON,
};
#endif
static const struct v4l2_ctrl_config vivid_ctrl_seq_wrap = { static const struct v4l2_ctrl_config vivid_ctrl_seq_wrap = {
.ops = &vivid_streaming_ctrl_ops, .ops = &vivid_streaming_ctrl_ops,
.id = VIVID_CID_SEQ_WRAP, .id = VIVID_CID_SEQ_WRAP,
...@@ -1516,6 +1529,9 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap, ...@@ -1516,6 +1529,9 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_buf_prepare_error, NULL); v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_buf_prepare_error, NULL);
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_start_streaming_error, NULL); v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_start_streaming_error, NULL);
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_queue_error, NULL); v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_queue_error, NULL);
#ifdef CONFIG_MEDIA_CONTROLLER
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_req_validate_error, NULL);
#endif
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_seq_wrap, NULL); v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_seq_wrap, NULL);
v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_time_wrap, NULL); v4l2_ctrl_new_custom(hdl_streaming, &vivid_ctrl_time_wrap, NULL);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment