linux/drivers/media/i2c/isl7998x.c

// SPDX-License-Identifier: GPL-2.0
/*
 * Intersil ISL7998x analog to MIPI CSI-2 or BT.656 decoder driver.
 *
 * Copyright (C) 2018-2019 Marek Vasut <[email protected]>
 * Copyright (C) 2021 Michael Tretter <[email protected]>
 */

#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/of_graph.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/v4l2-mediabus.h>
#include <linux/videodev2.h>

#include <media/v4l2-async.h>
#include <media/v4l2-common.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>
#include <media/v4l2-ioctl.h>

/*
 * This control allows to activate and deactivate the test pattern on
 * selected output channels.
 * This value is ISL7998x specific.
 */
#define V4L2_CID_TEST_PATTERN_CHANNELS

/*
 * This control allows to specify the color of the test pattern.
 * This value is ISL7998x specific.
 */
#define V4L2_CID_TEST_PATTERN_COLOR

/*
 * This control allows to specify the bar pattern in the test pattern.
 * This value is ISL7998x specific.
 */
#define V4L2_CID_TEST_PATTERN_BARS

#define ISL7998X_INPUTS

#define ISL7998X_REG(page, reg)

#define ISL7998X_REG_PN_SIZE
#define ISL7998X_REG_PN_BASE(n)

#define ISL7998X_REG_PX_DEC_PAGE(page)
#define ISL7998X_REG_PX_DEC_PAGE_MASK
#define ISL7998X_REG_P0_PRODUCT_ID_CODE
#define ISL7998X_REG_P0_PRODUCT_REV_CODE
#define ISL7998X_REG_P0_SW_RESET_CTL
#define ISL7998X_REG_P0_IO_BUFFER_CTL
#define ISL7998X_REG_P0_IO_BUFFER_CTL_1_1
#define ISL7998X_REG_P0_IO_PAD_PULL_EN_CTL
#define ISL7998X_REG_P0_IO_BUFFER_CTL_1_2
#define ISL7998X_REG_P0_VIDEO_IN_CHAN_CTL
#define ISL7998X_REG_P0_CLK_CTL_1
#define ISL7998X_REG_P0_CLK_CTL_2
#define ISL7998X_REG_P0_CLK_CTL_3
#define ISL7998X_REG_P0_CLK_CTL_4
#define ISL7998X_REG_P0_MPP1_SYNC_CTL
#define ISL7998X_REG_P0_MPP2_SYNC_CTL
#define ISL7998X_REG_P0_IRQ_SYNC_CTL
#define ISL7998X_REG_P0_INTERRUPT_STATUS
#define ISL7998X_REG_P0_CHAN_1_IRQ
#define ISL7998X_REG_P0_CHAN_2_IRQ
#define ISL7998X_REG_P0_CHAN_3_IRQ
#define ISL7998X_REG_P0_CHAN_4_IRQ
#define ISL7998X_REG_P0_SHORT_DIAG_IRQ
#define ISL7998X_REG_P0_CHAN_1_IRQ_EN
#define ISL7998X_REG_P0_CHAN_2_IRQ_EN
#define ISL7998X_REG_P0_CHAN_3_IRQ_EN
#define ISL7998X_REG_P0_CHAN_4_IRQ_EN
#define ISL7998X_REG_P0_SHORT_DIAG_IRQ_EN
#define ISL7998X_REG_P0_CHAN_1_STATUS
#define ISL7998X_REG_P0_CHAN_2_STATUS
#define ISL7998X_REG_P0_CHAN_3_STATUS
#define ISL7998X_REG_P0_CHAN_4_STATUS
#define ISL7998X_REG_P0_SHORT_DIAG_STATUS
#define ISL7998X_REG_P0_CLOCK_DELAY

