diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/videodev2.h | 27 | ||||
| -rw-r--r-- | include/media/ov772x.h | 26 | ||||
| -rw-r--r-- | include/media/s5k6aa.h | 51 | ||||
| -rw-r--r-- | include/media/soc_camera.h | 104 | ||||
| -rw-r--r-- | include/media/soc_camera_platform.h | 4 | ||||
| -rw-r--r-- | include/media/soc_mediabus.h | 2 | ||||
| -rw-r--r-- | include/media/v4l2-ioctl.h | 2 | ||||
| -rw-r--r-- | include/media/v4l2-subdev.h | 5 | ||||
| -rw-r--r-- | include/media/videobuf2-core.h | 50 |
9 files changed, 166 insertions, 105 deletions
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 225560c1a10f..4b752d5ee80e 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -653,6 +653,10 @@ struct v4l2_buffer { | |||
| 653 | #define V4L2_BUF_FLAG_ERROR 0x0040 | 653 | #define V4L2_BUF_FLAG_ERROR 0x0040 |
| 654 | #define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ | 654 | #define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ |
| 655 | #define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ | 655 | #define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ |
| 656 | #define V4L2_BUF_FLAG_PREPARED 0x0400 /* Buffer is prepared for queuing */ | ||
| 657 | /* Cache handling flags */ | ||
| 658 | #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 | ||
| 659 | #define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 | ||
| 656 | 660 | ||
| 657 | /* | 661 | /* |
| 658 | * O V E R L A Y P R E V I E W | 662 | * O V E R L A Y P R E V I E W |
| @@ -1165,6 +1169,7 @@ enum v4l2_power_line_frequency { | |||
| 1165 | V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0, | 1169 | V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0, |
| 1166 | V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1, | 1170 | V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1, |
| 1167 | V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2, | 1171 | V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2, |
| 1172 | V4L2_CID_POWER_LINE_FREQUENCY_AUTO = 3, | ||
| 1168 | }; | 1173 | }; |
| 1169 | #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) | 1174 | #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) |
| 1170 | #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) | 1175 | #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) |
| @@ -2138,6 +2143,23 @@ struct v4l2_dbg_chip_ident { | |||
| 2138 | __u32 revision; /* chip revision, chip specific */ | 2143 | __u32 revision; /* chip revision, chip specific */ |
| 2139 | } __attribute__ ((packed)); | 2144 | } __attribute__ ((packed)); |
| 2140 | 2145 | ||
| 2146 | /** | ||
| 2147 | * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument | ||
| 2148 | * @index: on return, index of the first created buffer | ||
| 2149 | * @count: entry: number of requested buffers, | ||
| 2150 | * return: number of created buffers | ||
| 2151 | * @memory: buffer memory type | ||
| 2152 | * @format: frame format, for which buffers are requested | ||
| 2153 | * @reserved: future extensions | ||
| 2154 | */ | ||
| 2155 | struct v4l2_create_buffers { | ||
| 2156 | __u32 index; | ||
| 2157 | __u32 count; | ||
| 2158 | enum v4l2_memory memory; | ||
| 2159 | struct v4l2_format format; | ||
| 2160 | __u32 reserved[8]; | ||
| 2161 | }; | ||
| 2162 | |||
| 2141 | /* | 2163 | /* |
| 2142 | * I O C T L C O D E S F O R V I D E O D E V I C E S | 2164 | * I O C T L C O D E S F O R V I D E O D E V I C E S |
| 2143 | * | 2165 | * |
| @@ -2228,6 +2250,11 @@ struct v4l2_dbg_chip_ident { | |||
| 2228 | #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) | 2250 | #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription) |
| 2229 | #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) | 2251 | #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription) |
| 2230 | 2252 | ||
| 2253 | /* Experimental, the below two ioctls may change over the next couple of kernel | ||
| 2254 | versions */ | ||
| 2255 | #define VIDIOC_CREATE_BUFS _IOWR('V', 92, struct v4l2_create_buffers) | ||
| 2256 | #define VIDIOC_PREPARE_BUF _IOWR('V', 93, struct v4l2_buffer) | ||
| 2257 | |||
| 2231 | /* Reminder: when adding new ioctls please add support for them to | 2258 | /* Reminder: when adding new ioctls please add support for them to |
| 2232 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ | 2259 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ |
| 2233 | 2260 | ||
diff --git a/include/media/ov772x.h b/include/media/ov772x.h index 548bf1155c83..00dbb7c4feae 100644 --- a/include/media/ov772x.h +++ b/include/media/ov772x.h | |||
| @@ -12,12 +12,9 @@ | |||
| 12 | #ifndef __OV772X_H__ | 12 | #ifndef __OV772X_H__ |
| 13 | #define __OV772X_H__ | 13 | #define __OV772X_H__ |
| 14 | 14 | ||
| 15 | #include <media/soc_camera.h> | ||
| 16 | |||
| 17 | /* for flags */ | 15 | /* for flags */ |
| 18 | #define OV772X_FLAG_VFLIP (1 << 0) /* Vertical flip image */ | 16 | #define OV772X_FLAG_VFLIP (1 << 0) /* Vertical flip image */ |
| 19 | #define OV772X_FLAG_HFLIP (1 << 1) /* Horizontal flip image */ | 17 | #define OV772X_FLAG_HFLIP (1 << 1) /* Horizontal flip image */ |
| 20 | #define OV772X_FLAG_8BIT (1 << 2) /* default 10 bit */ | ||
| 21 | 18 | ||
| 22 | /* | 19 | /* |
| 23 | * for Edge ctrl | 20 | * for Edge ctrl |
| @@ -32,22 +29,23 @@ struct ov772x_edge_ctrl { | |||
| 32 | unsigned char lower; | 29 | unsigned char lower; |
| 33 | }; | 30 | }; |
| 34 | 31 | ||
| 35 | #define OV772X_MANUAL_EDGE_CTRL 0x80 /* un-used bit of strength */ | 32 | #define OV772X_MANUAL_EDGE_CTRL 0x80 /* un-used bit of strength */ |
| 36 | #define EDGE_STRENGTH_MASK 0x1F | 33 | #define OV772X_EDGE_STRENGTH_MASK 0x1F |
| 37 | #define EDGE_THRESHOLD_MASK 0x0F | 34 | #define OV772X_EDGE_THRESHOLD_MASK 0x0F |
| 38 | #define EDGE_UPPER_MASK 0xFF | 35 | #define OV772X_EDGE_UPPER_MASK 0xFF |
| 39 | #define EDGE_LOWER_MASK 0xFF | 36 | #define OV772X_EDGE_LOWER_MASK 0xFF |
| 40 | 37 | ||
| 41 | #define OV772X_AUTO_EDGECTRL(u, l) \ | 38 | #define OV772X_AUTO_EDGECTRL(u, l) \ |
| 42 | { \ | 39 | { \ |
| 43 | .upper = (u & EDGE_UPPER_MASK), \ | 40 | .upper = (u & OV772X_EDGE_UPPER_MASK), \ |
| 44 | .lower = (l & EDGE_LOWER_MASK), \ | 41 | .lower = (l & OV772X_EDGE_LOWER_MASK), \ |
| 45 | } | 42 | } |
| 46 | 43 | ||
| 47 | #define OV772X_MANUAL_EDGECTRL(s, t) \ | 44 | #define OV772X_MANUAL_EDGECTRL(s, t) \ |
| 48 | { \ | 45 | { \ |
| 49 | .strength = (s & EDGE_STRENGTH_MASK) | OV772X_MANUAL_EDGE_CTRL,\ | 46 | .strength = (s & OV772X_EDGE_STRENGTH_MASK) | \ |
| 50 | .threshold = (t & EDGE_THRESHOLD_MASK), \ | 47 | OV772X_MANUAL_EDGE_CTRL, \ |
| 48 | .threshold = (t & OV772X_EDGE_THRESHOLD_MASK), \ | ||
| 51 | } | 49 | } |
| 52 | 50 | ||
| 53 | /* | 51 | /* |
diff --git a/include/media/s5k6aa.h b/include/media/s5k6aa.h new file mode 100644 index 000000000000..ba34f7055e55 --- /dev/null +++ b/include/media/s5k6aa.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * S5K6AAFX camera sensor driver header | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Samsung Electronics Co., Ltd. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef S5K6AA_H | ||
| 13 | #define S5K6AA_H | ||
| 14 | |||
| 15 | #include <media/v4l2-mediabus.h> | ||
| 16 | |||
| 17 | /** | ||
| 18 | * struct s5k6aa_gpio - data structure describing a GPIO | ||
| 19 | * @gpio: GPIO number | ||
| 20 | * @level: indicates active state of the @gpio | ||
| 21 | */ | ||
| 22 | struct s5k6aa_gpio { | ||
| 23 | int gpio; | ||
| 24 | int level; | ||
| 25 | }; | ||
| 26 | |||
| 27 | /** | ||
| 28 | * struct s5k6aa_platform_data - s5k6aa driver platform data | ||
| 29 | * @set_power: an additional callback to the board code, called | ||
| 30 | * after enabling the regulators and before switching | ||
| 31 | * the sensor off | ||
| 32 | * @mclk_frequency: sensor's master clock frequency in Hz | ||
| 33 | * @gpio_reset: GPIO driving RESET pin | ||
| 34 | * @gpio_stby: GPIO driving STBY pin | ||
| 35 | * @nlanes: maximum number of MIPI-CSI lanes used | ||
| 36 | * @horiz_flip: default horizontal image flip value, non zero to enable | ||
| 37 | * @vert_flip: default vertical image flip value, non zero to enable | ||
| 38 | */ | ||
| 39 | |||
| 40 | struct s5k6aa_platform_data { | ||
| 41 | int (*set_power)(int enable); | ||
| 42 | unsigned long mclk_frequency; | ||
| 43 | struct s5k6aa_gpio gpio_reset; | ||
| 44 | struct s5k6aa_gpio gpio_stby; | ||
| 45 | enum v4l2_mbus_type bus_type; | ||
| 46 | u8 nlanes; | ||
| 47 | u8 horiz_flip; | ||
| 48 | u8 vert_flip; | ||
| 49 | }; | ||
| 50 | |||
| 51 | #endif /* S5K6AA_H */ | ||
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 7582952dceae..b1377b931eb7 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
| @@ -12,12 +12,14 @@ | |||
| 12 | #ifndef SOC_CAMERA_H | 12 | #ifndef SOC_CAMERA_H |
| 13 | #define SOC_CAMERA_H | 13 | #define SOC_CAMERA_H |
| 14 | 14 | ||
| 15 | #include <linux/bitops.h> | ||
| 15 | #include <linux/device.h> | 16 | #include <linux/device.h> |
| 16 | #include <linux/mutex.h> | 17 | #include <linux/mutex.h> |
| 17 | #include <linux/pm.h> | 18 | #include <linux/pm.h> |
| 18 | #include <linux/videodev2.h> | 19 | #include <linux/videodev2.h> |
| 19 | #include <media/videobuf-core.h> | 20 | #include <media/videobuf-core.h> |
| 20 | #include <media/videobuf2-core.h> | 21 | #include <media/videobuf2-core.h> |
| 22 | #include <media/v4l2-ctrls.h> | ||
| 21 | #include <media/v4l2-device.h> | 23 | #include <media/v4l2-device.h> |
| 22 | 24 | ||
| 23 | struct file; | 25 | struct file; |
| @@ -37,8 +39,8 @@ struct soc_camera_device { | |||
| 37 | unsigned char iface; /* Host number */ | 39 | unsigned char iface; /* Host number */ |
| 38 | unsigned char devnum; /* Device number per host */ | 40 | unsigned char devnum; /* Device number per host */ |
| 39 | struct soc_camera_sense *sense; /* See comment in struct definition */ | 41 | struct soc_camera_sense *sense; /* See comment in struct definition */ |
| 40 | struct soc_camera_ops *ops; | ||
| 41 | struct video_device *vdev; | 42 | struct video_device *vdev; |
| 43 | struct v4l2_ctrl_handler ctrl_handler; | ||
| 42 | const struct soc_camera_format_xlate *current_fmt; | 44 | const struct soc_camera_format_xlate *current_fmt; |
| 43 | struct soc_camera_format_xlate *user_formats; | 45 | struct soc_camera_format_xlate *user_formats; |
| 44 | int num_user_formats; | 46 | int num_user_formats; |
| @@ -93,14 +95,10 @@ struct soc_camera_host_ops { | |||
| 93 | int (*reqbufs)(struct soc_camera_device *, struct v4l2_requestbuffers *); | 95 | int (*reqbufs)(struct soc_camera_device *, struct v4l2_requestbuffers *); |
| 94 | int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); | 96 | int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); |
| 95 | int (*set_bus_param)(struct soc_camera_device *, __u32); | 97 | int (*set_bus_param)(struct soc_camera_device *, __u32); |
| 96 | int (*get_ctrl)(struct soc_camera_device *, struct v4l2_control *); | ||
| 97 | int (*set_ctrl)(struct soc_camera_device *, struct v4l2_control *); | ||
| 98 | int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | 98 | int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); |
| 99 | int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | 99 | int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); |
| 100 | int (*enum_fsizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); | 100 | int (*enum_fsizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); |
| 101 | unsigned int (*poll)(struct file *, poll_table *); | 101 | unsigned int (*poll)(struct file *, poll_table *); |
| 102 | const struct v4l2_queryctrl *controls; | ||
| 103 | int num_controls; | ||
| 104 | }; | 102 | }; |
| 105 | 103 | ||
| 106 | #define SOCAM_SENSOR_INVERT_PCLK (1 << 0) | 104 | #define SOCAM_SENSOR_INVERT_PCLK (1 << 0) |
| @@ -193,13 +191,6 @@ struct soc_camera_format_xlate { | |||
| 193 | const struct soc_mbus_pixelfmt *host_fmt; | 191 | const struct soc_mbus_pixelfmt *host_fmt; |
| 194 | }; | 192 | }; |
| 195 | 193 | ||
| 196 | struct soc_camera_ops { | ||
| 197 | unsigned long (*query_bus_param)(struct soc_camera_device *); | ||
| 198 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); | ||
| 199 | const struct v4l2_queryctrl *controls; | ||
| 200 | int num_controls; | ||
| 201 | }; | ||
| 202 | |||
| 203 | #define SOCAM_SENSE_PCLK_CHANGED (1 << 0) | 194 | #define SOCAM_SENSE_PCLK_CHANGED (1 << 0) |
| 204 | 195 | ||
| 205 | /** | 196 | /** |
| @@ -226,65 +217,18 @@ struct soc_camera_sense { | |||
| 226 | unsigned long pixel_clock; | 217 | unsigned long pixel_clock; |
| 227 | }; | 218 | }; |
| 228 | 219 | ||
| 229 | static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( | 220 | #define SOCAM_DATAWIDTH(x) BIT((x) - 1) |
| 230 | struct soc_camera_ops *ops, int id) | 221 | #define SOCAM_DATAWIDTH_4 SOCAM_DATAWIDTH(4) |
| 231 | { | 222 | #define SOCAM_DATAWIDTH_8 SOCAM_DATAWIDTH(8) |
| 232 | int i; | 223 | #define SOCAM_DATAWIDTH_9 SOCAM_DATAWIDTH(9) |
| 233 | 224 | #define SOCAM_DATAWIDTH_10 SOCAM_DATAWIDTH(10) | |
| 234 | for (i = 0; i < ops->num_controls; i++) | 225 | #define SOCAM_DATAWIDTH_15 SOCAM_DATAWIDTH(15) |
| 235 | if (ops->controls[i].id == id) | 226 | #define SOCAM_DATAWIDTH_16 SOCAM_DATAWIDTH(16) |
| 236 | return &ops->controls[i]; | ||
| 237 | |||
| 238 | return NULL; | ||
| 239 | } | ||
| 240 | |||
| 241 | #define SOCAM_MASTER (1 << 0) | ||
| 242 | #define SOCAM_SLAVE (1 << 1) | ||
| 243 | #define SOCAM_HSYNC_ACTIVE_HIGH (1 << 2) | ||
| 244 | #define SOCAM_HSYNC_ACTIVE_LOW (1 << 3) | ||
| 245 | #define SOCAM_VSYNC_ACTIVE_HIGH (1 << 4) | ||
| 246 | #define SOCAM_VSYNC_ACTIVE_LOW (1 << 5) | ||
| 247 | #define SOCAM_DATAWIDTH_4 (1 << 6) | ||
| 248 | #define SOCAM_DATAWIDTH_8 (1 << 7) | ||
| 249 | #define SOCAM_DATAWIDTH_9 (1 << 8) | ||
| 250 | #define SOCAM_DATAWIDTH_10 (1 << 9) | ||
| 251 | #define SOCAM_DATAWIDTH_15 (1 << 10) | ||
| 252 | #define SOCAM_DATAWIDTH_16 (1 << 11) | ||
| 253 | #define SOCAM_PCLK_SAMPLE_RISING (1 << 12) | ||
| 254 | #define SOCAM_PCLK_SAMPLE_FALLING (1 << 13) | ||
| 255 | #define SOCAM_DATA_ACTIVE_HIGH (1 << 14) | ||
| 256 | #define SOCAM_DATA_ACTIVE_LOW (1 << 15) | ||
| 257 | #define SOCAM_MIPI_1LANE (1 << 16) | ||
| 258 | #define SOCAM_MIPI_2LANE (1 << 17) | ||
| 259 | #define SOCAM_MIPI_3LANE (1 << 18) | ||
| 260 | #define SOCAM_MIPI_4LANE (1 << 19) | ||
| 261 | #define SOCAM_MIPI (SOCAM_MIPI_1LANE | SOCAM_MIPI_2LANE | \ | ||
| 262 | SOCAM_MIPI_3LANE | SOCAM_MIPI_4LANE) | ||
| 263 | 227 | ||
| 264 | #define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_4 | SOCAM_DATAWIDTH_8 | \ | 228 | #define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_4 | SOCAM_DATAWIDTH_8 | \ |
| 265 | SOCAM_DATAWIDTH_9 | SOCAM_DATAWIDTH_10 | \ | 229 | SOCAM_DATAWIDTH_9 | SOCAM_DATAWIDTH_10 | \ |
| 266 | SOCAM_DATAWIDTH_15 | SOCAM_DATAWIDTH_16) | 230 | SOCAM_DATAWIDTH_15 | SOCAM_DATAWIDTH_16) |
| 267 | 231 | ||
| 268 | static inline unsigned long soc_camera_bus_param_compatible( | ||
| 269 | unsigned long camera_flags, unsigned long bus_flags) | ||
| 270 | { | ||
| 271 | unsigned long common_flags, hsync, vsync, pclk, data, buswidth, mode; | ||
| 272 | unsigned long mipi; | ||
| 273 | |||
| 274 | common_flags = camera_flags & bus_flags; | ||
| 275 | |||
| 276 | hsync = common_flags & (SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW); | ||
| 277 | vsync = common_flags & (SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW); | ||
| 278 | pclk = common_flags & (SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING); | ||
| 279 | data = common_flags & (SOCAM_DATA_ACTIVE_HIGH | SOCAM_DATA_ACTIVE_LOW); | ||
| 280 | mode = common_flags & (SOCAM_MASTER | SOCAM_SLAVE); | ||
| 281 | buswidth = common_flags & SOCAM_DATAWIDTH_MASK; | ||
| 282 | mipi = common_flags & SOCAM_MIPI; | ||
| 283 | |||
| 284 | return ((!hsync || !vsync || !pclk || !data || !mode || !buswidth) && !mipi) ? 0 : | ||
| 285 | common_flags; | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline void soc_camera_limit_side(int *start, int *length, | 232 | static inline void soc_camera_limit_side(int *start, int *length, |
| 289 | unsigned int start_min, | 233 | unsigned int start_min, |
| 290 | unsigned int length_min, unsigned int length_max) | 234 | unsigned int length_min, unsigned int length_max) |
| @@ -300,23 +244,37 @@ static inline void soc_camera_limit_side(int *start, int *length, | |||
| 300 | *start = start_min + length_max - *length; | 244 | *start = start_min + length_max - *length; |
| 301 | } | 245 | } |
| 302 | 246 | ||
| 303 | extern unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, | 247 | unsigned long soc_camera_apply_sensor_flags(struct soc_camera_link *icl, |
| 304 | unsigned long flags); | 248 | unsigned long flags); |
| 249 | unsigned long soc_camera_apply_board_flags(struct soc_camera_link *icl, | ||
| 250 | const struct v4l2_mbus_config *cfg); | ||
| 305 | 251 | ||
| 306 | /* This is only temporary here - until v4l2-subdev begins to link to video_device */ | 252 | /* This is only temporary here - until v4l2-subdev begins to link to video_device */ |
| 307 | #include <linux/i2c.h> | 253 | #include <linux/i2c.h> |
| 308 | static inline struct video_device *soc_camera_i2c_to_vdev(struct i2c_client *client) | 254 | static inline struct video_device *soc_camera_i2c_to_vdev(const struct i2c_client *client) |
| 255 | { | ||
| 256 | struct v4l2_subdev *sd = i2c_get_clientdata(client); | ||
| 257 | struct soc_camera_device *icd = (struct soc_camera_device *)sd->grp_id; | ||
| 258 | return icd ? icd->vdev : NULL; | ||
| 259 | } | ||
| 260 | |||
| 261 | static inline struct soc_camera_link *soc_camera_i2c_to_link(const struct i2c_client *client) | ||
| 262 | { | ||
| 263 | return client->dev.platform_data; | ||
| 264 | } | ||
| 265 | |||
| 266 | static inline struct v4l2_subdev *soc_camera_vdev_to_subdev(const struct video_device *vdev) | ||
| 309 | { | 267 | { |
| 310 | struct soc_camera_device *icd = client->dev.platform_data; | 268 | struct soc_camera_device *icd = dev_get_drvdata(vdev->parent); |
| 311 | return icd->vdev; | 269 | return soc_camera_to_subdev(icd); |
| 312 | } | 270 | } |
| 313 | 271 | ||
| 314 | static inline struct soc_camera_device *soc_camera_from_vb2q(struct vb2_queue *vq) | 272 | static inline struct soc_camera_device *soc_camera_from_vb2q(const struct vb2_queue *vq) |
| 315 | { | 273 | { |
| 316 | return container_of(vq, struct soc_camera_device, vb2_vidq); | 274 | return container_of(vq, struct soc_camera_device, vb2_vidq); |
| 317 | } | 275 | } |
| 318 | 276 | ||
| 319 | static inline struct soc_camera_device *soc_camera_from_vbq(struct videobuf_queue *vq) | 277 | static inline struct soc_camera_device *soc_camera_from_vbq(const struct videobuf_queue *vq) |
| 320 | { | 278 | { |
| 321 | return container_of(vq, struct soc_camera_device, vb_vidq); | 279 | return container_of(vq, struct soc_camera_device, vb_vidq); |
| 322 | } | 280 | } |
diff --git a/include/media/soc_camera_platform.h b/include/media/soc_camera_platform.h index 74f0fa15ca47..8aa4200a0b1d 100644 --- a/include/media/soc_camera_platform.h +++ b/include/media/soc_camera_platform.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/videodev2.h> | 14 | #include <linux/videodev2.h> |
| 15 | #include <media/soc_camera.h> | 15 | #include <media/soc_camera.h> |
| 16 | #include <media/v4l2-mediabus.h> | ||
| 16 | 17 | ||
| 17 | struct device; | 18 | struct device; |
| 18 | 19 | ||
| @@ -20,7 +21,8 @@ struct soc_camera_platform_info { | |||
| 20 | const char *format_name; | 21 | const char *format_name; |
| 21 | unsigned long format_depth; | 22 | unsigned long format_depth; |
| 22 | struct v4l2_mbus_framefmt format; | 23 | struct v4l2_mbus_framefmt format; |
| 23 | unsigned long bus_param; | 24 | unsigned long mbus_param; |
| 25 | enum v4l2_mbus_type mbus_type; | ||
| 24 | struct soc_camera_device *icd; | 26 | struct soc_camera_device *icd; |
| 25 | int (*set_capture)(struct soc_camera_platform_info *info, int enable); | 27 | int (*set_capture)(struct soc_camera_platform_info *info, int enable); |
| 26 | }; | 28 | }; |
diff --git a/include/media/soc_mediabus.h b/include/media/soc_mediabus.h index fae432544b41..73f1e7eb60f3 100644 --- a/include/media/soc_mediabus.h +++ b/include/media/soc_mediabus.h | |||
| @@ -82,5 +82,7 @@ const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( | |||
| 82 | s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); | 82 | s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); |
| 83 | int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, | 83 | int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, |
| 84 | unsigned int *numerator, unsigned int *denominator); | 84 | unsigned int *numerator, unsigned int *denominator); |
| 85 | unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, | ||
| 86 | unsigned int flags); | ||
| 85 | 87 | ||
| 86 | #endif | 88 | #endif |
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index dd9f1e7b8ff7..4d1c74ad4c84 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h | |||
| @@ -122,6 +122,8 @@ struct v4l2_ioctl_ops { | |||
| 122 | int (*vidioc_qbuf) (struct file *file, void *fh, struct v4l2_buffer *b); | 122 | int (*vidioc_qbuf) (struct file *file, void *fh, struct v4l2_buffer *b); |
| 123 | int (*vidioc_dqbuf) (struct file *file, void *fh, struct v4l2_buffer *b); | 123 | int (*vidioc_dqbuf) (struct file *file, void *fh, struct v4l2_buffer *b); |
| 124 | 124 | ||
| 125 | int (*vidioc_create_bufs)(struct file *file, void *fh, struct v4l2_create_buffers *b); | ||
| 126 | int (*vidioc_prepare_buf)(struct file *file, void *fh, struct v4l2_buffer *b); | ||
| 125 | 127 | ||
| 126 | int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i); | 128 | int (*vidioc_overlay) (struct file *file, void *fh, unsigned int i); |
| 127 | int (*vidioc_g_fbuf) (struct file *file, void *fh, | 129 | int (*vidioc_g_fbuf) (struct file *file, void *fh, |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index 257da1a30f66..f0f3358d1b1b 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -158,6 +158,7 @@ struct v4l2_subdev_core_ops { | |||
| 158 | int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | 158 | int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); |
| 159 | int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); | 159 | int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls); |
| 160 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); | 160 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); |
| 161 | int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm); | ||
| 161 | int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); | 162 | int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm); |
| 162 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); | 163 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); |
| 163 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 164 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| @@ -534,13 +535,13 @@ struct v4l2_subdev { | |||
| 534 | void *dev_priv; | 535 | void *dev_priv; |
| 535 | void *host_priv; | 536 | void *host_priv; |
| 536 | /* subdev device node */ | 537 | /* subdev device node */ |
| 537 | struct video_device devnode; | 538 | struct video_device *devnode; |
| 538 | }; | 539 | }; |
| 539 | 540 | ||
| 540 | #define media_entity_to_v4l2_subdev(ent) \ | 541 | #define media_entity_to_v4l2_subdev(ent) \ |
| 541 | container_of(ent, struct v4l2_subdev, entity) | 542 | container_of(ent, struct v4l2_subdev, entity) |
| 542 | #define vdev_to_v4l2_subdev(vdev) \ | 543 | #define vdev_to_v4l2_subdev(vdev) \ |
| 543 | container_of(vdev, struct v4l2_subdev, devnode) | 544 | video_get_drvdata(vdev) |
| 544 | 545 | ||
| 545 | /* | 546 | /* |
| 546 | * Used for storing subdev information per file handle | 547 | * Used for storing subdev information per file handle |
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h index ea55c08eddfb..a15d1f1b319e 100644 --- a/include/media/videobuf2-core.h +++ b/include/media/videobuf2-core.h | |||
| @@ -105,6 +105,7 @@ enum vb2_fileio_flags { | |||
| 105 | /** | 105 | /** |
| 106 | * enum vb2_buffer_state - current video buffer state | 106 | * enum vb2_buffer_state - current video buffer state |
| 107 | * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control | 107 | * @VB2_BUF_STATE_DEQUEUED: buffer under userspace control |
| 108 | * @VB2_BUF_STATE_PREPARED: buffer prepared in videobuf and by the driver | ||
| 108 | * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver | 109 | * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver |
| 109 | * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used | 110 | * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used |
| 110 | * in a hardware operation | 111 | * in a hardware operation |
| @@ -116,6 +117,7 @@ enum vb2_fileio_flags { | |||
| 116 | */ | 117 | */ |
| 117 | enum vb2_buffer_state { | 118 | enum vb2_buffer_state { |
| 118 | VB2_BUF_STATE_DEQUEUED, | 119 | VB2_BUF_STATE_DEQUEUED, |
| 120 | VB2_BUF_STATE_PREPARED, | ||
| 119 | VB2_BUF_STATE_QUEUED, | 121 | VB2_BUF_STATE_QUEUED, |
| 120 | VB2_BUF_STATE_ACTIVE, | 122 | VB2_BUF_STATE_ACTIVE, |
| 121 | VB2_BUF_STATE_DONE, | 123 | VB2_BUF_STATE_DONE, |
| @@ -167,13 +169,21 @@ struct vb2_buffer { | |||
| 167 | /** | 169 | /** |
| 168 | * struct vb2_ops - driver-specific callbacks | 170 | * struct vb2_ops - driver-specific callbacks |
| 169 | * | 171 | * |
| 170 | * @queue_setup: called from a VIDIOC_REQBUFS handler, before | 172 | * @queue_setup: called from VIDIOC_REQBUFS and VIDIOC_CREATE_BUFS |
| 171 | * memory allocation; driver should return the required | 173 | * handlers before memory allocation, or, if |
| 172 | * number of buffers in num_buffers, the required number | 174 | * *num_planes != 0, after the allocation to verify a |
| 173 | * of planes per buffer in num_planes; the size of each | 175 | * smaller number of buffers. Driver should return |
| 174 | * plane should be set in the sizes[] array and optional | 176 | * the required number of buffers in *num_buffers, the |
| 175 | * per-plane allocator specific context in alloc_ctxs[] | 177 | * required number of planes per buffer in *num_planes; the |
| 176 | * array | 178 | * size of each plane should be set in the sizes[] array |
| 179 | * and optional per-plane allocator specific context in the | ||
| 180 | * alloc_ctxs[] array. When called from VIDIOC_REQBUFS, | ||
| 181 | * fmt == NULL, the driver has to use the currently | ||
| 182 | * configured format and *num_buffers is the total number | ||
| 183 | * of buffers, that are being allocated. When called from | ||
| 184 | * VIDIOC_CREATE_BUFS, fmt != NULL and it describes the | ||
| 185 | * target frame format. In this case *num_buffers are being | ||
| 186 | * allocated additionally to q->num_buffers. | ||
| 177 | * @wait_prepare: release any locks taken while calling vb2 functions; | 187 | * @wait_prepare: release any locks taken while calling vb2 functions; |
| 178 | * it is called before an ioctl needs to wait for a new | 188 | * it is called before an ioctl needs to wait for a new |
| 179 | * buffer to arrive; required to avoid a deadlock in | 189 | * buffer to arrive; required to avoid a deadlock in |
| @@ -186,11 +196,11 @@ struct vb2_buffer { | |||
| 186 | * perform additional buffer-related initialization; | 196 | * perform additional buffer-related initialization; |
| 187 | * initialization failure (return != 0) will prevent | 197 | * initialization failure (return != 0) will prevent |
| 188 | * queue setup from completing successfully; optional | 198 | * queue setup from completing successfully; optional |
| 189 | * @buf_prepare: called every time the buffer is queued from userspace; | 199 | * @buf_prepare: called every time the buffer is queued from userspace |
| 190 | * drivers may perform any initialization required before | 200 | * and from the VIDIOC_PREPARE_BUF ioctl; drivers may |
| 191 | * each hardware operation in this callback; | 201 | * perform any initialization required before each hardware |
| 192 | * if an error is returned, the buffer will not be queued | 202 | * operation in this callback; if an error is returned, the |
| 193 | * in driver; optional | 203 | * buffer will not be queued in driver; optional |
| 194 | * @buf_finish: called before every dequeue of the buffer back to | 204 | * @buf_finish: called before every dequeue of the buffer back to |
| 195 | * userspace; drivers may perform any operations required | 205 | * userspace; drivers may perform any operations required |
| 196 | * before userspace accesses the buffer; optional | 206 | * before userspace accesses the buffer; optional |
| @@ -216,9 +226,9 @@ struct vb2_buffer { | |||
| 216 | * pre-queued buffers before calling STREAMON | 226 | * pre-queued buffers before calling STREAMON |
| 217 | */ | 227 | */ |
| 218 | struct vb2_ops { | 228 | struct vb2_ops { |
| 219 | int (*queue_setup)(struct vb2_queue *q, unsigned int *num_buffers, | 229 | int (*queue_setup)(struct vb2_queue *q, const struct v4l2_format *fmt, |
| 220 | unsigned int *num_planes, unsigned int sizes[], | 230 | unsigned int *num_buffers, unsigned int *num_planes, |
| 221 | void *alloc_ctxs[]); | 231 | unsigned int sizes[], void *alloc_ctxs[]); |
| 222 | 232 | ||
| 223 | void (*wait_prepare)(struct vb2_queue *q); | 233 | void (*wait_prepare)(struct vb2_queue *q); |
| 224 | void (*wait_finish)(struct vb2_queue *q); | 234 | void (*wait_finish)(struct vb2_queue *q); |
| @@ -298,6 +308,9 @@ int vb2_wait_for_all_buffers(struct vb2_queue *q); | |||
| 298 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); | 308 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); |
| 299 | int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req); | 309 | int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req); |
| 300 | 310 | ||
| 311 | int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create); | ||
| 312 | int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b); | ||
| 313 | |||
| 301 | int vb2_queue_init(struct vb2_queue *q); | 314 | int vb2_queue_init(struct vb2_queue *q); |
| 302 | 315 | ||
| 303 | void vb2_queue_release(struct vb2_queue *q); | 316 | void vb2_queue_release(struct vb2_queue *q); |
| @@ -309,6 +322,13 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type); | |||
| 309 | int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); | 322 | int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); |
| 310 | 323 | ||
| 311 | int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma); | 324 | int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma); |
| 325 | #ifndef CONFIG_MMU | ||
| 326 | unsigned long vb2_get_unmapped_area(struct vb2_queue *q, | ||
| 327 | unsigned long addr, | ||
| 328 | unsigned long len, | ||
| 329 | unsigned long pgoff, | ||
| 330 | unsigned long flags); | ||
| 331 | #endif | ||
| 312 | unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait); | 332 | unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait); |
| 313 | size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, | 333 | size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, |
| 314 | loff_t *ppos, int nonblock); | 334 | loff_t *ppos, int nonblock); |
