#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
#include <linux/types.h>
#include <media/v4l2-cci.h>
#include <media/v4l2-common.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>
#define DW9719_MAX_FOCUS_POS …
#define DW9719_CTRL_STEPS …
#define DW9719_CTRL_DELAY_US …
#define DW9719_INFO …
#define DW9719_ID …
#define DW9719_CONTROL …
#define DW9719_ENABLE_RINGING …
#define DW9719_VCM_CURRENT …
#define DW9719_MODE …
#define DW9719_MODE_SAC_SHIFT …
#define DW9719_MODE_SAC3 …
#define DW9719_VCM_FREQ …
#define DW9719_DEFAULT_VCM_FREQ …
#define to_dw9719_device(x) …
struct dw9719_device { … };
static int dw9719_detect(struct dw9719_device *dw9719)
{ … }
static int dw9719_power_down(struct dw9719_device *dw9719)
{ … }
static int dw9719_power_up(struct dw9719_device *dw9719)
{ … }
static int dw9719_t_focus_abs(struct dw9719_device *dw9719, s32 value)
{ … }
static int dw9719_set_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_ctrl_ops dw9719_ctrl_ops = …;
static int dw9719_suspend(struct device *dev)
{ … }
static int dw9719_resume(struct device *dev)
{ … }
static int dw9719_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ … }
static int dw9719_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ … }
static const struct v4l2_subdev_internal_ops dw9719_internal_ops = …;
static int dw9719_init_controls(struct dw9719_device *dw9719)
{ … }
static const struct v4l2_subdev_ops dw9719_ops = …;
static int dw9719_probe(struct i2c_client *client)
{ … }
static void dw9719_remove(struct i2c_client *client)
{ … }
static const struct i2c_device_id dw9719_id_table[] = …;
MODULE_DEVICE_TABLE(i2c, dw9719_id_table);
static DEFINE_RUNTIME_DEV_PM_OPS(dw9719_pm_ops, dw9719_suspend, dw9719_resume,
NULL);
static struct i2c_driver dw9719_i2c_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;