Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * v4l2-fh.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * V4L2 file handle. Store per file handle data for the V4L2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * framework. Using file handles is optional for the drivers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * Copyright (C) 2009--2010 Nokia Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * Contact: Sakari Ailus <sakari.ailus@iki.fi>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #ifndef V4L2_FH_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define V4L2_FH_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include <linux/fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #include <linux/kconfig.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include <linux/list.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #include <linux/videodev2.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) struct video_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) struct v4l2_ctrl_handler;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  * struct v4l2_fh - Describes a V4L2 file handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  * @list: list of file handlers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  * @vdev: pointer to &struct video_device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  * @ctrl_handler: pointer to &struct v4l2_ctrl_handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  * @prio: priority of the file handler, as defined by &enum v4l2_priority
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * @wait: event' s wait queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  * @subscribe_lock: serialise changes to the subscribed list; guarantee that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  *		    the add and del event callbacks are orderly called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * @subscribed: list of subscribed events
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * @available: list of events waiting to be dequeued
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * @navailable: number of available events at @available list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * @sequence: event sequence number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * @m2m_ctx: pointer to &struct v4l2_m2m_ctx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) struct v4l2_fh {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	struct list_head	list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	struct video_device	*vdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	struct v4l2_ctrl_handler *ctrl_handler;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	enum v4l2_priority	prio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	/* Events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	wait_queue_head_t	wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	struct mutex		subscribe_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	struct list_head	subscribed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	struct list_head	available;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	unsigned int		navailable;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	u32			sequence;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	struct v4l2_m2m_ctx	*m2m_ctx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * v4l2_fh_init - Initialise the file handle.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)  * @fh: pointer to &struct v4l2_fh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)  * @vdev: pointer to &struct video_device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)  * Parts of the V4L2 framework using the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  * file handles should be initialised in this function. Must be called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67)  * from driver's v4l2_file_operations->open\(\) handler if the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)  * uses &struct v4l2_fh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) void v4l2_fh_init(struct v4l2_fh *fh, struct video_device *vdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  * v4l2_fh_add - Add the fh to the list of file handles on a video_device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)  * @fh: pointer to &struct v4l2_fh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)  * .. note::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)  *    The @fh file handle must be initialised first.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) void v4l2_fh_add(struct v4l2_fh *fh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83)  * v4l2_fh_open - Ancillary routine that can be used as the open\(\) op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)  *	of v4l2_file_operations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86)  * @filp: pointer to struct file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)  * It allocates a v4l2_fh and inits and adds it to the &struct video_device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)  * associated with the file pointer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) int v4l2_fh_open(struct file *filp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * v4l2_fh_del - Remove file handle from the list of file handles.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * @fh: pointer to &struct v4l2_fh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  * On error filp->private_data will be %NULL, otherwise it will point to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  * the &struct v4l2_fh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  * .. note::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)  *    Must be called in v4l2_file_operations->release\(\) handler if the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)  *    uses &struct v4l2_fh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) void v4l2_fh_del(struct v4l2_fh *fh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)  * v4l2_fh_exit - Release resources related to a file handle.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)  * @fh: pointer to &struct v4l2_fh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)  * Parts of the V4L2 framework using the v4l2_fh must release their
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)  * resources here, too.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)  * .. note::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)  *    Must be called in v4l2_file_operations->release\(\) handler if the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)  *    driver uses &struct v4l2_fh.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) void v4l2_fh_exit(struct v4l2_fh *fh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)  * v4l2_fh_release - Ancillary routine that can be used as the release\(\) op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)  *	of v4l2_file_operations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)  * @filp: pointer to struct file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)  * It deletes and exits the v4l2_fh associated with the file pointer and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)  * frees it. It will do nothing if filp->private_data (the pointer to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)  * v4l2_fh struct) is %NULL.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)  * This function always returns 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) int v4l2_fh_release(struct file *filp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)  * v4l2_fh_is_singular - Returns 1 if this filehandle is the only filehandle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)  *	 opened for the associated video_device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)  * @fh: pointer to &struct v4l2_fh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)  * If @fh is NULL, then it returns 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) int v4l2_fh_is_singular(struct v4l2_fh *fh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)  * v4l2_fh_is_singular_file - Returns 1 if this filehandle is the only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)  *	filehandle opened for the associated video_device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)  * @filp: pointer to struct file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)  * This is a helper function variant of v4l2_fh_is_singular() with uses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)  * struct file as argument.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)  * If filp->private_data is %NULL, then it will return 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) static inline int v4l2_fh_is_singular_file(struct file *filp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	return v4l2_fh_is_singular(filp->private_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #endif /* V4L2_EVENT_H */