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_utils.h" |
12 | #include "disp/msm_disp_snapshot.h" |
13 | |
14 | /* interrupts */ |
15 | #define DP_INTR_HPD BIT(0) |
16 | #define DP_INTR_AUX_XFER_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 | #define DP_HW_VERSION_1_0 0x10000000 |
34 | #define DP_HW_VERSION_1_2 0x10020000 |
35 | |
36 | /* PHY AUX config registers */ |
37 | enum dp_phy_aux_config_type { |
38 | PHY_AUX_CFG0, |
39 | PHY_AUX_CFG1, |
40 | PHY_AUX_CFG2, |
41 | PHY_AUX_CFG3, |
42 | PHY_AUX_CFG4, |
43 | PHY_AUX_CFG5, |
44 | PHY_AUX_CFG6, |
45 | PHY_AUX_CFG7, |
46 | PHY_AUX_CFG8, |
47 | PHY_AUX_CFG9, |
48 | PHY_AUX_CFG_MAX, |
49 | }; |
50 | |
51 | enum dp_catalog_audio_sdp_type { |
52 | DP_AUDIO_SDP_STREAM, |
53 | DP_AUDIO_SDP_TIMESTAMP, |
54 | DP_AUDIO_SDP_INFOFRAME, |
55 | DP_AUDIO_SDP_COPYMANAGEMENT, |
56 | DP_AUDIO_SDP_ISRC, |
57 | DP_AUDIO_SDP_MAX, |
58 | }; |
59 | |
60 | enum { |
61 | , |
62 | , |
63 | , |
64 | , |
65 | }; |
66 | |
67 | struct dp_catalog { |
68 | u32 aux_data; |
69 | u32 total; |
70 | u32 sync_start; |
71 | u32 width_blanking; |
72 | u32 dp_active; |
73 | enum dp_catalog_audio_sdp_type sdp_type; |
74 | enum dp_catalog_audio_header_type ; |
75 | u32 audio_data; |
76 | bool wide_bus_en; |
77 | }; |
78 | |
79 | /* Debug module */ |
80 | void dp_catalog_snapshot(struct dp_catalog *dp_catalog, struct msm_disp_state *disp_state); |
81 | |
82 | /* AUX APIs */ |
83 | u32 dp_catalog_aux_read_data(struct dp_catalog *dp_catalog); |
84 | int dp_catalog_aux_write_data(struct dp_catalog *dp_catalog); |
85 | int dp_catalog_aux_write_trans(struct dp_catalog *dp_catalog); |
86 | int dp_catalog_aux_clear_trans(struct dp_catalog *dp_catalog, bool read); |
87 | int dp_catalog_aux_clear_hw_interrupts(struct dp_catalog *dp_catalog); |
88 | void dp_catalog_aux_reset(struct dp_catalog *dp_catalog); |
89 | void dp_catalog_aux_enable(struct dp_catalog *dp_catalog, bool enable); |
90 | int dp_catalog_aux_wait_for_hpd_connect_state(struct dp_catalog *dp_catalog); |
91 | u32 dp_catalog_aux_get_irq(struct dp_catalog *dp_catalog); |
92 | |
93 | /* DP Controller APIs */ |
94 | void dp_catalog_ctrl_state_ctrl(struct dp_catalog *dp_catalog, u32 state); |
95 | void dp_catalog_ctrl_config_ctrl(struct dp_catalog *dp_catalog, u32 config); |
96 | void dp_catalog_ctrl_lane_mapping(struct dp_catalog *dp_catalog); |
97 | void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog *dp_catalog, bool enable); |
98 | void dp_catalog_ctrl_psr_mainlink_enable(struct dp_catalog *dp_catalog, bool enable); |
99 | void dp_catalog_setup_peripheral_flush(struct dp_catalog *dp_catalog); |
100 | void dp_catalog_ctrl_config_misc(struct dp_catalog *dp_catalog, u32 cc, u32 tb); |
101 | void dp_catalog_ctrl_config_msa(struct dp_catalog *dp_catalog, u32 rate, |
102 | u32 stream_rate_khz, bool fixed_nvid, bool is_ycbcr_420); |
103 | int dp_catalog_ctrl_set_pattern_state_bit(struct dp_catalog *dp_catalog, u32 pattern); |
104 | u32 dp_catalog_hw_revision(const struct dp_catalog *dp_catalog); |
105 | void dp_catalog_ctrl_reset(struct dp_catalog *dp_catalog); |
106 | bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog *dp_catalog); |
107 | void dp_catalog_ctrl_enable_irq(struct dp_catalog *dp_catalog, bool enable); |
108 | void dp_catalog_hpd_config_intr(struct dp_catalog *dp_catalog, |
109 | u32 intr_mask, bool en); |
110 | void dp_catalog_ctrl_hpd_enable(struct dp_catalog *dp_catalog); |
111 | void dp_catalog_ctrl_hpd_disable(struct dp_catalog *dp_catalog); |
112 | void dp_catalog_ctrl_config_psr(struct dp_catalog *dp_catalog); |
113 | void dp_catalog_ctrl_set_psr(struct dp_catalog *dp_catalog, bool enter); |
114 | u32 dp_catalog_link_is_connected(struct dp_catalog *dp_catalog); |
115 | u32 dp_catalog_hpd_get_intr_status(struct dp_catalog *dp_catalog); |
116 | void dp_catalog_ctrl_phy_reset(struct dp_catalog *dp_catalog); |
117 | int dp_catalog_ctrl_get_interrupt(struct dp_catalog *dp_catalog); |
118 | u32 dp_catalog_ctrl_read_psr_interrupt_status(struct dp_catalog *dp_catalog); |
119 | void dp_catalog_ctrl_update_transfer_unit(struct dp_catalog *dp_catalog, |
120 | u32 dp_tu, u32 valid_boundary, |
121 | u32 valid_boundary2); |
122 | void dp_catalog_ctrl_send_phy_pattern(struct dp_catalog *dp_catalog, |
123 | u32 pattern); |
124 | u32 dp_catalog_ctrl_read_phy_pattern(struct dp_catalog *dp_catalog); |
125 | |
126 | /* DP Panel APIs */ |
127 | int dp_catalog_panel_timing_cfg(struct dp_catalog *dp_catalog); |
128 | void dp_catalog_panel_enable_vsc_sdp(struct dp_catalog *dp_catalog, struct dp_sdp *vsc_sdp); |
129 | void dp_catalog_panel_disable_vsc_sdp(struct dp_catalog *dp_catalog); |
130 | void dp_catalog_dump_regs(struct dp_catalog *dp_catalog); |
131 | void dp_catalog_panel_tpg_enable(struct dp_catalog *dp_catalog, |
132 | struct drm_display_mode *drm_mode); |
133 | void dp_catalog_panel_tpg_disable(struct dp_catalog *dp_catalog); |
134 | |
135 | struct dp_catalog *dp_catalog_get(struct device *dev); |
136 | |
137 | /* DP Audio APIs */ |
138 | void (struct dp_catalog *catalog); |
139 | void (struct dp_catalog *catalog); |
140 | void dp_catalog_audio_config_acr(struct dp_catalog *catalog); |
141 | void dp_catalog_audio_enable(struct dp_catalog *catalog); |
142 | void dp_catalog_audio_config_sdp(struct dp_catalog *catalog); |
143 | void dp_catalog_audio_init(struct dp_catalog *catalog); |
144 | void dp_catalog_audio_sfe_level(struct dp_catalog *catalog); |
145 | |
146 | #endif /* _DP_CATALOG_H_ */ |
147 | |