1 // SPDX-License-Identifier: GPL-2.0 2 #define USE_DVICHIP 3 #ifdef USE_DVICHIP 4 #include "ddk750_chip.h" 5 #include "ddk750_reg.h" 6 #include "ddk750_dvi.h" 7 #include "ddk750_sii164.h" 8 9 /* 10 * This global variable contains all the supported driver and its corresponding 11 * function API. Please set the function pointer to NULL whenever the function 12 * is not supported. 13 */ 14 static struct dvi_ctrl_device dcft_supported_dvi_controller[] = { 15 #ifdef DVI_CTRL_SII164 16 { 17 .init = sii164InitChip, 18 .get_vendor_id = sii164GetVendorID, 19 .get_device_id = sii164GetDeviceID, 20 #ifdef SII164_FULL_FUNCTIONS 21 .reset_chip = sii164ResetChip, 22 .get_chip_string = sii164GetChipString, 23 .set_power = sii164SetPower, 24 .enable_hot_plug_detection = sii164EnableHotPlugDetection, 25 .is_connected = sii164IsConnected, 26 .check_interrupt = sii164CheckInterrupt, 27 .clear_interrupt = sii164ClearInterrupt, 28 #endif 29 }, 30 #endif 31 }; 32 33 int dvi_init(unsigned char edge_select, 34 unsigned char bus_select, 35 unsigned char dual_edge_clk_select, 36 unsigned char hsync_enable, 37 unsigned char vsync_enable, 38 unsigned char deskew_enable, 39 unsigned char deskew_setting, 40 unsigned char continuous_sync_enable, 41 unsigned char pll_filter_enable, 42 unsigned char pll_filter_value) 43 { 44 struct dvi_ctrl_device *current_dvi_ctrl; 45 46 current_dvi_ctrl = dcft_supported_dvi_controller; 47 if (current_dvi_ctrl->init) { 48 return current_dvi_ctrl->init(edge_select, 49 bus_select, 50 dual_edge_clk_select, 51 hsync_enable, 52 vsync_enable, 53 deskew_enable, 54 deskew_setting, 55 continuous_sync_enable, 56 pll_filter_enable, 57 pll_filter_value); 58 } 59 return -1; /* error */ 60 } 61 62 #endif 63