#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>
#define V4L2_CID_TEST_PATTERN_CHANNELS …
#define V4L2_CID_TEST_PATTERN_COLOR …
#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[] = …;
static const s64 link_freq_menu_items[] = …;
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(…) …;