Commit 8fa5960f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'media/v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media fixes from Mauro Carvalho Chehab:

 - fix a regression at the CEC adapter core

 - two uAPI patches (one revert) for changes in this development cycle

* tag 'media/v5.9-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  media: dt-bindings: media: imx274: Convert to json-schema
  media: media/v4l2: remove V4L2_FLAG_MEMORY_NON_CONSISTENT flag
  media: cec-adap.c: don't use flush_scheduled_work()
parents 9ef7dce5 d0254f82
* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor
The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with
an active array size of 3864H x 2202V. It is programmable through I2C
interface. The I2C address is fixed to 0x1a as per sensor data sheet.
Image data is sent through MIPI CSI-2, which is configured as 4 lanes
at 1440 Mbps.
Required Properties:
- compatible: value should be "sony,imx274" for imx274 sensor
- reg: I2C bus address of the device
Optional Properties:
- reset-gpios: Sensor reset GPIO
- clocks: Reference to the input clock.
- clock-names: Should be "inck".
- VANA-supply: Sensor 2.8v analog supply.
- VDIG-supply: Sensor 1.8v digital core supply.
- VDDL-supply: Sensor digital IO 1.2v supply.
The imx274 device node should contain one 'port' child node with
an 'endpoint' subnode. For further reading on port node refer to
Documentation/devicetree/bindings/media/video-interfaces.txt.
Example:
sensor@1a {
compatible = "sony,imx274";
reg = <0x1a>;
#address-cells = <1>;
#size-cells = <0>;
reset-gpios = <&gpio_sensor 0 0>;
port {
sensor_out: endpoint {
remote-endpoint = <&csiss_in>;
};
};
};
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/sony,imx274.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Sony 1/2.5-Inch 8.51MP CMOS Digital Image Sensor
maintainers:
- Leon Luo <leonl@leopardimaging.com>
description: |
The Sony IMX274 is a 1/2.5-inch CMOS active pixel digital image sensor with an
active array size of 3864H x 2202V. It is programmable through I2C interface.
Image data is sent through MIPI CSI-2, which is configured as 4 lanes at 1440
Mbps.
properties:
compatible:
const: sony,imx274
reg:
const: 0x1a
reset-gpios:
maxItems: 1
clocks:
maxItems: 1
clock-names:
const: inck
vana-supply:
description: Sensor 2.8 V analog supply.
maxItems: 1
vdig-supply:
description: Sensor 1.8 V digital core supply.
maxItems: 1
vddl-supply:
description: Sensor digital IO 1.2 V supply.
maxItems: 1
port:
type: object
description: Output video port. See ../video-interfaces.txt.
required:
- compatible
- reg
- port
additionalProperties: false
examples:
- |
i2c0 {
#address-cells = <1>;
#size-cells = <0>;
imx274: camera-sensor@1a {
compatible = "sony,imx274";
reg = <0x1a>;
reset-gpios = <&gpio_sensor 0 0>;
port {
sensor_out: endpoint {
remote-endpoint = <&csiss_in>;
};
};
};
};
...
...@@ -701,23 +701,6 @@ Memory Consistency Flags ...@@ -701,23 +701,6 @@ Memory Consistency Flags
:stub-columns: 0 :stub-columns: 0
:widths: 3 1 4 :widths: 3 1 4
* .. _`V4L2-FLAG-MEMORY-NON-CONSISTENT`:
- ``V4L2_FLAG_MEMORY_NON_CONSISTENT``
- 0x00000001
- A buffer is allocated either in consistent (it will be automatically
coherent between the CPU and the bus) or non-consistent memory. The
latter can provide performance gains, for instance the CPU cache
sync/flush operations can be avoided if the buffer is accessed by the
corresponding device only and the CPU does not read/write to/from that
buffer. However, this requires extra care from the driver -- it must
guarantee memory consistency by issuing a cache flush/sync when
consistency is needed. If this flag is set V4L2 will attempt to
allocate the buffer in non-consistent memory. The flag takes effect
only if the buffer is used for :ref:`memory mapping <mmap>` I/O and the
queue reports the :ref:`V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS
<V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS>` capability.
.. c:type:: v4l2_memory .. c:type:: v4l2_memory
enum v4l2_memory enum v4l2_memory
......
...@@ -120,13 +120,9 @@ than the number requested. ...@@ -120,13 +120,9 @@ than the number requested.
If you want to just query the capabilities without making any If you want to just query the capabilities without making any
other changes, then set ``count`` to 0, ``memory`` to other changes, then set ``count`` to 0, ``memory`` to
``V4L2_MEMORY_MMAP`` and ``format.type`` to the buffer type. ``V4L2_MEMORY_MMAP`` and ``format.type`` to the buffer type.
* - __u32
- ``flags``
- Specifies additional buffer management attributes.
See :ref:`memory-flags`.
* - __u32 * - __u32
- ``reserved``\ [6] - ``reserved``\ [7]
- A place holder for future extensions. Drivers and applications - A place holder for future extensions. Drivers and applications
must set the array to zero. must set the array to zero.
......
...@@ -112,17 +112,10 @@ aborting or finishing any DMA in progress, an implicit ...@@ -112,17 +112,10 @@ aborting or finishing any DMA in progress, an implicit
``V4L2_MEMORY_MMAP`` and ``type`` set to the buffer type. This will ``V4L2_MEMORY_MMAP`` and ``type`` set to the buffer type. This will
free any previously allocated buffers, so this is typically something free any previously allocated buffers, so this is typically something
that will be done at the start of the application. that will be done at the start of the application.
* - union {
- (anonymous)
* - __u32
- ``flags``
- Specifies additional buffer management attributes.
See :ref:`memory-flags`.
* - __u32 * - __u32
- ``reserved``\ [1] - ``reserved``\ [1]
- Kept for backwards compatibility. Use ``flags`` instead. - A place holder for future extensions. Drivers and applications
* - } must set the array to zero.
-
.. tabularcolumns:: |p{6.1cm}|p{2.2cm}|p{8.7cm}| .. tabularcolumns:: |p{6.1cm}|p{2.2cm}|p{8.7cm}|
...@@ -169,7 +162,6 @@ aborting or finishing any DMA in progress, an implicit ...@@ -169,7 +162,6 @@ aborting or finishing any DMA in progress, an implicit
- This capability is set by the driver to indicate that the queue supports - This capability is set by the driver to indicate that the queue supports
cache and memory management hints. However, it's only valid when the cache and memory management hints. However, it's only valid when the
queue is used for :ref:`memory mapping <mmap>` streaming I/O. See queue is used for :ref:`memory mapping <mmap>` streaming I/O. See
:ref:`V4L2_FLAG_MEMORY_NON_CONSISTENT <V4L2-FLAG-MEMORY-NON-CONSISTENT>`,
:ref:`V4L2_BUF_FLAG_NO_CACHE_INVALIDATE <V4L2-BUF-FLAG-NO-CACHE-INVALIDATE>` and :ref:`V4L2_BUF_FLAG_NO_CACHE_INVALIDATE <V4L2-BUF-FLAG-NO-CACHE-INVALIDATE>` and
:ref:`V4L2_BUF_FLAG_NO_CACHE_CLEAN <V4L2-BUF-FLAG-NO-CACHE-CLEAN>`. :ref:`V4L2_BUF_FLAG_NO_CACHE_CLEAN <V4L2-BUF-FLAG-NO-CACHE-CLEAN>`.
......
...@@ -16154,7 +16154,7 @@ M: Leon Luo <leonl@leopardimaging.com> ...@@ -16154,7 +16154,7 @@ M: Leon Luo <leonl@leopardimaging.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
F: Documentation/devicetree/bindings/media/i2c/imx274.txt F: Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
F: drivers/media/i2c/imx274.c F: drivers/media/i2c/imx274.c
SONY IMX290 SENSOR DRIVER SONY IMX290 SENSOR DRIVER
......
...@@ -1199,7 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap, ...@@ -1199,7 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,
/* Cancel the pending timeout work */ /* Cancel the pending timeout work */
if (!cancel_delayed_work(&data->work)) { if (!cancel_delayed_work(&data->work)) {
mutex_unlock(&adap->lock); mutex_unlock(&adap->lock);
flush_scheduled_work(); cancel_delayed_work_sync(&data->work);
mutex_lock(&adap->lock); mutex_lock(&adap->lock);
} }
/* /*
......
...@@ -721,39 +721,14 @@ int vb2_verify_memory_type(struct vb2_queue *q, ...@@ -721,39 +721,14 @@ int vb2_verify_memory_type(struct vb2_queue *q,
} }
EXPORT_SYMBOL(vb2_verify_memory_type); EXPORT_SYMBOL(vb2_verify_memory_type);
static void set_queue_consistency(struct vb2_queue *q, bool consistent_mem)
{
q->dma_attrs &= ~DMA_ATTR_NON_CONSISTENT;
if (!vb2_queue_allows_cache_hints(q))
return;
if (!consistent_mem)
q->dma_attrs |= DMA_ATTR_NON_CONSISTENT;
}
static bool verify_consistency_attr(struct vb2_queue *q, bool consistent_mem)
{
bool queue_is_consistent = !(q->dma_attrs & DMA_ATTR_NON_CONSISTENT);
if (consistent_mem != queue_is_consistent) {
dprintk(q, 1, "memory consistency model mismatch\n");
return false;
}
return true;
}
int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
unsigned int flags, unsigned int *count) unsigned int *count)
{ {
unsigned int num_buffers, allocated_buffers, num_planes = 0; unsigned int num_buffers, allocated_buffers, num_planes = 0;
unsigned plane_sizes[VB2_MAX_PLANES] = { }; unsigned plane_sizes[VB2_MAX_PLANES] = { };
bool consistent_mem = true;
unsigned int i; unsigned int i;
int ret; int ret;
if (flags & V4L2_FLAG_MEMORY_NON_CONSISTENT)
consistent_mem = false;
if (q->streaming) { if (q->streaming) {
dprintk(q, 1, "streaming active\n"); dprintk(q, 1, "streaming active\n");
return -EBUSY; return -EBUSY;
...@@ -765,8 +740,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, ...@@ -765,8 +740,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
} }
if (*count == 0 || q->num_buffers != 0 || if (*count == 0 || q->num_buffers != 0 ||
(q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory) || (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory)) {
!verify_consistency_attr(q, consistent_mem)) {
/* /*
* We already have buffers allocated, so first check if they * We already have buffers allocated, so first check if they
* are not in use and can be freed. * are not in use and can be freed.
...@@ -803,7 +777,6 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, ...@@ -803,7 +777,6 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME); num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME);
memset(q->alloc_devs, 0, sizeof(q->alloc_devs)); memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
q->memory = memory; q->memory = memory;
set_queue_consistency(q, consistent_mem);
/* /*
* Ask the driver how many buffers and planes per buffer it requires. * Ask the driver how many buffers and planes per buffer it requires.
...@@ -888,18 +861,14 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, ...@@ -888,18 +861,14 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
EXPORT_SYMBOL_GPL(vb2_core_reqbufs); EXPORT_SYMBOL_GPL(vb2_core_reqbufs);
int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory, int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
unsigned int flags, unsigned int *count, unsigned int *count,
unsigned int requested_planes, unsigned int requested_planes,
const unsigned int requested_sizes[]) const unsigned int requested_sizes[])
{ {
unsigned int num_planes = 0, num_buffers, allocated_buffers; unsigned int num_planes = 0, num_buffers, allocated_buffers;
unsigned plane_sizes[VB2_MAX_PLANES] = { }; unsigned plane_sizes[VB2_MAX_PLANES] = { };
bool consistent_mem = true;
int ret; int ret;
if (flags & V4L2_FLAG_MEMORY_NON_CONSISTENT)
consistent_mem = false;
if (q->num_buffers == VB2_MAX_FRAME) { if (q->num_buffers == VB2_MAX_FRAME) {
dprintk(q, 1, "maximum number of buffers already allocated\n"); dprintk(q, 1, "maximum number of buffers already allocated\n");
return -ENOBUFS; return -ENOBUFS;
...@@ -912,15 +881,12 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory, ...@@ -912,15 +881,12 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
} }
memset(q->alloc_devs, 0, sizeof(q->alloc_devs)); memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
q->memory = memory; q->memory = memory;
set_queue_consistency(q, consistent_mem);
q->waiting_for_buffers = !q->is_output; q->waiting_for_buffers = !q->is_output;
} else { } else {
if (q->memory != memory) { if (q->memory != memory) {
dprintk(q, 1, "memory model mismatch\n"); dprintk(q, 1, "memory model mismatch\n");
return -EINVAL; return -EINVAL;
} }
if (!verify_consistency_attr(q, consistent_mem))
return -EINVAL;
} }
num_buffers = min(*count, VB2_MAX_FRAME - q->num_buffers); num_buffers = min(*count, VB2_MAX_FRAME - q->num_buffers);
...@@ -2581,7 +2547,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read) ...@@ -2581,7 +2547,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
fileio->memory = VB2_MEMORY_MMAP; fileio->memory = VB2_MEMORY_MMAP;
fileio->type = q->type; fileio->type = q->type;
q->fileio = fileio; q->fileio = fileio;
ret = vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count); ret = vb2_core_reqbufs(q, fileio->memory, &fileio->count);
if (ret) if (ret)
goto err_kfree; goto err_kfree;
...@@ -2638,7 +2604,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read) ...@@ -2638,7 +2604,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
err_reqbufs: err_reqbufs:
fileio->count = 0; fileio->count = 0;
vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count); vb2_core_reqbufs(q, fileio->memory, &fileio->count);
err_kfree: err_kfree:
q->fileio = NULL; q->fileio = NULL;
...@@ -2658,7 +2624,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q) ...@@ -2658,7 +2624,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q)
vb2_core_streamoff(q, q->type); vb2_core_streamoff(q, q->type);
q->fileio = NULL; q->fileio = NULL;
fileio->count = 0; fileio->count = 0;
vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count); vb2_core_reqbufs(q, fileio->memory, &fileio->count);
kfree(fileio); kfree(fileio);
dprintk(q, 3, "file io emulator closed\n"); dprintk(q, 3, "file io emulator closed\n");
} }
......
...@@ -42,11 +42,6 @@ struct vb2_dc_buf { ...@@ -42,11 +42,6 @@ struct vb2_dc_buf {
struct dma_buf_attachment *db_attach; struct dma_buf_attachment *db_attach;
}; };
static inline bool vb2_dc_buffer_consistent(unsigned long attr)
{
return !(attr & DMA_ATTR_NON_CONSISTENT);
}
/*********************************************/ /*********************************************/
/* scatterlist table functions */ /* scatterlist table functions */
/*********************************************/ /*********************************************/
...@@ -341,13 +336,6 @@ static int ...@@ -341,13 +336,6 @@ static int
vb2_dc_dmabuf_ops_begin_cpu_access(struct dma_buf *dbuf, vb2_dc_dmabuf_ops_begin_cpu_access(struct dma_buf *dbuf,
enum dma_data_direction direction) enum dma_data_direction direction)
{ {
struct vb2_dc_buf *buf = dbuf->priv;
struct sg_table *sgt = buf->dma_sgt;
if (vb2_dc_buffer_consistent(buf->attrs))
return 0;
dma_sync_sg_for_cpu(buf->dev, sgt->sgl, sgt->nents, buf->dma_dir);
return 0; return 0;
} }
...@@ -355,13 +343,6 @@ static int ...@@ -355,13 +343,6 @@ static int
vb2_dc_dmabuf_ops_end_cpu_access(struct dma_buf *dbuf, vb2_dc_dmabuf_ops_end_cpu_access(struct dma_buf *dbuf,
enum dma_data_direction direction) enum dma_data_direction direction)
{ {
struct vb2_dc_buf *buf = dbuf->priv;
struct sg_table *sgt = buf->dma_sgt;
if (vb2_dc_buffer_consistent(buf->attrs))
return 0;
dma_sync_sg_for_device(buf->dev, sgt->sgl, sgt->nents, buf->dma_dir);
return 0; return 0;
} }
......
...@@ -123,8 +123,7 @@ static void *vb2_dma_sg_alloc(struct device *dev, unsigned long dma_attrs, ...@@ -123,8 +123,7 @@ static void *vb2_dma_sg_alloc(struct device *dev, unsigned long dma_attrs,
/* /*
* NOTE: dma-sg allocates memory using the page allocator directly, so * NOTE: dma-sg allocates memory using the page allocator directly, so
* there is no memory consistency guarantee, hence dma-sg ignores DMA * there is no memory consistency guarantee, hence dma-sg ignores DMA
* attributes passed from the upper layer. That means that * attributes passed from the upper layer.
* V4L2_FLAG_MEMORY_NON_CONSISTENT has no effect on dma-sg buffers.
*/ */
buf->pages = kvmalloc_array(buf->num_pages, sizeof(struct page *), buf->pages = kvmalloc_array(buf->num_pages, sizeof(struct page *),
GFP_KERNEL | __GFP_ZERO); GFP_KERNEL | __GFP_ZERO);
......
...@@ -722,22 +722,12 @@ static void fill_buf_caps(struct vb2_queue *q, u32 *caps) ...@@ -722,22 +722,12 @@ static void fill_buf_caps(struct vb2_queue *q, u32 *caps)
#endif #endif
} }
static void clear_consistency_attr(struct vb2_queue *q,
int memory,
unsigned int *flags)
{
if (!q->allow_cache_hints || memory != V4L2_MEMORY_MMAP)
*flags &= ~V4L2_FLAG_MEMORY_NON_CONSISTENT;
}
int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req)
{ {
int ret = vb2_verify_memory_type(q, req->memory, req->type); int ret = vb2_verify_memory_type(q, req->memory, req->type);
fill_buf_caps(q, &req->capabilities); fill_buf_caps(q, &req->capabilities);
clear_consistency_attr(q, req->memory, &req->flags); return ret ? ret : vb2_core_reqbufs(q, req->memory, &req->count);
return ret ? ret : vb2_core_reqbufs(q, req->memory,
req->flags, &req->count);
} }
EXPORT_SYMBOL_GPL(vb2_reqbufs); EXPORT_SYMBOL_GPL(vb2_reqbufs);
...@@ -769,7 +759,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) ...@@ -769,7 +759,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
unsigned i; unsigned i;
fill_buf_caps(q, &create->capabilities); fill_buf_caps(q, &create->capabilities);
clear_consistency_attr(q, create->memory, &create->flags);
create->index = q->num_buffers; create->index = q->num_buffers;
if (create->count == 0) if (create->count == 0)
return ret != -EBUSY ? ret : 0; return ret != -EBUSY ? ret : 0;
...@@ -813,7 +802,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) ...@@ -813,7 +802,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
if (requested_sizes[i] == 0) if (requested_sizes[i] == 0)
return -EINVAL; return -EINVAL;
return ret ? ret : vb2_core_create_bufs(q, create->memory, return ret ? ret : vb2_core_create_bufs(q, create->memory,
create->flags,
&create->count, &create->count,
requested_planes, requested_planes,
requested_sizes); requested_sizes);
...@@ -998,12 +986,11 @@ int vb2_ioctl_reqbufs(struct file *file, void *priv, ...@@ -998,12 +986,11 @@ int vb2_ioctl_reqbufs(struct file *file, void *priv,
int res = vb2_verify_memory_type(vdev->queue, p->memory, p->type); int res = vb2_verify_memory_type(vdev->queue, p->memory, p->type);
fill_buf_caps(vdev->queue, &p->capabilities); fill_buf_caps(vdev->queue, &p->capabilities);
clear_consistency_attr(vdev->queue, p->memory, &p->flags);
if (res) if (res)
return res; return res;
if (vb2_queue_is_busy(vdev, file)) if (vb2_queue_is_busy(vdev, file))
return -EBUSY; return -EBUSY;
res = vb2_core_reqbufs(vdev->queue, p->memory, p->flags, &p->count); res = vb2_core_reqbufs(vdev->queue, p->memory, &p->count);
/* If count == 0, then the owner has released all buffers and he /* If count == 0, then the owner has released all buffers and he
is no longer owner of the queue. Otherwise we have a new owner. */ is no longer owner of the queue. Otherwise we have a new owner. */
if (res == 0) if (res == 0)
...@@ -1021,7 +1008,6 @@ int vb2_ioctl_create_bufs(struct file *file, void *priv, ...@@ -1021,7 +1008,6 @@ int vb2_ioctl_create_bufs(struct file *file, void *priv,
p->index = vdev->queue->num_buffers; p->index = vdev->queue->num_buffers;
fill_buf_caps(vdev->queue, &p->capabilities); fill_buf_caps(vdev->queue, &p->capabilities);
clear_consistency_attr(vdev->queue, p->memory, &p->flags);
/* /*
* If count == 0, then just check if memory and type are valid. * If count == 0, then just check if memory and type are valid.
* Any -EBUSY result from vb2_verify_memory_type can be mapped to 0. * Any -EBUSY result from vb2_verify_memory_type can be mapped to 0.
......
...@@ -342,7 +342,7 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req) ...@@ -342,7 +342,7 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)
ctx->buf_siz = req->size; ctx->buf_siz = req->size;
ctx->buf_cnt = req->count; ctx->buf_cnt = req->count;
ret = vb2_core_reqbufs(&ctx->vb_q, VB2_MEMORY_MMAP, 0, &req->count); ret = vb2_core_reqbufs(&ctx->vb_q, VB2_MEMORY_MMAP, &req->count);
if (ret) { if (ret) {
ctx->state = DVB_VB2_STATE_NONE; ctx->state = DVB_VB2_STATE_NONE;
dprintk(1, "[%s] count=%d size=%d errno=%d\n", ctx->name, dprintk(1, "[%s] count=%d size=%d errno=%d\n", ctx->name,
......
...@@ -246,9 +246,6 @@ struct v4l2_format32 { ...@@ -246,9 +246,6 @@ struct v4l2_format32 {
* @memory: buffer memory type * @memory: buffer memory type
* @format: frame format, for which buffers are requested * @format: frame format, for which buffers are requested
* @capabilities: capabilities of this buffer type. * @capabilities: capabilities of this buffer type.
* @flags: additional buffer management attributes (ignored unless the
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability and
* configured for MMAP streaming I/O).
* @reserved: future extensions * @reserved: future extensions
*/ */
struct v4l2_create_buffers32 { struct v4l2_create_buffers32 {
...@@ -257,8 +254,7 @@ struct v4l2_create_buffers32 { ...@@ -257,8 +254,7 @@ struct v4l2_create_buffers32 {
__u32 memory; /* enum v4l2_memory */ __u32 memory; /* enum v4l2_memory */
struct v4l2_format32 format; struct v4l2_format32 format;
__u32 capabilities; __u32 capabilities;
__u32 flags; __u32 reserved[7];
__u32 reserved[6];
}; };
static int __bufsize_v4l2_format(struct v4l2_format32 __user *p32, u32 *size) static int __bufsize_v4l2_format(struct v4l2_format32 __user *p32, u32 *size)
...@@ -359,8 +355,7 @@ static int get_v4l2_create32(struct v4l2_create_buffers __user *p64, ...@@ -359,8 +355,7 @@ static int get_v4l2_create32(struct v4l2_create_buffers __user *p64,
{ {
if (!access_ok(p32, sizeof(*p32)) || if (!access_ok(p32, sizeof(*p32)) ||
copy_in_user(p64, p32, copy_in_user(p64, p32,
offsetof(struct v4l2_create_buffers32, format)) || offsetof(struct v4l2_create_buffers32, format)))
assign_in_user(&p64->flags, &p32->flags))
return -EFAULT; return -EFAULT;
return __get_v4l2_format32(&p64->format, &p32->format, return __get_v4l2_format32(&p64->format, &p32->format,
aux_buf, aux_space); aux_buf, aux_space);
...@@ -422,7 +417,6 @@ static int put_v4l2_create32(struct v4l2_create_buffers __user *p64, ...@@ -422,7 +417,6 @@ static int put_v4l2_create32(struct v4l2_create_buffers __user *p64,
copy_in_user(p32, p64, copy_in_user(p32, p64,
offsetof(struct v4l2_create_buffers32, format)) || offsetof(struct v4l2_create_buffers32, format)) ||
assign_in_user(&p32->capabilities, &p64->capabilities) || assign_in_user(&p32->capabilities, &p64->capabilities) ||
assign_in_user(&p32->flags, &p64->flags) ||
copy_in_user(p32->reserved, p64->reserved, sizeof(p64->reserved))) copy_in_user(p32->reserved, p64->reserved, sizeof(p64->reserved)))
return -EFAULT; return -EFAULT;
return __put_v4l2_format32(&p64->format, &p32->format); return __put_v4l2_format32(&p64->format, &p32->format);
......
...@@ -2042,6 +2042,9 @@ static int v4l_reqbufs(const struct v4l2_ioctl_ops *ops, ...@@ -2042,6 +2042,9 @@ static int v4l_reqbufs(const struct v4l2_ioctl_ops *ops,
if (ret) if (ret)
return ret; return ret;
CLEAR_AFTER_FIELD(p, capabilities);
return ops->vidioc_reqbufs(file, fh, p); return ops->vidioc_reqbufs(file, fh, p);
} }
...@@ -2081,7 +2084,7 @@ static int v4l_create_bufs(const struct v4l2_ioctl_ops *ops, ...@@ -2081,7 +2084,7 @@ static int v4l_create_bufs(const struct v4l2_ioctl_ops *ops,
if (ret) if (ret)
return ret; return ret;
CLEAR_AFTER_FIELD(create, flags); CLEAR_AFTER_FIELD(create, capabilities);
v4l_sanitize_format(&create->format); v4l_sanitize_format(&create->format);
......
...@@ -744,8 +744,6 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb); ...@@ -744,8 +744,6 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
* vb2_core_reqbufs() - Initiate streaming. * vb2_core_reqbufs() - Initiate streaming.
* @q: pointer to &struct vb2_queue with videobuf2 queue. * @q: pointer to &struct vb2_queue with videobuf2 queue.
* @memory: memory type, as defined by &enum vb2_memory. * @memory: memory type, as defined by &enum vb2_memory.
* @flags: auxiliary queue/buffer management flags. Currently, the only
* used flag is %V4L2_FLAG_MEMORY_NON_CONSISTENT.
* @count: requested buffer count. * @count: requested buffer count.
* *
* Videobuf2 core helper to implement VIDIOC_REQBUF() operation. It is called * Videobuf2 core helper to implement VIDIOC_REQBUF() operation. It is called
...@@ -770,13 +768,12 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb); ...@@ -770,13 +768,12 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
* Return: returns zero on success; an error code otherwise. * Return: returns zero on success; an error code otherwise.
*/ */
int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
unsigned int flags, unsigned int *count); unsigned int *count);
/** /**
* vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs * vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs
* @q: pointer to &struct vb2_queue with videobuf2 queue. * @q: pointer to &struct vb2_queue with videobuf2 queue.
* @memory: memory type, as defined by &enum vb2_memory. * @memory: memory type, as defined by &enum vb2_memory.
* @flags: auxiliary queue/buffer management flags.
* @count: requested buffer count. * @count: requested buffer count.
* @requested_planes: number of planes requested. * @requested_planes: number of planes requested.
* @requested_sizes: array with the size of the planes. * @requested_sizes: array with the size of the planes.
...@@ -794,7 +791,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, ...@@ -794,7 +791,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
* Return: returns zero on success; an error code otherwise. * Return: returns zero on success; an error code otherwise.
*/ */
int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory, int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
unsigned int flags, unsigned int *count, unsigned int *count,
unsigned int requested_planes, unsigned int requested_planes,
const unsigned int requested_sizes[]); const unsigned int requested_sizes[]);
......
...@@ -191,8 +191,6 @@ enum v4l2_memory { ...@@ -191,8 +191,6 @@ enum v4l2_memory {
V4L2_MEMORY_DMABUF = 4, V4L2_MEMORY_DMABUF = 4,
}; };
#define V4L2_FLAG_MEMORY_NON_CONSISTENT (1 << 0)
/* see also http://vektor.theorem.ca/graphics/ycbcr/ */ /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
enum v4l2_colorspace { enum v4l2_colorspace {
/* /*
...@@ -949,10 +947,7 @@ struct v4l2_requestbuffers { ...@@ -949,10 +947,7 @@ struct v4l2_requestbuffers {
__u32 type; /* enum v4l2_buf_type */ __u32 type; /* enum v4l2_buf_type */
__u32 memory; /* enum v4l2_memory */ __u32 memory; /* enum v4l2_memory */
__u32 capabilities; __u32 capabilities;
union { __u32 reserved[1];
__u32 flags;
__u32 reserved[1];
};
}; };
/* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */ /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
...@@ -2456,9 +2451,6 @@ struct v4l2_dbg_chip_info { ...@@ -2456,9 +2451,6 @@ struct v4l2_dbg_chip_info {
* @memory: enum v4l2_memory; buffer memory type * @memory: enum v4l2_memory; buffer memory type
* @format: frame format, for which buffers are requested * @format: frame format, for which buffers are requested
* @capabilities: capabilities of this buffer type. * @capabilities: capabilities of this buffer type.
* @flags: additional buffer management attributes (ignored unless the
* queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
* and configured for MMAP streaming I/O).
* @reserved: future extensions * @reserved: future extensions
*/ */
struct v4l2_create_buffers { struct v4l2_create_buffers {
...@@ -2467,8 +2459,7 @@ struct v4l2_create_buffers { ...@@ -2467,8 +2459,7 @@ struct v4l2_create_buffers {
__u32 memory; __u32 memory;
struct v4l2_format format; struct v4l2_format format;
__u32 capabilities; __u32 capabilities;
__u32 flags; __u32 reserved[7];
__u32 reserved[6];
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment