#include <linux/acpi.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
#define OV08D10_SCLK …
#define OV08D10_XVCLK_19_2 …
#define OV08D10_ROWCLK …
#define OV08D10_DATA_LANES …
#define OV08D10_RGB_DEPTH …
#define OV08D10_REG_PAGE …
#define OV08D10_REG_GLOBAL_EFFECTIVE …
#define OV08D10_REG_CHIP_ID_0 …
#define OV08D10_REG_CHIP_ID_1 …
#define OV08D10_ID_MASK …
#define OV08D10_CHIP_ID …
#define OV08D10_REG_MODE_SELECT …
#define OV08D10_MODE_STANDBY …
#define OV08D10_MODE_STREAMING …
#define OV08D10_REG_VTS_H …
#define OV08D10_REG_VTS_L …
#define OV08D10_VTS_MAX …
#define OV08D10_REG_EXPOSURE_H …
#define OV08D10_REG_EXPOSURE_M …
#define OV08D10_REG_EXPOSURE_L …
#define OV08D10_EXPOSURE_MIN …
#define OV08D10_EXPOSURE_MAX_MARGIN …
#define OV08D10_EXPOSURE_STEP …
#define OV08D10_REG_ANALOG_GAIN …
#define OV08D10_ANAL_GAIN_MIN …
#define OV08D10_ANAL_GAIN_MAX …
#define OV08D10_ANAL_GAIN_STEP …
#define OV08D10_REG_MWB_DGAIN_C …
#define OV08D10_REG_MWB_DGAIN_F …
#define OV08D10_DGTL_GAIN_MIN …
#define OV08D10_DGTL_GAIN_MAX …
#define OV08D10_DGTL_GAIN_STEP …
#define OV08D10_DGTL_GAIN_DEFAULT …
#define OV08D10_REG_TEST_PATTERN …
#define OV08D10_TEST_PATTERN_ENABLE …
#define OV08D10_TEST_PATTERN_DISABLE …
#define OV08D10_REG_FLIP_OPT …
#define OV08D10_REG_FLIP_MASK …
#define to_ov08d10(_sd) …
struct ov08d10_reg { … };
struct ov08d10_reg_list { … };
struct ov08d10_link_freq_config { … };
struct ov08d10_mode { … };
static const struct ov08d10_reg mipi_data_rate_720mbps[] = …;
static const struct ov08d10_reg mipi_data_rate_360mbps[] = …;
static const struct ov08d10_reg lane_2_mode_3280x2460[] = …;
static const struct ov08d10_reg lane_2_mode_3264x2448[] = …;
static const struct ov08d10_reg lane_2_mode_1632x1224[] = …;
static const char * const ov08d10_test_pattern_menu[] = …;
struct ov08d10 { … };
struct ov08d10_lane_cfg { … };
static const struct ov08d10_lane_cfg lane_cfg_2 = …;
static u32 ov08d10_get_format_code(struct ov08d10 *ov08d10)
{ … }
static unsigned int ov08d10_modes_num(const struct ov08d10 *ov08d10)
{ … }
static u64 to_rate(const s64 *link_freq_menu,
u32 f_index, u8 nlanes)
{ … }
static u64 to_pixels_per_line(const s64 *link_freq_menu, u32 hts,
u32 f_index, u8 nlanes)
{ … }
static int ov08d10_write_reg_list(struct ov08d10 *ov08d10,
const struct ov08d10_reg_list *r_list)
{ … }
static int ov08d10_update_analog_gain(struct ov08d10 *ov08d10, u32 a_gain)
{ … }
static int ov08d10_update_digital_gain(struct ov08d10 *ov08d10, u32 d_gain)
{ … }
static int ov08d10_set_exposure(struct ov08d10 *ov08d10, u32 exposure)
{ … }
static int ov08d10_set_vblank(struct ov08d10 *ov08d10, u32 vblank)
{ … }
static int ov08d10_test_pattern(struct ov08d10 *ov08d10, u32 pattern)
{ … }
static int ov08d10_set_ctrl_flip(struct ov08d10 *ov08d10, u32 ctrl_val)
{ … }
static int ov08d10_set_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_ctrl_ops ov08d10_ctrl_ops = …;
static int ov08d10_init_controls(struct ov08d10 *ov08d10)
{ … }
static void ov08d10_update_pad_format(struct ov08d10 *ov08d10,
const struct ov08d10_mode *mode,
struct v4l2_mbus_framefmt *fmt)
{ … }
static int ov08d10_start_streaming(struct ov08d10 *ov08d10)
{ … }
static void ov08d10_stop_streaming(struct ov08d10 *ov08d10)
{ … }
static int ov08d10_set_stream(struct v4l2_subdev *sd, int enable)
{ … }
static int ov08d10_set_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *fmt)
{ … }
static int ov08d10_get_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *fmt)
{ … }
static int ov08d10_enum_mbus_code(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_mbus_code_enum *code)
{ … }
static int ov08d10_enum_frame_size(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_frame_size_enum *fse)
{ … }
static int ov08d10_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ … }
static const struct v4l2_subdev_video_ops ov08d10_video_ops = …;
static const struct v4l2_subdev_pad_ops ov08d10_pad_ops = …;
static const struct v4l2_subdev_ops ov08d10_subdev_ops = …;
static const struct v4l2_subdev_internal_ops ov08d10_internal_ops = …;
static int ov08d10_identify_module(struct ov08d10 *ov08d10)
{ … }
static int ov08d10_get_hwcfg(struct ov08d10 *ov08d10, struct device *dev)
{ … }
static void ov08d10_remove(struct i2c_client *client)
{ … }
static int ov08d10_probe(struct i2c_client *client)
{ … }
#ifdef CONFIG_ACPI
static const struct acpi_device_id ov08d10_acpi_ids[] = …;
MODULE_DEVICE_TABLE(acpi, ov08d10_acpi_ids);
#endif
static struct i2c_driver ov08d10_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;