#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-async.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
#include <media/v4l2-subdev.h>
#define DW9768_NAME …
#define DW9768_MAX_FOCUS_POS …
#define DW9768_FOCUS_STEPS …
#define DW9768_RING_PD_CONTROL_REG …
#define DW9768_PD_MODE_OFF …
#define DW9768_PD_MODE_EN …
#define DW9768_AAC_MODE_EN …
#define DW9768_MSB_ADDR …
#define DW9768_LSB_ADDR …
#define DW9768_STATUS_ADDR …
#define DW9768_AAC_PRESC_REG …
#define DW9768_AAC_MODE_SEL_MASK …
#define DW9768_CLOCK_PRE_SCALE_SEL_MASK …
#define DW9768_AAC_TIME_REG …
#define DW9768_T_OPR_US …
#define DW9768_TVIB_MS_BASE10 …
#define DW9768_AAC_MODE_DEFAULT …
#define DW9768_AAC_TIME_DEFAULT …
#define DW9768_CLOCK_PRE_SCALE_DEFAULT …
#define DW9768_MOVE_STEPS …
static const char * const dw9768_supply_names[] = …;
struct dw9768 { … };
static inline struct dw9768 *sd_to_dw9768(struct v4l2_subdev *subdev)
{ … }
struct dw9768_aac_mode_ot_multi { … };
struct dw9768_clk_presc_dividing_rate { … };
static const struct dw9768_aac_mode_ot_multi aac_mode_ot_multi[] = …;
static const struct dw9768_clk_presc_dividing_rate presc_dividing_rate[] = …;
static u32 dw9768_find_ot_multi(u32 aac_mode_param)
{ … }
static u32 dw9768_find_dividing_rate(u32 presc_param)
{ … }
static inline u32 dw9768_cal_move_delay(u32 aac_mode_param, u32 presc_param,
u32 aac_timing_param)
{ … }
static int dw9768_mod_reg(struct dw9768 *dw9768, u8 reg, u8 mask, u8 val)
{ … }
static int dw9768_set_dac(struct dw9768 *dw9768, u16 val)
{ … }
static int dw9768_init(struct dw9768 *dw9768)
{ … }
static int dw9768_release(struct dw9768 *dw9768)
{ … }
static int dw9768_runtime_suspend(struct device *dev)
{ … }
static int dw9768_runtime_resume(struct device *dev)
{ … }
static int dw9768_set_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_ctrl_ops dw9768_ctrl_ops = …;
static int dw9768_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ … }
static int dw9768_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ … }
static const struct v4l2_subdev_internal_ops dw9768_int_ops = …;
static const struct v4l2_subdev_ops dw9768_ops = …;
static int dw9768_init_controls(struct dw9768 *dw9768)
{ … }
static int dw9768_probe(struct i2c_client *client)
{ … }
static void dw9768_remove(struct i2c_client *client)
{ … }
static const struct of_device_id dw9768_of_table[] = …;
MODULE_DEVICE_TABLE(of, dw9768_of_table);
static const struct dev_pm_ops dw9768_pm_ops = …;
static struct i2c_driver dw9768_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;