aboutsummaryrefslogtreecommitdiffstats
path: root/include/media/v4l2-common.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/media/v4l2-common.h')
-rw-r--r--include/media/v4l2-common.h145
1 files changed, 111 insertions, 34 deletions
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index aac8b7b6e691..e0d95a7c5d48 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -28,7 +28,7 @@
28 28
29#include <media/v4l2-dev.h> 29#include <media/v4l2-dev.h>
30 30
31/* Common printk constucts for v4l-i2c drivers. These macros create a unique 31/* Common printk constructs for v4l-i2c drivers. These macros create a unique
32 prefix consisting of the driver name, the adapter number and the i2c 32 prefix consisting of the driver name, the adapter number and the i2c
33 address. */ 33 address. */
34#define v4l_printk(level, name, adapter, addr, fmt, arg...) \ 34#define v4l_printk(level, name, adapter, addr, fmt, arg...) \
@@ -50,7 +50,7 @@
50/* These three macros assume that the debug level is set with a module 50/* These three macros assume that the debug level is set with a module
51 parameter called 'debug'. */ 51 parameter called 'debug'. */
52#define v4l_dbg(level, debug, client, fmt, arg...) \ 52#define v4l_dbg(level, debug, client, fmt, arg...) \
53 do { \ 53 do { \
54 if (debug >= (level)) \ 54 if (debug >= (level)) \
55 v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \ 55 v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \
56 } while (0) 56 } while (0)
@@ -80,9 +80,9 @@
80/* These three macros assume that the debug level is set with a module 80/* These three macros assume that the debug level is set with a module
81 parameter called 'debug'. */ 81 parameter called 'debug'. */
82#define v4l2_dbg(level, debug, dev, fmt, arg...) \ 82#define v4l2_dbg(level, debug, dev, fmt, arg...) \
83 do { \ 83 do { \
84 if (debug >= (level)) \ 84 if (debug >= (level)) \
85 v4l2_printk(KERN_DEBUG, dev, fmt , ## arg); \ 85 v4l2_printk(KERN_DEBUG, dev, fmt , ## arg); \
86 } while (0) 86 } while (0)
87 87
88/** 88/**
@@ -127,7 +127,7 @@ struct v4l2_subdev_ops;
127 * @client_type: name of the chip that's on the adapter. 127 * @client_type: name of the chip that's on the adapter.
128 * @addr: I2C address. If zero, it will use @probe_addrs 128 * @addr: I2C address. If zero, it will use @probe_addrs
129 * @probe_addrs: array with a list of address. The last entry at such 129 * @probe_addrs: array with a list of address. The last entry at such
130 * array should be %I2C_CLIENT_END. 130 * array should be %I2C_CLIENT_END.
131 * 131 *
132 * returns a &struct v4l2_subdev pointer. 132 * returns a &struct v4l2_subdev pointer.
133 */ 133 */
@@ -146,7 +146,7 @@ struct i2c_board_info;
146 * @info: pointer to struct i2c_board_info used to replace the irq, 146 * @info: pointer to struct i2c_board_info used to replace the irq,
147 * platform_data and addr arguments. 147 * platform_data and addr arguments.
148 * @probe_addrs: array with a list of address. The last entry at such 148 * @probe_addrs: array with a list of address. The last entry at such
149 * array should be %I2C_CLIENT_END. 149 * array should be %I2C_CLIENT_END.
150 * 150 *
151 * returns a &struct v4l2_subdev pointer. 151 * returns a &struct v4l2_subdev pointer.
152 */ 152 */
@@ -174,17 +174,43 @@ void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
174 */ 174 */
175unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd); 175unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd);
176 176
177/**
178 * enum v4l2_i2c_tuner_type - specifies the range of tuner address that
179 * should be used when seeking for I2C devices.
180 *
181 * @ADDRS_RADIO: Radio tuner addresses.
182 * Represent the following I2C addresses:
183 * 0x10 (if compiled with tea5761 support)
184 * and 0x60.
185 * @ADDRS_DEMOD: Demod tuner addresses.
186 * Represent the following I2C addresses:
187 * 0x42, 0x43, 0x4a and 0x4b.
188 * @ADDRS_TV: TV tuner addresses.
189 * Represent the following I2C addresses:
190 * 0x42, 0x43, 0x4a, 0x4b, 0x60, 0x61, 0x62,
191 * 0x63 and 0x64.
192 * @ADDRS_TV_WITH_DEMOD: TV tuner addresses if demod is present, this
193 * excludes addresses used by the demodulator
194 * from the list of candidates.
195 * Represent the following I2C addresses:
196 * 0x60, 0x61, 0x62, 0x63 and 0x64.
197 *
198 * NOTE: All I2C addresses above use the 7-bit notation.
199 */
177enum v4l2_i2c_tuner_type { 200enum v4l2_i2c_tuner_type {
178 ADDRS_RADIO, /* Radio tuner addresses */ 201 ADDRS_RADIO,
179 ADDRS_DEMOD, /* Demod tuner addresses */ 202 ADDRS_DEMOD,
180 ADDRS_TV, /* TV tuner addresses */ 203 ADDRS_TV,
181 /* TV tuner addresses if demod is present, this excludes
182 addresses used by the demodulator from the list of
183 candidates. */
184 ADDRS_TV_WITH_DEMOD, 204 ADDRS_TV_WITH_DEMOD,
185}; 205};
186/* Return a list of I2C tuner addresses to probe. Use only if the tuner 206/**
187 addresses are unknown. */ 207 * v4l2_i2c_tuner_addrs - Return a list of I2C tuner addresses to probe.
208 *
209 * @type: type of the tuner to seek, as defined by
210 * &enum v4l2_i2c_tuner_type.
211 *
212 * NOTE: Use only if the tuner addresses are unknown.
213 */
188const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); 214const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type);
189 215
190/* ------------------------------------------------------------------------- */ 216/* ------------------------------------------------------------------------- */
@@ -224,10 +250,14 @@ void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
224 250
225/* ------------------------------------------------------------------------- */ 251/* ------------------------------------------------------------------------- */
226 252
227/* Note: these remaining ioctls/structs should be removed as well, but they are 253/*
228 still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and 254 * FIXME: these remaining ioctls/structs should be removed as well, but they
229 v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup 255 * are still used in tuner-simple.c (TUNER_SET_CONFIG) and cx18/ivtv (RESET).
230 is needed in those modules. */ 256 * To remove these ioctls some more cleanup is needed in those modules.
257 *
258 * It doesn't make much sense on documenting them, as what we really want is
259 * to get rid of them.
260 */
231 261
232/* s_config */ 262/* s_config */
233struct v4l2_priv_tun_config { 263struct v4l2_priv_tun_config {
@@ -236,32 +266,79 @@ struct v4l2_priv_tun_config {
236}; 266};
237#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) 267#define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config)
238 268
239#define VIDIOC_INT_RESET _IOW ('d', 102, u32) 269#define VIDIOC_INT_RESET _IOW ('d', 102, u32)
240
241struct v4l2_routing {
242 u32 input;
243 u32 output;
244};
245 270
246/* ------------------------------------------------------------------------- */ 271/* ------------------------------------------------------------------------- */
247 272
248/* Miscellaneous helper functions */ 273/* Miscellaneous helper functions */
249 274
250void v4l_bound_align_image(unsigned int *w, unsigned int wmin, 275/**
276 * v4l_bound_align_image - adjust video dimensions according to
277 * a given constraints.
278 *
279 * @width: pointer to width that will be adjusted if needed.
280 * @wmin: minimum width.
281 * @wmax: maximum width.
282 * @walign: least significant bit on width.
283 * @height: pointer to height that will be adjusted if needed.
284 * @hmin: minimum height.
285 * @hmax: maximum height.
286 * @halign: least significant bit on width.
287 * @salign: least significant bit for the image size (e. g.
288 * :math:`width * height`).
289 *
290 * Clip an image to have @width between @wmin and @wmax, and @height between
291 * @hmin and @hmax, inclusive.
292 *
293 * Additionally, the @width will be a multiple of :math:`2^{walign}`,
294 * the @height will be a multiple of :math:`2^{halign}`, and the overall
295 * size :math:`width * height` will be a multiple of :math:`2^{salign}`.
296 *
297 * .. note::
298 *
299 * #. The clipping rectangle may be shrunk or enlarged to fit the alignment
300 * constraints.
301 * #. @wmax must not be smaller than @wmin.
302 * #. @hmax must not be smaller than @hmin.
303 * #. The alignments must not be so high there are no possible image
304 * sizes within the allowed bounds.
305 * #. @wmin and @hmin must be at least 1 (don't use 0).
306 * #. For @walign, @halign and @salign, if you don't care about a certain
307 * alignment, specify ``0``, as :math:`2^0 = 1` and one byte alignment
308 * is equivalent to no alignment.
309 * #. If you only want to adjust downward, specify a maximum that's the
310 * same as the initial value.
311 */
312void v4l_bound_align_image(unsigned int *width, unsigned int wmin,
251 unsigned int wmax, unsigned int walign, 313 unsigned int wmax, unsigned int walign,
252 unsigned int *h, unsigned int hmin, 314 unsigned int *height, unsigned int hmin,
253 unsigned int hmax, unsigned int halign, 315 unsigned int hmax, unsigned int halign,
254 unsigned int salign); 316 unsigned int salign);
255 317
256struct v4l2_discrete_probe { 318/**
257 const struct v4l2_frmsize_discrete *sizes; 319 * v4l2_find_nearest_format - find the nearest format size among a discrete
258 int num_sizes; 320 * set of resolutions.
259}; 321 *
260 322 * @sizes: array of &struct v4l2_frmsize_discrete image sizes.
261const struct v4l2_frmsize_discrete *v4l2_find_nearest_format( 323 * @num_sizes: length of @sizes array.
262 const struct v4l2_discrete_probe *probe, 324 * @width: desired width.
263 s32 width, s32 height); 325 * @height: desired height.
326 *
327 * Finds the closest resolution to minimize the width and height differences
328 * between what requested and the supported resolutions.
329 */
330const struct v4l2_frmsize_discrete *
331v4l2_find_nearest_format(const struct v4l2_frmsize_discrete *sizes,
332 const size_t num_sizes,
333 s32 width, s32 height);
264 334
335/**
336 * v4l2_get_timestamp - helper routine to get a timestamp to be used when
337 * filling streaming metadata. Internally, it uses ktime_get_ts(),
338 * which is the recommended way to get it.
339 *
340 * @tv: pointer to &struct timeval to be filled.
341 */
265void v4l2_get_timestamp(struct timeval *tv); 342void v4l2_get_timestamp(struct timeval *tv);
266 343
267#endif /* V4L2_COMMON_H_ */ 344#endif /* V4L2_COMMON_H_ */