#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/spi/spi.h>
#include <linux/platform_device.h>
#include <linux/ctype.h>
#include <linux/err.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/videodev2.h>
#include <media/v4l2-common.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-subdev.h>
#include <media/v4l2-dv-timings.h>
#include <linux/v4l2-dv-timings.h>
#define REG_STATUS …
#define REG_FORCE_FMT …
#define REG_LINES_PER_FRAME …
#define REG_WORDS_PER_LINE …
#define REG_WORDS_PER_ACT_LINE …
#define REG_ACT_LINES_PER_FRAME …
#define MASK_H_LOCK …
#define MASK_V_LOCK …
#define MASK_STD_LOCK …
#define MASK_FORCE_STD …
#define MASK_STD_STATUS …
#define GS_WIDTH_MIN …
#define GS_WIDTH_MAX …
#define GS_HEIGHT_MIN …
#define GS_HEIGHT_MAX …
#define GS_PIXELCLOCK_MIN …
#define GS_PIXELCLOCK_MAX …
struct gs { … };
struct gs_reg_fmt { … };
static const struct spi_device_id gs_id[] = …;
MODULE_DEVICE_TABLE(spi, gs_id);
static const struct v4l2_dv_timings fmt_cap[] = …;
static const struct gs_reg_fmt reg_fmt[] = …;
static const struct v4l2_dv_timings_cap gs_timings_cap = …;
static int gs_read_register(struct spi_device *spi, u16 addr, u16 *value)
{ … }
static int gs_write_register(struct spi_device *spi, u16 addr, u16 value)
{ … }
#ifdef CONFIG_VIDEO_ADV_DEBUG
static int gs_g_register(struct v4l2_subdev *sd,
struct v4l2_dbg_register *reg)
{ … }
static int gs_s_register(struct v4l2_subdev *sd,
const struct v4l2_dbg_register *reg)
{ … }
#endif
static int gs_status_format(u16 status, struct v4l2_dv_timings *timings)
{ … }
static u16 get_register_timings(struct v4l2_dv_timings *timings)
{ … }
static inline struct gs *to_gs(struct v4l2_subdev *sd)
{ … }
static int gs_s_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int gs_g_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int gs_query_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int gs_enum_dv_timings(struct v4l2_subdev *sd,
struct v4l2_enum_dv_timings *timings)
{ … }
static int gs_s_stream(struct v4l2_subdev *sd, int enable)
{ … }
static int gs_g_input_status(struct v4l2_subdev *sd, u32 *status)
{ … }
static int gs_dv_timings_cap(struct v4l2_subdev *sd,
struct v4l2_dv_timings_cap *cap)
{ … }
static const struct v4l2_subdev_core_ops gs_core_ops = …;
static const struct v4l2_subdev_video_ops gs_video_ops = …;
static const struct v4l2_subdev_pad_ops gs_pad_ops = …;
static const struct v4l2_subdev_ops gs_ops = …;
static int gs_probe(struct spi_device *spi)
{ … }
static void gs_remove(struct spi_device *spi)
{ … }
static struct spi_driver gs_driver = …;
module_spi_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;