diff options
-rw-r--r-- | drivers/media/platform/vivid/vivid-core.h | 1 | ||||
-rw-r--r-- | drivers/media/platform/vivid/vivid-ctrls.c | 35 |
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 | |||
277 | static 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 | |||
290 | static const struct v4l2_ctrl_ops vivid_fb_ctrl_ops = { | ||
291 | .s_ctrl = vivid_fb_s_ctrl, | ||
292 | }; | ||
293 | |||
277 | static const struct v4l2_ctrl_config vivid_ctrl_clear_fb = { | 294 | static 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 | } |