linux/drivers/staging/sm750fb/ddk750_dvi.c

// SPDX-License-Identifier: GPL-2.0
#define USE_DVICHIP
#ifdef USE_DVICHIP
#include "ddk750_chip.h"
#include "ddk750_reg.h"
#include "ddk750_dvi.h"
#include "ddk750_sii164.h"

/*
 * This global variable contains all the supported driver and its corresponding
 * function API. Please set the function pointer to NULL whenever the function
 * is not supported.
 */
static struct dvi_ctrl_device dcft_supported_dvi_controller[] = {
#ifdef DVI_CTRL_SII164
	{
		.init = sii164_init_chip,
		.get_vendor_id = sii164_get_vendor_id,
		.get_device_id = sii164GetDeviceID,
#ifdef SII164_FULL_FUNCTIONS
		.reset_chip = sii164ResetChip,
		.get_chip_string = sii164GetChipString,
		.set_power = sii164SetPower,
		.enable_hot_plug_detection = sii164EnableHotPlugDetection,
		.is_connected = sii164IsConnected,
		.check_interrupt = sii164CheckInterrupt,
		.clear_interrupt = sii164ClearInterrupt,
#endif
	},
#endif
};

int dvi_init(unsigned char edge_select,
	     unsigned char bus_select,
	     unsigned char dual_edge_clk_select,
	     unsigned char hsync_enable,
	     unsigned char vsync_enable,
	     unsigned char deskew_enable,
	     unsigned char deskew_setting,
	     unsigned char continuous_sync_enable,
	     unsigned char pll_filter_enable,
	     unsigned char pll_filter_value)
{
	struct dvi_ctrl_device *current_dvi_ctrl;

	current_dvi_ctrl = dcft_supported_dvi_controller;
	if (current_dvi_ctrl->init) {
		return current_dvi_ctrl->init(edge_select,
					      bus_select,
					      dual_edge_clk_select,
					      hsync_enable,
					      vsync_enable,
					      deskew_enable,
					      deskew_setting,
					      continuous_sync_enable,
					      pll_filter_enable,
					      pll_filter_value);
	}
	return -1; /* error */
}

#endif