media: mfc: support the s5p_mfc_poll() ioctl
authorSunyoung Kang <sy0816.kang@samsung.com>
Fri, 27 Apr 2018 06:01:18 +0000 (15:01 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Tue, 29 May 2018 06:59:18 +0000 (15:59 +0900)
To use poll() ioctl, wait POLLOUT event for source
and POLLIN event for destination.

Change-Id: I35f8f31dd47408ee2d8b720a020fc4a66754986a
Signed-off-by: Sunyoung Kang <sy0816.kang@samsung.com>
drivers/media/platform/exynos/mfc/s5p_mfc.c

index 705ac511f272fb58a510734dcfd39a434822b5be..c8449388720ad540af325284963f27eada2075e9 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/smc.h>
 #include <linux/debugfs.h>
 #include <linux/seq_file.h>
+#include <linux/poll.h>
 
 #include "s5p_mfc_common.h"
 
@@ -811,16 +812,20 @@ static unsigned int s5p_mfc_poll(struct file *file,
                                 struct poll_table_struct *wait)
 {
        struct s5p_mfc_ctx *ctx = fh_to_mfc_ctx(file->private_data);
+       unsigned long req_events = poll_requested_events(wait);
        unsigned int ret = 0;
-       enum s5p_mfc_node_type node_type;
 
-       node_type = s5p_mfc_get_node_type(file);
+       mfc_debug_enter();
 
-       if (s5p_mfc_is_decoder_node(node_type))
+       if (req_events & (POLLOUT | POLLWRNORM)) {
+               mfc_debug(2, "wait source buffer\n");
                ret = vb2_poll(&ctx->vq_src, file, wait);
-       else
+       } else if (req_events & (POLLIN | POLLRDNORM)) {
+               mfc_debug(2, "wait destination buffer\n");
                ret = vb2_poll(&ctx->vq_dst, file, wait);
+       }
 
+       mfc_debug_leave();
        return ret;
 }