1b2f0648fSHans Verkuil /* 2b2f0648fSHans Verkuil v4l2 common internal API header 3b2f0648fSHans Verkuil 4b2f0648fSHans Verkuil This header contains internal shared ioctl definitions for use by the 5b2f0648fSHans Verkuil internal low-level v4l2 drivers. 6b2f0648fSHans Verkuil Each ioctl begins with VIDIOC_INT_ to clearly mark that it is an internal 7b2f0648fSHans Verkuil define, 8b2f0648fSHans Verkuil 9b2f0648fSHans Verkuil Copyright (C) 2005 Hans Verkuil <hverkuil@xs4all.nl> 10b2f0648fSHans Verkuil 11b2f0648fSHans Verkuil This program is free software; you can redistribute it and/or modify 12b2f0648fSHans Verkuil it under the terms of the GNU General Public License as published by 13b2f0648fSHans Verkuil the Free Software Foundation; either version 2 of the License, or 14b2f0648fSHans Verkuil (at your option) any later version. 15b2f0648fSHans Verkuil 16b2f0648fSHans Verkuil This program is distributed in the hope that it will be useful, 17b2f0648fSHans Verkuil but WITHOUT ANY WARRANTY; without even the implied warranty of 18b2f0648fSHans Verkuil MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19b2f0648fSHans Verkuil GNU General Public License for more details. 20b2f0648fSHans Verkuil 21b2f0648fSHans Verkuil You should have received a copy of the GNU General Public License 22b2f0648fSHans Verkuil along with this program; if not, write to the Free Software 23b2f0648fSHans Verkuil Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24b2f0648fSHans Verkuil */ 25b2f0648fSHans Verkuil 26b2f0648fSHans Verkuil #ifndef V4L2_COMMON_H_ 27b2f0648fSHans Verkuil #define V4L2_COMMON_H_ 28b2f0648fSHans Verkuil 29401998faSMauro Carvalho Chehab #include <media/v4l2-dev.h> 30401998faSMauro Carvalho Chehab 317e8b09eaSHans Verkuil /* Common printk constucts for v4l-i2c drivers. These macros create a unique 327e8b09eaSHans Verkuil prefix consisting of the driver name, the adapter number and the i2c 337e8b09eaSHans Verkuil address. */ 347e8b09eaSHans Verkuil #define v4l_printk(level, name, adapter, addr, fmt, arg...) \ 357e8b09eaSHans Verkuil printk(level "%s %d-%04x: " fmt, name, i2c_adapter_id(adapter), addr , ## arg) 367e8b09eaSHans Verkuil 377e8b09eaSHans Verkuil #define v4l_client_printk(level, client, fmt, arg...) \ 38*f9d32f25SLars-Peter Clausen v4l_printk(level, (client)->dev.driver->name, (client)->adapter, \ 397e8b09eaSHans Verkuil (client)->addr, fmt , ## arg) 407e8b09eaSHans Verkuil 417e8b09eaSHans Verkuil #define v4l_err(client, fmt, arg...) \ 427e8b09eaSHans Verkuil v4l_client_printk(KERN_ERR, client, fmt , ## arg) 437e8b09eaSHans Verkuil 447e8b09eaSHans Verkuil #define v4l_warn(client, fmt, arg...) \ 457e8b09eaSHans Verkuil v4l_client_printk(KERN_WARNING, client, fmt , ## arg) 467e8b09eaSHans Verkuil 477e8b09eaSHans Verkuil #define v4l_info(client, fmt, arg...) \ 487e8b09eaSHans Verkuil v4l_client_printk(KERN_INFO, client, fmt , ## arg) 497e8b09eaSHans Verkuil 507e8b09eaSHans Verkuil /* These three macros assume that the debug level is set with a module 517e8b09eaSHans Verkuil parameter called 'debug'. */ 52f167cb4eSMauro Carvalho Chehab #define v4l_dbg(level, debug, client, fmt, arg...) \ 537e8b09eaSHans Verkuil do { \ 547e8b09eaSHans Verkuil if (debug >= (level)) \ 557e8b09eaSHans Verkuil v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \ 567e8b09eaSHans Verkuil } while (0) 577e8b09eaSHans Verkuil 587e8b09eaSHans Verkuil /* ------------------------------------------------------------------------- */ 597e8b09eaSHans Verkuil 60dd99120cSHans Verkuil /* These printk constructs can be used with v4l2_device and v4l2_subdev */ 61dd99120cSHans Verkuil #define v4l2_printk(level, dev, fmt, arg...) \ 62dd99120cSHans Verkuil printk(level "%s: " fmt, (dev)->name , ## arg) 63dd99120cSHans Verkuil 64dd99120cSHans Verkuil #define v4l2_err(dev, fmt, arg...) \ 65dd99120cSHans Verkuil v4l2_printk(KERN_ERR, dev, fmt , ## arg) 66dd99120cSHans Verkuil 67dd99120cSHans Verkuil #define v4l2_warn(dev, fmt, arg...) \ 68dd99120cSHans Verkuil v4l2_printk(KERN_WARNING, dev, fmt , ## arg) 69dd99120cSHans Verkuil 70dd99120cSHans Verkuil #define v4l2_info(dev, fmt, arg...) \ 71dd99120cSHans Verkuil v4l2_printk(KERN_INFO, dev, fmt , ## arg) 72dd99120cSHans Verkuil 73dd99120cSHans Verkuil /* These three macros assume that the debug level is set with a module 74dd99120cSHans Verkuil parameter called 'debug'. */ 75dd99120cSHans Verkuil #define v4l2_dbg(level, debug, dev, fmt, arg...) \ 76dd99120cSHans Verkuil do { \ 77dd99120cSHans Verkuil if (debug >= (level)) \ 78dd99120cSHans Verkuil v4l2_printk(KERN_DEBUG, dev, fmt , ## arg); \ 79dd99120cSHans Verkuil } while (0) 80dd99120cSHans Verkuil 81dd99120cSHans Verkuil /* ------------------------------------------------------------------------- */ 82dd99120cSHans Verkuil 839cb2318bSHans Verkuil /* Control helper functions */ 849cb2318bSHans Verkuil 859cb2318bSHans Verkuil int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl, 86513521eaSHans Verkuil const char * const *menu_items); 8769028d70SHans Verkuil const char *v4l2_ctrl_get_name(u32 id); 88513521eaSHans Verkuil const char * const *v4l2_ctrl_get_menu(u32 id); 89bfd22c49SMauro Carvalho Chehab const s64 const *v4l2_ctrl_get_int_menu(u32 id, u32 *len); 909cb2318bSHans Verkuil int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def); 919cb2318bSHans Verkuil int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, 92513521eaSHans Verkuil struct v4l2_queryctrl *qctrl, const char * const *menu_items); 931e551266SHans Verkuil #define V4L2_CTRL_MENU_IDS_END (0xffffffff) 941e551266SHans Verkuil int v4l2_ctrl_query_menu_valid_items(struct v4l2_querymenu *qmenu, const u32 *ids); 952ba58894SHans Verkuil 962ba58894SHans Verkuil /* Note: ctrl_classes points to an array of u32 pointers. Each u32 array is a 972ba58894SHans Verkuil 0-terminated array of control IDs. Each array must be sorted low to high 982ba58894SHans Verkuil and belong to the same control class. The array of u32 pointers must also 992ba58894SHans Verkuil be sorted, from low class IDs to high class IDs. */ 1009cb2318bSHans Verkuil u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id); 1019cb2318bSHans Verkuil 1029cb2318bSHans Verkuil /* ------------------------------------------------------------------------- */ 1039cb2318bSHans Verkuil 10478a3b4dbSHans Verkuil /* I2C Helper functions */ 1058ffbc655SHans Verkuil 1068ffbc655SHans Verkuil struct i2c_driver; 1078ffbc655SHans Verkuil struct i2c_adapter; 1088ffbc655SHans Verkuil struct i2c_client; 109d2653e92SJean Delvare struct i2c_device_id; 110dd99120cSHans Verkuil struct v4l2_device; 111dd99120cSHans Verkuil struct v4l2_subdev; 112dd99120cSHans Verkuil struct v4l2_subdev_ops; 1138ffbc655SHans Verkuil 1148ffbc655SHans Verkuil 115dd99120cSHans Verkuil /* Load an i2c module and return an initialized v4l2_subdev struct. 116dd99120cSHans Verkuil The client_type argument is the name of the chip that's on the adapter. */ 1173c7c9370SHans Verkuil struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev, 1189a1f8b34SLaurent Pinchart struct i2c_adapter *adapter, const char *client_type, 119f0222c7dSHans Verkuil u8 addr, const unsigned short *probe_addrs); 120f0222c7dSHans Verkuil 121f0222c7dSHans Verkuil struct i2c_board_info; 122f0222c7dSHans Verkuil 123f0222c7dSHans Verkuil struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev, 1249a1f8b34SLaurent Pinchart struct i2c_adapter *adapter, struct i2c_board_info *info, 1259a1f8b34SLaurent Pinchart const unsigned short *probe_addrs); 126f0222c7dSHans Verkuil 1279d380adfSMichael Jones /* Initialize a v4l2_subdev with data from an i2c_client struct */ 128dd99120cSHans Verkuil void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client, 129dd99120cSHans Verkuil const struct v4l2_subdev_ops *ops); 130ab373190SHans Verkuil /* Return i2c client address of v4l2_subdev. */ 131ab373190SHans Verkuil unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd); 132dd99120cSHans Verkuil 133c7d29e2fSHans Verkuil enum v4l2_i2c_tuner_type { 134c7d29e2fSHans Verkuil ADDRS_RADIO, /* Radio tuner addresses */ 135c7d29e2fSHans Verkuil ADDRS_DEMOD, /* Demod tuner addresses */ 136c7d29e2fSHans Verkuil ADDRS_TV, /* TV tuner addresses */ 137c7d29e2fSHans Verkuil /* TV tuner addresses if demod is present, this excludes 138c7d29e2fSHans Verkuil addresses used by the demodulator from the list of 139c7d29e2fSHans Verkuil candidates. */ 140c7d29e2fSHans Verkuil ADDRS_TV_WITH_DEMOD, 141c7d29e2fSHans Verkuil }; 142c7d29e2fSHans Verkuil /* Return a list of I2C tuner addresses to probe. Use only if the tuner 143c7d29e2fSHans Verkuil addresses are unknown. */ 144c7d29e2fSHans Verkuil const unsigned short *v4l2_i2c_tuner_addrs(enum v4l2_i2c_tuner_type type); 145c7d29e2fSHans Verkuil 1468ffbc655SHans Verkuil /* ------------------------------------------------------------------------- */ 1478ffbc655SHans Verkuil 14885e09219SDmitri Belimov /* SPI Helper functions */ 14985e09219SDmitri Belimov #if defined(CONFIG_SPI) 15085e09219SDmitri Belimov 15185e09219SDmitri Belimov #include <linux/spi/spi.h> 15285e09219SDmitri Belimov 15385e09219SDmitri Belimov struct spi_device; 15485e09219SDmitri Belimov 15585e09219SDmitri Belimov /* Load an spi module and return an initialized v4l2_subdev struct. 15685e09219SDmitri Belimov The client_type argument is the name of the chip that's on the adapter. */ 15785e09219SDmitri Belimov struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev, 15885e09219SDmitri Belimov struct spi_master *master, struct spi_board_info *info); 15985e09219SDmitri Belimov 1609d380adfSMichael Jones /* Initialize a v4l2_subdev with data from an spi_device struct */ 16185e09219SDmitri Belimov void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi, 16285e09219SDmitri Belimov const struct v4l2_subdev_ops *ops); 16385e09219SDmitri Belimov #endif 16485e09219SDmitri Belimov 16585e09219SDmitri Belimov /* ------------------------------------------------------------------------- */ 16685e09219SDmitri Belimov 1676c31e598SHans Verkuil /* Note: these remaining ioctls/structs should be removed as well, but they are 1686c31e598SHans Verkuil still used in tuner-simple.c (TUNER_SET_CONFIG), cx18/ivtv (RESET) and 1696c31e598SHans Verkuil v4l2-int-device.h (v4l2_routing). To remove these ioctls some more cleanup 1706c31e598SHans Verkuil is needed in those modules. */ 1717e8b09eaSHans Verkuil 17278a3b4dbSHans Verkuil /* s_config */ 1737f171123SMauro Carvalho Chehab struct v4l2_priv_tun_config { 1747f171123SMauro Carvalho Chehab int tuner; 1757f171123SMauro Carvalho Chehab void *priv; 1767f171123SMauro Carvalho Chehab }; 1777f171123SMauro Carvalho Chehab #define TUNER_SET_CONFIG _IOW('d', 92, struct v4l2_priv_tun_config) 1785e453dc7SMichael Krufky 1796c31e598SHans Verkuil #define VIDIOC_INT_RESET _IOW ('d', 102, u32) 1806c31e598SHans Verkuil 181757d2505SHans Verkuil struct v4l2_routing { 182757d2505SHans Verkuil u32 input; 183757d2505SHans Verkuil u32 output; 184757d2505SHans Verkuil }; 1851b6f1d96SHans Verkuil 186b0d3159bSTrent Piepho /* ------------------------------------------------------------------------- */ 187b0d3159bSTrent Piepho 188b0d3159bSTrent Piepho /* Miscellaneous helper functions */ 189b0d3159bSTrent Piepho 190b0d3159bSTrent Piepho void v4l_bound_align_image(unsigned int *w, unsigned int wmin, 191b0d3159bSTrent Piepho unsigned int wmax, unsigned int walign, 192b0d3159bSTrent Piepho unsigned int *h, unsigned int hmin, 193b0d3159bSTrent Piepho unsigned int hmax, unsigned int halign, 194b0d3159bSTrent Piepho unsigned int salign); 1953fd8e647SHans Verkuil 1963fd8e647SHans Verkuil struct v4l2_discrete_probe { 1973fd8e647SHans Verkuil const struct v4l2_frmsize_discrete *sizes; 1983fd8e647SHans Verkuil int num_sizes; 1993fd8e647SHans Verkuil }; 2003fd8e647SHans Verkuil 2013fd8e647SHans Verkuil const struct v4l2_frmsize_discrete *v4l2_find_nearest_format( 2023fd8e647SHans Verkuil const struct v4l2_discrete_probe *probe, 2033fd8e647SHans Verkuil s32 width, s32 height); 2043fd8e647SHans Verkuil 205abd23295SSakari Ailus void v4l2_get_timestamp(struct timeval *tv); 206abd23295SSakari Ailus 207b2f0648fSHans Verkuil #endif /* V4L2_COMMON_H_ */ 208