Blame view

include/media/v4l2-mediabus.h 7.49 KB
d2912cb15   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
9a74251d8   Guennadi Liakhovetski   V4L/DVB (13658): ...
2
3
4
5
  /*
   * Media Bus API header
   *
   * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
9a74251d8   Guennadi Liakhovetski   V4L/DVB (13658): ...
6
7
8
9
   */
  
  #ifndef V4L2_MEDIABUS_H
  #define V4L2_MEDIABUS_H
2ef2d5a33   Laurent Pinchart   [media] v4l: Move...
10
  #include <linux/v4l2-mediabus.h>
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
11
  #include <linux/bitops.h>
ddf5c927b   Jacopo Mondi   media: v4l2- medi...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  /*
   * How to use the V4L2_MBUS_* flags:
   * Flags are defined for each of the possible states and values of a media
   * bus configuration parameter. One and only one bit of each group of flags
   * shall be set by the users of the v4l2_subdev_pad_ops.get_mbus_config and
   * v4l2_subdev_pad_ops.set_mbus_config operations to ensure that no
   * conflicting settings are specified when reporting and setting the media bus
   * configuration with the two operations respectively. For example, it is
   * invalid to set or clear both the V4L2_MBUS_HSYNC_ACTIVE_HIGH and the
   * V4L2_MBUS_HSYNC_ACTIVE_LOW flag at the same time. Instead either flag
   * V4L2_MBUS_HSYNC_ACTIVE_HIGH or flag V4L2_MBUS_HSYNC_ACTIVE_LOW shall be
   * set. The same is true for the V4L2_MBUS_CSI2_1/2/3/4_LANE flags group: only
   * one of these four bits shall be set.
   *
   * TODO: replace the existing V4L2_MBUS_* flags with structures of fields
   * to avoid conflicting settings.
   *
   * In example:
   *     #define V4L2_MBUS_HSYNC_ACTIVE_HIGH             BIT(2)
   *     #define V4L2_MBUS_HSYNC_ACTIVE_LOW              BIT(3)
   * will be replaced by a field whose value reports the intended active state of
   * the signal:
   *     unsigned int v4l2_mbus_hsync_active : 1;
   */
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
36
37
  /* Parallel flags */
  /*
ddf5c927b   Jacopo Mondi   media: v4l2- medi...
38
   * The client runs in master or in slave mode. By "Master mode" an operation
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
39
40
41
42
   * mode is meant, when the client (e.g., a camera sensor) is producing
   * horizontal and vertical synchronisation. In "Slave mode" the host is
   * providing these signals to the slave.
   */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
43
44
  #define V4L2_MBUS_MASTER			BIT(0)
  #define V4L2_MBUS_SLAVE				BIT(1)
3c6938f80   Sylwester Nawrocki   [media] v4l2: Add...
45
46
47
48
49
50
  /*
   * Signal polarity flags
   * Note: in BT.656 mode HSYNC, FIELD, and VSYNC are unused
   * V4L2_MBUS_[HV]SYNC* flags should be also used for specifying
   * configuration of hardware that uses [HV]REF signals
   */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
51
52
53
54
55
56
57
58
  #define V4L2_MBUS_HSYNC_ACTIVE_HIGH		BIT(2)
  #define V4L2_MBUS_HSYNC_ACTIVE_LOW		BIT(3)
  #define V4L2_MBUS_VSYNC_ACTIVE_HIGH		BIT(4)
  #define V4L2_MBUS_VSYNC_ACTIVE_LOW		BIT(5)
  #define V4L2_MBUS_PCLK_SAMPLE_RISING		BIT(6)
  #define V4L2_MBUS_PCLK_SAMPLE_FALLING		BIT(7)
  #define V4L2_MBUS_DATA_ACTIVE_HIGH		BIT(8)
  #define V4L2_MBUS_DATA_ACTIVE_LOW		BIT(9)
3c6938f80   Sylwester Nawrocki   [media] v4l2: Add...
59
  /* FIELD = 0/1 - Field1 (odd)/Field2 (even) */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
