#include <linux/delay.h>
#include <linux/fwnode.h>
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/videodev2.h>
#include <media/v4l2-async.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>
#include "max9271.h"
#define MAX9271_RESET_CYCLES …
#define OV490_I2C_ADDRESS …
#define OV490_PAGE_HIGH_REG …
#define OV490_PAGE_LOW_REG …
#define OV490_SCCB_SLAVE_WRITE …
#define OV490_SCCB_SLAVE_READ …
#define OV490_SCCB_SLAVE0_DIR …
#define OV490_SCCB_SLAVE0_ADDR_HIGH …
#define OV490_SCCB_SLAVE0_ADDR_LOW …
#define OV490_DVP_CTRL3 …
#define OV490_ODS_CTRL_FRAME_OUTPUT_EN …
#define OV490_ODS_CTRL …
#define OV490_HOST_CMD …
#define OV490_HOST_CMD_TRIGGER …
#define OV490_ID_VAL …
#define OV490_ID(_p, _v) …
#define OV490_PID …
#define OV490_VER …
#define OV490_PID_TIMEOUT …
#define OV490_OUTPUT_EN_TIMEOUT …
#define OV490_GPIO0 …
#define OV490_SPWDN0 …
#define OV490_GPIO_SEL0 …
#define OV490_GPIO_SEL1 …
#define OV490_GPIO_DIRECTION0 …
#define OV490_GPIO_DIRECTION1 …
#define OV490_GPIO_OUTPUT_VALUE0 …
#define OV490_GPIO_OUTPUT_VALUE1 …
#define OV490_ISP_HSIZE_LOW …
#define OV490_ISP_HSIZE_HIGH …
#define OV490_ISP_VSIZE_LOW …
#define OV490_ISP_VSIZE_HIGH …
#define OV10640_PID_TIMEOUT …
#define OV10640_ID_HIGH …
#define OV10640_CHIP_ID …
#define OV10640_PIXEL_RATE …
struct rdacm21_device { … };
static inline struct rdacm21_device *sd_to_rdacm21(struct v4l2_subdev *sd)
{ … }
static const struct ov490_reg { … } ov490_regs_wizard[] = …;
static int ov490_read(struct rdacm21_device *dev, u16 reg, u8 *val)
{ … }
static int ov490_write(struct rdacm21_device *dev, u16 reg, u8 val)
{ … }
static int ov490_set_page(struct rdacm21_device *dev, u16 page)
{ … }
static int ov490_read_reg(struct rdacm21_device *dev, u32 reg, u8 *val)
{ … }
static int ov490_write_reg(struct rdacm21_device *dev, u32 reg, u8 val)
{ … }
static int rdacm21_s_stream(struct v4l2_subdev *sd, int enable)
{ … }
static int rdacm21_enum_mbus_code(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_mbus_code_enum *code)
{ … }
static int rdacm21_get_fmt(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *format)
{ … }
static const struct v4l2_subdev_video_ops rdacm21_video_ops = …;
static const struct v4l2_subdev_pad_ops rdacm21_subdev_pad_ops = …;
static const struct v4l2_subdev_ops rdacm21_subdev_ops = …;
static void ov10640_power_up(struct rdacm21_device *dev)
{ … }
static int ov10640_check_id(struct rdacm21_device *dev)
{ … }
static int ov490_initialize(struct rdacm21_device *dev)
{ … }
static int rdacm21_initialize(struct rdacm21_device *dev)
{ … }
static int rdacm21_probe(struct i2c_client *client)
{ … }
static void rdacm21_remove(struct i2c_client *client)
{ … }
static const struct of_device_id rdacm21_of_ids[] = …;
MODULE_DEVICE_TABLE(of, rdacm21_of_ids);
static struct i2c_driver rdacm21_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;