#define ISL7998X_REG_PX_DEC_INPUT_FMT(pg)
#define ISL7998X_REG_PX_DEC_STATUS_1(pg)
#define ISL7998X_REG_PX_DEC_STATUS_1_VDLOSS
#define ISL7998X_REG_PX_DEC_STATUS_1_HLOCK
#define ISL7998X_REG_PX_DEC_STATUS_1_VLOCK
#define ISL7998X_REG_PX_DEC_HS_DELAY_CTL(pg)
#define ISL7998X_REG_PX_DEC_ANCTL(pg)
#define ISL7998X_REG_PX_DEC_CROP_HI(pg)
#define ISL7998X_REG_PX_DEC_VDELAY_LO(pg)
#define ISL7998X_REG_PX_DEC_VACTIVE_LO(pg)
#define ISL7998X_REG_PX_DEC_HDELAY_LO(pg)
#define ISL7998X_REG_PX_DEC_HACTIVE_LO(pg)
#define ISL7998X_REG_PX_DEC_CNTRL1(pg)
#define ISL7998X_REG_PX_DEC_CSC_CTL(pg)
#define ISL7998X_REG_PX_DEC_BRIGHT(pg)
#define ISL7998X_REG_PX_DEC_CONTRAST(pg)
#define ISL7998X_REG_PX_DEC_SHARPNESS(pg)
#define ISL7998X_REG_PX_DEC_SAT_U(pg)
#define ISL7998X_REG_PX_DEC_SAT_V(pg)
#define ISL7998X_REG_PX_DEC_HUE(pg)
#define ISL7998X_REG_PX_DEC_VERT_PEAK(pg)
#define ISL7998X_REG_PX_DEC_CORING(pg)
#define ISL7998X_REG_PX_DEC_SDT(pg)
#define ISL7998X_REG_PX_DEC_SDT_DET
#define ISL7998X_REG_PX_DEC_SDT_NOW
#define ISL7998X_REG_PX_DEC_SDT_STANDARD
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_NTSC_M
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_PAL
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_SECAM
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_NTSC_443
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_PAL_M
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_PAL_CN
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_PAL_60
#define ISL7998X_REG_PX_DEC_SDT_STANDARD_UNKNOWN
#define ISL7998X_REG_PX_DEC_SDTR(pg)
#define ISL7998X_REG_PX_DEC_SDTR_ATSTART
#define ISL7998X_REG_PX_DEC_CLMPG(pg)
#define ISL7998X_REG_PX_DEC_IAGC(pg)
#define ISL7998X_REG_PX_DEC_AGCGAIN(pg)
#define ISL7998X_REG_PX_DEC_PEAKWT(pg)
#define ISL7998X_REG_PX_DEC_CLMPL(pg)
#define ISL7998X_REG_PX_DEC_SYNCT(pg)
#define ISL7998X_REG_PX_DEC_MISSCNT(pg)
#define ISL7998X_REG_PX_DEC_PCLAMP(pg)
#define ISL7998X_REG_PX_DEC_VERT_CTL_1(pg)
#define ISL7998X_REG_PX_DEC_VERT_CTL_2(pg)
#define ISL7998X_REG_PX_DEC_CLR_KILL_LVL(pg)
#define ISL7998X_REG_PX_DEC_COMB_FILTER_CTL(pg)
#define ISL7998X_REG_PX_DEC_LUMA_DELAY(pg)
#define ISL7998X_REG_PX_DEC_MISC1(pg)
#define ISL7998X_REG_PX_DEC_MISC2(pg)
#define ISL7998X_REG_PX_DEC_MISC3(pg)
#define ISL7998X_REG_PX_DEC_MVSN(pg)
#define ISL7998X_REG_PX_DEC_CSTATUS2(pg)
#define ISL7998X_REG_PX_DEC_HFREF(pg)
#define ISL7998X_REG_PX_DEC_CLMD(pg)
#define ISL7998X_REG_PX_DEC_ID_DET_CTL(pg)
#define ISL7998X_REG_PX_DEC_CLCNTL(pg)
#define ISL7998X_REG_PX_DEC_DIFF_CLMP_CTL_1(pg)
#define ISL7998X_REG_PX_DEC_DIFF_CLMP_CTL_2(pg)
#define ISL7998X_REG_PX_DEC_DIFF_CLMP_CTL_3(pg)
#define ISL7998X_REG_PX_DEC_DIFF_CLMP_CTL_4(pg)
#define ISL7998X_REG_PX_DEC_SHORT_DET_CTL(pg)
#define ISL7998X_REG_PX_DEC_SHORT_DET_CTL_1(pg)
#define ISL7998X_REG_PX_DEC_AFE_TST_MUX_CTL(pg)
#define ISL7998X_REG_PX_DEC_DATA_CONV(pg)
#define ISL7998X_REG_PX_DEC_INTERNAL_TEST(pg)
#define ISL7998X_REG_PX_DEC_H_DELAY_CTL(pg)
#define ISL7998X_REG_PX_DEC_H_DELAY_II_HI(pg)
#define ISL7998X_REG_PX_DEC_H_DELAY_II_LOW(pg)