60
  #define V4L2_MBUS_FIELD_EVEN_HIGH		BIT(10)
3c6938f80   Sylwester Nawrocki   [media] v4l2: Add...
61
  /* FIELD = 1/0 - Field1 (odd)/Field2 (even) */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
62
  #define V4L2_MBUS_FIELD_EVEN_LOW		BIT(11)
d1d70aa69   Lad, Prabhakar   [media] media: OF...
63
  /* Active state of Sync-on-green (SoG) signal, 0/1 for LOW/HIGH respectively. */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
64
65
  #define V4L2_MBUS_VIDEO_SOG_ACTIVE_HIGH		BIT(12)
  #define V4L2_MBUS_VIDEO_SOG_ACTIVE_LOW		BIT(13)
9b04fcc1d   Jacopo Mondi   media: v4l2-fwnod...
66
67
  #define V4L2_MBUS_DATA_ENABLE_HIGH		BIT(14)
  #define V4L2_MBUS_DATA_ENABLE_LOW		BIT(15)
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
68
69
  
  /* Serial flags */
ddf5c927b   Jacopo Mondi   media: v4l2- medi...
70
  /* CSI-2 D-PHY number of data lanes. */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
71
72
73
74
  #define V4L2_MBUS_CSI2_1_LANE			BIT(0)
  #define V4L2_MBUS_CSI2_2_LANE			BIT(1)
  #define V4L2_MBUS_CSI2_3_LANE			BIT(2)
  #define V4L2_MBUS_CSI2_4_LANE			BIT(3)
ddf5c927b   Jacopo Mondi   media: v4l2- medi...
75
  /* CSI-2 Virtual Channel identifiers. */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
76
77
78
79
  #define V4L2_MBUS_CSI2_CHANNEL_0		BIT(4)
  #define V4L2_MBUS_CSI2_CHANNEL_1		BIT(5)
  #define V4L2_MBUS_CSI2_CHANNEL_2		BIT(6)
  #define V4L2_MBUS_CSI2_CHANNEL_3		BIT(7)
ddf5c927b   Jacopo Mondi   media: v4l2- medi...
80
  /* Clock non-continuous mode support. */
2120961f0   Mauro Carvalho Chehab   media: v4l2-media...
81
82
  #define V4L2_MBUS_CSI2_CONTINUOUS_CLOCK		BIT(8)
  #define V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK	BIT(9)
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
83

