#include "cx88.h"
#include <linux/init.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/kmod.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>
#include <linux/delay.h>
#include <linux/kthread.h>
#include <asm/div64.h>
#include <media/v4l2-common.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-event.h>
#include <media/i2c/wm8775.h>
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_VERSION(…);
static unsigned int video_nr[] = …;
static unsigned int vbi_nr[] = …;
static unsigned int radio_nr[] = …;
module_param_array(…);
module_param_array(…);
module_param_array(…);
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
MODULE_PARM_DESC(…) …;
static unsigned int video_debug;
module_param(video_debug, int, 0644);
MODULE_PARM_DESC(…) …;
static unsigned int irq_debug;
module_param(irq_debug, int, 0644);
MODULE_PARM_DESC(…) …;
#define dprintk(level, fmt, arg...) …
static const struct cx8800_fmt formats[] = …;
static const struct cx8800_fmt *format_by_fourcc(unsigned int fourcc)
{ … }
struct cx88_ctrl { … };
static const struct cx88_ctrl cx8800_vid_ctls[] = …;
static const struct cx88_ctrl cx8800_aud_ctls[] = …;
enum { … };
int cx88_video_mux(struct cx88_core *core, unsigned int input)
{ … }
EXPORT_SYMBOL(…);
static int start_video_dma(struct cx8800_dev *dev,
struct cx88_dmaqueue *q,
struct cx88_buffer *buf)
{ … }
static int __maybe_unused stop_video_dma(struct cx8800_dev *dev)
{ … }
static int __maybe_unused restart_video_queue(struct cx8800_dev *dev,
struct cx88_dmaqueue *q)
{ … }
static int queue_setup(struct vb2_queue *q,
unsigned int *num_buffers, unsigned int *num_planes,
unsigned int sizes[], struct device *alloc_devs[])
{ … }
static int buffer_prepare(struct vb2_buffer *vb)
{ … }
static void buffer_finish(struct vb2_buffer *vb)
{ … }
static void buffer_queue(struct vb2_buffer *vb)
{ … }
static int start_streaming(struct vb2_queue *q, unsigned int count)
{ … }
static void stop_streaming(struct vb2_queue *q)
{ … }
static const struct vb2_ops cx8800_video_qops = …;
static int radio_open(struct file *file)
{ … }
static int cx8800_s_vid_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static int cx8800_s_aud_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_format *f)
{ … }
int cx88_querycap(struct file *file, struct cx88_core *core,
struct v4l2_capability *cap)
{ … }
EXPORT_SYMBOL(…);
static int vidioc_querycap(struct file *file, void *priv,
struct v4l2_capability *cap)
{ … }
static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_fmtdesc *f)
{ … }
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *tvnorm)
{ … }
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id tvnorms)
{ … }
int cx88_enum_input(struct cx88_core *core, struct v4l2_input *i)
{ … }
EXPORT_SYMBOL(…);
static int vidioc_enum_input(struct file *file, void *priv,
struct v4l2_input *i)
{ … }
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
{ … }
static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{ … }
static int vidioc_g_tuner(struct file *file, void *priv,
struct v4l2_tuner *t)
{ … }
static int vidioc_s_tuner(struct file *file, void *priv,
const struct v4l2_tuner *t)
{ … }
static int vidioc_g_frequency(struct file *file, void *priv,
struct v4l2_frequency *f)
{ … }
int cx88_set_freq(struct cx88_core *core,
const struct v4l2_frequency *f)
{ … }
EXPORT_SYMBOL(…);
static int vidioc_s_frequency(struct file *file, void *priv,
const struct v4l2_frequency *f)
{ … }
#ifdef CONFIG_VIDEO_ADV_DEBUG
static int vidioc_g_register(struct file *file, void *fh,
struct v4l2_dbg_register *reg)
{ … }
static int vidioc_s_register(struct file *file, void *fh,
const struct v4l2_dbg_register *reg)
{ … }
#endif
static int radio_g_tuner(struct file *file, void *priv,
struct v4l2_tuner *t)
{ … }
static int radio_s_tuner(struct file *file, void *priv,
const struct v4l2_tuner *t)
{ … }
static const char *cx88_vid_irqs[32] = …;
static void cx8800_vid_irq(struct cx8800_dev *dev)
{ … }
static irqreturn_t cx8800_irq(int irq, void *dev_id)
{ … }
static const struct v4l2_file_operations video_fops = …;
static const struct v4l2_ioctl_ops video_ioctl_ops = …;
static const struct video_device cx8800_video_template = …;
static const struct v4l2_ioctl_ops vbi_ioctl_ops = …;
static const struct video_device cx8800_vbi_template = …;
static const struct v4l2_file_operations radio_fops = …;
static const struct v4l2_ioctl_ops radio_ioctl_ops = …;
static const struct video_device cx8800_radio_template = …;
static const struct v4l2_ctrl_ops cx8800_ctrl_vid_ops = …;
static const struct v4l2_ctrl_ops cx8800_ctrl_aud_ops = …;
static void cx8800_unregister_video(struct cx8800_dev *dev)
{ … }
static int cx8800_initdev(struct pci_dev *pci_dev,
const struct pci_device_id *pci_id)
{ … }
static void cx8800_finidev(struct pci_dev *pci_dev)
{ … }
static int __maybe_unused cx8800_suspend(struct device *dev_d)
{ … }
static int __maybe_unused cx8800_resume(struct device *dev_d)
{ … }
static const struct pci_device_id cx8800_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, cx8800_pci_tbl);
static SIMPLE_DEV_PM_OPS(cx8800_pm_ops, cx8800_suspend, cx8800_resume);
static struct pci_driver cx8800_pci_driver = …;
module_pci_driver(…) …;