#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kthread.h>
#include <linux/freezer.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-common.h>
#include <media/v4l2-event.h>
#include <media/videobuf2-v4l2.h>
#include <media/videobuf2-dma-contig.h>
#include "solo6x10.h"
#include "solo6x10-tw28.h"
#define SOLO_HW_BPL …
#define solo_vlines(__solo) …
#define solo_image_size(__solo) …
#define solo_bytesperline(__solo) …
#define MIN_VID_BUFFERS …
static inline void erase_on(struct solo_dev *solo_dev)
{ … }
static inline int erase_off(struct solo_dev *solo_dev)
{ … }
void solo_video_in_isr(struct solo_dev *solo_dev)
{ … }
static void solo_win_setup(struct solo_dev *solo_dev, u8 ch,
int sx, int sy, int ex, int ey, int scale)
{ … }
static int solo_v4l2_ch_ext_4up(struct solo_dev *solo_dev, u8 idx, int on)
{ … }
static int solo_v4l2_ch_ext_16up(struct solo_dev *solo_dev, int on)
{ … }
static int solo_v4l2_ch(struct solo_dev *solo_dev, u8 ch, int on)
{ … }
static int solo_v4l2_set_ch(struct solo_dev *solo_dev, u8 ch)
{ … }
static void solo_fillbuf(struct solo_dev *solo_dev,
struct vb2_buffer *vb)
{ … }
static void solo_thread_try(struct solo_dev *solo_dev)
{ … }
static int solo_thread(void *data)
{ … }
static int solo_start_thread(struct solo_dev *solo_dev)
{ … }
static void solo_stop_thread(struct solo_dev *solo_dev)
{ … }
static int solo_queue_setup(struct vb2_queue *q,
unsigned int *num_buffers, unsigned int *num_planes,
unsigned int sizes[], struct device *alloc_devs[])
{ … }
static int solo_start_streaming(struct vb2_queue *q, unsigned int count)
{ … }
static void solo_stop_streaming(struct vb2_queue *q)
{ … }
static void solo_buf_queue(struct vb2_buffer *vb)
{ … }
static const struct vb2_ops solo_video_qops = …;
static int solo_querycap(struct file *file, void *priv,
struct v4l2_capability *cap)
{ … }
static int solo_enum_ext_input(struct solo_dev *solo_dev,
struct v4l2_input *input)
{ … }
static int solo_enum_input(struct file *file, void *priv,
struct v4l2_input *input)
{ … }
static int solo_set_input(struct file *file, void *priv, unsigned int index)
{ … }
static int solo_get_input(struct file *file, void *priv, unsigned int *index)
{ … }
static int solo_enum_fmt_cap(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{ … }
static int solo_try_fmt_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
static int solo_set_fmt_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
static int solo_get_fmt_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
static int solo_g_std(struct file *file, void *priv, v4l2_std_id *i)
{ … }
int solo_set_video_type(struct solo_dev *solo_dev, bool is_50hz)
{ … }
static int solo_s_std(struct file *file, void *priv, v4l2_std_id std)
{ … }
static int solo_s_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_file_operations solo_v4l2_fops = …;
static const struct v4l2_ioctl_ops solo_v4l2_ioctl_ops = …;
static const struct video_device solo_v4l2_template = …;
static const struct v4l2_ctrl_ops solo_ctrl_ops = …;
static const struct v4l2_ctrl_config solo_motion_trace_ctrl = …;
int solo_v4l2_init(struct solo_dev *solo_dev, unsigned nr)
{ … }
void solo_v4l2_exit(struct solo_dev *solo_dev)
{ … }