1e3adcf8fSFrançois Tigeot /* 28621f407SFrançois Tigeot * Copyright © 2016 Intel Corporation 3e3adcf8fSFrançois Tigeot * 4e3adcf8fSFrançois Tigeot * Permission is hereby granted, free of charge, to any person obtaining a 5e3adcf8fSFrançois Tigeot * copy of this software and associated documentation files (the "Software"), 6e3adcf8fSFrançois Tigeot * to deal in the Software without restriction, including without limitation 7e3adcf8fSFrançois Tigeot * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8e3adcf8fSFrançois Tigeot * and/or sell copies of the Software, and to permit persons to whom the 9e3adcf8fSFrançois Tigeot * Software is furnished to do so, subject to the following conditions: 10e3adcf8fSFrançois Tigeot * 11e3adcf8fSFrançois Tigeot * The above copyright notice and this permission notice (including the next 12e3adcf8fSFrançois Tigeot * paragraph) shall be included in all copies or substantial portions of the 13e3adcf8fSFrançois Tigeot * Software. 14e3adcf8fSFrançois Tigeot * 15e3adcf8fSFrançois Tigeot * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16e3adcf8fSFrançois Tigeot * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17e3adcf8fSFrançois Tigeot * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18e3adcf8fSFrançois Tigeot * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19e3adcf8fSFrançois Tigeot * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20e3adcf8fSFrançois Tigeot * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21e3adcf8fSFrançois Tigeot * SOFTWARE. 228621f407SFrançois Tigeot */ 238621f407SFrançois Tigeot 248621f407SFrançois Tigeot /* 258621f407SFrançois Tigeot * Please use intel_vbt_defs.h for VBT private data, to hide and abstract away 268621f407SFrançois Tigeot * the VBT from the rest of the driver. Add the parsed, clean data to struct 278621f407SFrançois Tigeot * intel_vbt_data within struct drm_i915_private. 28e3adcf8fSFrançois Tigeot */ 29e3adcf8fSFrançois Tigeot 30c0e85e96SFrançois Tigeot #ifndef _INTEL_BIOS_H_ 31c0e85e96SFrançois Tigeot #define _INTEL_BIOS_H_ 32e3adcf8fSFrançois Tigeot 331487f786SFrançois Tigeot enum intel_backlight_type { 341487f786SFrançois Tigeot INTEL_BACKLIGHT_PMIC, 351487f786SFrançois Tigeot INTEL_BACKLIGHT_LPSS, 361487f786SFrançois Tigeot INTEL_BACKLIGHT_DISPLAY_DDI, 371487f786SFrançois Tigeot INTEL_BACKLIGHT_DSI_DCS, 381487f786SFrançois Tigeot INTEL_BACKLIGHT_PANEL_DRIVER_INTERFACE, 391487f786SFrançois Tigeot }; 401487f786SFrançois Tigeot 41e3adcf8fSFrançois Tigeot struct edp_power_seq { 42e3adcf8fSFrançois Tigeot u16 t1_t3; 43e3adcf8fSFrançois Tigeot u16 t8; 44e3adcf8fSFrançois Tigeot u16 t9; 45e3adcf8fSFrançois Tigeot u16 t10; 46e3adcf8fSFrançois Tigeot u16 t11_t12; 479edbd4a0SFrançois Tigeot } __packed; 48e3adcf8fSFrançois Tigeot 49*4be47400SFrançois Tigeot /* 50*4be47400SFrançois Tigeot * MIPI Sequence Block definitions 51*4be47400SFrançois Tigeot * 52*4be47400SFrançois Tigeot * Note the VBT spec has AssertReset / DeassertReset swapped from their 53*4be47400SFrançois Tigeot * usual naming, we use the proper names here to avoid confusion when 54*4be47400SFrançois Tigeot * reading the code. 55*4be47400SFrançois Tigeot */ 568621f407SFrançois Tigeot enum mipi_seq { 578621f407SFrançois Tigeot MIPI_SEQ_END = 0, 58*4be47400SFrançois Tigeot MIPI_SEQ_DEASSERT_RESET, /* Spec says MipiAssertResetPin */ 598621f407SFrançois Tigeot MIPI_SEQ_INIT_OTP, 608621f407SFrançois Tigeot MIPI_SEQ_DISPLAY_ON, 618621f407SFrançois Tigeot MIPI_SEQ_DISPLAY_OFF, 62*4be47400SFrançois Tigeot MIPI_SEQ_ASSERT_RESET, /* Spec says MipiDeassertResetPin */ 638621f407SFrançois Tigeot MIPI_SEQ_BACKLIGHT_ON, /* sequence block v2+ */ 648621f407SFrançois Tigeot MIPI_SEQ_BACKLIGHT_OFF, /* sequence block v2+ */ 658621f407SFrançois Tigeot MIPI_SEQ_TEAR_ON, /* sequence block v2+ */ 668621f407SFrançois Tigeot MIPI_SEQ_TEAR_OFF, /* sequence block v3+ */ 678621f407SFrançois Tigeot MIPI_SEQ_POWER_ON, /* sequence block v3+ */ 688621f407SFrançois Tigeot MIPI_SEQ_POWER_OFF, /* sequence block v3+ */ 698621f407SFrançois Tigeot MIPI_SEQ_MAX 708621f407SFrançois Tigeot }; 71e3adcf8fSFrançois Tigeot 728621f407SFrançois Tigeot enum mipi_seq_element { 738621f407SFrançois Tigeot MIPI_SEQ_ELEM_END = 0, 748621f407SFrançois Tigeot MIPI_SEQ_ELEM_SEND_PKT, 758621f407SFrançois Tigeot MIPI_SEQ_ELEM_DELAY, 768621f407SFrançois Tigeot MIPI_SEQ_ELEM_GPIO, 778621f407SFrançois Tigeot MIPI_SEQ_ELEM_I2C, /* sequence block v2+ */ 788621f407SFrançois Tigeot MIPI_SEQ_ELEM_SPI, /* sequence block v3+ */ 798621f407SFrançois Tigeot MIPI_SEQ_ELEM_PMIC, /* sequence block v3+ */ 808621f407SFrançois Tigeot MIPI_SEQ_ELEM_MAX 818621f407SFrançois Tigeot }; 82ba55f2f5SFrançois Tigeot 83ba55f2f5SFrançois Tigeot #define MIPI_DSI_UNDEFINED_PANEL_ID 0 84ba55f2f5SFrançois Tigeot #define MIPI_DSI_GENERIC_PANEL_ID 1 85ba55f2f5SFrançois Tigeot 86ba55f2f5SFrançois Tigeot struct mipi_config { 879edbd4a0SFrançois Tigeot u16 panel_id; 889edbd4a0SFrançois Tigeot 89ba55f2f5SFrançois Tigeot /* General Params */ 90ba55f2f5SFrançois Tigeot u32 enable_dithering:1; 919edbd4a0SFrançois Tigeot u32 rsvd1:1; 92ba55f2f5SFrançois Tigeot u32 is_bridge:1; 939edbd4a0SFrançois Tigeot 94ba55f2f5SFrançois Tigeot u32 panel_arch_type:2; 95ba55f2f5SFrançois Tigeot u32 is_cmd_mode:1; 969edbd4a0SFrançois Tigeot 97ba55f2f5SFrançois Tigeot #define NON_BURST_SYNC_PULSE 0x1 98ba55f2f5SFrançois Tigeot #define NON_BURST_SYNC_EVENTS 0x2 99ba55f2f5SFrançois Tigeot #define BURST_MODE 0x3 100ba55f2f5SFrançois Tigeot u32 video_transfer_mode:2; 1019edbd4a0SFrançois Tigeot 102ba55f2f5SFrançois Tigeot u32 cabc_supported:1; 1038621f407SFrançois Tigeot #define PPS_BLC_PMIC 0 1048621f407SFrançois Tigeot #define PPS_BLC_SOC 1 105ba55f2f5SFrançois Tigeot u32 pwm_blc:1; 106ba55f2f5SFrançois Tigeot 107ba55f2f5SFrançois Tigeot /* Bit 13:10 */ 108ba55f2f5SFrançois Tigeot #define PIXEL_FORMAT_RGB565 0x1 109ba55f2f5SFrançois Tigeot #define PIXEL_FORMAT_RGB666 0x2 110ba55f2f5SFrançois Tigeot #define PIXEL_FORMAT_RGB666_LOOSELY_PACKED 0x3 111ba55f2f5SFrançois Tigeot #define PIXEL_FORMAT_RGB888 0x4 112ba55f2f5SFrançois Tigeot u32 videomode_color_format:4; 113ba55f2f5SFrançois Tigeot 114ba55f2f5SFrançois Tigeot /* Bit 15:14 */ 115ba55f2f5SFrançois Tigeot #define ENABLE_ROTATION_0 0x0 116ba55f2f5SFrançois Tigeot #define ENABLE_ROTATION_90 0x1 117ba55f2f5SFrançois Tigeot #define ENABLE_ROTATION_180 0x2 118ba55f2f5SFrançois Tigeot #define ENABLE_ROTATION_270 0x3 119ba55f2f5SFrançois Tigeot u32 rotation:2; 120ba55f2f5SFrançois Tigeot u32 bta_enabled:1; 121ba55f2f5SFrançois Tigeot u32 rsvd2:15; 122ba55f2f5SFrançois Tigeot 123ba55f2f5SFrançois Tigeot /* 2 byte Port Description */ 124ba55f2f5SFrançois Tigeot #define DUAL_LINK_NOT_SUPPORTED 0 125ba55f2f5SFrançois Tigeot #define DUAL_LINK_FRONT_BACK 1 126ba55f2f5SFrançois Tigeot #define DUAL_LINK_PIXEL_ALT 2 127ba55f2f5SFrançois Tigeot u16 dual_link:2; 128ba55f2f5SFrançois Tigeot u16 lane_cnt:2; 1292c9916cdSFrançois Tigeot u16 pixel_overlap:3; 1301487f786SFrançois Tigeot u16 rgb_flip:1; 1311487f786SFrançois Tigeot #define DL_DCS_PORT_A 0x00 1321487f786SFrançois Tigeot #define DL_DCS_PORT_C 0x01 1331487f786SFrançois Tigeot #define DL_DCS_PORT_A_AND_C 0x02 1341487f786SFrançois Tigeot u16 dl_dcs_cabc_ports:2; 1351487f786SFrançois Tigeot u16 dl_dcs_backlight_ports:2; 1361487f786SFrançois Tigeot u16 rsvd3:4; 137ba55f2f5SFrançois Tigeot 138ba55f2f5SFrançois Tigeot u16 rsvd4; 139ba55f2f5SFrançois Tigeot 1401b13d190SFrançois Tigeot u8 rsvd5; 1411b13d190SFrançois Tigeot u32 target_burst_mode_freq; 142ba55f2f5SFrançois Tigeot u32 dsi_ddr_clk; 1439edbd4a0SFrançois Tigeot u32 bridge_ref_clk; 1449edbd4a0SFrançois Tigeot 145ba55f2f5SFrançois Tigeot #define BYTE_CLK_SEL_20MHZ 0 146ba55f2f5SFrançois Tigeot #define BYTE_CLK_SEL_10MHZ 1 147ba55f2f5SFrançois Tigeot #define BYTE_CLK_SEL_5MHZ 2 148ba55f2f5SFrançois Tigeot u8 byte_clk_sel:2; 149ba55f2f5SFrançois Tigeot 150ba55f2f5SFrançois Tigeot u8 rsvd6:6; 151ba55f2f5SFrançois Tigeot 152ba55f2f5SFrançois Tigeot /* DPHY Flags */ 153ba55f2f5SFrançois Tigeot u16 dphy_param_valid:1; 154ba55f2f5SFrançois Tigeot u16 eot_pkt_disabled:1; 155ba55f2f5SFrançois Tigeot u16 enable_clk_stop:1; 156ba55f2f5SFrançois Tigeot u16 rsvd7:13; 157ba55f2f5SFrançois Tigeot 158ba55f2f5SFrançois Tigeot u32 hs_tx_timeout; 159ba55f2f5SFrançois Tigeot u32 lp_rx_timeout; 160ba55f2f5SFrançois Tigeot u32 turn_around_timeout; 161ba55f2f5SFrançois Tigeot u32 device_reset_timer; 162ba55f2f5SFrançois Tigeot u32 master_init_timer; 163ba55f2f5SFrançois Tigeot u32 dbi_bw_timer; 164ba55f2f5SFrançois Tigeot u32 lp_byte_clk_val; 165ba55f2f5SFrançois Tigeot 166ba55f2f5SFrançois Tigeot /* 4 byte Dphy Params */ 167ba55f2f5SFrançois Tigeot u32 prepare_cnt:6; 168ba55f2f5SFrançois Tigeot u32 rsvd8:2; 1699edbd4a0SFrançois Tigeot u32 clk_zero_cnt:8; 1709edbd4a0SFrançois Tigeot u32 trail_cnt:5; 171ba55f2f5SFrançois Tigeot u32 rsvd9:3; 1729edbd4a0SFrançois Tigeot u32 exit_zero_cnt:6; 173ba55f2f5SFrançois Tigeot u32 rsvd10:2; 1749edbd4a0SFrançois Tigeot 1759edbd4a0SFrançois Tigeot u32 clk_lane_switch_cnt; 176ba55f2f5SFrançois Tigeot u32 hl_switch_cnt; 177ba55f2f5SFrançois Tigeot 178ba55f2f5SFrançois Tigeot u32 rsvd11[6]; 179ba55f2f5SFrançois Tigeot 180ba55f2f5SFrançois Tigeot /* timings based on dphy spec */ 181ba55f2f5SFrançois Tigeot u8 tclk_miss; 182ba55f2f5SFrançois Tigeot u8 tclk_post; 183ba55f2f5SFrançois Tigeot u8 rsvd12; 184ba55f2f5SFrançois Tigeot u8 tclk_pre; 185ba55f2f5SFrançois Tigeot u8 tclk_prepare; 186ba55f2f5SFrançois Tigeot u8 tclk_settle; 187ba55f2f5SFrançois Tigeot u8 tclk_term_enable; 188ba55f2f5SFrançois Tigeot u8 tclk_trail; 189ba55f2f5SFrançois Tigeot u16 tclk_prepare_clkzero; 190ba55f2f5SFrançois Tigeot u8 rsvd13; 191ba55f2f5SFrançois Tigeot u8 td_term_enable; 192ba55f2f5SFrançois Tigeot u8 teot; 193ba55f2f5SFrançois Tigeot u8 ths_exit; 194ba55f2f5SFrançois Tigeot u8 ths_prepare; 195ba55f2f5SFrançois Tigeot u16 ths_prepare_hszero; 196ba55f2f5SFrançois Tigeot u8 rsvd14; 197ba55f2f5SFrançois Tigeot u8 ths_settle; 198ba55f2f5SFrançois Tigeot u8 ths_skip; 199ba55f2f5SFrançois Tigeot u8 ths_trail; 200ba55f2f5SFrançois Tigeot u8 tinit; 201ba55f2f5SFrançois Tigeot u8 tlpx; 202ba55f2f5SFrançois Tigeot u8 rsvd15[3]; 203ba55f2f5SFrançois Tigeot 204ba55f2f5SFrançois Tigeot /* GPIOs */ 205ba55f2f5SFrançois Tigeot u8 panel_enable; 206ba55f2f5SFrançois Tigeot u8 bl_enable; 207ba55f2f5SFrançois Tigeot u8 pwm_enable; 208ba55f2f5SFrançois Tigeot u8 reset_r_n; 209ba55f2f5SFrançois Tigeot u8 pwr_down_r; 210ba55f2f5SFrançois Tigeot u8 stdby_r_n; 211ba55f2f5SFrançois Tigeot 2129edbd4a0SFrançois Tigeot } __packed; 2139edbd4a0SFrançois Tigeot 2148621f407SFrançois Tigeot /* all delays have a unit of 100us */ 215ba55f2f5SFrançois Tigeot struct mipi_pps_data { 216ba55f2f5SFrançois Tigeot u16 panel_on_delay; 217ba55f2f5SFrançois Tigeot u16 bl_enable_delay; 218ba55f2f5SFrançois Tigeot u16 bl_disable_delay; 219ba55f2f5SFrançois Tigeot u16 panel_off_delay; 220ba55f2f5SFrançois Tigeot u16 panel_power_cycle_delay; 2212c9916cdSFrançois Tigeot } __packed; 222ba55f2f5SFrançois Tigeot 223c0e85e96SFrançois Tigeot #endif /* _INTEL_BIOS_H_ */ 224