Pull media updates from Mauro Carvalho Chehab: - Legacy soc_camera driver was removed from staging - New I2C sensor related drivers: dw9768, ch7322, max9271, rdacm20 - TI vpe driver code was re-organized and had new features added - Added Xilinx MIPI CSI-2 Rx Subsystem driver - Added support for Infrared Toy and IR Droid devices - Lots of random driver fixes, new features and cleanups * tag 'media/v5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (318 commits) media: camss: fix memory leaks on error handling paths in probe media: davinci: vpif_capture: fix potential double free media: radio: remove redundant assignment to variable retval media: allegro: fix potential null dereference on header media: mtk-mdp: Fix a refcounting bug on error in init media: allegro: fix an error pointer vs NULL check media: meye: fix missing pm_mchip_mode field media: cafe-driver: use generic power management media: saa7164: use generic power management media: v4l2-dev/ioctl: Fix document for VIDIOC_QUERYCAP media: v4l2: Correct kernel-doc inconsistency media: v4l2: Correct kernel-doc inconsistency media: dvbdev.h: keep * together with the type media: v4l2-subdev.h: keep * together with the type media: videobuf2: Print videobuf2 buffer state by name media: colorspaces-details.rst: fix V4L2_COLORSPACE_JPEG description media: tw68: use generic power management media: meye: use generic power management media: cx88: use generic power management media: cx25821: use generic power management ...
Showing the changes to include (17 of 268 files). Show all
Unified · Split
| @@ -1,32 +0,0 @@ | ||
| 1 | −/* SPDX-License-Identifier: GPL-2.0-only */ | |
| 2 | −/* | |
| 3 | − * Header for V4L2 SoC Camera driver for OMAP1 Camera Interface | |
| 4 | − * | |
| 5 | − * Copyright (C) 2010, Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> | |
| 6 | − */ | |
| 7 | − | |
| 8 | −#ifndef __MEDIA_OMAP1_CAMERA_H_ | |
| 9 | −#define __MEDIA_OMAP1_CAMERA_H_ | |
| 10 | − | |
| 11 | −#include <linux/bitops.h> | |
| 12 | − | |
| 13 | −#define OMAP1_CAMERA_IOSIZE 0x1c | |
| 14 | − | |
| 15 | −enum omap1_cam_vb_mode { | |
| 16 | − OMAP1_CAM_DMA_CONTIG = 0, | |
| 17 | − OMAP1_CAM_DMA_SG, | |
| 18 | −}; | |
| 19 | − | |
| 20 | −#define OMAP1_CAMERA_MIN_BUF_COUNT(x) ((x) == OMAP1_CAM_DMA_CONTIG ? 3 : 2) | |
| 21 | − | |
| 22 | −struct omap1_cam_platform_data { | |
| 23 | − unsigned long camexclk_khz; | |
| 24 | − unsigned long lclk_khz_max; | |
| 25 | − unsigned long flags; | |
| 26 | −}; | |
| 27 | − | |
| 28 | −#define OMAP1_CAMERA_LCLK_RISING BIT(0) | |
| 29 | −#define OMAP1_CAMERA_RST_LOW BIT(1) | |
| 30 | −#define OMAP1_CAMERA_RST_HIGH BIT(2) | |
| 31 | − | |
| 32 | −#endif /* __MEDIA_OMAP1_CAMERA_H_ */ | |
| @@ -389,6 +389,11 @@ struct fwnode_handle * · 388 unmodified lines | ||
| 389 | 389 | fwnode_graph_get_remote_node(const struct fwnode_handle *fwnode, u32 port, |
| 390 | 390 | u32 endpoint); |
| 391 | 391 | |
| 392 | +static inline bool fwnode_graph_is_endpoint(struct fwnode_handle *fwnode) | |
| 393 | +{ | |
| 394 | + return fwnode_property_present(fwnode, "remote-endpoint"); | |
| 395 | +} | |
| 396 | + | |
| 392 | 397 | /* |
| 393 | 398 | * Fwnode lookup flags |
| 394 | 399 | * |
| @@ -144,6 +144,60 @@ struct cec_adap_ops { · 143 unmodified lines | ||
| 144 | 144 | */ |
| 145 | 145 | #define CEC_MAX_MSG_TX_QUEUE_SZ (18 * 1) |
| 146 | 146 | |
| 147 | +/** | |
| 148 | + * struct cec_adapter - cec adapter structure | |
| 149 | + * @owner: module owner | |
| 150 | + * @name: name of the CEC adapter | |
| 151 | + * @devnode: device node for the /dev/cecX device | |
| 152 | + * @lock: mutex controlling access to this structure | |
| 153 | + * @rc: remote control device | |
| 154 | + * @transmit_queue: queue of pending transmits | |
| 155 | + * @transmit_queue_sz: number of pending transmits | |
| 156 | + * @wait_queue: queue of transmits waiting for a reply | |
| 157 | + * @transmitting: CEC messages currently being transmitted | |
| 158 | + * @transmit_in_progress: true if a transmit is in progress | |
| 159 | + * @kthread_config: kthread used to configure a CEC adapter | |
| 160 | + * @config_completion: used to signal completion of the config kthread | |
| 161 | + * @kthread: main CEC processing thread | |
| 162 | + * @kthread_waitq: main CEC processing wait_queue | |
| 163 | + * @ops: cec adapter ops | |
| 164 | + * @priv: cec driver's private data | |
| 165 | + * @capabilities: cec adapter capabilities | |
| 166 | + * @available_log_addrs: maximum number of available logical addresses | |
| 167 | + * @phys_addr: the current physical address | |
| 168 | + * @needs_hpd: if true, then the HDMI HotPlug Detect pin must be high | |
| 169 | + * in order to transmit or receive CEC messages. This is usually a HW | |
| 170 | + * limitation. | |
| 171 | + * @is_configuring: the CEC adapter is configuring (i.e. claiming LAs) | |
| 172 | + * @is_configured: the CEC adapter is configured (i.e. has claimed LAs) | |
| 173 | + * @cec_pin_is_high: if true then the CEC pin is high. Only used with the | |
| 174 | + * CEC pin framework. | |
| 175 | + * @adap_controls_phys_addr: if true, then the CEC adapter controls the | |
| 176 | + * physical address, i.e. the CEC hardware can detect HPD changes and | |
| 177 | + * read the EDID and is not dependent on an external HDMI driver. | |
| 178 | + * Drivers that need this can set this field to true after the | |
| 179 | + * cec_allocate_adapter() call. | |
| 180 | + * @last_initiator: the initiator of the last transmitted message. | |
| 181 | + * @monitor_all_cnt: number of filehandles monitoring all msgs | |
| 182 | + * @monitor_pin_cnt: number of filehandles monitoring pin changes | |
| 183 | + * @follower_cnt: number of filehandles in follower mode | |
| 184 | + * @cec_follower: filehandle of the exclusive follower | |
| 185 | + * @cec_initiator: filehandle of the exclusive initiator | |
| 186 | + * @passthrough: if true, then the exclusive follower is in | |
| 187 | + * passthrough mode. | |
| 188 | + * @log_addrs: current logical addresses | |
| 189 | + * @conn_info: current connector info | |
| 190 | + * @tx_timeouts: number of transmit timeouts | |
| 191 | + * @notifier: CEC notifier | |
| 192 | + * @pin: CEC pin status struct | |
| 193 | + * @cec_dir: debugfs cec directory | |
| 194 | + * @status_file: debugfs cec status file | |
| 195 | + * @error_inj_file: debugfs cec error injection file | |
| 196 | + * @sequence: transmit sequence counter | |
| 197 | + * @input_phys: remote control input_phys name | |
| 198 | + * | |
| 199 | + * This structure represents a cec adapter. | |
| 200 | + */ | |
| 147 | 201 | struct cec_adapter { |
| 148 | 202 | struct module *owner; |
| 149 | 203 | char name[32]; |
| @@ -162,7 +216,6 @@ struct cec_adapter { · 12 unmodified lines | ||
| 162 | 216 | |
| 163 | 217 | struct task_struct *kthread; |
| 164 | 218 | wait_queue_head_t kthread_waitq; |
| 165 | − wait_queue_head_t waitq; | |
| 166 | 219 | |
| 167 | 220 | const struct cec_adap_ops *ops; |
| 168 | 221 | void *priv; |
| @@ -174,6 +227,7 @@ struct cec_adapter { · 5 unmodified lines | ||
| 174 | 227 | bool is_configuring; |
| 175 | 228 | bool is_configured; |
| 176 | 229 | bool cec_pin_is_high; |
| 230 | + bool adap_controls_phys_addr; | |
| 177 | 231 | u8 last_initiator; |
| 178 | 232 | u32 monitor_all_cnt; |
| 179 | 233 | u32 monitor_pin_cnt; |
| @@ -197,7 +251,6 @@ struct cec_adapter { · 17 unmodified lines | ||
| 197 | 251 | struct dentry *status_file; |
| 198 | 252 | struct dentry *error_inj_file; |
| 199 | 253 | |
| 200 | − u16 phys_addrs[15]; | |
| 201 | 254 | u32 sequence; |
| 202 | 255 | |
| 203 | 256 | char input_phys[32]; |
| @@ -1,6 +1,6 @@ | ||
| 1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
| 2 | 2 | /* |
| 3 | − * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ | |
| 3 | + * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/ | |
| 4 | 4 | */ |
| 5 | 5 | #ifndef VPBE_DISPLAY_H |
| 6 | 6 | #define VPBE_DISPLAY_H |
| @@ -1,107 +0,0 @@ | ||
| 1 | −/* SPDX-License-Identifier: GPL-2.0-only */ | |
| 2 | −/* | |
| 3 | − * SoC-camera Media Bus API extensions | |
| 4 | − * | |
| 5 | − * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de> | |
| 6 | − */ | |
| 7 | − | |
| 8 | −#ifndef SOC_MEDIABUS_H | |
| 9 | −#define SOC_MEDIABUS_H | |
| 10 | − | |
| 11 | −#include <linux/videodev2.h> | |
| 12 | −#include <linux/v4l2-mediabus.h> | |
| 13 | − | |
| 14 | −/** | |
| 15 | − * enum soc_mbus_packing - data packing types on the media-bus | |
| 16 | − * @SOC_MBUS_PACKING_NONE: no packing, bit-for-bit transfer to RAM, one | |
| 17 | − * sample represents one pixel | |
| 18 | − * @SOC_MBUS_PACKING_2X8_PADHI: 16 bits transferred in 2 8-bit samples, in the | |
| 19 | − * possibly incomplete byte high bits are padding | |
| 20 | − * @SOC_MBUS_PACKING_2X8_PADLO: as above, but low bits are padding | |
| 21 | − * @SOC_MBUS_PACKING_EXTEND16: sample width (e.g., 10 bits) has to be extended | |
| 22 | − * to 16 bits | |
| 23 | − * @SOC_MBUS_PACKING_VARIABLE: compressed formats with variable packing | |
| 24 | − * @SOC_MBUS_PACKING_1_5X8: used for packed YUV 4:2:0 formats, where 4 | |
| 25 | − * pixels occupy 6 bytes in RAM | |
| 26 | − * @SOC_MBUS_PACKING_EXTEND32: sample width (e.g., 24 bits) has to be extended | |
| 27 | − * to 32 bits | |
| 28 | − */ | |
| 29 | −enum soc_mbus_packing { | |
| 30 | − SOC_MBUS_PACKING_NONE, | |
| 31 | − SOC_MBUS_PACKING_2X8_PADHI, | |
| 32 | − SOC_MBUS_PACKING_2X8_PADLO, | |
| 33 | − SOC_MBUS_PACKING_EXTEND16, | |
| 34 | − SOC_MBUS_PACKING_VARIABLE, | |
| 35 | − SOC_MBUS_PACKING_1_5X8, | |
| 36 | − SOC_MBUS_PACKING_EXTEND32, | |
| 37 | −}; | |
| 38 | − | |
| 39 | −/** | |
| 40 | − * enum soc_mbus_order - sample order on the media bus | |
| 41 | − * @SOC_MBUS_ORDER_LE: least significant sample first | |
| 42 | − * @SOC_MBUS_ORDER_BE: most significant sample first | |
| 43 | − */ | |
| 44 | −enum soc_mbus_order { | |
| 45 | − SOC_MBUS_ORDER_LE, | |
| 46 | − SOC_MBUS_ORDER_BE, | |
| 47 | −}; | |
| 48 | − | |
| 49 | −/** | |
| 50 | − * enum soc_mbus_layout - planes layout in memory | |
| 51 | − * @SOC_MBUS_LAYOUT_PACKED: color components packed | |
| 52 | − * @SOC_MBUS_LAYOUT_PLANAR_2Y_U_V: YUV components stored in 3 planes (4:2:2) | |
| 53 | − * @SOC_MBUS_LAYOUT_PLANAR_2Y_C: YUV components stored in a luma and a | |
| 54 | − * chroma plane (C plane is half the size | |
| 55 | − * of Y plane) | |
| 56 | − * @SOC_MBUS_LAYOUT_PLANAR_Y_C: YUV components stored in a luma and a | |
| 57 | − * chroma plane (C plane is the same size | |
| 58 | − * as Y plane) | |
| 59 | − */ | |
| 60 | −enum soc_mbus_layout { | |
| 61 | − SOC_MBUS_LAYOUT_PACKED = 0, | |
| 62 | − SOC_MBUS_LAYOUT_PLANAR_2Y_U_V, | |
| 63 | − SOC_MBUS_LAYOUT_PLANAR_2Y_C, | |
| 64 | − SOC_MBUS_LAYOUT_PLANAR_Y_C, | |
| 65 | −}; | |
| 66 | − | |
| 67 | −/** | |
| 68 | − * struct soc_mbus_pixelfmt - Data format on the media bus | |
| 69 | − * @fourcc: Fourcc code, that will be obtained if the data is | |
| 70 | − * stored in memory in the following way: | |
| 71 | − * @packing: Type of sample-packing, that has to be used | |
| 72 | − * @order: Sample order when storing in memory | |
| 73 | − * @bits_per_sample: How many bits the bridge has to sample | |
| 74 | − */ | |
| 75 | −struct soc_mbus_pixelfmt { | |
| 76 | − u32 fourcc; | |
| 77 | − enum soc_mbus_packing packing; | |
| 78 | − enum soc_mbus_order order; | |
| 79 | − enum soc_mbus_layout layout; | |
| 80 | − u8 bits_per_sample; | |
| 81 | −}; | |
| 82 | − | |
| 83 | −/** | |
| 84 | − * struct soc_mbus_lookup - Lookup FOURCC IDs by mediabus codes for pass-through | |
| 85 | − * @code: mediabus pixel-code | |
| 86 | − * @fmt: pixel format description | |
| 87 | − */ | |
| 88 | −struct soc_mbus_lookup { | |
| 89 | − u32 code; | |
| 90 | − struct soc_mbus_pixelfmt fmt; | |
| 91 | −}; | |
| 92 | − | |
| 93 | −const struct soc_mbus_pixelfmt *soc_mbus_find_fmtdesc( | |
| 94 | − u32 code, | |
| 95 | − const struct soc_mbus_lookup *lookup, | |
| 96 | − int n); | |
| 97 | −const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc( | |
| 98 | − u32 code); | |
| 99 | −s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf); | |
| 100 | −s32 soc_mbus_image_size(const struct soc_mbus_pixelfmt *mf, | |
| 101 | − u32 bytes_per_line, u32 height); | |
| 102 | −int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf, | |
| 103 | − unsigned int *numerator, unsigned int *denominator); | |
| 104 | −unsigned int soc_mbus_config_compatible(const struct v4l2_mbus_config *cfg, | |
| 105 | − unsigned int flags); | |
| 106 | − | |
| 107 | −#endif | |
| @@ -293,8 +293,8 @@ static inline void dvb_register_media_controller(struct dvb_adapter *adap, · 292 unmodified lines | ||
| 293 | 293 | * |
| 294 | 294 | * @adap: pointer to &struct dvb_adapter |
| 295 | 295 | */ |
| 296 | −static inline struct media_device | |
| 297 | −*dvb_get_media_controller(struct dvb_adapter *adap) | |
| 296 | +static inline struct media_device * | |
| 297 | +dvb_get_media_controller(struct dvb_adapter *adap) | |
| 298 | 298 | { |
| 299 | 299 | return adap->mdev; |
| 300 | 300 | } |
| @@ -385,7 +385,7 @@ struct i2c_client; · 84 unmodified lines | ||
| 385 | 385 | * with dvb_module_probe() should use dvb_module_release() to unbind. |
| 386 | 386 | * |
| 387 | 387 | * Return: |
| 388 | − * On success, return an &struct i2c_client, pointing the the bound | |
| 388 | + * On success, return an &struct i2c_client, pointing to the bound | |
| 389 | 389 | * I2C device. %NULL otherwise. |
| 390 | 390 | * |
| 391 | 391 | * .. note:: |
| @@ -128,7 +128,7 @@ struct media_device_ops { · 127 unmodified lines | ||
| 128 | 128 | * |
| 129 | 129 | * Use-case: find tuner entity connected to the decoder |
| 130 | 130 | * entity and check if it is available, and activate the |
| 131 | − * the link between them from @enable_source and deactivate | |
| 131 | + * link between them from @enable_source and deactivate | |
| 132 | 132 | * from @disable_source. |
| 133 | 133 | * |
| 134 | 134 | * .. note:: |
| @@ -39,7 +39,7 @@ struct media_device; · 38 unmodified lines | ||
| 39 | 39 | * @poll: pointer to the function that implements poll() syscall |
| 40 | 40 | * @ioctl: pointer to the function that implements ioctl() syscall |
| 41 | 41 | * @compat_ioctl: pointer to the function that will handle 32 bits userspace |
| 42 | − * calls to the the ioctl() syscall on a Kernel compiled with 64 bits. | |
| 42 | + * calls to the ioctl() syscall on a Kernel compiled with 64 bits. | |
| 43 | 43 | * @open: pointer to the function that implements open() syscall |
| 44 | 44 | * @release: pointer to the function that will release the resources allocated |
| 45 | 45 | * by the @open function. |
| @@ -803,7 +803,7 @@ int __media_entity_setup_link(struct media_link *link, u32 flags); · 802 unmodified lines | ||
| 803 | 803 | * @flags: the requested new link flags |
| 804 | 804 | * |
| 805 | 805 | * The only configurable property is the %MEDIA_LNK_FL_ENABLED link flag |
| 806 | − * flag to enable/disable a link. Links marked with the | |
| 806 | + * to enable/disable a link. Links marked with the | |
| 807 | 807 | * %MEDIA_LNK_FL_IMMUTABLE link flag can not be enabled or disabled. |
| 808 | 808 | * |
| 809 | 809 | * When a link is enabled or disabled, the media framework calls the |
| @@ -1,397 +0,0 @@ | ||
| 1 | −/* SPDX-License-Identifier: GPL-2.0-only */ | |
| 2 | −/* | |
| 3 | − * camera image capture (abstract) bus driver header | |
| 4 | − * | |
| 5 | − * Copyright (C) 2006, Sascha Hauer, Pengutronix | |
| 6 | − * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de> | |
| 7 | − */ | |
| 8 | − | |
| 9 | −#ifndef SOC_CAMERA_H | |
| 10 | −#define SOC_CAMERA_H | |
| 11 | − | |
| 12 | −#include <linux/bitops.h> | |
| 13 | −#include <linux/device.h> | |
| 14 | −#include <linux/mutex.h> | |
| 15 | −#include <linux/pm.h> | |
| 16 | −#include <linux/videodev2.h> | |
| 17 | −#include <media/videobuf2-v4l2.h> | |
| 18 | −#include <media/v4l2-async.h> | |
| 19 | −#include <media/v4l2-ctrls.h> | |
| 20 | −#include <media/v4l2-device.h> | |
| 21 | − | |
| 22 | −struct file; | |
| 23 | −struct soc_camera_desc; | |
| 24 | −struct soc_camera_async_client; | |
| 25 | − | |
| 26 | −struct soc_camera_device { | |
| 27 | − struct list_head list; /* list of all registered devices */ | |
| 28 | − struct soc_camera_desc *sdesc; | |
| 29 | − struct device *pdev; /* Platform device */ | |
| 30 | − struct device *parent; /* Camera host device */ | |
| 31 | − struct device *control; /* E.g., the i2c client */ | |
| 32 | − s32 user_width; | |
| 33 | − s32 user_height; | |
| 34 | − u32 bytesperline; /* for padding, zero if unused */ | |
| 35 | − u32 sizeimage; | |
| 36 | − enum v4l2_colorspace colorspace; | |
| 37 | − unsigned char iface; /* Host number */ | |
| 38 | − unsigned char devnum; /* Device number per host */ | |
| 39 | − struct soc_camera_sense *sense; /* See comment in struct definition */ | |
| 40 | − struct video_device *vdev; | |
| 41 | − struct v4l2_ctrl_handler ctrl_handler; | |
| 42 | − const struct soc_camera_format_xlate *current_fmt; | |
| 43 | − struct soc_camera_format_xlate *user_formats; | |
| 44 | − int num_user_formats; | |
| 45 | − enum v4l2_field field; /* Preserve field over close() */ | |
| 46 | − void *host_priv; /* Per-device host private data */ | |
| 47 | − /* soc_camera.c private count. Only accessed with .host_lock held */ | |
| 48 | − int use_count; | |
| 49 | − struct file *streamer; /* stream owner */ | |
| 50 | − struct v4l2_clk *clk; | |
| 51 | − /* Asynchronous subdevice management */ | |
| 52 | − struct soc_camera_async_client *sasc; | |
| 53 | − /* video buffer queue */ | |
| 54 | − struct vb2_queue vb2_vidq; | |
| 55 | −}; | |
| 56 | − | |
| 57 | −/* Host supports programmable stride */ | |
| 58 | −#define SOCAM_HOST_CAP_STRIDE (1 << 0) | |
| 59 | − | |
| 60 | −enum soc_camera_subdev_role { | |
| 61 | − SOCAM_SUBDEV_DATA_SOURCE = 1, | |
| 62 | − SOCAM_SUBDEV_DATA_SINK, | |
| 63 | − SOCAM_SUBDEV_DATA_PROCESSOR, | |
| 64 | −}; | |
| 65 | − | |
| 66 | −struct soc_camera_async_subdev { | |
| 67 | − struct v4l2_async_subdev asd; | |
| 68 | − enum soc_camera_subdev_role role; | |
| 69 | −}; | |
| 70 | − | |
| 71 | −struct soc_camera_host { | |
| 72 | − struct v4l2_device v4l2_dev; | |
| 73 | − struct list_head list; | |
| 74 | − struct mutex host_lock; /* Main synchronisation lock */ | |
| 75 | − struct mutex clk_lock; /* Protect pipeline modifications */ | |
| 76 | − unsigned char nr; /* Host number */ | |
| 77 | − u32 capabilities; | |
| 78 | − struct soc_camera_device *icd; /* Currently attached client */ | |
| 79 | − void *priv; | |
| 80 | − const char *drv_name; | |
| 81 | − struct soc_camera_host_ops *ops; | |
| 82 | − struct v4l2_async_subdev **asd; /* Flat array, arranged in groups */ | |
| 83 | − unsigned int *asd_sizes; /* 0-terminated array of asd group sizes */ | |
| 84 | −}; | |
| 85 | − | |
| 86 | −struct soc_camera_host_ops { | |
| 87 | − struct module *owner; | |
| 88 | − int (*add)(struct soc_camera_device *); | |
| 89 | − void (*remove)(struct soc_camera_device *); | |
| 90 | − int (*clock_start)(struct soc_camera_host *); | |
| 91 | − void (*clock_stop)(struct soc_camera_host *); | |
| 92 | − /* | |
| 93 | − * .get_formats() is called for each client device format, but | |
| 94 | − * .put_formats() is only called once. Further, if any of the calls to | |
| 95 | − * .get_formats() fail, .put_formats() will not be called at all, the | |
| 96 | − * failing .get_formats() must then clean up internally. | |
| 97 | − */ | |
| 98 | − int (*get_formats)(struct soc_camera_device *, unsigned int, | |
| 99 | − struct soc_camera_format_xlate *); | |
| 100 | − void (*put_formats)(struct soc_camera_device *); | |
| 101 | − int (*get_selection)(struct soc_camera_device *, struct v4l2_selection *); | |
| 102 | − int (*set_selection)(struct soc_camera_device *, struct v4l2_selection *); | |
| 103 | − /* | |
| 104 | − * The difference to .set_selection() is, that .set_liveselection is not allowed | |
| 105 | − * to change the output sizes | |
| 106 | − */ | |
| 107 | − int (*set_liveselection)(struct soc_camera_device *, struct v4l2_selection *); | |
| 108 | − int (*set_fmt)(struct soc_camera_device *, struct v4l2_format *); | |
| 109 | − int (*try_fmt)(struct soc_camera_device *, struct v4l2_format *); | |
| 110 | − int (*init_videobuf2)(struct vb2_queue *, | |
| 111 | − struct soc_camera_device *); | |
| 112 | − int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); | |
| 113 | − int (*set_bus_param)(struct soc_camera_device *); | |
| 114 | − int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | |
| 115 | − int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); | |
| 116 | − int (*enum_framesizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); | |
| 117 | − __poll_t (*poll)(struct file *, poll_table *); | |
| 118 | −}; | |
| 119 | − | |
| 120 | −#define SOCAM_SENSOR_INVERT_PCLK (1 << 0) | |
| 121 | −#define SOCAM_SENSOR_INVERT_MCLK (1 << 1) | |
| 122 | −#define SOCAM_SENSOR_INVERT_HSYNC (1 << 2) | |
| 123 | −#define SOCAM_SENSOR_INVERT_VSYNC (1 << 3) | |
| 124 | −#define SOCAM_SENSOR_INVERT_DATA (1 << 4) | |
| 125 | − | |
| 126 | −struct i2c_board_info; | |
| 127 | −struct regulator_bulk_data; | |
| 128 | − | |
| 129 | −struct soc_camera_subdev_desc { | |
| 130 | − /* Per camera SOCAM_SENSOR_* bus flags */ | |
| 131 | − unsigned long flags; | |
| 132 | − | |
| 133 | − /* sensor driver private platform data */ | |
| 134 | − void *drv_priv; | |
| 135 | − | |
| 136 | − /* | |
| 137 | − * Set unbalanced_power to true to deal with legacy drivers, failing to | |
| 138 | − * balance their calls to subdevice's .s_power() method. clock_state is | |
| 139 | − * then used internally by helper functions, it shouldn't be touched by | |
| 140 | − * drivers or the platform code. | |
| 141 | − */ | |
| 142 | − bool unbalanced_power; | |
| 143 | − unsigned long clock_state; | |
| 144 | − | |
| 145 | − /* Optional callbacks to power on or off and reset the sensor */ | |
| 146 | − int (*power)(struct device *, int); | |
| 147 | − int (*reset)(struct device *); | |
| 148 | − | |
| 149 | − /* | |
| 150 | − * some platforms may support different data widths than the sensors | |
| 151 | − * native ones due to different data line routing. Let the board code | |
| 152 | − * overwrite the width flags. | |
| 153 | − */ | |
| 154 | − int (*set_bus_param)(struct soc_camera_subdev_desc *, unsigned long flags); | |
| 155 | − unsigned long (*query_bus_param)(struct soc_camera_subdev_desc *); | |
| 156 | − void (*free_bus)(struct soc_camera_subdev_desc *); | |
| 157 | − | |
| 158 | − /* Optional regulators that have to be managed on power on/off events */ | |
| 159 | − struct v4l2_subdev_platform_data sd_pdata; | |
| 160 | −}; | |
| 161 | − | |
| 162 | −struct soc_camera_host_desc { | |
| 163 | − /* Camera bus id, used to match a camera and a bus */ | |
| 164 | − int bus_id; | |
| 165 | − int i2c_adapter_id; | |
| 166 | − struct i2c_board_info *board_info; | |
| 167 | − const char *module_name; | |
| 168 | − | |
| 169 | − /* | |
| 170 | − * For non-I2C devices platform has to provide methods to add a device | |
| 171 | − * to the system and to remove it | |
| 172 | − */ | |
| 173 | − int (*add_device)(struct soc_camera_device *); | |
| 174 | − void (*del_device)(struct soc_camera_device *); | |
| 175 | −}; | |
| 176 | − | |
| 177 | −/* | |
| 178 | − * Platform data for "soc-camera-pdrv" | |
| 179 | − * This MUST be kept binary-identical to struct soc_camera_link below, until | |
| 180 | − * it is completely replaced by this one, after which we can split it into its | |
| 181 | − * two components. | |
| 182 | − */ | |
| 183 | −struct soc_camera_desc { | |
| 184 | − struct soc_camera_subdev_desc subdev_desc; | |
| 185 | − struct soc_camera_host_desc host_desc; | |
| 186 | −}; | |
| 187 | − | |
| 188 | −/* Prepare to replace this struct: don't change its layout any more! */ | |
| 189 | −struct soc_camera_link { | |
| 190 | − /* | |
| 191 | − * Subdevice part - keep at top and compatible to | |
| 192 | − * struct soc_camera_subdev_desc | |
| 193 | − */ | |
| 194 | − | |
| 195 | − /* Per camera SOCAM_SENSOR_* bus flags */ | |
| 196 | − unsigned long flags; | |
| 197 | − | |
| 198 | − void *priv; | |
| 199 | − | |
| 200 | − /* Set by platforms to handle misbehaving drivers */ | |
| 201 | − bool unbalanced_power; | |
| 202 | − /* Used by soc-camera helper functions */ | |
| 203 | − unsigned long clock_state; | |
| 204 | − | |
| 205 | − /* Optional callbacks to power on or off and reset the sensor */ | |
| 206 | − int (*power)(struct device *, int); | |
| 207 | − int (*reset)(struct device *); | |
| 208 | − /* | |
| 209 | − * some platforms may support different data widths than the sensors | |
| 210 | − * native ones due to different data line routing. Let the board code | |
| 211 | − * overwrite the width flags. | |
| 212 | − */ | |
| 213 | − int (*set_bus_param)(struct soc_camera_link *, unsigned long flags); | |
| 214 | − unsigned long (*query_bus_param)(struct soc_camera_link *); | |
| 215 | − void (*free_bus)(struct soc_camera_link *); | |
| 216 | − | |
| 217 | − /* Optional regulators that have to be managed on power on/off events */ | |
| 218 | − struct regulator_bulk_data *regulators; | |
| 219 | − int num_regulators; | |
| 220 | − | |
| 221 | − void *host_priv; | |
| 222 | − | |
| 223 | − /* | |
| 224 | − * Host part - keep at bottom and compatible to | |
| 225 | − * struct soc_camera_host_desc | |
| 226 | − */ | |
| 227 | − | |
| 228 | − /* Camera bus id, used to match a camera and a bus */ | |
| 229 | − int bus_id; | |
| 230 | − int i2c_adapter_id; | |
| 231 | − struct i2c_board_info *board_info; | |
| 232 | − const char *module_name; | |
| 233 | − | |
| 234 | − /* | |
| 235 | − * For non-I2C devices platform has to provide methods to add a device | |
| 236 | − * to the system and to remove it | |
| 237 | − */ | |
| 238 | − int (*add_device)(struct soc_camera_device *); | |
| 239 | − void (*del_device)(struct soc_camera_device *); | |
| 240 | −}; | |
| 241 | − | |
| 242 | −static inline struct soc_camera_host *to_soc_camera_host( | |
| 243 | − const struct device *dev) | |
| 244 | −{ | |
| 245 | − struct v4l2_device *v4l2_dev = dev_get_drvdata(dev); | |
| 246 | − | |
| 247 | − return container_of(v4l2_dev, struct soc_camera_host, v4l2_dev); | |
| 248 | −} | |
| 249 | − | |
| 250 | −static inline struct soc_camera_desc *to_soc_camera_desc( | |
| 251 | − const struct soc_camera_device *icd) | |
| 252 | −{ | |
| 253 | − return icd->sdesc; | |
| 254 | −} | |
| 255 | − | |
| 256 | −static inline struct device *to_soc_camera_control( | |
| 257 | − const struct soc_camera_device *icd) | |
| 258 | −{ | |
| 259 | − return icd->control; | |
| 260 | −} | |
| 261 | − | |
| 262 | −static inline struct v4l2_subdev *soc_camera_to_subdev( | |
| 263 | − const struct soc_camera_device *icd) | |
| 264 | −{ | |
| 265 | − struct device *control = to_soc_camera_control(icd); | |
| 266 | − return dev_get_drvdata(control); | |
| 267 | −} | |
| 268 | − | |
| 269 | −int soc_camera_host_register(struct soc_camera_host *ici); | |
| 270 | −void soc_camera_host_unregister(struct soc_camera_host *ici); | |
| 271 | − | |
| 272 | −const struct soc_camera_format_xlate *soc_camera_xlate_by_fourcc( | |
| 273 | − struct soc_camera_device *icd, unsigned int fourcc); | |
| 274 | − | |
| 275 | −/** | |
| 276 | − * struct soc_camera_format_xlate - match between host and sensor formats | |
| 277 | − * @code: code of a sensor provided format | |
| 278 | − * @host_fmt: host format after host translation from code | |
| 279 | − * | |
| 280 | − * Host and sensor translation structure. Used in table of host and sensor | |
| 281 | − * formats matchings in soc_camera_device. A host can override the generic list | |
| 282 | − * generation by implementing get_formats(), and use it for format checks and | |
| 283 | − * format setup. | |
| 284 | − */ | |
| 285 | −struct soc_camera_format_xlate { | |
| 286 | − u32 code; | |
| 287 | − const struct soc_mbus_pixelfmt *host_fmt; | |
| 288 | −}; | |
| 289 | − | |
| 290 | −#define SOCAM_SENSE_PCLK_CHANGED (1 << 0) | |
| 291 | − | |
| 292 | −/** | |
| 293 | − * This struct can be attached to struct soc_camera_device by the host driver | |
| 294 | − * to request sense from the camera, for example, when calling .set_fmt(). The | |
| 295 | − * host then can check which flags are set and verify respective values if any. | |
| 296 | − * For example, if SOCAM_SENSE_PCLK_CHANGED is set, it means, pixclock has | |
| 297 | − * changed during this operation. After completion the host should detach sense. | |
| 298 | − * | |
| 299 | − * @flags ored SOCAM_SENSE_* flags | |
| 300 | − * @master_clock if the host wants to be informed about pixel-clock | |
| 301 | − * change, it better set master_clock. | |
| 302 | − * @pixel_clock_max maximum pixel clock frequency supported by the host, | |
| 303 | − * camera is not allowed to exceed this. | |
| 304 | − * @pixel_clock if the camera driver changed pixel clock during this | |
| 305 | − * operation, it sets SOCAM_SENSE_PCLK_CHANGED, uses | |
| 306 | − * master_clock to calculate the new pixel-clock and | |
| 307 | − * sets this field. | |
| 308 | − */ | |
| 309 | −struct soc_camera_sense { | |
| 310 | − unsigned long flags; | |
| 311 | − unsigned long master_clock; | |
| 312 | − unsigned long pixel_clock_max; | |
| 313 | − unsigned long pixel_clock; | |
| 314 | −}; | |
| 315 | − | |
| 316 | −#define SOCAM_DATAWIDTH(x) BIT((x) - 1) | |
| 317 | −#define SOCAM_DATAWIDTH_4 SOCAM_DATAWIDTH(4) | |
| 318 | −#define SOCAM_DATAWIDTH_8 SOCAM_DATAWIDTH(8) | |
| 319 | −#define SOCAM_DATAWIDTH_9 SOCAM_DATAWIDTH(9) | |
| 320 | −#define SOCAM_DATAWIDTH_10 SOCAM_DATAWIDTH(10) | |
| 321 | −#define SOCAM_DATAWIDTH_12 SOCAM_DATAWIDTH(12) | |
| 322 | −#define SOCAM_DATAWIDTH_15 SOCAM_DATAWIDTH(15) | |
| 323 | −#define SOCAM_DATAWIDTH_16 SOCAM_DATAWIDTH(16) | |
| 324 | −#define SOCAM_DATAWIDTH_18 SOCAM_DATAWIDTH(18) | |
| 325 | −#define SOCAM_DATAWIDTH_24 SOCAM_DATAWIDTH(24) | |
| 326 | − | |
| 327 | −#define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_4 | SOCAM_DATAWIDTH_8 | \ | |
| 328 | − SOCAM_DATAWIDTH_9 | SOCAM_DATAWIDTH_10 | \ | |
| 329 | − SOCAM_DATAWIDTH_12 | SOCAM_DATAWIDTH_15 | \ | |
| 330 | − SOCAM_DATAWIDTH_16 | SOCAM_DATAWIDTH_18 | \ | |
| 331 | − SOCAM_DATAWIDTH_24) | |
| 332 | − | |
| 333 | −static inline void soc_camera_limit_side(int *start, int *length, | |
| 334 | − unsigned int start_min, | |
| 335 | − unsigned int length_min, unsigned int length_max) | |
| 336 | −{ | |
| 337 | − if (*length < length_min) | |
| 338 | − *length = length_min; | |
| 339 | − else if (*length > length_max) | |
| 340 | − *length = length_max; | |
| 341 | − | |
| 342 | − if (*start < start_min) | |
| 343 | − *start = start_min; | |
| 344 | − else if (*start > start_min + length_max - *length) | |
| 345 | − *start = start_min + length_max - *length; | |
| 346 | −} | |
| 347 | − | |
| 348 | −unsigned long soc_camera_apply_board_flags(struct soc_camera_subdev_desc *ssdd, | |
| 349 | − const struct v4l2_mbus_config *cfg); | |
| 350 | − | |
| 351 | −int soc_camera_power_init(struct device *dev, struct soc_camera_subdev_desc *ssdd); | |
| 352 | −int soc_camera_power_on(struct device *dev, struct soc_camera_subdev_desc *ssdd, | |
| 353 | − struct v4l2_clk *clk); | |
| 354 | −int soc_camera_power_off(struct device *dev, struct soc_camera_subdev_desc *ssdd, | |
| 355 | − struct v4l2_clk *clk); | |
| 356 | − | |
| 357 | −static inline int soc_camera_set_power(struct device *dev, | |
| 358 | − struct soc_camera_subdev_desc *ssdd, struct v4l2_clk *clk, bool on) | |
| 359 | −{ | |
| 360 | − return on ? soc_camera_power_on(dev, ssdd, clk) | |
| 361 | − : soc_camera_power_off(dev, ssdd, clk); | |
| 362 | −} | |
| 363 | − | |
| 364 | −/* This is only temporary here - until v4l2-subdev begins to link to video_device */ | |
| 365 | −#include <linux/i2c.h> | |
| 366 | −static inline struct video_device *soc_camera_i2c_to_vdev(const struct i2c_client *client) | |
| 367 | −{ | |
| 368 | − struct v4l2_subdev *sd = i2c_get_clientdata(client); | |
| 369 | − struct soc_camera_device *icd = v4l2_get_subdev_hostdata(sd); | |
| 370 | − return icd ? icd->vdev : NULL; | |
| 371 | −} | |
| 372 | − | |
| 373 | −static inline struct soc_camera_subdev_desc *soc_camera_i2c_to_desc(const struct i2c_client *client) | |
| 374 | −{ | |
| 375 | − return client->dev.platform_data; | |
| 376 | −} | |
| 377 | − | |
| 378 | −static inline struct v4l2_subdev *soc_camera_vdev_to_subdev(struct video_device *vdev) | |
| 379 | −{ | |
| 380 | − struct soc_camera_device *icd = video_get_drvdata(vdev); | |
| 381 | − return soc_camera_to_subdev(icd); | |
| 382 | −} | |
| 383 | − | |
| 384 | −static inline struct soc_camera_device *soc_camera_from_vb2q(const struct vb2_queue *vq) | |
| 385 | −{ | |
| 386 | − return container_of(vq, struct soc_camera_device, vb2_vidq); | |
| 387 | −} | |
| 388 | − | |
| 389 | −static inline u32 soc_camera_grp_id(const struct soc_camera_device *icd) | |
| 390 | −{ | |
| 391 | − return (icd->iface << 8) | (icd->devnum + 1); | |
| 392 | −} | |
| 393 | − | |
| 394 | −void soc_camera_lock(struct vb2_queue *vq); | |
| 395 | −void soc_camera_unlock(struct vb2_queue *vq); | |
| 396 | − | |
| 397 | −#endif | |
| @@ -241,7 +241,7 @@ void tpg_log_status(struct tpg_data *tpg); · 240 unmodified lines | ||
| 241 | 241 | |
| 242 | 242 | void tpg_set_font(const u8 *f); |
| 243 | 243 | void tpg_gen_text(const struct tpg_data *tpg, |
| 244 | − u8 *basep[TPG_MAX_PLANES][2], int y, int x, char *text); | |
| 244 | + u8 *basep[TPG_MAX_PLANES][2], int y, int x, const char *text); | |
| 245 | 245 | void tpg_calc_text_basep(struct tpg_data *tpg, |
| 246 | 246 | u8 *basep[TPG_MAX_PLANES][2], unsigned p, u8 *vbuf); |
| 247 | 247 | unsigned tpg_g_interleaved_plane(const struct tpg_data *tpg, unsigned buf_line); |
| @@ -252,6 +252,7 @@ void tpg_fillbuffer(struct tpg_data *tpg, v4l2_std_id std, · 4 unmodified lines | ||
| 252 | 252 | bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc); |
| 253 | 253 | void tpg_s_crop_compose(struct tpg_data *tpg, const struct v4l2_rect *crop, |
| 254 | 254 | const struct v4l2_rect *compose); |
| 255 | +const char *tpg_g_color_order(const struct tpg_data *tpg); | |
| 255 | 256 | |
| 256 | 257 | static inline void tpg_s_pattern(struct tpg_data *tpg, enum tpg_pattern pattern) |
| 257 | 258 | { |
| @@ -89,8 +89,8 @@ int v4l_vb2q_enable_media_source(struct vb2_queue *q); · 88 unmodified lines | ||
| 89 | 89 | * v4l2_create_fwnode_links_to_pad - Create fwnode-based links from a |
| 90 | 90 | * source subdev to a sink subdev pad. |
| 91 | 91 | * |
| 92 | − * @src_sd - pointer to a source subdev | |
| 93 | − * @sink - pointer to a subdev sink pad | |
| 92 | + * @src_sd: pointer to a source subdev | |
| 93 | + * @sink: pointer to a subdev sink pad | |
| 94 | 94 | * |
| 95 | 95 | * This function searches for fwnode endpoint connections from a source |
| 96 | 96 | * subdevice to a single sink pad, and if suitable connections are found, |
| @@ -113,8 +113,8 @@ int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd, · 16 unmodified lines | ||
| 113 | 113 | * v4l2_create_fwnode_links - Create fwnode-based links from a source |
| 114 | 114 | * subdev to a sink subdev. |
| 115 | 115 | * |
| 116 | − * @src_sd - pointer to a source subdevice | |
| 117 | − * @sink_sd - pointer to a sink subdevice | |
| 116 | + * @src_sd: pointer to a source subdevice | |
| 117 | + * @sink_sd: pointer to a sink subdevice | |
| 118 | 118 | * |
| 119 | 119 | * This function searches for any and all fwnode endpoint connections |
| 120 | 120 | * between source and sink subdevices, and translates them into media |
| @@ -184,4 +184,24 @@ static inline bool v4l2_rect_overlap(const struct v4l2_rect *r1, · 183 unmodified lines | ||
| 184 | 184 | return true; |
| 185 | 185 | } |
| 186 | 186 | |
| 187 | +/** | |
| 188 | + * v4l2_rect_enclosed() - is r1 enclosed in r2? | |
| 189 | + * @r1: rectangle. | |
| 190 | + * @r2: rectangle. | |
| 191 | + * | |
| 192 | + * Returns true if @r1 is enclosed in @r2. | |
| 193 | + */ | |
| 194 | +static inline bool v4l2_rect_enclosed(struct v4l2_rect *r1, | |
| 195 | + struct v4l2_rect *r2) | |
| 196 | +{ | |
| 197 | + if (r1->left < r2->left || r1->top < r2->top) | |
| 198 | + return false; | |
| 199 | + if (r1->left + r1->width > r2->left + r2->width) | |
| 200 | + return false; | |
| 201 | + if (r1->top + r1->height > r2->top + r2->height) | |
| 202 | + return false; | |
| 203 | + | |
| 204 | + return true; | |
| 205 | +} | |
| 206 | + | |
| 187 | 207 | #endif |
| @@ -566,9 +566,9 @@ struct v4l2_subdev_ir_parameters { · 565 unmodified lines | ||
| 566 | 566 | * |
| 567 | 567 | * @rx_read: Reads received codes or pulse width data. |
| 568 | 568 | * The semantics are similar to a non-blocking read() call. |
| 569 | − * @rx_g_parameters: Get the current operating parameters and state of the | |
| 569 | + * @rx_g_parameters: Get the current operating parameters and state of | |
| 570 | 570 | * the IR receiver. |
| 571 | − * @rx_s_parameters: Set the current operating parameters and state of the | |
| 571 | + * @rx_s_parameters: Set the current operating parameters and state of | |
| 572 | 572 | * the IR receiver. It is recommended to call |
| 573 | 573 | * [rt]x_g_parameters first to fill out the current state, and only change |
| 574 | 574 | * the fields that need to be changed. Upon return, the actual device |
| @@ -582,9 +582,9 @@ struct v4l2_subdev_ir_parameters { · 7 unmodified lines | ||
| 582 | 582 | * |
| 583 | 583 | * @tx_write: Writes codes or pulse width data for transmission. |
| 584 | 584 | * The semantics are similar to a non-blocking write() call. |
| 585 | − * @tx_g_parameters: Get the current operating parameters and state of the | |
| 585 | + * @tx_g_parameters: Get the current operating parameters and state of | |
| 586 | 586 | * the IR transmitter. |
| 587 | − * @tx_s_parameters: Set the current operating parameters and state of the | |
| 587 | + * @tx_s_parameters: Set the current operating parameters and state of | |
| 588 | 588 | * the IR transmitter. It is recommended to call |
| 589 | 589 | * [rt]x_g_parameters first to fill out the current state, and only change |
| 590 | 590 | * the fields that need to be changed. Upon return, the actual device |
| @@ -930,10 +930,10 @@ struct v4l2_subdev_fh { · 339 unmodified lines | ||
| 930 | 930 | * @cfg: pointer to &struct v4l2_subdev_pad_config array. |
| 931 | 931 | * @pad: index of the pad in the @cfg array. |
| 932 | 932 | */ |
| 933 | −static inline struct v4l2_mbus_framefmt | |
| 934 | −*v4l2_subdev_get_try_format(struct v4l2_subdev *sd, | |
| 935 | − struct v4l2_subdev_pad_config *cfg, | |
| 936 | − unsigned int pad) | |
| 933 | +static inline struct v4l2_mbus_framefmt * | |
| 934 | +v4l2_subdev_get_try_format(struct v4l2_subdev *sd, | |
| 935 | + struct v4l2_subdev_pad_config *cfg, | |
| 936 | + unsigned int pad) | |
| 937 | 937 | { |
| 938 | 938 | if (WARN_ON(pad >= sd->entity.num_pads)) |
| 939 | 939 | pad = 0; |
| @@ -948,10 +948,10 @@ static inline struct v4l2_mbus_framefmt · 8 unmodified lines | ||
| 948 | 948 | * @cfg: pointer to &struct v4l2_subdev_pad_config array. |
| 949 | 949 | * @pad: index of the pad in the @cfg array. |
| 950 | 950 | */ |
| 951 | −static inline struct v4l2_rect | |
| 952 | −*v4l2_subdev_get_try_crop(struct v4l2_subdev *sd, | |
| 953 | − struct v4l2_subdev_pad_config *cfg, | |
| 954 | − unsigned int pad) | |
| 951 | +static inline struct v4l2_rect * | |
| 952 | +v4l2_subdev_get_try_crop(struct v4l2_subdev *sd, | |
| 953 | + struct v4l2_subdev_pad_config *cfg, | |
| 954 | + unsigned int pad) | |
| 955 | 955 | { |
| 956 | 956 | if (WARN_ON(pad >= sd->entity.num_pads)) |
| 957 | 957 | pad = 0; |
| @@ -959,22 +959,23 @@ static inline struct v4l2_rect · 1 unmodified line | ||
| 959 | 959 | } |
| 960 | 960 | |
| 961 | 961 | /** |
| 962 | − * v4l2_subdev_get_try_crop - ancillary routine to call | |
| 962 | + * v4l2_subdev_get_try_compose - ancillary routine to call | |
| 963 | 963 | * &struct v4l2_subdev_pad_config->try_compose |
| 964 | 964 | * |
| 965 | 965 | * @sd: pointer to &struct v4l2_subdev |
| 966 | 966 | * @cfg: pointer to &struct v4l2_subdev_pad_config array. |
| 967 | 967 | * @pad: index of the pad in the @cfg array. |
| 968 | 968 | */ |
| 969 | −static inline struct v4l2_rect | |
| 970 | −*v4l2_subdev_get_try_compose(struct v4l2_subdev *sd, | |
| 971 | − struct v4l2_subdev_pad_config *cfg, | |
| 972 | − unsigned int pad) | |
| 969 | +static inline struct v4l2_rect * | |
| 970 | +v4l2_subdev_get_try_compose(struct v4l2_subdev *sd, | |
| 971 | + struct v4l2_subdev_pad_config *cfg, | |
| 972 | + unsigned int pad) | |
| 973 | 973 | { |
| 974 | 974 | if (WARN_ON(pad >= sd->entity.num_pads)) |
| 975 | 975 | pad = 0; |
| 976 | 976 | return &cfg[pad].try_compose; |
| 977 | 977 | } |
| 978 | + | |
| 978 | 979 | #endif |
| 979 | 980 | |
| 980 | 981 | extern const struct v4l2_file_operations v4l2_subdev_fops; |
| @@ -1031,8 +1032,8 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd) · 50 unmodified lines | ||
| 1031 | 1032 | * v4l2_subdev_get_fwnode_pad_1_to_1 - Get pad number from a subdev fwnode |
| 1032 | 1033 | * endpoint, assuming 1:1 port:pad |
| 1033 | 1034 | * |
| 1034 | − * @entity - Pointer to the subdev entity | |
| 1035 | − * @endpoint - Pointer to a parsed fwnode endpoint | |
| 1035 | + * @entity: Pointer to the subdev entity | |
| 1036 | + * @endpoint: Pointer to a parsed fwnode endpoint | |
| 1036 | 1037 | * |
| 1037 | 1038 | * This function can be used as the .get_fwnode_pad operation for |
| 1038 | 1039 | * subdevices that map port numbers and pad indexes 1:1. If the endpoint |
| @@ -263,6 +263,10 @@ struct vb2_buffer { · 262 unmodified lines | ||
| 263 | 263 | * after the 'buf_finish' op is called. |
| 264 | 264 | * copied_timestamp: the timestamp of this capture buffer was copied |
| 265 | 265 | * from an output buffer. |
| 266 | + * need_cache_sync_on_prepare: when set buffer's ->prepare() function | |
| 267 | + * performs cache sync/invalidation. | |
| 268 | + * need_cache_sync_on_finish: when set buffer's ->finish() function | |
| 269 | + * performs cache sync/invalidation. | |
| 266 | 270 | * queued_entry: entry on the queued buffers list, which holds |
| 267 | 271 | * all buffers queued from userspace |
| 268 | 272 | * done_entry: entry on the list that stores all buffers ready |
| @@ -273,6 +277,8 @@ struct vb2_buffer { · 4 unmodified lines | ||
| 273 | 277 | unsigned int synced:1; |
| 274 | 278 | unsigned int prepared:1; |
| 275 | 279 | unsigned int copied_timestamp:1; |
| 280 | + unsigned int need_cache_sync_on_prepare:1; | |
| 281 | + unsigned int need_cache_sync_on_finish:1; | |
| 276 | 282 | |
| 277 | 283 | struct vb2_plane planes[VB2_MAX_PLANES]; |
| 278 | 284 | struct list_head queued_entry; |
| @@ -491,6 +497,9 @@ struct vb2_buf_ops { · 212 unmodified lines | ||
| 491 | 497 | * @uses_requests: requests are used for this queue. Set to 1 the first time |
| 492 | 498 | * a request is queued. Set to 0 when the queue is canceled. |
| 493 | 499 | * If this is 1, then you cannot queue buffers directly. |
| 500 | + * @allow_cache_hints: when set user-space can pass cache management hints in | |
| 501 | + * order to skip cache flush/invalidation on ->prepare() or/and | |
| 502 | + * ->finish(). | |
| 494 | 503 | * @lock: pointer to a mutex that protects the &struct vb2_queue. The |
| 495 | 504 | * driver can set this to a mutex to let the v4l2 core serialize |
| 496 | 505 | * the queuing ioctls. If the driver wants to handle locking |
| @@ -552,21 +561,24 @@ struct vb2_buf_ops { · 55 unmodified lines | ||
| 552 | 561 | * when a buffer with the %V4L2_BUF_FLAG_LAST is dequeued. |
| 553 | 562 | * @fileio: file io emulator internal data, used only if emulator is active |
| 554 | 563 | * @threadio: thread io internal data, used only if thread is active |
| 564 | + * @name: queue name, used for logging purpose. Initialized automatically | |
| 565 | + * if left empty by drivers. | |
| 555 | 566 | */ |
| 556 | 567 | struct vb2_queue { |
| 557 | 568 | unsigned int type; |
| 558 | 569 | unsigned int io_modes; |
| 559 | 570 | struct device *dev; |
| 560 | 571 | unsigned long dma_attrs; |
| 561 | − unsigned bidirectional:1; | |
| 562 | − unsigned fileio_read_once:1; | |
| 563 | − unsigned fileio_write_immediately:1; | |
| 564 | − unsigned allow_zero_bytesused:1; | |
| 565 | − unsigned quirk_poll_must_check_waiting_for_buffers:1; | |
| 566 | − unsigned supports_requests:1; | |
| 567 | − unsigned requires_requests:1; | |
| 568 | − unsigned uses_qbuf:1; | |
| 569 | − unsigned uses_requests:1; | |
| 572 | + unsigned int bidirectional:1; | |
| 573 | + unsigned int fileio_read_once:1; | |
| 574 | + unsigned int fileio_write_immediately:1; | |
| 575 | + unsigned int allow_zero_bytesused:1; | |
| 576 | + unsigned int quirk_poll_must_check_waiting_for_buffers:1; | |
| 577 | + unsigned int supports_requests:1; | |
| 578 | + unsigned int requires_requests:1; | |
| 579 | + unsigned int uses_qbuf:1; | |
| 580 | + unsigned int uses_requests:1; | |
| 581 | + unsigned int allow_cache_hints:1; | |
| 570 | 582 | |
| 571 | 583 | struct mutex *lock; |
| 572 | 584 | void *owner; |
| @@ -612,6 +624,8 @@ struct vb2_queue { · 39 unmodified lines | ||
| 612 | 624 | struct vb2_fileio_data *fileio; |
| 613 | 625 | struct vb2_threadio_data *threadio; |
| 614 | 626 | |
| 627 | + char name[32]; | |
| 628 | + | |
| 615 | 629 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| 616 | 630 | /* |
| 617 | 631 | * Counters for how often these queue-related ops are |
| @@ -625,6 +639,17 @@ struct vb2_queue { · 7 unmodified lines | ||
| 625 | 639 | #endif |
| 626 | 640 | }; |
| 627 | 641 | |
| 642 | +/** | |
| 643 | + * vb2_queue_allows_cache_hints() - Return true if the queue allows cache | |
| 644 | + * and memory consistency hints. | |
| 645 | + * | |
| 646 | + * @q: pointer to &struct vb2_queue with videobuf2 queue | |
| 647 | + */ | |
| 648 | +static inline bool vb2_queue_allows_cache_hints(struct vb2_queue *q) | |
| 649 | +{ | |
| 650 | + return q->allow_cache_hints && q->memory == VB2_MEMORY_MMAP; | |
| 651 | +} | |
| 652 | + | |
| 628 | 653 | /** |
| 629 | 654 | * vb2_plane_vaddr() - Return a kernel virtual address of a given plane. |
| 630 | 655 | * @vb: pointer to &struct vb2_buffer to which the plane in |
| @@ -719,6 +744,8 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb); · 88 unmodified lines | ||
| 719 | 744 | * vb2_core_reqbufs() - Initiate streaming. |
| 720 | 745 | * @q: pointer to &struct vb2_queue with videobuf2 queue. |
| 721 | 746 | * @memory: memory type, as defined by &enum vb2_memory. |
| 747 | + * @flags: auxiliary queue/buffer management flags. Currently, the only | |
| 748 | + * used flag is %V4L2_FLAG_MEMORY_NON_CONSISTENT. | |
| 722 | 749 | * @count: requested buffer count. |
| 723 | 750 | * |
| 724 | 751 | * Videobuf2 core helper to implement VIDIOC_REQBUF() operation. It is called |
| @@ -743,12 +770,13 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb); · 18 unmodified lines | ||
| 743 | 770 | * Return: returns zero on success; an error code otherwise. |
| 744 | 771 | */ |
| 745 | 772 | int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, |
| 746 | − unsigned int *count); | |
| 773 | + unsigned int flags, unsigned int *count); | |
| 747 | 774 | |
| 748 | 775 | /** |
| 749 | 776 | * vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs |
| 750 | 777 | * @q: pointer to &struct vb2_queue with videobuf2 queue. |
| 751 | 778 | * @memory: memory type, as defined by &enum vb2_memory. |
| 779 | + * @flags: auxiliary queue/buffer management flags. | |
| 752 | 780 | * @count: requested buffer count. |
| 753 | 781 | * @requested_planes: number of planes requested. |
| 754 | 782 | * @requested_sizes: array with the size of the planes. |
| @@ -766,7 +794,8 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, · 11 unmodified lines | ||
| 766 | 794 | * Return: returns zero on success; an error code otherwise. |
| 767 | 795 | */ |
| 768 | 796 | int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory, |
| 769 | − unsigned int *count, unsigned int requested_planes, | |
| 797 | + unsigned int flags, unsigned int *count, | |
| 798 | + unsigned int requested_planes, | |
| 770 | 799 | const unsigned int requested_sizes[]); |
| 771 | 800 | |
| 772 | 801 | /** |
| @@ -236,6 +236,19 @@ int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); · 235 unmodified lines | ||
| 236 | 236 | */ |
| 237 | 237 | int __must_check vb2_queue_init(struct vb2_queue *q); |
| 238 | 238 | |
| 239 | +/** | |
| 240 | + * vb2_queue_init_name() - initialize a videobuf2 queue with a name | |
| 241 | + * @q: pointer to &struct vb2_queue with videobuf2 queue. | |
| 242 | + * @name: the queue name | |
| 243 | + * | |
| 244 | + * This function initializes the vb2_queue exactly like vb2_queue_init(), | |
| 245 | + * and additionally sets the queue name. The queue name is used for logging | |
| 246 | + * purpose, and should uniquely identify the queue within the context of the | |
| 247 | + * device it belongs to. This is useful to attribute kernel log messages to the | |
| 248 | + * right queue for m2m devices or other devices that handle multiple queues. | |
| 249 | + */ | |
| 250 | +int __must_check vb2_queue_init_name(struct vb2_queue *q, const char *name); | |
| 251 | + | |
| 239 | 252 | /** |
| 240 | 253 | * vb2_queue_release() - stop streaming, release the queue and free memory |
| 241 | 254 | * @q: pointer to &struct vb2_queue with videobuf2 queue. |
| @@ -171,6 +171,8 @@ enum v4l2_buf_type { · 170 unmodified lines | ||
| 171 | 171 | || (type) == V4L2_BUF_TYPE_SDR_OUTPUT \ |
| 172 | 172 | || (type) == V4L2_BUF_TYPE_META_OUTPUT) |
| 173 | 173 | |
| 174 | +#define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type)) | |
| 175 | + | |
| 174 | 176 | enum v4l2_tuner_type { |
| 175 | 177 | V4L2_TUNER_RADIO = 1, |
| 176 | 178 | V4L2_TUNER_ANALOG_TV = 2, |
| @@ -189,6 +191,8 @@ enum v4l2_memory { · 12 unmodified lines | ||
| 189 | 191 | V4L2_MEMORY_DMABUF = 4, |
| 190 | 192 | }; |
| 191 | 193 | |
| 194 | +#define V4L2_FLAG_MEMORY_NON_CONSISTENT (1 << 0) | |
| 195 | + | |
| 192 | 196 | /* see also http://vektor.theorem.ca/graphics/ycbcr/ */ |
| 193 | 197 | enum v4l2_colorspace { |
| 194 | 198 | /* |
| @@ -792,6 +796,7 @@ struct v4l2_fmtdesc { · 597 unmodified lines | ||
| 792 | 796 | #define V4L2_FMT_FLAG_EMULATED 0x0002 |
| 793 | 797 | #define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM 0x0004 |
| 794 | 798 | #define V4L2_FMT_FLAG_DYN_RESOLUTION 0x0008 |
| 799 | +#define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL 0x0010 | |
| 795 | 800 | |
| 796 | 801 | /* Frame Size and frame rate enumeration */ |
| 797 | 802 | /* |
| @@ -944,7 +949,10 @@ struct v4l2_requestbuffers { · 146 unmodified lines | ||
| 944 | 949 | __u32 type; /* enum v4l2_buf_type */ |
| 945 | 950 | __u32 memory; /* enum v4l2_memory */ |
| 946 | 951 | __u32 capabilities; |
| 947 | − __u32 reserved[1]; | |
| 952 | + union { | |
| 953 | + __u32 flags; | |
| 954 | + __u32 reserved[1]; | |
| 955 | + }; | |
| 948 | 956 | }; |
| 949 | 957 | |
| 950 | 958 | /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */ |
| @@ -954,6 +962,7 @@ struct v4l2_requestbuffers { · 3 unmodified lines | ||
| 954 | 962 | #define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3) |
| 955 | 963 | #define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4) |
| 956 | 964 | #define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5) |
| 965 | +#define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS (1 << 6) | |
| 957 | 966 | |
| 958 | 967 | /** |
| 959 | 968 | * struct v4l2_plane - plane info for multi-planar buffers |
| @@ -2447,6 +2456,9 @@ struct v4l2_dbg_chip_info { · 1487 unmodified lines | ||
| 2447 | 2456 | * @memory: enum v4l2_memory; buffer memory type |
| 2448 | 2457 | * @format: frame format, for which buffers are requested |
| 2449 | 2458 | * @capabilities: capabilities of this buffer type. |
| 2459 | + * @flags: additional buffer management attributes (ignored unless the | |
| 2460 | + * queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability | |
| 2461 | + * and configured for MMAP streaming I/O). | |
| 2450 | 2462 | * @reserved: future extensions |
| 2451 | 2463 | */ |
| 2452 | 2464 | struct v4l2_create_buffers { |
| @@ -2455,7 +2467,8 @@ struct v4l2_create_buffers { · 2 unmodified lines | ||
| 2455 | 2467 | __u32 memory; |
| 2456 | 2468 | struct v4l2_format format; |
| 2457 | 2469 | __u32 capabilities; |
| 2458 | − __u32 reserved[7]; | |
| 2470 | + __u32 flags; | |
| 2471 | + __u32 reserved[6]; | |
| 2459 | 2472 | }; |
| 2460 | 2473 | |
| 2461 | 2474 | /* |