#include <linux/module.h>
#include <linux/mutex.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-dv-timings.h>
#include <media/v4l2-ioctl.h>
#include <uapi/linux/v4l2-dv-timings.h>
#include "adv748x.h"
#define ADV748X_HDMI_MIN_WIDTH …
#define ADV748X_HDMI_MAX_WIDTH …
#define ADV748X_HDMI_MIN_HEIGHT …
#define ADV748X_HDMI_MAX_HEIGHT …
#define ADV748X_HDMI_MIN_PIXELCLOCK …
#define ADV748X_HDMI_MAX_PIXELCLOCK …
static const struct v4l2_dv_timings_cap adv748x_hdmi_timings_cap = …;
struct adv748x_hdmi_video_standards { … };
static const struct adv748x_hdmi_video_standards
adv748x_hdmi_video_standards[] = …;
static void adv748x_hdmi_fill_format(struct adv748x_hdmi *hdmi,
struct v4l2_mbus_framefmt *fmt)
{ … }
static void adv748x_fill_optional_dv_timings(struct v4l2_dv_timings *timings)
{ … }
static bool adv748x_hdmi_has_signal(struct adv748x_state *state)
{ … }
static int adv748x_hdmi_read_pixelclock(struct adv748x_state *state)
{ … }
static void adv748x_hdmi_set_de_timings(struct adv748x_state *state, int shift)
{ … }
static int adv748x_hdmi_set_video_timings(struct adv748x_state *state,
const struct v4l2_dv_timings *timings)
{ … }
static int adv748x_hdmi_s_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int adv748x_hdmi_g_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int adv748x_hdmi_query_dv_timings(struct v4l2_subdev *sd, unsigned int pad,
struct v4l2_dv_timings *timings)
{ … }
static int adv748x_hdmi_g_input_status(struct v4l2_subdev *sd, u32 *status)
{ … }
static int adv748x_hdmi_s_stream(struct v4l2_subdev *sd, int enable)
{ … }
static int adv748x_hdmi_g_pixelaspect(struct v4l2_subdev *sd,
struct v4l2_fract *aspect)
{ … }
static const struct v4l2_subdev_video_ops adv748x_video_ops_hdmi = …;
static int adv748x_hdmi_propagate_pixelrate(struct adv748x_hdmi *hdmi)
{ … }
static int adv748x_hdmi_enum_mbus_code(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_mbus_code_enum *code)
{ … }
static int adv748x_hdmi_get_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *sdformat)
{ … }
static int adv748x_hdmi_set_format(struct v4l2_subdev *sd,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *sdformat)
{ … }
static int adv748x_hdmi_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
{ … }
static inline int adv748x_hdmi_edid_write_block(struct adv748x_hdmi *hdmi,
unsigned int total_len, const u8 *val)
{ … }
static int adv748x_hdmi_set_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
{ … }
static bool adv748x_hdmi_check_dv_timings(const struct v4l2_dv_timings *timings,
void *hdl)
{ … }
static int adv748x_hdmi_enum_dv_timings(struct v4l2_subdev *sd,
struct v4l2_enum_dv_timings *timings)
{ … }
static int adv748x_hdmi_dv_timings_cap(struct v4l2_subdev *sd,
struct v4l2_dv_timings_cap *cap)
{ … }
static const struct v4l2_subdev_pad_ops adv748x_pad_ops_hdmi = …;
static const struct v4l2_subdev_ops adv748x_ops_hdmi = …;
static const char * const hdmi_ctrl_patgen_menu[] = …;
static int adv748x_hdmi_s_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_ctrl_ops adv748x_hdmi_ctrl_ops = …;
static int adv748x_hdmi_init_controls(struct adv748x_hdmi *hdmi)
{ … }
int adv748x_hdmi_init(struct adv748x_hdmi *hdmi)
{ … }
void adv748x_hdmi_cleanup(struct adv748x_hdmi *hdmi)
{ … }