#include <linux/module.h>
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/videodev2.h>
#include <linux/ioctl.h>
#include <linux/slab.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ctrls.h>
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
struct tw9906 { … };
static inline struct tw9906 *to_state(struct v4l2_subdev *sd)
{ … }
static const u8 initial_registers[] = …;
static int write_reg(struct v4l2_subdev *sd, u8 reg, u8 value)
{ … }
static int write_regs(struct v4l2_subdev *sd, const u8 *regs)
{ … }
static int tw9906_s_video_routing(struct v4l2_subdev *sd, u32 input,
u32 output, u32 config)
{ … }
static int tw9906_s_std(struct v4l2_subdev *sd, v4l2_std_id norm)
{ … }
static int tw9906_s_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static int tw9906_log_status(struct v4l2_subdev *sd)
{ … }
static const struct v4l2_ctrl_ops tw9906_ctrl_ops = …;
static const struct v4l2_subdev_core_ops tw9906_core_ops = …;
static const struct v4l2_subdev_video_ops tw9906_video_ops = …;
static const struct v4l2_subdev_ops tw9906_ops = …;
static int tw9906_probe(struct i2c_client *client)
{ … }
static void tw9906_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id tw9906_id[] = …;
MODULE_DEVICE_TABLE(i2c, tw9906_id);
static struct i2c_driver tw9906_driver = …;
module_i2c_driver(…) …;