linux/drivers/media/i2c/ov01a10.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2023 Intel Corporation.
 */

#include <asm/unaligned.h>

#include <linux/acpi.h>
#include <linux/bitfield.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>

#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-event.h>
#include <media/v4l2-fwnode.h>

#define OV01A10_LINK_FREQ_400MHZ
#define OV01A10_SCLK
#define OV01A10_DATA_LANES

#define OV01A10_REG_CHIP_ID
#define OV01A10_CHIP_ID

#define OV01A10_REG_MODE_SELECT
#define OV01A10_MODE_STANDBY
#define OV01A10_MODE_STREAMING

/* pixel array */
#define OV01A10_PIXEL_ARRAY_WIDTH
#define OV01A10_PIXEL_ARRAY_HEIGHT
#define OV01A10_ACITVE_WIDTH
#define OV01A10_ACITVE_HEIGHT

/* vertical and horizontal timings */
#define OV01A10_REG_VTS
#define OV01A10_VTS_DEF
#define OV01A10_VTS_MIN
#define OV01A10_VTS_MAX
#define OV01A10_HTS_DEF

/* exposure controls */
#define OV01A10_REG_EXPOSURE
#define OV01A10_EXPOSURE_MIN
#define OV01A10_EXPOSURE_MAX_MARGIN
#define OV01A10_EXPOSURE_STEP

/* analog gain controls */
#define OV01A10_REG_ANALOG_GAIN
#define OV01A10_ANAL_GAIN_MIN
#define OV01A10_ANAL_GAIN_MAX
#define OV01A10_ANAL_GAIN_STEP

/* digital gain controls */
#define OV01A10_REG_DIGITAL_GAIN_B
#define OV01A10_REG_DIGITAL_GAIN_GB
#define OV01A10_REG_DIGITAL_GAIN_GR
#define OV01A10_REG_DIGITAL_GAIN_R
#define OV01A10_DGTL_GAIN_MIN
#define OV01A10_DGTL_GAIN_MAX
#define OV01A10_DGTL_GAIN_STEP
#define OV01A10_DGTL_GAIN_DEFAULT

/* test pattern control */
#define OV01A10_REG_TEST_PATTERN
#define OV01A10_TEST_PATTERN_ENABLE
#define OV01A10_LINK_FREQ_400MHZ_INDEX

/* flip and mirror control */
#define OV01A10_REG_FORMAT1
#define OV01A10_VFLIP_MASK
#define OV01A10_HFLIP_MASK

/* window offset */
#define OV01A10_REG_X_WIN
#define OV01A10_REG_Y_WIN

struct ov01a10_reg {};

struct ov01a10_reg_list {};

struct ov01a10_link_freq_config {};

struct ov01a10_mode {};

static const struct ov01a10_reg mipi_data_rate_720mbps[] =;

static const struct ov01a10_reg sensor_1280x800_setting[] =;

static const char * const ov01a10_test_pattern_menu[] =;

static const s64 link_freq_menu_items[] =;

static const struct ov01a10_link_freq_config link_freq_configs[] =;

static const struct ov01a10_mode supported_modes[] =;

struct ov01a10 {};

static inline struct ov01a10 *to_ov01a10(struct v4l2_subdev *subdev)
{}

static int ov01a10_read_reg(struct ov01a10 *ov01a10, u16 reg, u16 len, u32 *val)
{}

static int ov01a10_write_reg(struct ov01a10 *ov01a10, u16 reg, u16 len, u32 val)
{}

static int ov01a10_write_reg_list(struct ov01a10 *ov01a10,
				  const struct ov01a10_reg_list *r_list)
{}

static int ov01a10_update_digital_gain(struct ov01a10 *ov01a10, u32 d_gain)
{}

static int ov01a10_test_pattern(struct ov01a10 *ov01a10, u32 pattern)
{}

/* for vflip and hflip, use 0x9 as window offset to keep the bayer */
static int ov01a10_set_hflip(struct ov01a10 *ov01a10, u32 hflip)
{}

static int ov01a10_set_vflip(struct ov01a10 *ov01a10, u32 vflip)
{}

static int ov01a10_set_ctrl(struct v4l2_ctrl *ctrl)
{}

static const struct v4l2_ctrl_ops ov01a10_ctrl_ops =;

static int ov01a10_init_controls(struct ov01a10 *ov01a10)
{}

static void ov01a10_update_pad_format(const struct ov01a10_mode *mode,
				      struct v4l2_mbus_framefmt *fmt)
{}

static int ov01a10_start_streaming(struct ov01a10 *ov01a10)
{}

static void ov01a10_stop_streaming(struct ov01a10 *ov01a10)
{}

static int ov01a10_set_stream(struct v4l2_subdev *sd, int enable)
{}

static int ov01a10_set_format(struct v4l2_subdev *sd,
			      struct v4l2_subdev_state *sd_state,
			      struct v4l2_subdev_format *fmt)
{}

static int ov01a10_init_state(struct v4l2_subdev *sd,
			      struct v4l2_subdev_state *state)
{}

static int ov01a10_enum_mbus_code(struct v4l2_subdev *sd,
				  struct v4l2_subdev_state *sd_state,
				  struct v4l2_subdev_mbus_code_enum *code)
{}

static int ov01a10_enum_frame_size(struct v4l2_subdev *sd,
				   struct v4l2_subdev_state *sd_state,
				   struct v4l2_subdev_frame_size_enum *fse)
{}

static int ov01a10_get_selection(struct v4l2_subdev *sd,
				 struct v4l2_subdev_state *state,
				 struct v4l2_subdev_selection *sel)
{}

static const struct v4l2_subdev_core_ops ov01a10_core_ops =;

static const struct v4l2_subdev_video_ops ov01a10_video_ops =;

static const struct v4l2_subdev_pad_ops ov01a10_pad_ops =;

static const struct v4l2_subdev_ops ov01a10_subdev_ops =;

static const struct v4l2_subdev_internal_ops ov01a10_internal_ops =;

static const struct media_entity_operations ov01a10_subdev_entity_ops =;

static int ov01a10_identify_module(struct ov01a10 *ov01a10)
{}

static void ov01a10_remove(struct i2c_client *client)
{}

static int ov01a10_probe(struct i2c_client *client)
{}

#ifdef CONFIG_ACPI
static const struct acpi_device_id ov01a10_acpi_ids[] =;

MODULE_DEVICE_TABLE(acpi, ov01a10_acpi_ids);
#endif

static struct i2c_driver ov01a10_i2c_driver =;

module_i2c_driver();

MODULE_AUTHOR();
MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();