#define ISL7998X_REG_PX_ACA_CTL_1(pg)
#define ISL7998X_REG_PX_ACA_GAIN_CTL(pg)
#define ISL7998X_REG_PX_ACA_Y_AVG_HI_LIMIT(pg)
#define ISL7998X_REG_PX_ACA_Y_AVG_LO_LIMIT(pg)
#define ISL7998X_REG_PX_ACA_Y_DET_THRESHOLD(pg)
#define ISL7998X_REG_PX_ACA_BLACK_LVL(pg)
#define ISL7998X_REG_PX_ACA_CENTER_LVL(pg)
#define ISL7998X_REG_PX_ACA_WHITE_LVL(pg)
#define ISL7998X_REG_PX_ACA_MEAN_OFF_LIMIT(pg)
#define ISL7998X_REG_PX_ACA_MEAN_OFF_UPGAIN(pg)
#define ISL7998X_REG_PX_ACA_MEAN_OFF_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_MEAN_OFF_DNGAIN(pg)
#define ISL7998X_REG_PX_ACA_DELTA_CO_THRES(pg)
#define ISL7998X_REG_PX_ACA_DELTA_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_LO_HI_AVG_THRES(pg)
#define ISL7998X_REG_PX_ACA_LO_MAX_LVL_CTL(pg)
#define ISL7998X_REG_PX_ACA_HI_MAX_LVL_CTL(pg)
#define ISL7998X_REG_PX_ACA_LO_UPGAIN_CTL(pg)
#define ISL7998X_REG_PX_ACA_LO_DNGAIN_CTL(pg)
#define ISL7998X_REG_PX_ACA_HI_UPGAIN_CTL(pg)
#define ISL7998X_REG_PX_ACA_HI_DNGAIN_CTL(pg)
#define ISL7998X_REG_PX_ACA_LOPASS_FLT_COEF(pg)
#define ISL7998X_REG_PX_ACA_PDF_INDEX(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_H_STT(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_H_SZ1(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_H_SZ2(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_V_STT(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_V_SZ1(pg)
#define ISL7998X_REG_PX_ACA_HIST_WIN_V_SZ2(pg)
#define ISL7998X_REG_PX_ACA_Y_AVG(pg)
#define ISL7998X_REG_PX_ACA_Y_AVG_LIM(pg)
#define ISL7998X_REG_PX_ACA_LO_AVG(pg)
#define ISL7998X_REG_PX_ACA_HI_AVG(pg)
#define ISL7998X_REG_PX_ACA_Y_MAX(pg)
#define ISL7998X_REG_PX_ACA_Y_MIN(pg)
#define ISL7998X_REG_PX_ACA_MOFFSET(pg)
#define ISL7998X_REG_PX_ACA_LO_GAIN(pg)
#define ISL7998X_REG_PX_ACA_HI_GAIN(pg)
#define ISL7998X_REG_PX_ACA_LL_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_LH_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_HL_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_HH_SLOPE(pg)
#define ISL7998X_REG_PX_ACA_X_LOW(pg)
#define ISL7998X_REG_PX_ACA_X_MEAN(pg)
#define ISL7998X_REG_PX_ACA_X_HIGH(pg)
#define ISL7998X_REG_PX_ACA_Y_LOW(pg)
#define ISL7998X_REG_PX_ACA_Y_MEAN(pg)
#define ISL7998X_REG_PX_ACA_Y_HIGH(pg)
#define ISL7998X_REG_PX_ACA_CTL_2(pg)
#define ISL7998X_REG_PX_ACA_CTL_3(pg)
#define ISL7998X_REG_PX_ACA_CTL_4(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_HIST(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TL_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TL_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TL_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TL_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TR_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TR_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TR_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TR_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BL_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BL_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BL_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BL_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BR_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BR_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BR_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BR_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_LM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_LM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_LM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_LM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_TM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_TM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_BM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_BM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_RM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_X_RM_L(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_RM_H(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_RM_L(pg)
#define ISL7998X_REG_PX_ACA_HIST_DATA_LO(pg)
#define ISL7998X_REG_PX_ACA_HIST_DATA_MID(pg)
#define ISL7998X_REG_PX_ACA_HIST_DATA_HI(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_Y_CLR(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_CB_CLR(pg)
#define ISL7998X_REG_PX_ACA_FLEX_WIN_CR_CLR(pg)
#define ISL7998X_REG_PX_ACA_XFER_HIST_HOST(pg)

