162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * adv7842 - Analog Devices ADV7842 video decoder driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _ADV7842_ 962306a36Sopenharmony_ci#define _ADV7842_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* Analog input muxing modes (AFE register 0x02, [2:0]) */ 1262306a36Sopenharmony_cienum adv7842_ain_sel { 1362306a36Sopenharmony_ci ADV7842_AIN1_2_3_NC_SYNC_1_2 = 0, 1462306a36Sopenharmony_ci ADV7842_AIN4_5_6_NC_SYNC_2_1 = 1, 1562306a36Sopenharmony_ci ADV7842_AIN7_8_9_NC_SYNC_3_1 = 2, 1662306a36Sopenharmony_ci ADV7842_AIN10_11_12_NC_SYNC_4_1 = 3, 1762306a36Sopenharmony_ci ADV7842_AIN9_4_5_6_SYNC_2_1 = 4, 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* 2162306a36Sopenharmony_ci * Bus rotation and reordering. This is used to specify component reordering on 2262306a36Sopenharmony_ci * the board and describes the components order on the bus when the ADV7842 2362306a36Sopenharmony_ci * outputs RGB. 2462306a36Sopenharmony_ci */ 2562306a36Sopenharmony_cienum adv7842_bus_order { 2662306a36Sopenharmony_ci ADV7842_BUS_ORDER_RGB, /* No operation */ 2762306a36Sopenharmony_ci ADV7842_BUS_ORDER_GRB, /* Swap 1-2 */ 2862306a36Sopenharmony_ci ADV7842_BUS_ORDER_RBG, /* Swap 2-3 */ 2962306a36Sopenharmony_ci ADV7842_BUS_ORDER_BGR, /* Swap 1-3 */ 3062306a36Sopenharmony_ci ADV7842_BUS_ORDER_BRG, /* Rotate right */ 3162306a36Sopenharmony_ci ADV7842_BUS_ORDER_GBR, /* Rotate left */ 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* Input Color Space (IO register 0x02, [7:4]) */ 3562306a36Sopenharmony_cienum adv7842_inp_color_space { 3662306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_LIM_RGB = 0, 3762306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_FULL_RGB = 1, 3862306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_LIM_YCbCr_601 = 2, 3962306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_LIM_YCbCr_709 = 3, 4062306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_XVYCC_601 = 4, 4162306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_XVYCC_709 = 5, 4262306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_FULL_YCbCr_601 = 6, 4362306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_FULL_YCbCr_709 = 7, 4462306a36Sopenharmony_ci ADV7842_INP_COLOR_SPACE_AUTO = 0xf, 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* Select output format (IO register 0x03, [4:2]) */ 4862306a36Sopenharmony_cienum adv7842_op_format_mode_sel { 4962306a36Sopenharmony_ci ADV7842_OP_FORMAT_MODE0 = 0x00, 5062306a36Sopenharmony_ci ADV7842_OP_FORMAT_MODE1 = 0x04, 5162306a36Sopenharmony_ci ADV7842_OP_FORMAT_MODE2 = 0x08, 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* Mode of operation */ 5562306a36Sopenharmony_cienum adv7842_mode { 5662306a36Sopenharmony_ci ADV7842_MODE_SDP, 5762306a36Sopenharmony_ci ADV7842_MODE_COMP, 5862306a36Sopenharmony_ci ADV7842_MODE_RGB, 5962306a36Sopenharmony_ci ADV7842_MODE_HDMI 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci/* Video standard select (IO register 0x00, [5:0]) */ 6362306a36Sopenharmony_cienum adv7842_vid_std_select { 6462306a36Sopenharmony_ci /* SDP */ 6562306a36Sopenharmony_ci ADV7842_SDP_VID_STD_CVBS_SD_4x1 = 0x01, 6662306a36Sopenharmony_ci ADV7842_SDP_VID_STD_YC_SD4_x1 = 0x09, 6762306a36Sopenharmony_ci /* RGB */ 6862306a36Sopenharmony_ci ADV7842_RGB_VID_STD_AUTO_GRAPH_MODE = 0x07, 6962306a36Sopenharmony_ci /* HDMI GR */ 7062306a36Sopenharmony_ci ADV7842_HDMI_GR_VID_STD_AUTO_GRAPH_MODE = 0x02, 7162306a36Sopenharmony_ci /* HDMI COMP */ 7262306a36Sopenharmony_ci ADV7842_HDMI_COMP_VID_STD_HD_1250P = 0x1e, 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cienum adv7842_select_input { 7662306a36Sopenharmony_ci ADV7842_SELECT_HDMI_PORT_A, 7762306a36Sopenharmony_ci ADV7842_SELECT_HDMI_PORT_B, 7862306a36Sopenharmony_ci ADV7842_SELECT_VGA_RGB, 7962306a36Sopenharmony_ci ADV7842_SELECT_VGA_COMP, 8062306a36Sopenharmony_ci ADV7842_SELECT_SDP_CVBS, 8162306a36Sopenharmony_ci ADV7842_SELECT_SDP_YC, 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cienum adv7842_drive_strength { 8562306a36Sopenharmony_ci ADV7842_DR_STR_LOW = 0, 8662306a36Sopenharmony_ci ADV7842_DR_STR_MEDIUM_LOW = 1, 8762306a36Sopenharmony_ci ADV7842_DR_STR_MEDIUM_HIGH = 2, 8862306a36Sopenharmony_ci ADV7842_DR_STR_HIGH = 3, 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cistruct adv7842_sdp_csc_coeff { 9262306a36Sopenharmony_ci bool manual; 9362306a36Sopenharmony_ci u16 scaling; 9462306a36Sopenharmony_ci u16 A1; 9562306a36Sopenharmony_ci u16 A2; 9662306a36Sopenharmony_ci u16 A3; 9762306a36Sopenharmony_ci u16 A4; 9862306a36Sopenharmony_ci u16 B1; 9962306a36Sopenharmony_ci u16 B2; 10062306a36Sopenharmony_ci u16 B3; 10162306a36Sopenharmony_ci u16 B4; 10262306a36Sopenharmony_ci u16 C1; 10362306a36Sopenharmony_ci u16 C2; 10462306a36Sopenharmony_ci u16 C3; 10562306a36Sopenharmony_ci u16 C4; 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cistruct adv7842_sdp_io_sync_adjustment { 10962306a36Sopenharmony_ci bool adjust; 11062306a36Sopenharmony_ci u16 hs_beg; 11162306a36Sopenharmony_ci u16 hs_width; 11262306a36Sopenharmony_ci u16 de_beg; 11362306a36Sopenharmony_ci u16 de_end; 11462306a36Sopenharmony_ci u8 vs_beg_o; 11562306a36Sopenharmony_ci u8 vs_beg_e; 11662306a36Sopenharmony_ci u8 vs_end_o; 11762306a36Sopenharmony_ci u8 vs_end_e; 11862306a36Sopenharmony_ci u8 de_v_beg_o; 11962306a36Sopenharmony_ci u8 de_v_beg_e; 12062306a36Sopenharmony_ci u8 de_v_end_o; 12162306a36Sopenharmony_ci u8 de_v_end_e; 12262306a36Sopenharmony_ci}; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci/* Platform dependent definition */ 12562306a36Sopenharmony_cistruct adv7842_platform_data { 12662306a36Sopenharmony_ci /* chip reset during probe */ 12762306a36Sopenharmony_ci unsigned chip_reset:1; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci /* DIS_PWRDNB: 1 if the PWRDNB pin is unused and unconnected */ 13062306a36Sopenharmony_ci unsigned disable_pwrdnb:1; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci /* DIS_CABLE_DET_RST: 1 if the 5V pins are unused and unconnected */ 13362306a36Sopenharmony_ci unsigned disable_cable_det_rst:1; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci /* Analog input muxing mode */ 13662306a36Sopenharmony_ci enum adv7842_ain_sel ain_sel; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci /* Bus rotation and reordering */ 13962306a36Sopenharmony_ci enum adv7842_bus_order bus_order; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci /* Select output format mode */ 14262306a36Sopenharmony_ci enum adv7842_op_format_mode_sel op_format_mode_sel; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci /* Default mode */ 14562306a36Sopenharmony_ci enum adv7842_mode mode; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci /* Default input */ 14862306a36Sopenharmony_ci unsigned input; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci /* Video standard */ 15162306a36Sopenharmony_ci enum adv7842_vid_std_select vid_std_select; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci /* IO register 0x02 */ 15462306a36Sopenharmony_ci unsigned alt_gamma:1; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci /* IO register 0x05 */ 15762306a36Sopenharmony_ci unsigned blank_data:1; 15862306a36Sopenharmony_ci unsigned insert_av_codes:1; 15962306a36Sopenharmony_ci unsigned replicate_av_codes:1; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci /* IO register 0x30 */ 16262306a36Sopenharmony_ci unsigned output_bus_lsb_to_msb:1; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci /* IO register 0x14 */ 16562306a36Sopenharmony_ci enum adv7842_drive_strength dr_str_data; 16662306a36Sopenharmony_ci enum adv7842_drive_strength dr_str_clk; 16762306a36Sopenharmony_ci enum adv7842_drive_strength dr_str_sync; 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci /* 17062306a36Sopenharmony_ci * IO register 0x19: Adjustment to the LLC DLL phase in 17162306a36Sopenharmony_ci * increments of 1/32 of a clock period. 17262306a36Sopenharmony_ci */ 17362306a36Sopenharmony_ci unsigned llc_dll_phase:5; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci /* External RAM for 3-D comb or frame synchronizer */ 17662306a36Sopenharmony_ci unsigned sd_ram_size; /* ram size in MB */ 17762306a36Sopenharmony_ci unsigned sd_ram_ddr:1; /* ddr or sdr sdram */ 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci /* HDMI free run, CP-reg 0xBA */ 18062306a36Sopenharmony_ci unsigned hdmi_free_run_enable:1; 18162306a36Sopenharmony_ci /* 0 = Mode 0: run when there is no TMDS clock 18262306a36Sopenharmony_ci 1 = Mode 1: run when there is no TMDS clock or the 18362306a36Sopenharmony_ci video resolution does not match programmed one. */ 18462306a36Sopenharmony_ci unsigned hdmi_free_run_mode:1; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci /* SDP free run, CP-reg 0xDD */ 18762306a36Sopenharmony_ci unsigned sdp_free_run_auto:1; 18862306a36Sopenharmony_ci unsigned sdp_free_run_man_col_en:1; 18962306a36Sopenharmony_ci unsigned sdp_free_run_cbar_en:1; 19062306a36Sopenharmony_ci unsigned sdp_free_run_force:1; 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci /* HPA manual (0) or auto (1), affects HDMI register 0x69 */ 19362306a36Sopenharmony_ci unsigned hpa_auto:1; 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci struct adv7842_sdp_csc_coeff sdp_csc_coeff; 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci struct adv7842_sdp_io_sync_adjustment sdp_io_sync_625; 19862306a36Sopenharmony_ci struct adv7842_sdp_io_sync_adjustment sdp_io_sync_525; 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci /* i2c addresses */ 20162306a36Sopenharmony_ci u8 i2c_sdp_io; 20262306a36Sopenharmony_ci u8 i2c_sdp; 20362306a36Sopenharmony_ci u8 i2c_cp; 20462306a36Sopenharmony_ci u8 i2c_vdp; 20562306a36Sopenharmony_ci u8 i2c_afe; 20662306a36Sopenharmony_ci u8 i2c_hdmi; 20762306a36Sopenharmony_ci u8 i2c_repeater; 20862306a36Sopenharmony_ci u8 i2c_edid; 20962306a36Sopenharmony_ci u8 i2c_infoframe; 21062306a36Sopenharmony_ci u8 i2c_cec; 21162306a36Sopenharmony_ci u8 i2c_avlink; 21262306a36Sopenharmony_ci}; 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci#define V4L2_CID_ADV_RX_ANALOG_SAMPLING_PHASE (V4L2_CID_DV_CLASS_BASE + 0x1000) 21562306a36Sopenharmony_ci#define V4L2_CID_ADV_RX_FREE_RUN_COLOR_MANUAL (V4L2_CID_DV_CLASS_BASE + 0x1001) 21662306a36Sopenharmony_ci#define V4L2_CID_ADV_RX_FREE_RUN_COLOR (V4L2_CID_DV_CLASS_BASE + 0x1002) 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci/* custom ioctl, used to test the external RAM that's used by the 21962306a36Sopenharmony_ci * deinterlacer. */ 22062306a36Sopenharmony_ci#define ADV7842_CMD_RAM_TEST _IO('V', BASE_VIDIOC_PRIVATE) 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci#define ADV7842_EDID_PORT_A 0 22362306a36Sopenharmony_ci#define ADV7842_EDID_PORT_B 1 22462306a36Sopenharmony_ci#define ADV7842_EDID_PORT_VGA 2 22562306a36Sopenharmony_ci#define ADV7842_PAD_SOURCE 3 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci#endif 228