6087b2153   Mauro Carvalho Chehab   media: v4l2-core:...
84
85
86
87
88
89
90
91
  #define V4L2_MBUS_CSI2_LANES		(V4L2_MBUS_CSI2_1_LANE | \
  					 V4L2_MBUS_CSI2_2_LANE | \
  					 V4L2_MBUS_CSI2_3_LANE | \
  					 V4L2_MBUS_CSI2_4_LANE)
  #define V4L2_MBUS_CSI2_CHANNELS		(V4L2_MBUS_CSI2_CHANNEL_0 | \
  					 V4L2_MBUS_CSI2_CHANNEL_1 | \
  					 V4L2_MBUS_CSI2_CHANNEL_2 | \
  					 V4L2_MBUS_CSI2_CHANNEL_3)
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
92
93
  
  /**
98d00bd7a   Mauro Carvalho Chehab   [media] v4l2-medi...
94
   * enum v4l2_mbus_type - media bus type
2835b5b15   Sakari Ailus   media: v4l: fwnod...
95
   * @V4L2_MBUS_UNKNOWN:	unknown bus type, no V4L2 mediabus configuration
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
96
97
98
   * @V4L2_MBUS_PARALLEL:	parallel interface with hsync and vsync
   * @V4L2_MBUS_BT656:	parallel interface with embedded synchronisation, can
   *			also be used for BT.1120
97bbdf02d   Sakari Ailus   media: v4l: Add s...
99
100
   * @V4L2_MBUS_CSI1:	MIPI CSI-1 serial interface
   * @V4L2_MBUS_CCP2:	CCP2 (Compact Camera Port 2)
2d95e7ed0   Sakari Ailus   media: v4l: media...
101
102
   * @V4L2_MBUS_CSI2_DPHY: MIPI CSI-2 serial interface, with D-PHY
   * @V4L2_MBUS_CSI2_CPHY: MIPI CSI-2 serial interface, with C-PHY
f43c83293   Lad Prabhakar   media: v4l2-fwnod...
103
   * @V4L2_MBUS_INVALID:	invalid bus type (keep as last)
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
104
105
   */
  enum v4l2_mbus_type {
2835b5b15   Sakari Ailus   media: v4l: fwnod...
106
  	V4L2_MBUS_UNKNOWN,
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
107
108
  	V4L2_MBUS_PARALLEL,
  	V4L2_MBUS_BT656,
97bbdf02d   Sakari Ailus   media: v4l: Add s...
109
110
  	V4L2_MBUS_CSI1,
  	V4L2_MBUS_CCP2,
2d95e7ed0   Sakari Ailus   media: v4l: media...
111
112
  	V4L2_MBUS_CSI2_DPHY,
  	V4L2_MBUS_CSI2_CPHY,
f43c83293   Lad Prabhakar   media: v4l2-fwnod...
113
  	V4L2_MBUS_INVALID,
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
114
115
116
  };
  
  /**
98d00bd7a   Mauro Carvalho Chehab   [media] v4l2-medi...
117
   * struct v4l2_mbus_config - media bus configuration
91c795300   Guennadi Liakhovetski   [media] V4L: add ...
118
119
120
121
122
123
124
   * @type:	in: interface type
   * @flags:	in / out: configuration flags, depending on @type
   */
  struct v4l2_mbus_config {
  	enum v4l2_mbus_type type;
  	unsigned int flags;
  };
4839c58f0   Mauro Carvalho Chehab   media: v4l2-dev: ...
125
126
127
128
129
130
131
  /**
   * v4l2_fill_pix_format - Ancillary routine that fills a &struct
   *	v4l2_pix_format fields from a &struct v4l2_mbus_framefmt.
   *
   * @pix_fmt:	pointer to &struct v4l2_pix_format to be filled
   * @mbus_fmt:	pointer to &struct v4l2_mbus_framefmt to be used as model
   */
6087b2153   Mauro Carvalho Chehab   media: v4l2-core:...
132
133
134
  static inline void
  v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
  		     const struct v4l2_mbus_framefmt *mbus_fmt)
3a21ceed7   Hans Verkuil   V4L/DVB: v4l2-med...
135
136
137
138
139
  {
  	pix_fmt->width = mbus_fmt->width;
  	pix_fmt->height = mbus_fmt->height;
  	pix_fmt->field = mbus_fmt->field;
  	pix_fmt->colorspace = mbus_fmt->colorspace;
11ff030c7   Hans Verkuil   [media] v4l2-medi...
140
141
  	pix_fmt->ycbcr_enc = mbus_fmt->ycbcr_enc;
  	pix_fmt->quantization = mbus_fmt->quantization;
74fdcb2ee   Hans Verkuil   [media] videodev2...
142
  	pix_fmt->xfer_func = mbus_fmt->xfer_func;
3a21ceed7   Hans Verkuil   V4L/DVB: v4l2-med...
143
  }
4839c58f0   Mauro Carvalho Chehab   media: v4l2-dev: ...
144
145
146
147
148
149
150
151
152
  /**
   * v4l2_fill_pix_format - Ancillary routine that fills a &struct
   *	v4l2_mbus_framefmt from a &struct v4l2_pix_format and a
   *	data format code.
   *
   * @mbus_fmt:	pointer to &struct v4l2_mbus_framefmt to be filled
   * @pix_fmt:	pointer to &struct v4l2_pix_format to be used as model
   * @code:	data format code (from &enum v4l2_mbus_pixelcode)
   */
3a21ceed7   Hans Verkuil   V4L/DVB: v4l2-med...
153
  static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt,
