xref: /linux/include/media/v4l2-dev.h (revision 367b8112fe2ea5c39a7bb4d263dcdd9b612fae18)
1 /*
2  *
3  *	V 4 L 2   D R I V E R   H E L P E R   A P I
4  *
5  * Moved from videodev2.h
6  *
7  *	Some commonly needed functions for drivers (v4l2-common.o module)
8  */
9 #ifndef _V4L2_DEV_H
10 #define _V4L2_DEV_H
11 
12 #include <linux/poll.h>
13 #include <linux/fs.h>
14 #include <linux/device.h>
15 #include <linux/cdev.h>
16 #include <linux/mutex.h>
17 #include <linux/videodev2.h>
18 
19 #define VIDEO_MAJOR	81
20 
21 #define VFL_TYPE_GRABBER	0
22 #define VFL_TYPE_VBI		1
23 #define VFL_TYPE_RADIO		2
24 #define VFL_TYPE_VTX		3
25 #define VFL_TYPE_MAX		4
26 
27 struct v4l2_ioctl_callbacks;
28 
29 /*
30  * Newer version of video_device, handled by videodev2.c
31  * 	This version moves redundant code from video device code to
32  *	the common handler
33  */
34 
35 struct video_device
36 {
37 	/* device ops */
38 	const struct file_operations *fops;
39 
40 	/* sysfs */
41 	struct device dev;		/* v4l device */
42 	struct cdev cdev;		/* character device */
43 	void (*cdev_release)(struct kobject *kobj);
44 	struct device *parent;		/* device parent */
45 
46 	/* device info */
47 	char name[32];
48 	int vfl_type;
49 	int minor;
50 	u16 num;
51 	/* attribute to differentiate multiple indices on one physical device */
52 	int index;
53 
54 	int debug;			/* Activates debug level*/
55 
56 	/* Video standard vars */
57 	v4l2_std_id tvnorms;		/* Supported tv norms */
58 	v4l2_std_id current_norm;	/* Current tvnorm */
59 
60 	/* callbacks */
61 	void (*release)(struct video_device *vfd);
62 
63 	/* ioctl callbacks */
64 	const struct v4l2_ioctl_ops *ioctl_ops;
65 };
66 
67 /* dev to video-device */
68 #define to_video_device(cd) container_of(cd, struct video_device, dev)
69 
70 /* Register and unregister devices. Note that if video_register_device fails,
71    the release() callback of the video_device structure is *not* called, so
72    the caller is responsible for freeing any data. Usually that means that
73    you call video_device_release() on failure. */
74 int __must_check video_register_device(struct video_device *vfd, int type, int nr);
75 int __must_check video_register_device_index(struct video_device *vfd,
76 						int type, int nr, int index);
77 void video_unregister_device(struct video_device *vfd);
78 
79 /* helper functions to alloc/release struct video_device, the
80    latter can also be used for video_device->release(). */
81 struct video_device * __must_check video_device_alloc(void);
82 
83 /* this release function frees the vfd pointer */
84 void video_device_release(struct video_device *vfd);
85 
86 /* this release function does nothing, use when the video_device is a
87    static global struct. Note that having a static video_device is
88    a dubious construction at best. */
89 void video_device_release_empty(struct video_device *vfd);
90 
91 /* helper functions to access driver private data. */
92 static inline void *video_get_drvdata(struct video_device *dev)
93 {
94 	return dev_get_drvdata(&dev->dev);
95 }
96 
97 static inline void video_set_drvdata(struct video_device *dev, void *data)
98 {
99 	dev_set_drvdata(&dev->dev, data);
100 }
101 
102 struct video_device *video_devdata(struct file *file);
103 
104 /* Combine video_get_drvdata and video_devdata as this is
105    used very often. */
106 static inline void *video_drvdata(struct file *file)
107 {
108 	return video_get_drvdata(video_devdata(file));
109 }
110 
111 #endif /* _V4L2_DEV_H */
112