aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/vivid/vivid-core.h1
-rw-r--r--drivers/media/platform/vivid/vivid-ctrls.c35
2 files changed, 30 insertions, 6 deletions
diff --git a/drivers/media/platform/vivid/vivid-core.h b/drivers/media/platform/vivid/vivid-core.h
index 50802e650750..c90e4a0ab94e 100644
--- a/drivers/media/platform/vivid/vivid-core.h
+++ b/drivers/media/platform/vivid/vivid-core.h
@@ -154,6 +154,7 @@ struct vivid_dev {
154 struct v4l2_ctrl_handler ctrl_hdl_streaming; 154 struct v4l2_ctrl_handler ctrl_hdl_streaming;
155 struct v4l2_ctrl_handler ctrl_hdl_sdtv_cap; 155 struct v4l2_ctrl_handler ctrl_hdl_sdtv_cap;
156 struct v4l2_ctrl_handler ctrl_hdl_loop_cap; 156 struct v4l2_ctrl_handler ctrl_hdl_loop_cap;
157 struct v4l2_ctrl_handler ctrl_hdl_fb;
157 struct video_device vid_cap_dev; 158 struct video_device vid_cap_dev;
158 struct v4l2_ctrl_handler ctrl_hdl_vid_cap; 159 struct v4l2_ctrl_handler ctrl_hdl_vid_cap;
159 struct video_device vid_out_dev; 160 struct video_device vid_out_dev;
diff --git a/drivers/media/platform/vivid/vivid-ctrls.c b/drivers/media/platform/vivid/vivid-ctrls.c
index 34731f71cc00..3f9d354827af 100644
--- a/drivers/media/platform/vivid/vivid-ctrls.c
+++ b/drivers/media/platform/vivid/vivid-ctrls.c
@@ -120,9 +120,6 @@ static int vivid_user_gen_s_ctrl(struct v4l2_ctrl *ctrl)
120 clear_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags); 120 clear_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags);
121 clear_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags); 121 clear_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags);
122 break; 122 break;
123 case VIVID_CID_CLEAR_FB:
124 vivid_clear_fb(dev);
125 break;
126 case VIVID_CID_BUTTON: 123 case VIVID_CID_BUTTON:
127 dev->button_pressed = 30; 124 dev->button_pressed = 30;
128 break; 125 break;
@@ -274,8 +271,28 @@ static const struct v4l2_ctrl_config vivid_ctrl_disconnect = {
274 .type = V4L2_CTRL_TYPE_BUTTON, 271 .type = V4L2_CTRL_TYPE_BUTTON,
275}; 272};
276 273
274
275/* Framebuffer Controls */
276
277static int vivid_fb_s_ctrl(struct v4l2_ctrl *ctrl)
278{
279 struct vivid_dev *dev = container_of(ctrl->handler,
280 struct vivid_dev, ctrl_hdl_fb);
281
282 switch (ctrl->id) {
283 case VIVID_CID_CLEAR_FB:
284 vivid_clear_fb(dev);
285 break;
286 }
287 return 0;
288}
289
290static const struct v4l2_ctrl_ops vivid_fb_ctrl_ops = {
291 .s_ctrl = vivid_fb_s_ctrl,
292};
293
277static const struct v4l2_ctrl_config vivid_ctrl_clear_fb = { 294static const struct v4l2_ctrl_config vivid_ctrl_clear_fb = {
278 .ops = &vivid_user_gen_ctrl_ops, 295 .ops = &vivid_fb_ctrl_ops,
279 .id = VIVID_CID_CLEAR_FB, 296 .id = VIVID_CID_CLEAR_FB,
280 .name = "Clear Framebuffer", 297 .name = "Clear Framebuffer",
281 .type = V4L2_CTRL_TYPE_BUTTON, 298 .type = V4L2_CTRL_TYPE_BUTTON,
@@ -1357,6 +1374,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
1357 struct v4l2_ctrl_handler *hdl_streaming = &dev->ctrl_hdl_streaming; 1374 struct v4l2_ctrl_handler *hdl_streaming = &dev->ctrl_hdl_streaming;
1358 struct v4l2_ctrl_handler *hdl_sdtv_cap = &dev->ctrl_hdl_sdtv_cap; 1375 struct v4l2_ctrl_handler *hdl_sdtv_cap = &dev->ctrl_hdl_sdtv_cap;
1359 struct v4l2_ctrl_handler *hdl_loop_cap = &dev->ctrl_hdl_loop_cap; 1376 struct v4l2_ctrl_handler *hdl_loop_cap = &dev->ctrl_hdl_loop_cap;
1377 struct v4l2_ctrl_handler *hdl_fb = &dev->ctrl_hdl_fb;
1360 struct v4l2_ctrl_handler *hdl_vid_cap = &dev->ctrl_hdl_vid_cap; 1378 struct v4l2_ctrl_handler *hdl_vid_cap = &dev->ctrl_hdl_vid_cap;
1361 struct v4l2_ctrl_handler *hdl_vid_out = &dev->ctrl_hdl_vid_out; 1379 struct v4l2_ctrl_handler *hdl_vid_out = &dev->ctrl_hdl_vid_out;
1362 struct v4l2_ctrl_handler *hdl_vbi_cap = &dev->ctrl_hdl_vbi_cap; 1380 struct v4l2_ctrl_handler *hdl_vbi_cap = &dev->ctrl_hdl_vbi_cap;
@@ -1384,10 +1402,12 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
1384 v4l2_ctrl_new_custom(hdl_sdtv_cap, &vivid_ctrl_class, NULL); 1402 v4l2_ctrl_new_custom(hdl_sdtv_cap, &vivid_ctrl_class, NULL);
1385 v4l2_ctrl_handler_init(hdl_loop_cap, 1); 1403 v4l2_ctrl_handler_init(hdl_loop_cap, 1);
1386 v4l2_ctrl_new_custom(hdl_loop_cap, &vivid_ctrl_class, NULL); 1404 v4l2_ctrl_new_custom(hdl_loop_cap, &vivid_ctrl_class, NULL);
1405 v4l2_ctrl_handler_init(hdl_fb, 1);
1406 v4l2_ctrl_new_custom(hdl_fb, &vivid_ctrl_class, NULL);
1387 v4l2_ctrl_handler_init(hdl_vid_cap, 55); 1407 v4l2_ctrl_handler_init(hdl_vid_cap, 55);
1388 v4l2_ctrl_new_custom(hdl_vid_cap, &vivid_ctrl_class, NULL); 1408 v4l2_ctrl_new_custom(hdl_vid_cap, &vivid_ctrl_class, NULL);
1389 v4l2_ctrl_handler_init(hdl_vid_out, 26); 1409 v4l2_ctrl_handler_init(hdl_vid_out, 26);
1390 if (!no_error_inj) 1410 if (!no_error_inj || dev->has_fb)
1391 v4l2_ctrl_new_custom(hdl_vid_out, &vivid_ctrl_class, NULL); 1411 v4l2_ctrl_new_custom(hdl_vid_out, &vivid_ctrl_class, NULL);
1392 v4l2_ctrl_handler_init(hdl_vbi_cap, 21); 1412 v4l2_ctrl_handler_init(hdl_vbi_cap, 21);
1393 v4l2_ctrl_new_custom(hdl_vbi_cap, &vivid_ctrl_class, NULL); 1413 v4l2_ctrl_new_custom(hdl_vbi_cap, &vivid_ctrl_class, NULL);
@@ -1561,7 +1581,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
1561 v4l2_ctrl_new_custom(hdl_loop_cap, &vivid_ctrl_loop_video, NULL); 1581 v4l2_ctrl_new_custom(hdl_loop_cap, &vivid_ctrl_loop_video, NULL);
1562 1582
1563 if (dev->has_fb) 1583 if (dev->has_fb)
1564 v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_clear_fb, NULL); 1584 v4l2_ctrl_new_custom(hdl_fb, &vivid_ctrl_clear_fb, NULL);
1565 1585
1566 if (dev->has_radio_rx) { 1586 if (dev->has_radio_rx) {
1567 v4l2_ctrl_new_custom(hdl_radio_rx, &vivid_ctrl_radio_hw_seek_mode, NULL); 1587 v4l2_ctrl_new_custom(hdl_radio_rx, &vivid_ctrl_radio_hw_seek_mode, NULL);
@@ -1658,6 +1678,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
1658 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_streaming, NULL); 1678 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_streaming, NULL);
1659 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_sdtv_cap, NULL); 1679 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_sdtv_cap, NULL);
1660 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_loop_cap, NULL); 1680 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_loop_cap, NULL);
1681 v4l2_ctrl_add_handler(hdl_vid_cap, hdl_fb, NULL);
1661 if (hdl_vid_cap->error) 1682 if (hdl_vid_cap->error)
1662 return hdl_vid_cap->error; 1683 return hdl_vid_cap->error;
1663 dev->vid_cap_dev.ctrl_handler = hdl_vid_cap; 1684 dev->vid_cap_dev.ctrl_handler = hdl_vid_cap;
@@ -1666,6 +1687,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
1666 v4l2_ctrl_add_handler(hdl_vid_out, hdl_user_gen, NULL); 1687 v4l2_ctrl_add_handler(hdl_vid_out, hdl_user_gen, NULL);
1667 v4l2_ctrl_add_handler(hdl_vid_out, hdl_user_aud, NULL); 1688 v4l2_ctrl_add_handler(hdl_vid_out, hdl_user_aud, NULL);
1668 v4l2_ctrl_add_handler(hdl_vid_out, hdl_streaming, NULL); 1689 v4l2_ctrl_add_handler(hdl_vid_out, hdl_streaming, NULL);
1690 v4l2_ctrl_add_handler(hdl_vid_out, hdl_fb, NULL);
1669 if (hdl_vid_out->error) 1691 if (hdl_vid_out->error)
1670 return hdl_vid_out->error; 1692 return hdl_vid_out->error;
1671 dev->vid_out_dev.ctrl_handler = hdl_vid_out; 1693 dev->vid_out_dev.ctrl_handler = hdl_vid_out;
@@ -1725,4 +1747,5 @@ void vivid_free_controls(struct vivid_dev *dev)
1725 v4l2_ctrl_handler_free(&dev->ctrl_hdl_streaming); 1747 v4l2_ctrl_handler_free(&dev->ctrl_hdl_streaming);
1726 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdtv_cap); 1748 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdtv_cap);
1727 v4l2_ctrl_handler_free(&dev->ctrl_hdl_loop_cap); 1749 v4l2_ctrl_handler_free(&dev->ctrl_hdl_loop_cap);
1750 v4l2_ctrl_handler_free(&dev->ctrl_hdl_fb);
1728} 1751}