#define ISL7998X_REG_P5_LI_ENGINE_CTL
#define ISL7998X_REG_P5_LI_ENGINE_LINE_CTL
#define ISL7998X_REG_P5_LI_ENGINE_PIC_WIDTH
#define ISL7998X_REG_P5_LI_ENGINE_SYNC_CTL
#define ISL7998X_REG_P5_LI_ENGINE_VC_ASSIGNMENT
#define ISL7998X_REG_P5_LI_ENGINE_TYPE_CTL
#define ISL7998X_REG_P5_LI_ENGINE_FIFO_CTL
#define ISL7998X_REG_P5_MIPI_READ_START_CTL
#define ISL7998X_REG_P5_PSEUDO_FRM_FIELD_CTL
#define ISL7998X_REG_P5_ONE_FIELD_MODE_CTL
#define ISL7998X_REG_P5_MIPI_INT_HW_TST_CTR
#define ISL7998X_REG_P5_TP_GEN_BAR_PATTERN
#define ISL7998X_REG_P5_MIPI_PCNT_PSFRM
#define ISL7998X_REG_P5_LI_ENGINE_TP_GEN_CTL
#define ISL7998X_REG_P5_MIPI_VBLANK_PSFRM
#define ISL7998X_REG_P5_LI_ENGINE_CTL_2
#define ISL7998X_REG_P5_MIPI_WCNT_1
#define ISL7998X_REG_P5_MIPI_WCNT_2
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_1
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_2
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_3
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_4
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_5
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_6
#define ISL7998X_REG_P5_MIPI_DPHY_PARAMS_1
#define ISL7998X_REG_P5_MIPI_DPHY_SOT_PERIOD
#define ISL7998X_REG_P5_MIPI_DPHY_EOT_PERIOD
#define ISL7998X_REG_P5_MIPI_DPHY_PARAMS_2
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_7
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_8
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_9
#define ISL7998X_REG_P5_MIPI_DPHY_TIMING_CTL_10
#define ISL7998X_REG_P5_TP_GEN_MIPI
#define ISL7998X_REG_P5_ESC_MODE_TIME_CTL
#define ISL7998X_REG_P5_AUTO_TEST_ERR_DET
#define ISL7998X_REG_P5_MIPI_TIMING
#define ISL7998X_REG_P5_PIC_HEIGHT_HIGH
#define ISL7998X_REG_P5_PIC_HEIGHT_LOW
#define ISL7998X_REG_P5_MIPI_SP_HS_TRL_CTL
#define ISL7998X_REG_P5_FIFO_THRSH_CNT_1
#define ISL7998X_REG_P5_FIFO_THRSH_CNT_2
#define ISL7998X_REG_P5_TP_GEN_RND_SYNC_CTL_1
#define ISL7998X_REG_P5_TP_GEN_RND_SYNC_CTL_2
#define ISL7998X_REG_P5_PSF_FIELD_END_CTL_1
#define ISL7998X_REG_P5_PSF_FIELD_END_CTL_2
#define ISL7998X_REG_P5_PSF_FIELD_END_CTL_3
#define ISL7998X_REG_P5_PSF_FIELD_END_CTL_4
#define ISL7998X_REG_P5_MIPI_ANA_DATA_CTL_1
#define ISL7998X_REG_P5_MIPI_ANA_DATA_CTL_2
#define ISL7998X_REG_P5_MIPI_ANA_CLK_CTL
#define ISL7998X_REG_P5_PLL_ANA_STATUS
#define ISL7998X_REG_P5_PLL_ANA_MISC_CTL
#define ISL7998X_REG_P5_MIPI_ANA
#define ISL7998X_REG_P5_PLL_ANA
#define ISL7998X_REG_P5_TOTAL_PF_LINE_CNT_1
#define ISL7998X_REG_P5_TOTAL_PF_LINE_CNT_2
#define ISL7998X_REG_P5_H_LINE_CNT_1
#define ISL7998X_REG_P5_H_LINE_CNT_2
#define ISL7998X_REG_P5_HIST_LINE_CNT_1
#define ISL7998X_REG_P5_HIST_LINE_CNT_2

