#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>
#include <media/imx.h>
#include "imx-media.h"
enum { … };
enum { … };
#define FIM_CL_ENABLE_DEF …
#define FIM_CL_NUM_DEF …
#define FIM_CL_NUM_SKIP_DEF …
#define FIM_CL_TOLERANCE_MIN_DEF …
#define FIM_CL_TOLERANCE_MAX_DEF …
struct imx_media_fim { … };
static bool icap_enabled(struct imx_media_fim *fim)
{ … }
static void update_fim_nominal(struct imx_media_fim *fim,
const struct v4l2_fract *fi)
{ … }
static void reset_fim(struct imx_media_fim *fim, bool curval)
{ … }
static void send_fim_event(struct imx_media_fim *fim, unsigned long error)
{ … }
static void frame_interval_monitor(struct imx_media_fim *fim,
ktime_t timestamp)
{ … }
static void fim_acquire_first_ts(struct imx_media_fim *fim)
{ … }
static int fim_s_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static const struct v4l2_ctrl_ops fim_ctrl_ops = …;
static const struct v4l2_ctrl_config fim_ctrl[] = …;
static const struct v4l2_ctrl_config fim_icap_ctrl[] = …;
static int init_fim_controls(struct imx_media_fim *fim)
{ … }
void imx_media_fim_eof_monitor(struct imx_media_fim *fim, ktime_t timestamp)
{ … }
void imx_media_fim_set_stream(struct imx_media_fim *fim,
const struct v4l2_fract *fi,
bool on)
{ … }
int imx_media_fim_add_controls(struct imx_media_fim *fim)
{ … }
struct imx_media_fim *imx_media_fim_init(struct v4l2_subdev *sd)
{ … }
void imx_media_fim_free(struct imx_media_fim *fim)
{ … }