1c943b494SChandan Uddaraju /* SPDX-License-Identifier: GPL-2.0-only */ 2c943b494SChandan Uddaraju /* 3c943b494SChandan Uddaraju * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. 4c943b494SChandan Uddaraju */ 5c943b494SChandan Uddaraju 6c943b494SChandan Uddaraju #ifndef _DP_LINK_H_ 7c943b494SChandan Uddaraju #define _DP_LINK_H_ 8c943b494SChandan Uddaraju 9c943b494SChandan Uddaraju #include "dp_aux.h" 10c943b494SChandan Uddaraju 11c943b494SChandan Uddaraju #define DS_PORT_STATUS_CHANGED 0x200 12c943b494SChandan Uddaraju #define DP_TEST_BIT_DEPTH_UNKNOWN 0xFFFFFFFF 13c943b494SChandan Uddaraju #define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0) 14c943b494SChandan Uddaraju 15c943b494SChandan Uddaraju struct dp_link_info { 16c943b494SChandan Uddaraju unsigned char revision; 17c943b494SChandan Uddaraju unsigned int rate; 18c943b494SChandan Uddaraju unsigned int num_lanes; 19c943b494SChandan Uddaraju unsigned long capabilities; 20c943b494SChandan Uddaraju }; 21c943b494SChandan Uddaraju 22*554484e4SDmitry Baryshkov #define DP_TRAIN_LEVEL_MAX 3 23c943b494SChandan Uddaraju 24c943b494SChandan Uddaraju struct dp_link_test_video { 25c943b494SChandan Uddaraju u32 test_video_pattern; 26c943b494SChandan Uddaraju u32 test_bit_depth; 27c943b494SChandan Uddaraju u32 test_dyn_range; 28c943b494SChandan Uddaraju u32 test_h_total; 29c943b494SChandan Uddaraju u32 test_v_total; 30c943b494SChandan Uddaraju u32 test_h_start; 31c943b494SChandan Uddaraju u32 test_v_start; 32c943b494SChandan Uddaraju u32 test_hsync_pol; 33c943b494SChandan Uddaraju u32 test_hsync_width; 34c943b494SChandan Uddaraju u32 test_vsync_pol; 35c943b494SChandan Uddaraju u32 test_vsync_width; 36c943b494SChandan Uddaraju u32 test_h_width; 37c943b494SChandan Uddaraju u32 test_v_height; 38c943b494SChandan Uddaraju u32 test_rr_d; 39c943b494SChandan Uddaraju u32 test_rr_n; 40c943b494SChandan Uddaraju }; 41c943b494SChandan Uddaraju 42c943b494SChandan Uddaraju struct dp_link_test_audio { 43c943b494SChandan Uddaraju u32 test_audio_sampling_rate; 44c943b494SChandan Uddaraju u32 test_audio_channel_count; 45c943b494SChandan Uddaraju u32 test_audio_pattern_type; 46c943b494SChandan Uddaraju u32 test_audio_period_ch_1; 47c943b494SChandan Uddaraju u32 test_audio_period_ch_2; 48c943b494SChandan Uddaraju u32 test_audio_period_ch_3; 49c943b494SChandan Uddaraju u32 test_audio_period_ch_4; 50c943b494SChandan Uddaraju u32 test_audio_period_ch_5; 51c943b494SChandan Uddaraju u32 test_audio_period_ch_6; 52c943b494SChandan Uddaraju u32 test_audio_period_ch_7; 53c943b494SChandan Uddaraju u32 test_audio_period_ch_8; 54c943b494SChandan Uddaraju }; 55c943b494SChandan Uddaraju 56c943b494SChandan Uddaraju struct dp_link_phy_params { 57c943b494SChandan Uddaraju u32 phy_test_pattern_sel; 58c943b494SChandan Uddaraju u8 v_level; 59c943b494SChandan Uddaraju u8 p_level; 60c943b494SChandan Uddaraju }; 61c943b494SChandan Uddaraju 62c943b494SChandan Uddaraju struct dp_link { 63c943b494SChandan Uddaraju u32 sink_request; 64c943b494SChandan Uddaraju u32 test_response; 65c943b494SChandan Uddaraju bool psm_enabled; 66c943b494SChandan Uddaraju 67c943b494SChandan Uddaraju u8 sink_count; 68c943b494SChandan Uddaraju struct dp_link_test_video test_video; 69c943b494SChandan Uddaraju struct dp_link_test_audio test_audio; 70c943b494SChandan Uddaraju struct dp_link_phy_params phy_params; 71c943b494SChandan Uddaraju struct dp_link_info link_params; 72c943b494SChandan Uddaraju }; 73c943b494SChandan Uddaraju 74c943b494SChandan Uddaraju /** 75c943b494SChandan Uddaraju * mdss_dp_test_bit_depth_to_bpp() - convert test bit depth to bpp 76c943b494SChandan Uddaraju * @tbd: test bit depth 77c943b494SChandan Uddaraju * 78c943b494SChandan Uddaraju * Returns the bits per pixel (bpp) to be used corresponding to the 79c943b494SChandan Uddaraju * git bit depth value. This function assumes that bit depth has 80c943b494SChandan Uddaraju * already been validated. 81c943b494SChandan Uddaraju */ dp_link_bit_depth_to_bpp(u32 tbd)82c943b494SChandan Uddarajustatic inline u32 dp_link_bit_depth_to_bpp(u32 tbd) 83c943b494SChandan Uddaraju { 84c943b494SChandan Uddaraju /* 85c943b494SChandan Uddaraju * Few simplistic rules and assumptions made here: 86c943b494SChandan Uddaraju * 1. Bit depth is per color component 87c943b494SChandan Uddaraju * 2. If bit depth is unknown return 0 88c943b494SChandan Uddaraju * 3. Assume 3 color components 89c943b494SChandan Uddaraju */ 90c943b494SChandan Uddaraju switch (tbd) { 91c943b494SChandan Uddaraju case DP_TEST_BIT_DEPTH_6: 92c943b494SChandan Uddaraju return 18; 93c943b494SChandan Uddaraju case DP_TEST_BIT_DEPTH_8: 94c943b494SChandan Uddaraju return 24; 95c943b494SChandan Uddaraju case DP_TEST_BIT_DEPTH_10: 96c943b494SChandan Uddaraju return 30; 97c943b494SChandan Uddaraju case DP_TEST_BIT_DEPTH_UNKNOWN: 98c943b494SChandan Uddaraju default: 99c943b494SChandan Uddaraju return 0; 100c943b494SChandan Uddaraju } 101c943b494SChandan Uddaraju } 102c943b494SChandan Uddaraju 103de3ee254SAbhinav Kumar /** 104de3ee254SAbhinav Kumar * dp_test_bit_depth_to_bpc() - convert test bit depth to bpc 105de3ee254SAbhinav Kumar * @tbd: test bit depth 106de3ee254SAbhinav Kumar * 107de3ee254SAbhinav Kumar * Returns the bits per comp (bpc) to be used corresponding to the 108de3ee254SAbhinav Kumar * bit depth value. This function assumes that bit depth has 109de3ee254SAbhinav Kumar * already been validated. 110de3ee254SAbhinav Kumar */ dp_link_bit_depth_to_bpc(u32 tbd)111de3ee254SAbhinav Kumarstatic inline u32 dp_link_bit_depth_to_bpc(u32 tbd) 112de3ee254SAbhinav Kumar { 113de3ee254SAbhinav Kumar switch (tbd) { 114de3ee254SAbhinav Kumar case DP_TEST_BIT_DEPTH_6: 115de3ee254SAbhinav Kumar return 6; 116de3ee254SAbhinav Kumar case DP_TEST_BIT_DEPTH_8: 117de3ee254SAbhinav Kumar return 8; 118de3ee254SAbhinav Kumar case DP_TEST_BIT_DEPTH_10: 119de3ee254SAbhinav Kumar return 10; 120de3ee254SAbhinav Kumar case DP_TEST_BIT_DEPTH_UNKNOWN: 121de3ee254SAbhinav Kumar default: 122de3ee254SAbhinav Kumar return 0; 123de3ee254SAbhinav Kumar } 124de3ee254SAbhinav Kumar } 125de3ee254SAbhinav Kumar 1266625e263STanmay Shah void dp_link_reset_phy_params_vx_px(struct dp_link *dp_link); 127c943b494SChandan Uddaraju u32 dp_link_get_test_bits_depth(struct dp_link *dp_link, u32 bpp); 128c943b494SChandan Uddaraju int dp_link_process_request(struct dp_link *dp_link); 129c943b494SChandan Uddaraju int dp_link_get_colorimetry_config(struct dp_link *dp_link); 130c943b494SChandan Uddaraju int dp_link_adjust_levels(struct dp_link *dp_link, u8 *link_status); 131c943b494SChandan Uddaraju bool dp_link_send_test_response(struct dp_link *dp_link); 132c943b494SChandan Uddaraju int dp_link_psm_config(struct dp_link *dp_link, 133c943b494SChandan Uddaraju struct dp_link_info *link_info, bool enable); 134c943b494SChandan Uddaraju bool dp_link_send_edid_checksum(struct dp_link *dp_link, u8 checksum); 135c943b494SChandan Uddaraju 136c943b494SChandan Uddaraju /** 137c943b494SChandan Uddaraju * dp_link_get() - get the functionalities of dp test module 138c943b494SChandan Uddaraju * 139c943b494SChandan Uddaraju * 140c943b494SChandan Uddaraju * return: a pointer to dp_link struct 141c943b494SChandan Uddaraju */ 142c943b494SChandan Uddaraju struct dp_link *dp_link_get(struct device *dev, struct drm_dp_aux *aux); 143c943b494SChandan Uddaraju 144c943b494SChandan Uddaraju #endif /* _DP_LINK_H_ */ 145