static const struct reg_sequence isl7998x_init_seq_1[] =;

static const struct reg_sequence isl7998x_init_seq_2[] =;

enum isl7998x_pads {};

struct isl7998x_datafmt {};

static const struct isl7998x_datafmt isl7998x_colour_fmts[] =;

/* Menu items for LINK_FREQ V4L2 control */
static const s64 link_freq_menu_items[] =;

/* Menu items for TEST_PATTERN V4L2 control */
static const char * const isl7998x_test_pattern_menu[] =;

static const char * const isl7998x_test_pattern_bars[] =;

static const char * const isl7998x_test_pattern_colors[] =;

struct isl7998x_mode {};

static const struct isl7998x_mode supported_modes[] =;

static const struct isl7998x_video_std {} isl7998x_std_res[] =;

struct isl7998x {};

static struct isl7998x *sd_to_isl7998x(struct v4l2_subdev *sd)
{}

static struct isl7998x *i2c_to_isl7998x(const struct i2c_client *client)
{}

static unsigned int isl7998x_norm_to_val(v4l2_std_id norm)
{}

static const struct isl7998x_mode *isl7998x_norm_to_mode(v4l2_std_id norm)
{}

static int isl7998x_get_nr_inputs(struct device_node *of_node)
{}

static int isl7998x_wait_power_on(struct isl7998x *isl7998x)
{}

static int isl7998x_set_standard(struct isl7998x *isl7998x, v4l2_std_id norm)
{}

static int isl7998x_init(struct isl7998x *isl7998x)
{}

static int isl7998x_set_test_pattern(struct isl7998x *isl7998x)
{}

#ifdef CONFIG_VIDEO_ADV_DEBUG
static int isl7998x_g_register(struct v4l2_subdev *sd,
			       struct v4l2_dbg_register *reg)
{}

static int isl7998x_s_register(struct v4l2_subdev *sd,
			       const struct v4l2_dbg_register *reg)
{}
#endif

static int isl7998x_g_std(struct v4l2_subdev *sd, v4l2_std_id *norm)
{}

