1 /*
2  *	Video for Linux Two
3  *
4  *	A generic video device interface for the LINUX operating system
5  *	using a set of device structures/vectors for low level operations.
6  *
7  *	This file replaces the videodev.c file that comes with the
8  *	regular kernel distribution.
9  *
10  *	This program is free software; you can redistribute it and/or
11  *	modify it under the terms of the GNU General Public License
12  *	as published by the Free Software Foundation; either version
13  *	2 of the License, or (at your option) any later version.
14  *
15  * Author:	Bill Dirks <bill@thedirks.org>
16  *		based on code by Alan Cox, <alan@cymru.net>
17  *
18  */
19 
20 /*
21  * Video capture interface for Linux
22  *
23  *	A generic video device interface for the LINUX operating system
24  *	using a set of device structures/vectors for low level operations.
25  *
26  *		This program is free software; you can redistribute it and/or
27  *		modify it under the terms of the GNU General Public License
28  *		as published by the Free Software Foundation; either version
29  *		2 of the License, or (at your option) any later version.
30  *
31  * Author:	Alan Cox, <alan@lxorguk.ukuu.org.uk>
32  *
33  * Fixes:
34  */
35 
36 /*
37  * Video4linux 1/2 integration by Justin Schoeman
38  * <justin@suntiger.ee.up.ac.za>
39  * 2.4 PROCFS support ported from 2.4 kernels by
40  *  Iñaki García Etxebarria <garetxe@euskalnet.net>
41  * Makefile fix by "W. Michael Petullo" <mike@flyn.org>
42  * 2.4 devfs support ported from 2.4 kernels by
43  *  Dan Merillat <dan@merillat.org>
44  * Added Gerd Knorrs v4l1 enhancements (Justin Schoeman)
45  */
46 
47 #include <linux/module.h>
48 #include <linux/types.h>
49 #include <linux/kernel.h>
50 #include <linux/mm.h>
51 #include <linux/string.h>
52 #include <linux/errno.h>
53 #include <linux/i2c.h>
54 #if defined(CONFIG_SPI)
55 #include <linux/spi/spi.h>
56 #endif
57 #include <asm/uaccess.h>
58 #include <asm/pgtable.h>
59 #include <asm/io.h>
60 #include <asm/div64.h>
61 #include <media/v4l2-common.h>
62 #include <media/v4l2-device.h>
63 #include <media/v4l2-ctrls.h>
64 
65 #include <linux/videodev2.h>
66 
67 MODULE_AUTHOR("Bill Dirks, Justin Schoeman, Gerd Knorr");
68 MODULE_DESCRIPTION("misc helper functions for v4l2 device drivers");
69 MODULE_LICENSE("GPL");
70 
71 /*
72  *
73  *	V 4 L 2   D R I V E R   H E L P E R   A P I
74  *
75  */
76 
77 /*
78  *  Video Standard Operations (contributed by Michael Schimek)
79  */
80 
81 /* Helper functions for control handling			     */
82 
83 /* Check for correctness of the ctrl's value based on the data from
84    struct v4l2_queryctrl and the available menu items. Note that
85    menu_items may be NULL, in that case it is ignored. */
86 int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl,
87 		const char * const *menu_items)
88 {
89 	if (qctrl->flags & V4L2_CTRL_FLAG_DISABLED)
90 		return -EINVAL;
91 	if (qctrl->flags & V4L2_CTRL_FLAG_GRABBED)
92 		return -EBUSY;
93 	if (qctrl->type == V4L2_CTRL_TYPE_STRING)
94 		return 0;
95 	if (qctrl->type == V4L2_CTRL_TYPE_BUTTON ||
96 	    qctrl->type == V4L2_CTRL_TYPE_INTEGER64 ||
97 	    qctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
98 		return 0;
99 	if (ctrl->value < qctrl->minimum || ctrl->value > qctrl->maximum)
100 		return -ERANGE;
101 	if (qctrl->type == V4L2_CTRL_TYPE_MENU && menu_items != NULL) {
102 		if (menu_items[ctrl->value] == NULL ||
103 		    menu_items[ctrl->value][0] == '\0')
104 			return -EINVAL;
105 	}
106 	if (qctrl->type == V4L2_CTRL_TYPE_BITMASK &&
107 			(ctrl->value & ~qctrl->maximum))
108 		return -ERANGE;
109 	return 0;
110 }
111 EXPORT_SYMBOL(v4l2_ctrl_check);
112 
113 /* Fill in a struct v4l2_queryctrl */
114 int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def)
115 {
116 	const char *name;
117 
118 	v4l2_ctrl_fill(qctrl->id, &name, &qctrl->type,
119 		       &min, &max, &step, &def, &qctrl->flags);
120 
121 	if (name == NULL)
122 		return -EINVAL;
123 
124 	qctrl->minimum = min;
125 	qctrl->maximum = max;
126 	qctrl->step = step;
127 	qctrl->default_value = def;
128 	qctrl->reserved[0] = qctrl->reserved[1] = 0;
129 	strlcpy(qctrl->name, name, sizeof(qctrl->name));
130 	return 0;
131 }
132 EXPORT_SYMBOL(v4l2_ctrl_query_fill);
133 
134 /* Fill in a struct v4l2_querymenu based on the struct v4l2_queryctrl and
135    the menu. The qctrl pointer may be NULL, in which case it is ignored.
136    If menu_items is NULL, then the menu items are retrieved using
137    v4l2_ctrl_get_menu. */
138 int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, struct v4l2_queryctrl *qctrl,
139 	       const char * const *menu_items)
140 {
141 	int i;
142 
143 	qmenu->reserved = 0;
144 	if (menu_items == NULL)
145 		menu_items = v4l2_ctrl_get_menu(qmenu->id);
146 	if (menu_items == NULL ||
147 	    (qctrl && (qmenu->index < qctrl->minimum || qmenu->index > qctrl->maximum)))
148 		return -EINVAL;
149 	for (i = 0; i < qmenu->index && menu_items[i]; i++) ;
150 	if (menu_items[i] == NULL || menu_items[i][0] == '\0')
151 		return -EINVAL;
152 	strlcpy(qmenu->name, menu_items[qmenu->index], sizeof(qmenu->name));
153 	return 0;
154 }
155 EXPORT_SYMBOL(v4l2_ctrl_query_menu);
156 
157 /* Fill in a struct v4l2_querymenu based on the specified array of valid
158    menu items (terminated by V4L2_CTRL_MENU_IDS_END).
159    Use this if there are 'holes' in the list of valid menu items. */
160 int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids)
161 {
162 	const char * const *menu_items = v4l2_ctrl_get_menu(qmenu->id);
163 
164 	qmenu->reserved = 0;
165 	if (menu_items == NULL || ids == NULL)
166 		return -EINVAL;
167 	while (*ids != V4L2_CTRL_MENU_IDS_END) {
168 		if (*ids++ == qmenu->index) {
169 			strlcpy(qmenu->name, menu_items[qmenu->index],
170 					sizeof(qmenu->name));
171 			return 0;
172 		}
173 	}
174 	return -EINVAL;
175 }
176 EXPORT_SYMBOL(v4l2_ctrl_query_menu_valid_items);
177 
178 /* ctrl_classes points to an array of u32 pointers, the last element is
179    a NULL pointer. Each u32 array is a 0-terminated array of control IDs.
180    Each array must be sorted low to high and belong to the same control
181    class. The array of u32 pointers must also be sorted, from low class IDs
182    to high class IDs.
183 
184    This function returns the first ID that follows after the given ID.
185    When no more controls are available 0 is returned. */
186 u32 v4l2_ctrl_next(const u32 * const * ctrl_classes, u32 id)
187 {
188 	u32 ctrl_class = V4L2_CTRL_ID2CLASS(id);
189 	const u32 *pctrl;
190 
191 	if (ctrl_classes == NULL)
192 		return 0;
193 
194 	/* if no query is desired, then check if the ID is part of ctrl_classes */
195 	if ((id & V4L2_CTRL_FLAG_NEXT_CTRL) == 0) {
196 		/* find class */
197 		while (*ctrl_classes && V4L2_CTRL_ID2CLASS(**ctrl_classes) != ctrl_class)
198 			ctrl_classes++;
199 		if (*ctrl_classes == NULL)
200 			return 0;
201 		pctrl = *ctrl_classes;
202 		/* find control ID */
203 		while (*pctrl && *pctrl != id) pctrl++;
204 		return *pctrl ? id : 0;
205 	}
206 	id &= V4L2_CTRL_ID_MASK;
207 	id++;	/* select next control */
208 	/* find first class that matches (or is greater than) the class of
209 	   the ID */
210 	while (*ctrl_classes && V4L2_CTRL_ID2CLASS(**ctrl_classes) < ctrl_class)
211 		ctrl_classes++;
212 	/* no more classes */
213 	if (*ctrl_classes == NULL)
214 		return 0;
215 	pctrl = *ctrl_classes;
216 	/* find first ctrl within the class that is >= ID */
217 	while (*pctrl && *pctrl < id) pctrl++;
218 	if (*pctrl)
219 		return *pctrl;
220 	/* we are at the end of the controls of the current class. */
221 	/* continue with next class if available */
222 	ctrl_classes++;
223 	if (*ctrl_classes == NULL)
224 		return 0;
225 	return **ctrl_classes;
226 }
227 EXPORT_SYMBOL(v4l2_ctrl_next);
228 
229 /* I2C Helper functions */
230 
231 #if IS_ENABLED(CONFIG_I2C)
232 
233 void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
234 		const struct v4l2_subdev_ops *ops)
235 {
236 	v4l2_subdev_init(sd, ops);
237 	sd->flags |= V4L2_SUBDEV_FL_IS_I2C;
238 	/* the owner is the same as the i2c_client's driver owner */
239 	sd->owner = client->driver->driver.owner;
240 	sd->dev = &client->dev;
241 	/* i2c_client and v4l2_subdev point to one another */
242 	v4l2_set_subdevdata(sd, client);
243 	i2c_set_clientdata(client, sd);
244 	/* initialize name */
245 	snprintf(sd->name, sizeof(sd->name), "%s %d-%04x",
246 		client->driver->driver.name, i2c_adapter_id(client->adapter),
247 		client->addr);
248 }
249 EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
250 
251 /* Load an i2c sub-device. */
252 struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
253 		struct i2c_adapter *adapter, struct i2c_board_info *info,
254 		const unsigned short *probe_addrs)
255 {
256 	struct v4l2_subdev *sd = NULL;
257 	struct i2c_client *client;
258 
259 	BUG_ON(!v4l2_dev);
260 
261 	request_module(I2C_MODULE_PREFIX "%s", info->type);
262 
263 	/* Create the i2c client */
264 	if (info->addr == 0 && probe_addrs)
265 		client = i2c_new_probed_device(adapter, info, probe_addrs,
266 					       NULL);
267 	else
268 		client = i2c_new_device(adapter, info);
269 
270 	/* Note: by loading the module first we are certain that c->driver
271 	   will be set if the driver was found. If the module was not loaded
272 	   first, then the i2c core tries to delay-load the module for us,
273 	   and then c->driver is still NULL until the module is finally
274 	   loaded. This delay-load mechanism doesn't work if other drivers
275 	   want to use the i2c device, so explicitly loading the module
276 	   is the best alternative. */
277 	if (client == NULL || client->driver == NULL)
278 		goto error;
279 
280 	/* Lock the module so we can safely get the v4l2_subdev pointer */
281 	if (!try_module_get(client->driver->driver.owner))
282 		goto error;
283 	sd = i2c_get_clientdata(client);
284 
285 	/* Register with the v4l2_device which increases the module's
286 	   use count as well. */
287 	if (v4l2_device_register_subdev(v4l2_dev, sd))
288 		sd = NULL;
289 	/* Decrease the module use count to match the first try_module_get. */
290 	module_put(client->driver->driver.owner);
291 
292 error:
293 	/* If we have a client but no subdev, then something went wrong and
294 	   we must unregister the client. */
295 	if (client && sd == NULL)
296 		i2c_unregister_device(client);
297 	return sd;
298 }
299 EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev_board);
300 
301 struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
302 		struct i2c_adapter *adapter, const char *client_type,
303 		u8 addr, const unsigned short *probe_addrs)
304 {
305 	struct i2c_board_info info;
306 
307 	/* Setup the i2c board info with the device type and
308 	   the device address. */
309 	memset(&info, 0, sizeof(info));
310 	strlcpy(info.type, client_type, sizeof(info.type));
311 	info.addr = addr;
312 
313 	return v4l2_i2c_new_subdev_board(v4l2_dev, adapter, &info, probe_addrs);
314 }
315 EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
316 
317 /* Return i2c client address of v4l2_subdev. */
318 unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd)
319 {
320 	struct i2c_client *client = v4l2_get_subdevdata(sd);
321 
322 	return client ? client->addr : I2C_CLIENT_END;
323 }
324 EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_addr);
325 
326 /* Return a list of I2C tuner addresses to probe. Use only if the tuner
327    addresses are unknown. */
328 const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type)
329 {
330 	static const unsigned short radio_addrs[] = {
331 #if IS_ENABLED(CONFIG_MEDIA_TUNER_TEA5761)
332 		0x10,
333 #endif
334 		0x60,
335 		I2C_CLIENT_END
336 	};
337 	static const unsigned short demod_addrs[] = {
338 		0x42, 0x43, 0x4a, 0x4b,
339 		I2C_CLIENT_END
340 	};
341 	static const unsigned short tv_addrs[] = {
342 		0x42, 0x43, 0x4a, 0x4b,		/* tda8290 */
343 		0x60, 0x61, 0x62, 0x63, 0x64,
344 		I2C_CLIENT_END
345 	};
346 
347 	switch (type) {
348 	case ADDRS_RADIO:
349 		return radio_addrs;
350 	case ADDRS_DEMOD:
351 		return demod_addrs;
352 	case ADDRS_TV:
353 		return tv_addrs;
354 	case ADDRS_TV_WITH_DEMOD:
355 		return tv_addrs + 4;
356 	}
357 	return NULL;
358 }
359 EXPORT_SYMBOL_GPL(v4l2_i2c_tuner_addrs);
360 
361 #endif /* defined(CONFIG_I2C) */
362 
363 #if defined(CONFIG_SPI)
364 
365 /* Load an spi sub-device. */
366 
367 void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
368 		const struct v4l2_subdev_ops *ops)
369 {
370 	v4l2_subdev_init(sd, ops);
371 	sd->flags |= V4L2_SUBDEV_FL_IS_SPI;
372 	/* the owner is the same as the spi_device's driver owner */
373 	sd->owner = spi->dev.driver->owner;
374 	sd->dev = &spi->dev;
375 	/* spi_device and v4l2_subdev point to one another */
376 	v4l2_set_subdevdata(sd, spi);
377 	spi_set_drvdata(spi, sd);
378 	/* initialize name */
379 	strlcpy(sd->name, spi->dev.driver->name, sizeof(sd->name));
380 }
381 EXPORT_SYMBOL_GPL(v4l2_spi_subdev_init);
382 
383 struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
384 		struct spi_master *master, struct spi_board_info *info)
385 {
386 	struct v4l2_subdev *sd = NULL;
387 	struct spi_device *spi = NULL;
388 
389 	BUG_ON(!v4l2_dev);
390 
391 	if (info->modalias[0])
392 		request_module(info->modalias);
393 
394 	spi = spi_new_device(master, info);
395 
396 	if (spi == NULL || spi->dev.driver == NULL)
397 		goto error;
398 
399 	if (!try_module_get(spi->dev.driver->owner))
400 		goto error;
401 
402 	sd = spi_get_drvdata(spi);
403 
404 	/* Register with the v4l2_device which increases the module's
405 	   use count as well. */
406 	if (v4l2_device_register_subdev(v4l2_dev, sd))
407 		sd = NULL;
408 
409 	/* Decrease the module use count to match the first try_module_get. */
410 	module_put(spi->dev.driver->owner);
411 
412 error:
413 	/* If we have a client but no subdev, then something went wrong and
414 	   we must unregister the client. */
415 	if (spi && sd == NULL)
416 		spi_unregister_device(spi);
417 
418 	return sd;
419 }
420 EXPORT_SYMBOL_GPL(v4l2_spi_new_subdev);
421 
422 #endif /* defined(CONFIG_SPI) */
423 
424 /* Clamp x to be between min and max, aligned to a multiple of 2^align.  min
425  * and max don't have to be aligned, but there must be at least one valid
426  * value.  E.g., min=17,max=31,align=4 is not allowed as there are no multiples
427  * of 16 between 17 and 31.  */
428 static unsigned int clamp_align(unsigned int x, unsigned int min,
429 				unsigned int max, unsigned int align)
430 {
431 	/* Bits that must be zero to be aligned */
432 	unsigned int mask = ~((1 << align) - 1);
433 
434 	/* Round to nearest aligned value */
435 	if (align)
436 		x = (x + (1 << (align - 1))) & mask;
437 
438 	/* Clamp to aligned value of min and max */
439 	if (x < min)
440 		x = (min + ~mask) & mask;
441 	else if (x > max)
442 		x = max & mask;
443 
444 	return x;
445 }
446 
447 /* Bound an image to have a width between wmin and wmax, and height between
448  * hmin and hmax, inclusive.  Additionally, the width will be a multiple of
449  * 2^walign, the height will be a multiple of 2^halign, and the overall size
450  * (width*height) will be a multiple of 2^salign.  The image may be shrunk
451  * or enlarged to fit the alignment constraints.
452  *
453  * The width or height maximum must not be smaller than the corresponding
454  * minimum.  The alignments must not be so high there are no possible image
455  * sizes within the allowed bounds.  wmin and hmin must be at least 1
456  * (don't use 0).  If you don't care about a certain alignment, specify 0,
457  * as 2^0 is 1 and one byte alignment is equivalent to no alignment.  If
458  * you only want to adjust downward, specify a maximum that's the same as
459  * the initial value.
460  */
461 void v4l_bound_align_image(u32 *w, unsigned int wmin, unsigned int wmax,
462 			   unsigned int walign,
463 			   u32 *h, unsigned int hmin, unsigned int hmax,
464 			   unsigned int halign, unsigned int salign)
465 {
466 	*w = clamp_align(*w, wmin, wmax, walign);
467 	*h = clamp_align(*h, hmin, hmax, halign);
468 
469 	/* Usually we don't need to align the size and are done now. */
470 	if (!salign)
471 		return;
472 
473 	/* How much alignment do we have? */
474 	walign = __ffs(*w);
475 	halign = __ffs(*h);
476 	/* Enough to satisfy the image alignment? */
477 	if (walign + halign < salign) {
478 		/* Max walign where there is still a valid width */
479 		unsigned int wmaxa = __fls(wmax ^ (wmin - 1));
480 		/* Max halign where there is still a valid height */
481 		unsigned int hmaxa = __fls(hmax ^ (hmin - 1));
482 
483 		/* up the smaller alignment until we have enough */
484 		do {
485 			if (halign >= hmaxa ||
486 			    (walign <= halign && walign < wmaxa)) {
487 				*w = clamp_align(*w, wmin, wmax, walign + 1);
488 				walign = __ffs(*w);
489 			} else {
490 				*h = clamp_align(*h, hmin, hmax, halign + 1);
491 				halign = __ffs(*h);
492 			}
493 		} while (halign + walign < salign);
494 	}
495 }
496 EXPORT_SYMBOL_GPL(v4l_bound_align_image);
497 
498 const struct v4l2_frmsize_discrete *v4l2_find_nearest_format(
499 		const struct v4l2_discrete_probe *probe,
500 		s32 width, s32 height)
501 {
502 	int i;
503 	u32 error, min_error = UINT_MAX;
504 	const struct v4l2_frmsize_discrete *size, *best = NULL;
505 
506 	if (!probe)
507 		return best;
508 
509 	for (i = 0, size = probe->sizes; i < probe->num_sizes; i++, size++) {
510 		error = abs(size->width - width) + abs(size->height - height);
511 		if (error < min_error) {
512 			min_error = error;
513 			best = size;
514 		}
515 		if (!error)
516 			break;
517 	}
518 
519 	return best;
520 }
521 EXPORT_SYMBOL_GPL(v4l2_find_nearest_format);
522 
523 void v4l2_get_timestamp(struct timeval *tv)
524 {
525 	struct timespec ts;
526 
527 	ktime_get_ts(&ts);
528 	tv->tv_sec = ts.tv_sec;
529 	tv->tv_usec = ts.tv_nsec / NSEC_PER_USEC;
530 }
531 EXPORT_SYMBOL_GPL(v4l2_get_timestamp);
532