dp_catalog.h (4909B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. 4 */ 5 6#ifndef _DP_CATALOG_H_ 7#define _DP_CATALOG_H_ 8 9#include <drm/drm_modes.h> 10 11#include "dp_parser.h" 12#include "disp/msm_disp_snapshot.h" 13 14/* interrupts */ 15#define DP_INTR_HPD BIT(0) 16#define DP_INTR_AUX_I2C_DONE BIT(3) 17#define DP_INTR_WRONG_ADDR BIT(6) 18#define DP_INTR_TIMEOUT BIT(9) 19#define DP_INTR_NACK_DEFER BIT(12) 20#define DP_INTR_WRONG_DATA_CNT BIT(15) 21#define DP_INTR_I2C_NACK BIT(18) 22#define DP_INTR_I2C_DEFER BIT(21) 23#define DP_INTR_PLL_UNLOCKED BIT(24) 24#define DP_INTR_AUX_ERROR BIT(27) 25 26#define DP_INTR_READY_FOR_VIDEO BIT(0) 27#define DP_INTR_IDLE_PATTERN_SENT BIT(3) 28#define DP_INTR_FRAME_END BIT(6) 29#define DP_INTR_CRC_UPDATED BIT(9) 30 31#define DP_AUX_CFG_MAX_VALUE_CNT 3 32 33/* PHY AUX config registers */ 34enum dp_phy_aux_config_type { 35 PHY_AUX_CFG0, 36 PHY_AUX_CFG1, 37 PHY_AUX_CFG2, 38 PHY_AUX_CFG3, 39 PHY_AUX_CFG4, 40 PHY_AUX_CFG5, 41 PHY_AUX_CFG6, 42 PHY_AUX_CFG7, 43 PHY_AUX_CFG8, 44 PHY_AUX_CFG9, 45 PHY_AUX_CFG_MAX, 46}; 47 48enum dp_catalog_audio_sdp_type { 49 DP_AUDIO_SDP_STREAM, 50 DP_AUDIO_SDP_TIMESTAMP, 51 DP_AUDIO_SDP_INFOFRAME, 52 DP_AUDIO_SDP_COPYMANAGEMENT, 53 DP_AUDIO_SDP_ISRC, 54 DP_AUDIO_SDP_MAX, 55}; 56 57enum dp_catalog_audio_header_type { 58 DP_AUDIO_SDP_HEADER_1, 59 DP_AUDIO_SDP_HEADER_2, 60 DP_AUDIO_SDP_HEADER_3, 61 DP_AUDIO_SDP_HEADER_MAX, 62}; 63 64struct dp_catalog { 65 u32 aux_data; 66 u32 total; 67 u32 sync_start; 68 u32 width_blanking; 69 u32 dp_active; 70 enum dp_catalog_audio_sdp_type sdp_type; 71 enum dp_catalog_audio_header_type sdp_header; 72 u32 audio_data; 73 bool wide_bus_en; 74}; 75 76/* Debug module */ 77void dp_catalog_snapshot(struct dp_catalog *dp_catalog, struct msm_disp_state *disp_state); 78 79/* AUX APIs */ 80u32 dp_catalog_aux_read_data(struct dp_catalog *dp_catalog); 81int dp_catalog_aux_write_data(struct dp_catalog *dp_catalog); 82int dp_catalog_aux_write_trans(struct dp_catalog *dp_catalog); 83int dp_catalog_aux_clear_trans(struct dp_catalog *dp_catalog, bool read); 84int dp_catalog_aux_clear_hw_interrupts(struct dp_catalog *dp_catalog); 85void dp_catalog_aux_reset(struct dp_catalog *dp_catalog); 86void dp_catalog_aux_enable(struct dp_catalog *dp_catalog, bool enable); 87void dp_catalog_aux_update_cfg(struct dp_catalog *dp_catalog); 88int dp_catalog_aux_wait_for_hpd_connect_state(struct dp_catalog *dp_catalog); 89u32 dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog); 90 91/* DP Controller APIs */ 92void dp_catalog_ctrl_state_ctrl(struct dp_catalog *dp_catalog, u32 state); 93void dp_catalog_ctrl_config_ctrl(struct dp_catalog *dp_catalog, u32 config); 94void dp_catalog_ctrl_lane_mapping(struct dp_catalog *dp_catalog); 95void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog *dp_catalog, bool enable); 96void dp_catalog_ctrl_config_misc(struct dp_catalog *dp_catalog, u32 cc, u32 tb); 97void dp_catalog_ctrl_config_msa(struct dp_catalog *dp_catalog, u32 rate, 98 u32 stream_rate_khz, bool fixed_nvid); 99int dp_catalog_ctrl_set_pattern_state_bit(struct dp_catalog *dp_catalog, u32 pattern); 100u32 dp_catalog_hw_revision(const struct dp_catalog *dp_catalog); 101void dp_catalog_ctrl_reset(struct dp_catalog *dp_catalog); 102bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog *dp_catalog); 103void dp_catalog_ctrl_enable_irq(struct dp_catalog *dp_catalog, bool enable); 104void dp_catalog_hpd_config_intr(struct dp_catalog *dp_catalog, 105 u32 intr_mask, bool en); 106void dp_catalog_ctrl_hpd_config(struct dp_catalog *dp_catalog); 107u32 dp_catalog_link_is_connected(struct dp_catalog *dp_catalog); 108u32 dp_catalog_hpd_get_intr_status(struct dp_catalog *dp_catalog); 109void dp_catalog_ctrl_phy_reset(struct dp_catalog *dp_catalog); 110int dp_catalog_ctrl_update_vx_px(struct dp_catalog *dp_catalog, u8 v_level, 111 u8 p_level); 112int dp_catalog_ctrl_get_interrupt(struct dp_catalog *dp_catalog); 113void dp_catalog_ctrl_update_transfer_unit(struct dp_catalog *dp_catalog, 114 u32 dp_tu, u32 valid_boundary, 115 u32 valid_boundary2); 116void dp_catalog_ctrl_send_phy_pattern(struct dp_catalog *dp_catalog, 117 u32 pattern); 118u32 dp_catalog_ctrl_read_phy_pattern(struct dp_catalog *dp_catalog); 119 120/* DP Panel APIs */ 121int dp_catalog_panel_timing_cfg(struct dp_catalog *dp_catalog); 122void dp_catalog_dump_regs(struct dp_catalog *dp_catalog); 123void dp_catalog_panel_tpg_enable(struct dp_catalog *dp_catalog, 124 struct drm_display_mode *drm_mode); 125void dp_catalog_panel_tpg_disable(struct dp_catalog *dp_catalog); 126 127struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_io *io); 128 129/* DP Audio APIs */ 130void dp_catalog_audio_get_header(struct dp_catalog *catalog); 131void dp_catalog_audio_set_header(struct dp_catalog *catalog); 132void dp_catalog_audio_config_acr(struct dp_catalog *catalog); 133void dp_catalog_audio_enable(struct dp_catalog *catalog); 134void dp_catalog_audio_config_sdp(struct dp_catalog *catalog); 135void dp_catalog_audio_init(struct dp_catalog *catalog); 136void dp_catalog_audio_sfe_level(struct dp_catalog *catalog); 137 138#endif /* _DP_CATALOG_H_ */