6087b2153   Mauro Carvalho Chehab   media: v4l2-core:...
154
  					 const struct v4l2_pix_format *pix_fmt,
32b32ce84   Boris BREZILLON   [media] Make use ...
155
  			   u32 code)
3a21ceed7   Hans Verkuil   V4L/DVB: v4l2-med...
156
157
158
159
160
  {
  	mbus_fmt->width = pix_fmt->width;
  	mbus_fmt->height = pix_fmt->height;
  	mbus_fmt->field = pix_fmt->field;
  	mbus_fmt->colorspace = pix_fmt->colorspace;
11ff030c7   Hans Verkuil   [media] v4l2-medi...
161
162
  	mbus_fmt->ycbcr_enc = pix_fmt->ycbcr_enc;
  	mbus_fmt->quantization = pix_fmt->quantization;
74fdcb2ee   Hans Verkuil   [media] videodev2...
163
  	mbus_fmt->xfer_func = pix_fmt->xfer_func;
3a21ceed7   Hans Verkuil   V4L/DVB: v4l2-med...
164
165
  	mbus_fmt->code = code;
  }
4839c58f0   Mauro Carvalho Chehab   media: v4l2-dev: ...
166
167
168
169
170
171
172
  /**
   * v4l2_fill_pix_format - Ancillary routine that fills a &struct
   *	v4l2_pix_format_mplane fields from a media bus structure.
   *
   * @pix_mp_fmt:	pointer to &struct v4l2_pix_format_mplane to be filled
   * @mbus_fmt:	pointer to &struct v4l2_mbus_framefmt to be used as model
   */
6087b2153   Mauro Carvalho Chehab   media: v4l2-core:...
173
174
175
  static inline void
  v4l2_fill_pix_format_mplane(struct v4l2_pix_format_mplane *pix_mp_fmt,
  			    const struct v4l2_mbus_framefmt *mbus_fmt)
f1923010b   Todor Tomov   media: v4l2-media...
176
177
178
179
180
181
182
183
184
  {
  	pix_mp_fmt->width = mbus_fmt->width;
  	pix_mp_fmt->height = mbus_fmt->height;
  	pix_mp_fmt->field = mbus_fmt->field;
  	pix_mp_fmt->colorspace = mbus_fmt->colorspace;
  	pix_mp_fmt->ycbcr_enc = mbus_fmt->ycbcr_enc;
  	pix_mp_fmt->quantization = mbus_fmt->quantization;
  	pix_mp_fmt->xfer_func = mbus_fmt->xfer_func;
  }
4839c58f0   Mauro Carvalho Chehab   media: v4l2-dev: ...
185
186
187
188
189
190
191
  /**
   * v4l2_fill_pix_format - Ancillary routine that fills a &struct
   *	v4l2_mbus_framefmt from a &struct v4l2_pix_format_mplane.
   *
   * @mbus_fmt:	pointer to &struct v4l2_mbus_framefmt to be filled
   * @pix_mp_fmt:	pointer to &struct v4l2_pix_format_mplane to be used as model
   */
6087b2153   Mauro Carvalho Chehab   media: v4l2-core:...
192
193
194
  static inline void
  v4l2_fill_mbus_format_mplane(struct v4l2_mbus_framefmt *mbus_fmt,
  			     const struct v4l2_pix_format_mplane *pix_mp_fmt)
f1923010b   Todor Tomov   media: v4l2-media...
195
196
197
198
199
200
201
202
203
  {
  	mbus_fmt->width = pix_mp_fmt->width;
  	mbus_fmt->height = pix_mp_fmt->height;
  	mbus_fmt->field = pix_mp_fmt->field;
  	mbus_fmt->colorspace = pix_mp_fmt->colorspace;
  	mbus_fmt->ycbcr_enc = pix_mp_fmt->ycbcr_enc;
  	mbus_fmt->quantization = pix_mp_fmt->quantization;
  	mbus_fmt->xfer_func = pix_mp_fmt->xfer_func;
  }
9a74251d8   Guennadi Liakhovetski   V4L/DVB (13658): ...
204
  #endif