Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media into next
Pull media updates from Mauro Carvalho Chehab: "This contains: - a new frontend/tuner driver set for si2168 and sa2157 - Videobuf 2 core now supports DVB too - A new gspca sub-driver (dtcs033) - saa7134 is now converted to use videobuf2 - add support for 4K timings - several other driver fixes and improvements PS. This pull request is shorter than usual, partly because I have some other patches on topic branches that I'll be sending you later this week" * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (286 commits) [media] au0828-dvb: restore its permission to 644 [media] xc5000: delay tuner sleep to 5 seconds [media] xc5000: Don't use whitespace before tabs [media] xc5000: fix CamelCase [media] xc5000: Don't wrap msleep() [media] xc5000: get rid of positive error codes [media] au0828: reset streaming when a new frequency is set [media] au0828: Improve debug messages for urb_completion [media] au0828: Cancel stream-restart operation if frontend is disconnected [media] dib0700: fix RC support on Hauppauge Nova-TD [media] USB: as102_usb_drv.c: Remove useless return variables [media] v4l: Fix documentation of V4L2_PIX_FMT_H264_MVC and VP8 pixel formats [media] m5mols: Replace missing header [media] staging: lirc: Fix sparse warnings [media] fix mceusb endpoint type identification/handling [media] az6027: Added the PID for a new revision of the Elgato EyeTV Sat DVB-S Tuner [media] DocBook media: fix typo [media] adv7604: Add missing include to linux/types.h [media] v4l: Validate fields in the core code for subdev EDID ioctls [media] v4l: Add support for DV timings ioctls on subdev nodes ...
This commit is contained in:
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2010 - 2012 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Samsung S5P/Exynos SoC series MIPI CSIS device support
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_SAMSUNG_MIPI_CSIS_H_
|
||||
#define __PLAT_SAMSUNG_MIPI_CSIS_H_ __FILE__
|
||||
|
||||
/**
|
||||
* struct s5p_platform_mipi_csis - platform data for S5P MIPI-CSIS driver
|
||||
* @clk_rate: bus clock frequency
|
||||
* @wclk_source: CSI wrapper clock selection: 0 - bus clock, 1 - ext. SCLK_CAM
|
||||
* @lanes: number of data lanes used
|
||||
* @hs_settle: HS-RX settle time
|
||||
*/
|
||||
struct s5p_platform_mipi_csis {
|
||||
unsigned long clk_rate;
|
||||
u8 wclk_source;
|
||||
u8 lanes;
|
||||
u8 hs_settle;
|
||||
};
|
||||
|
||||
#endif /* __PLAT_SAMSUNG_MIPI_CSIS_H_ */
|
||||
@@ -21,6 +21,8 @@
|
||||
#ifndef _ADV7604_
|
||||
#define _ADV7604_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Analog input muxing modes (AFE register 0x02, [2:0]) */
|
||||
enum adv7604_ain_sel {
|
||||
ADV7604_AIN1_2_3_NC_SYNC_1_2 = 0,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
/* Header files */
|
||||
#include <linux/videodev2.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/videobuf2-dma-contig.h>
|
||||
#include <media/davinci/vpbe_types.h>
|
||||
#include <media/davinci/vpbe_osd.h>
|
||||
@@ -94,8 +95,6 @@ struct vpbe_layer {
|
||||
* has selected
|
||||
*/
|
||||
enum v4l2_memory memory;
|
||||
/* Used to keep track of state of the priority */
|
||||
struct v4l2_prio_state prio;
|
||||
/* Used to store pixel format */
|
||||
struct v4l2_pix_format pix_fmt;
|
||||
enum v4l2_field buf_field;
|
||||
@@ -134,14 +133,13 @@ struct vpbe_display {
|
||||
|
||||
/* File handle structure */
|
||||
struct vpbe_fh {
|
||||
struct v4l2_fh fh;
|
||||
/* vpbe device structure */
|
||||
struct vpbe_display *disp_dev;
|
||||
/* pointer to layer object for opened device */
|
||||
struct vpbe_layer *layer;
|
||||
/* Indicates whether this file handle is doing IO */
|
||||
unsigned char io_allowed;
|
||||
/* Used to keep track priority of this instance */
|
||||
enum v4l2_priority prio;
|
||||
};
|
||||
|
||||
struct buf_config_params {
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/videobuf-dma-contig.h>
|
||||
@@ -110,8 +111,6 @@ struct vpfe_device {
|
||||
struct v4l2_device v4l2_dev;
|
||||
/* parent device */
|
||||
struct device *pdev;
|
||||
/* Used to keep track of state of the priority */
|
||||
struct v4l2_prio_state prio;
|
||||
/* number of open instances of the channel */
|
||||
u32 usrs;
|
||||
/* Indicates id of the field which is being displayed */
|
||||
@@ -174,11 +173,10 @@ struct vpfe_device {
|
||||
|
||||
/* File handle structure */
|
||||
struct vpfe_fh {
|
||||
struct v4l2_fh fh;
|
||||
struct vpfe_device *vpfe_dev;
|
||||
/* Indicates whether this file handle is doing IO */
|
||||
u8 io_allowed;
|
||||
/* Used to keep track priority of this instance */
|
||||
enum v4l2_priority prio;
|
||||
};
|
||||
|
||||
struct vpfe_config_params {
|
||||
|
||||
@@ -61,41 +61,20 @@ enum fimc_bus_type {
|
||||
#define GRP_ID_FLITE (1 << 13)
|
||||
#define GRP_ID_FIMC_IS (1 << 14)
|
||||
|
||||
struct i2c_board_info;
|
||||
|
||||
/**
|
||||
* struct fimc_source_info - video source description required for the host
|
||||
* interface configuration
|
||||
*
|
||||
* @board_info: pointer to I2C subdevice's board info
|
||||
* @clk_frequency: frequency of the clock the host interface provides to sensor
|
||||
* @fimc_bus_type: FIMC camera input type
|
||||
* @sensor_bus_type: image sensor bus type, MIPI, ITU-R BT.601 etc.
|
||||
* @flags: the parallel sensor bus flags defining signals polarity (V4L2_MBUS_*)
|
||||
* @i2c_bus_num: i2c control bus id the sensor is attached to
|
||||
* @mux_id: FIMC camera interface multiplexer index (separate for MIPI and ITU)
|
||||
* @clk_id: index of the SoC peripheral clock for sensors
|
||||
*/
|
||||
struct fimc_source_info {
|
||||
struct i2c_board_info *board_info;
|
||||
unsigned long clk_frequency;
|
||||
enum fimc_bus_type fimc_bus_type;
|
||||
enum fimc_bus_type sensor_bus_type;
|
||||
u16 flags;
|
||||
u16 i2c_bus_num;
|
||||
u16 mux_id;
|
||||
u8 clk_id;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct s5p_platform_fimc - camera host interface platform data
|
||||
*
|
||||
* @source_info: properties of an image source for the host interface setup
|
||||
* @num_clients: the number of attached image sources
|
||||
*/
|
||||
struct s5p_platform_fimc {
|
||||
struct fimc_source_info *source_info;
|
||||
int num_clients;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -87,7 +87,9 @@ struct media_device {
|
||||
/* media_devnode to media_device */
|
||||
#define to_media_device(node) container_of(node, struct media_device, devnode)
|
||||
|
||||
int __must_check media_device_register(struct media_device *mdev);
|
||||
int __must_check __media_device_register(struct media_device *mdev,
|
||||
struct module *owner);
|
||||
#define media_device_register(mdev) __media_device_register(mdev, THIS_MODULE)
|
||||
void media_device_unregister(struct media_device *mdev);
|
||||
|
||||
int __must_check media_device_register_entity(struct media_device *mdev,
|
||||
|
||||
@@ -82,7 +82,8 @@ struct media_devnode {
|
||||
/* dev to media_devnode */
|
||||
#define to_media_devnode(cd) container_of(cd, struct media_devnode, dev)
|
||||
|
||||
int __must_check media_devnode_register(struct media_devnode *mdev);
|
||||
int __must_check media_devnode_register(struct media_devnode *mdev,
|
||||
struct module *owner);
|
||||
void media_devnode_unregister(struct media_devnode *mdev);
|
||||
|
||||
static inline struct media_devnode *media_devnode_data(struct file *filp)
|
||||
|
||||
@@ -120,6 +120,14 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd);
|
||||
int __must_check
|
||||
v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev);
|
||||
|
||||
/* Send a notification to v4l2_device. */
|
||||
static inline void v4l2_subdev_notify(struct v4l2_subdev *sd,
|
||||
unsigned int notification, void *arg)
|
||||
{
|
||||
if (sd && sd->v4l2_dev && sd->v4l2_dev->notify)
|
||||
sd->v4l2_dev->notify(sd, notification, arg);
|
||||
}
|
||||
|
||||
/* Iterate over all subdevs. */
|
||||
#define v4l2_device_for_each_subdev(sd, v4l2_dev) \
|
||||
list_for_each_entry(sd, &(v4l2_dev)->subdevs, list)
|
||||
|
||||
@@ -132,4 +132,8 @@ int v4l2_event_unsubscribe(struct v4l2_fh *fh,
|
||||
void v4l2_event_unsubscribe_all(struct v4l2_fh *fh);
|
||||
int v4l2_event_subdev_unsubscribe(struct v4l2_subdev *sd, struct v4l2_fh *fh,
|
||||
struct v4l2_event_subscription *sub);
|
||||
int v4l2_src_change_event_subscribe(struct v4l2_fh *fh,
|
||||
const struct v4l2_event_subscription *sub);
|
||||
int v4l2_src_change_event_subdev_subscribe(struct v4l2_subdev *sd,
|
||||
struct v4l2_fh *fh, struct v4l2_event_subscription *sub);
|
||||
#endif /* V4L2_EVENT_H */
|
||||
|
||||
+20
-13
@@ -159,8 +159,6 @@ struct v4l2_subdev_core_ops {
|
||||
int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
|
||||
int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
|
||||
int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
|
||||
int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
|
||||
int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
|
||||
long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
|
||||
#ifdef CONFIG_COMPAT
|
||||
long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
|
||||
@@ -234,15 +232,18 @@ struct v4l2_subdev_audio_ops {
|
||||
|
||||
/* Indicates the @length field specifies maximum data length. */
|
||||
#define V4L2_MBUS_FRAME_DESC_FL_LEN_MAX (1U << 0)
|
||||
/* Indicates user defined data format, i.e. non standard frame format. */
|
||||
/*
|
||||
* Indicates that the format does not have line offsets, i.e. the
|
||||
* receiver should use 1D DMA.
|
||||
*/
|
||||
#define V4L2_MBUS_FRAME_DESC_FL_BLOB (1U << 1)
|
||||
|
||||
/**
|
||||
* struct v4l2_mbus_frame_desc_entry - media bus frame description structure
|
||||
* @flags: V4L2_MBUS_FRAME_DESC_FL_* flags
|
||||
* @pixelcode: media bus pixel code, valid if FRAME_DESC_FL_BLOB is not set
|
||||
* @length: number of octets per frame, valid for compressed or unspecified
|
||||
* formats
|
||||
* @length: number of octets per frame, valid if V4L2_MBUS_FRAME_DESC_FL_BLOB
|
||||
* is set
|
||||
*/
|
||||
struct v4l2_mbus_frame_desc_entry {
|
||||
u16 flags;
|
||||
@@ -269,8 +270,11 @@ struct v4l2_mbus_frame_desc {
|
||||
g_std_output: get current standard for video OUTPUT devices. This is ignored
|
||||
by video input devices.
|
||||
|
||||
g_tvnorms_output: get v4l2_std_id with all standards supported by video
|
||||
OUTPUT device. This is ignored by video input devices.
|
||||
g_tvnorms: get v4l2_std_id with all standards supported by the video
|
||||
CAPTURE device. This is ignored by video output devices.
|
||||
|
||||
g_tvnorms_output: get v4l2_std_id with all standards supported by the video
|
||||
OUTPUT device. This is ignored by video capture devices.
|
||||
|
||||
s_crystal_freq: sets the frequency of the crystal used to generate the
|
||||
clocks in Hz. An extra flags field allows device specific configuration
|
||||
@@ -310,9 +314,12 @@ struct v4l2_mbus_frame_desc {
|
||||
struct v4l2_subdev_video_ops {
|
||||
int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
|
||||
int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
|
||||
int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
|
||||
int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
|
||||
int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
|
||||
int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
|
||||
int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
|
||||
int (*g_tvnorms)(struct v4l2_subdev *sd, v4l2_std_id *std);
|
||||
int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
|
||||
int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
|
||||
int (*s_stream)(struct v4l2_subdev *sd, int enable);
|
||||
@@ -510,6 +517,10 @@ struct v4l2_subdev_pad_ops {
|
||||
struct v4l2_subdev_selection *sel);
|
||||
int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
|
||||
int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
|
||||
int (*dv_timings_cap)(struct v4l2_subdev *sd,
|
||||
struct v4l2_dv_timings_cap *cap);
|
||||
int (*enum_dv_timings)(struct v4l2_subdev *sd,
|
||||
struct v4l2_enum_dv_timings *timings);
|
||||
#ifdef CONFIG_MEDIA_CONTROLLER
|
||||
int (*link_validate)(struct v4l2_subdev *sd, struct media_link *link,
|
||||
struct v4l2_subdev_format *source_fmt,
|
||||
@@ -584,6 +595,7 @@ struct v4l2_subdev {
|
||||
#endif
|
||||
struct list_head list;
|
||||
struct module *owner;
|
||||
bool owner_v4l2_dev;
|
||||
u32 flags;
|
||||
struct v4l2_device *v4l2_dev;
|
||||
const struct v4l2_subdev_ops *ops;
|
||||
@@ -685,17 +697,12 @@ void v4l2_subdev_init(struct v4l2_subdev *sd,
|
||||
/* Call an ops of a v4l2_subdev, doing the right checks against
|
||||
NULL pointers.
|
||||
|
||||
Example: err = v4l2_subdev_call(sd, core, s_std, norm);
|
||||
Example: err = v4l2_subdev_call(sd, video, s_std, norm);
|
||||
*/
|
||||
#define v4l2_subdev_call(sd, o, f, args...) \
|
||||
(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \
|
||||
(sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD))
|
||||
|
||||
/* Send a notification to v4l2_device. */
|
||||
#define v4l2_subdev_notify(sd, notification, arg) \
|
||||
((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \
|
||||
(sd)->v4l2_dev->notify((sd), (notification), (arg)))
|
||||
|
||||
#define v4l2_subdev_has_op(sd, o, f) \
|
||||
((sd)->ops->o && (sd)->ops->o->f)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
struct vb2_alloc_ctx;
|
||||
struct vb2_fileio_data;
|
||||
struct vb2_threadio_data;
|
||||
|
||||
/**
|
||||
* struct vb2_mem_ops - memory handling/memory allocator operations
|
||||
@@ -323,7 +324,7 @@ struct vb2_ops {
|
||||
void (*buf_cleanup)(struct vb2_buffer *vb);
|
||||
|
||||
int (*start_streaming)(struct vb2_queue *q, unsigned int count);
|
||||
int (*stop_streaming)(struct vb2_queue *q);
|
||||
void (*stop_streaming)(struct vb2_queue *q);
|
||||
|
||||
void (*buf_queue)(struct vb2_buffer *vb);
|
||||
};
|
||||
@@ -375,6 +376,7 @@ struct v4l2_fh;
|
||||
* @start_streaming_called: start_streaming() was called successfully and we
|
||||
* started streaming.
|
||||
* @fileio: file io emulator internal data, used only if emulator is active
|
||||
* @threadio: thread io internal data, used only if thread is active
|
||||
*/
|
||||
struct vb2_queue {
|
||||
enum v4l2_buf_type type;
|
||||
@@ -411,6 +413,7 @@ struct vb2_queue {
|
||||
unsigned int start_streaming_called:1;
|
||||
|
||||
struct vb2_fileio_data *fileio;
|
||||
struct vb2_threadio_data *threadio;
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
/*
|
||||
@@ -461,6 +464,35 @@ size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
|
||||
loff_t *ppos, int nonblock);
|
||||
size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count,
|
||||
loff_t *ppos, int nonblock);
|
||||
/**
|
||||
* vb2_thread_fnc - callback function for use with vb2_thread
|
||||
*
|
||||
* This is called whenever a buffer is dequeued in the thread.
|
||||
*/
|
||||
typedef int (*vb2_thread_fnc)(struct vb2_buffer *vb, void *priv);
|
||||
|
||||
/**
|
||||
* vb2_thread_start() - start a thread for the given queue.
|
||||
* @q: videobuf queue
|
||||
* @fnc: callback function
|
||||
* @priv: priv pointer passed to the callback function
|
||||
* @thread_name:the name of the thread. This will be prefixed with "vb2-".
|
||||
*
|
||||
* This starts a thread that will queue and dequeue until an error occurs
|
||||
* or @vb2_thread_stop is called.
|
||||
*
|
||||
* This function should not be used for anything else but the videobuf2-dvb
|
||||
* support. If you think you have another good use-case for this, then please
|
||||
* contact the linux-media mailinglist first.
|
||||
*/
|
||||
int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
|
||||
const char *thread_name);
|
||||
|
||||
/**
|
||||
* vb2_thread_stop() - stop the thread for the given queue.
|
||||
* @q: videobuf queue
|
||||
*/
|
||||
int vb2_thread_stop(struct vb2_queue *q);
|
||||
|
||||
/**
|
||||
* vb2_is_streaming() - return streaming status of the queue
|
||||
@@ -471,6 +503,23 @@ static inline bool vb2_is_streaming(struct vb2_queue *q)
|
||||
return q->streaming;
|
||||
}
|
||||
|
||||
/**
|
||||
* vb2_fileio_is_active() - return true if fileio is active.
|
||||
* @q: videobuf queue
|
||||
*
|
||||
* This returns true if read() or write() is used to stream the data
|
||||
* as opposed to stream I/O. This is almost never an important distinction,
|
||||
* except in rare cases. One such case is that using read() or write() to
|
||||
* stream a format using V4L2_FIELD_ALTERNATE is not allowed since there
|
||||
* is no way you can pass the field information of each buffer to/from
|
||||
* userspace. A driver that supports this field format should check for
|
||||
* this in the queue_setup op and reject it if this function returns true.
|
||||
*/
|
||||
static inline bool vb2_fileio_is_active(struct vb2_queue *q)
|
||||
{
|
||||
return q->fileio;
|
||||
}
|
||||
|
||||
/**
|
||||
* vb2_is_busy() - return busy status of the queue
|
||||
* @q: videobuf queue
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#ifndef _VIDEOBUF2_DVB_H_
|
||||
#define _VIDEOBUF2_DVB_H_
|
||||
|
||||
#include <dvbdev.h>
|
||||
#include <dmxdev.h>
|
||||
#include <dvb_demux.h>
|
||||
#include <dvb_net.h>
|
||||
#include <dvb_frontend.h>
|
||||
#include <media/videobuf2-core.h>
|
||||
|
||||
struct vb2_dvb {
|
||||
/* filling that the job of the driver */
|
||||
char *name;
|
||||
struct dvb_frontend *frontend;
|
||||
struct vb2_queue dvbq;
|
||||
|
||||
/* video-buf-dvb state info */
|
||||
struct mutex lock;
|
||||
int nfeeds;
|
||||
|
||||
/* vb2_dvb_(un)register manages this */
|
||||
struct dvb_demux demux;
|
||||
struct dmxdev dmxdev;
|
||||
struct dmx_frontend fe_hw;
|
||||
struct dmx_frontend fe_mem;
|
||||
struct dvb_net net;
|
||||
};
|
||||
|
||||
struct vb2_dvb_frontend {
|
||||
struct list_head felist;
|
||||
int id;
|
||||
struct vb2_dvb dvb;
|
||||
};
|
||||
|
||||
struct vb2_dvb_frontends {
|
||||
struct list_head felist;
|
||||
struct mutex lock;
|
||||
struct dvb_adapter adapter;
|
||||
int active_fe_id; /* Indicates which frontend in the felist is in use */
|
||||
int gate; /* Frontend with gate control 0=!MFE,1=fe0,2=fe1 etc */
|
||||
};
|
||||
|
||||
int vb2_dvb_register_bus(struct vb2_dvb_frontends *f,
|
||||
struct module *module,
|
||||
void *adapter_priv,
|
||||
struct device *device,
|
||||
short *adapter_nr,
|
||||
int mfe_shared);
|
||||
|
||||
void vb2_dvb_unregister_bus(struct vb2_dvb_frontends *f);
|
||||
|
||||
struct vb2_dvb_frontend *vb2_dvb_alloc_frontend(struct vb2_dvb_frontends *f, int id);
|
||||
void vb2_dvb_dealloc_frontends(struct vb2_dvb_frontends *f);
|
||||
|
||||
struct vb2_dvb_frontend *vb2_dvb_get_frontend(struct vb2_dvb_frontends *f, int id);
|
||||
int vb2_dvb_find_frontend(struct vb2_dvb_frontends *f, struct dvb_frontend *p);
|
||||
|
||||
#endif /* _VIDEOBUF2_DVB_H_ */
|
||||
@@ -75,7 +75,7 @@ struct v4l2_edid {
|
||||
__u32 start_block;
|
||||
__u32 blocks;
|
||||
__u32 reserved[5];
|
||||
__u8 __user *edid;
|
||||
__u8 *edid;
|
||||
};
|
||||
|
||||
#endif /* __V4L2_COMMON__ */
|
||||
|
||||
@@ -173,6 +173,76 @@
|
||||
V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_3840X2160P24 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 1276, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_3840X2160P25 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, 0) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_3840X2160P30 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_3840X2160P50 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
594000000, 1056, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, 0) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_3840X2160P60 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(3840, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
594000000, 176, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_4096X2160P24 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 1020, 88, 296, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_4096X2160P25 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, 0) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_4096X2160P30 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
297000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_4096X2160P50 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
594000000, 968, 88, 128, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, 0) \
|
||||
}
|
||||
|
||||
#define V4L2_DV_BT_CEA_4096X2160P60 { \
|
||||
.type = V4L2_DV_BT_656_1120, \
|
||||
V4L2_INIT_BT_TIMINGS(4096, 2160, 0, V4L2_DV_HSYNC_POS_POL, \
|
||||
594000000, 88, 88, 128, 8, 10, 72, 0, 0, 0, \
|
||||
V4L2_DV_BT_STD_CEA861, V4L2_DV_FL_CAN_REDUCE_FPS) \
|
||||
}
|
||||
|
||||
|
||||
/* VESA Discrete Monitor Timings as per version 1.0, revision 12 */
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ enum v4l2_mbus_pixelcode {
|
||||
V4L2_MBUS_FMT_RGB888_2X12_LE = 0x100c,
|
||||
V4L2_MBUS_FMT_ARGB8888_1X32 = 0x100d,
|
||||
|
||||
/* YUV (including grey) - next is 0x2018 */
|
||||
/* YUV (including grey) - next is 0x2024 */
|
||||
V4L2_MBUS_FMT_Y8_1X8 = 0x2001,
|
||||
V4L2_MBUS_FMT_UV8_1X8 = 0x2015,
|
||||
V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002,
|
||||
@@ -64,6 +64,8 @@ enum v4l2_mbus_pixelcode {
|
||||
V4L2_MBUS_FMT_YUYV8_2X8 = 0x2008,
|
||||
V4L2_MBUS_FMT_YVYU8_2X8 = 0x2009,
|
||||
V4L2_MBUS_FMT_Y10_1X10 = 0x200a,
|
||||
V4L2_MBUS_FMT_UYVY10_2X10 = 0x2018,
|
||||
V4L2_MBUS_FMT_VYUY10_2X10 = 0x2019,
|
||||
V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b,
|
||||
V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c,
|
||||
V4L2_MBUS_FMT_Y12_1X12 = 0x2013,
|
||||
@@ -72,10 +74,20 @@ enum v4l2_mbus_pixelcode {
|
||||
V4L2_MBUS_FMT_YUYV8_1X16 = 0x2011,
|
||||
V4L2_MBUS_FMT_YVYU8_1X16 = 0x2012,
|
||||
V4L2_MBUS_FMT_YDYUYDYV8_1X16 = 0x2014,
|
||||
V4L2_MBUS_FMT_UYVY10_1X20 = 0x201a,
|
||||
V4L2_MBUS_FMT_VYUY10_1X20 = 0x201b,
|
||||
V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,
|
||||
V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,
|
||||
V4L2_MBUS_FMT_YUV10_1X30 = 0x2016,
|
||||
V4L2_MBUS_FMT_AYUV8_1X32 = 0x2017,
|
||||
V4L2_MBUS_FMT_UYVY12_2X12 = 0x201c,
|
||||
V4L2_MBUS_FMT_VYUY12_2X12 = 0x201d,
|
||||
V4L2_MBUS_FMT_YUYV12_2X12 = 0x201e,
|
||||
V4L2_MBUS_FMT_YVYU12_2X12 = 0x201f,
|
||||
V4L2_MBUS_FMT_UYVY12_1X24 = 0x2020,
|
||||
V4L2_MBUS_FMT_VYUY12_1X24 = 0x2021,
|
||||
V4L2_MBUS_FMT_YUYV12_1X24 = 0x2022,
|
||||
V4L2_MBUS_FMT_YVYU12_1X24 = 0x2023,
|
||||
|
||||
/* Bayer - next is 0x3019 */
|
||||
V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001,
|
||||
|
||||
@@ -151,26 +151,24 @@ struct v4l2_subdev_selection {
|
||||
/* Backwards compatibility define --- to be removed */
|
||||
#define v4l2_subdev_edid v4l2_edid
|
||||
|
||||
#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format)
|
||||
#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format)
|
||||
#define VIDIOC_SUBDEV_G_FRAME_INTERVAL \
|
||||
_IOWR('V', 21, struct v4l2_subdev_frame_interval)
|
||||
#define VIDIOC_SUBDEV_S_FRAME_INTERVAL \
|
||||
_IOWR('V', 22, struct v4l2_subdev_frame_interval)
|
||||
#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \
|
||||
_IOWR('V', 2, struct v4l2_subdev_mbus_code_enum)
|
||||
#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
|
||||
_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
|
||||
#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
|
||||
_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
|
||||
#define VIDIOC_SUBDEV_G_CROP _IOWR('V', 59, struct v4l2_subdev_crop)
|
||||
#define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop)
|
||||
#define VIDIOC_SUBDEV_G_SELECTION \
|
||||
_IOWR('V', 61, struct v4l2_subdev_selection)
|
||||
#define VIDIOC_SUBDEV_S_SELECTION \
|
||||
_IOWR('V', 62, struct v4l2_subdev_selection)
|
||||
/* These two G/S_EDID ioctls are identical to the ioctls in videodev2.h */
|
||||
#define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_edid)
|
||||
#define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_edid)
|
||||
#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format)
|
||||
#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format)
|
||||
#define VIDIOC_SUBDEV_G_FRAME_INTERVAL _IOWR('V', 21, struct v4l2_subdev_frame_interval)
|
||||
#define VIDIOC_SUBDEV_S_FRAME_INTERVAL _IOWR('V', 22, struct v4l2_subdev_frame_interval)
|
||||
#define VIDIOC_SUBDEV_ENUM_MBUS_CODE _IOWR('V', 2, struct v4l2_subdev_mbus_code_enum)
|
||||
#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE _IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
|
||||
#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL _IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
|
||||
#define VIDIOC_SUBDEV_G_CROP _IOWR('V', 59, struct v4l2_subdev_crop)
|
||||
#define VIDIOC_SUBDEV_S_CROP _IOWR('V', 60, struct v4l2_subdev_crop)
|
||||
#define VIDIOC_SUBDEV_G_SELECTION _IOWR('V', 61, struct v4l2_subdev_selection)
|
||||
#define VIDIOC_SUBDEV_S_SELECTION _IOWR('V', 62, struct v4l2_subdev_selection)
|
||||
/* The following ioctls are identical to the ioctls in videodev2.h */
|
||||
#define VIDIOC_SUBDEV_G_EDID _IOWR('V', 40, struct v4l2_edid)
|
||||
#define VIDIOC_SUBDEV_S_EDID _IOWR('V', 41, struct v4l2_edid)
|
||||
#define VIDIOC_SUBDEV_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
|
||||
#define VIDIOC_SUBDEV_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
|
||||
#define VIDIOC_SUBDEV_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
|
||||
#define VIDIOC_SUBDEV_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
|
||||
#define VIDIOC_SUBDEV_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -649,7 +649,6 @@ struct v4l2_plane {
|
||||
* @length: size in bytes of the buffer (NOT its payload) for single-plane
|
||||
* buffers (when type != *_MPLANE); number of elements in the
|
||||
* planes array for multi-plane buffers
|
||||
* @input: input number from which the video data has has been captured
|
||||
*
|
||||
* Contains data exchanged by application and driver using one of the Streaming
|
||||
* I/O methods.
|
||||
@@ -1107,12 +1106,15 @@ struct v4l2_dv_timings {
|
||||
|
||||
/** struct v4l2_enum_dv_timings - DV timings enumeration
|
||||
* @index: enumeration index
|
||||
* @pad: the pad number for which to enumerate timings (used with
|
||||
* v4l-subdev nodes only)
|
||||
* @reserved: must be zeroed
|
||||
* @timings: the timings for the given index
|
||||
*/
|
||||
struct v4l2_enum_dv_timings {
|
||||
__u32 index;
|
||||
__u32 reserved[3];
|
||||
__u32 pad;
|
||||
__u32 reserved[2];
|
||||
struct v4l2_dv_timings timings;
|
||||
};
|
||||
|
||||
@@ -1150,11 +1152,14 @@ struct v4l2_bt_timings_cap {
|
||||
|
||||
/** struct v4l2_dv_timings_cap - DV timings capabilities
|
||||
* @type: the type of the timings (same as in struct v4l2_dv_timings)
|
||||
* @pad: the pad number for which to query capabilities (used with
|
||||
* v4l-subdev nodes only)
|
||||
* @bt: the BT656/1120 timings capabilities
|
||||
*/
|
||||
struct v4l2_dv_timings_cap {
|
||||
__u32 type;
|
||||
__u32 reserved[3];
|
||||
__u32 pad;
|
||||
__u32 reserved[2];
|
||||
union {
|
||||
struct v4l2_bt_timings_cap bt;
|
||||
__u32 raw_data[32];
|
||||
@@ -1765,6 +1770,7 @@ struct v4l2_streamparm {
|
||||
#define V4L2_EVENT_EOS 2
|
||||
#define V4L2_EVENT_CTRL 3
|
||||
#define V4L2_EVENT_FRAME_SYNC 4
|
||||
#define V4L2_EVENT_SOURCE_CHANGE 5
|
||||
#define V4L2_EVENT_PRIVATE_START 0x08000000
|
||||
|
||||
/* Payload for V4L2_EVENT_VSYNC */
|
||||
@@ -1796,12 +1802,19 @@ struct v4l2_event_frame_sync {
|
||||
__u32 frame_sequence;
|
||||
};
|
||||
|
||||
#define V4L2_EVENT_SRC_CH_RESOLUTION (1 << 0)
|
||||
|
||||
struct v4l2_event_src_change {
|
||||
__u32 changes;
|
||||
};
|
||||
|
||||
struct v4l2_event {
|
||||
__u32 type;
|
||||
union {
|
||||
struct v4l2_event_vsync vsync;
|
||||
struct v4l2_event_ctrl ctrl;
|
||||
struct v4l2_event_frame_sync frame_sync;
|
||||
struct v4l2_event_src_change src_change;
|
||||
__u8 data[64];
|
||||
} u;
|
||||
__u32 pending;
|
||||
|
||||
Reference in New Issue
Block a user