static int isl7998x_s_std(struct v4l2_subdev *sd, v4l2_std_id norm)
{}

static int isl7998x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
{}

static int isl7998x_g_tvnorms(struct v4l2_subdev *sd, v4l2_std_id *std)
{}

static int isl7998x_g_input_status(struct v4l2_subdev *sd, u32 *status)
{}

static int isl7998x_s_stream(struct v4l2_subdev *sd, int enable)
{}

static int isl7998x_pre_streamon(struct v4l2_subdev *sd, u32 flags)
{}

static int isl7998x_post_streamoff(struct v4l2_subdev *sd)
{}

static int isl7998x_enum_mbus_code(struct v4l2_subdev *sd,
				   struct v4l2_subdev_state *sd_state,
				   struct v4l2_subdev_mbus_code_enum *code)
{}

static int isl7998x_enum_frame_size(struct v4l2_subdev *sd,
				    struct v4l2_subdev_state *sd_state,
				    struct v4l2_subdev_frame_size_enum *fse)
{}

static int isl7998x_get_fmt(struct v4l2_subdev *sd,
			    struct v4l2_subdev_state *sd_state,
			    struct v4l2_subdev_format *format)
{}

static int isl7998x_set_fmt(struct v4l2_subdev *sd,
			    struct v4l2_subdev_state *sd_state,
			    struct v4l2_subdev_format *format)
{}

static int isl7998x_set_ctrl(struct v4l2_ctrl *ctrl)
{}

static const struct v4l2_subdev_core_ops isl7998x_subdev_core_ops =;

static const struct v4l2_subdev_video_ops isl7998x_subdev_video_ops =;

static const struct v4l2_subdev_pad_ops isl7998x_subdev_pad_ops =;

static const struct v4l2_subdev_ops isl7998x_subdev_ops =;

static const struct media_entity_operations isl7998x_entity_ops =;

static const struct v4l2_ctrl_ops isl7998x_ctrl_ops =;

static const struct v4l2_ctrl_config isl7998x_ctrls[] =;

#define ISL7998X_REG_DECODER_ACA_READABLE_RANGE(page)

#define ISL7998X_REG_DECODER_ACA_WRITEABLE_RANGE(page)

#define ISL7998X_REG_DECODER_ACA_VOLATILE_RANGE(page)

static const struct regmap_range isl7998x_readable_ranges[] =;

static const struct regmap_range isl7998x_writeable_ranges[] =;

static const struct regmap_range isl7998x_volatile_ranges[] =;

static const struct regmap_access_table isl7998x_readable_table =;

static const struct regmap_access_table isl7998x_writeable_table =;

static const struct regmap_access_table isl7998x_volatile_table =;

static const struct regmap_range_cfg isl7998x_ranges[] =;

static const struct regmap_config isl7998x_regmap =;

static int isl7998x_mc_init(struct isl7998x *isl7998x)
{}

static int get_link_freq_menu_index(unsigned int lanes,
				    unsigned int inputs)
{}

static void isl7998x_remove_controls(struct isl7998x *isl7998x)
{}

static int isl7998x_init_controls(struct isl7998x *isl7998x)
{}

static int isl7998x_probe(struct i2c_client *client)
{}

static void isl7998x_remove(struct i2c_client *client)
{}

static const struct of_device_id isl7998x_of_match[] =;
MODULE_DEVICE_TABLE(of, isl7998x_of_match);

static const struct i2c_device_id isl7998x_id[] =;
MODULE_DEVICE_TABLE(i2c, isl7998x_id);

static int __maybe_unused isl7998x_runtime_resume(struct device *dev)
{}

static int __maybe_unused isl7998x_runtime_suspend(struct device *dev)
{}

static const struct dev_pm_ops isl7998x_pm_ops =;

static struct i2c_driver isl7998x_i2c_driver =;

module_i2c_driver();

MODULE_DESCRIPTION();
MODULE_AUTHOR();
MODULE_LICENSE();