msm_dp_link
struct msm_dp_link *link;
struct msm_dp_link *link = ctrl->link;
struct msm_dp_ctrl *msm_dp_ctrl_get(struct device *dev, struct msm_dp_link *link,
struct msm_dp_link *link,
struct msm_dp_link *link,
struct msm_dp_link *link;
struct msm_dp_link *link,
struct msm_dp_link *link,
struct msm_dp_link *link;
link->msm_dp_link.test_video = (const struct msm_dp_link_test_video){ 0 };
link->msm_dp_link.test_video.test_bit_depth = DP_TEST_BIT_DEPTH_UNKNOWN;
link->msm_dp_link.test_audio = (const struct msm_dp_link_test_audio){ 0 };
link->msm_dp_link.phy_params.phy_test_pattern_sel = 0;
link->msm_dp_link.sink_request = 0;
link->msm_dp_link.test_response = 0;
int msm_dp_link_process_request(struct msm_dp_link *msm_dp_link)
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
msm_dp_link->sink_request |= DP_TEST_LINK_EDID_READ;
msm_dp_link->sink_request |= DS_PORT_STATUS_CHANGED;
msm_dp_link->sink_request |= DP_TEST_LINK_TRAINING;
msm_dp_link->sink_request |= DP_TEST_LINK_PHY_TEST_PATTERN;
msm_dp_link->sink_request |= DP_LINK_STATUS_UPDATED;
msm_dp_link->sink_request |= DP_TEST_LINK_VIDEO_PATTERN;
msm_dp_link->sink_request |= DP_TEST_LINK_AUDIO_PATTERN;
msm_dp_link->sink_request);
int msm_dp_link_get_colorimetry_config(struct msm_dp_link *msm_dp_link)
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
if (link->msm_dp_link.test_video.test_dyn_range &
int msm_dp_link_adjust_levels(struct msm_dp_link *msm_dp_link, u8 *link_status)
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
for (i = 0; i < msm_dp_link->link_params.num_lanes; i++) {
msm_dp_link->phy_params.v_level = v_max >> DP_TRAIN_VOLTAGE_SWING_SHIFT;
msm_dp_link->phy_params.p_level = p_max >> DP_TRAIN_PRE_EMPHASIS_SHIFT;
if (msm_dp_link->phy_params.v_level > DP_TRAIN_LEVEL_MAX) {
msm_dp_link->phy_params.v_level,
msm_dp_link->phy_params.v_level = DP_TRAIN_LEVEL_MAX;
if (msm_dp_link->phy_params.p_level > DP_TRAIN_LEVEL_MAX) {
msm_dp_link->phy_params.p_level,
msm_dp_link->phy_params.p_level = DP_TRAIN_LEVEL_MAX;
max_p_level = DP_TRAIN_LEVEL_MAX - msm_dp_link->phy_params.v_level;
if (msm_dp_link->phy_params.p_level > max_p_level) {
msm_dp_link->phy_params.p_level,
msm_dp_link->phy_params.p_level = max_p_level;
msm_dp_link->phy_params.v_level, msm_dp_link->phy_params.p_level);
void msm_dp_link_reset_phy_params_vx_px(struct msm_dp_link *msm_dp_link)
msm_dp_link->phy_params.v_level = 0;
msm_dp_link->phy_params.p_level = 0;
u32 msm_dp_link_get_test_bits_depth(struct msm_dp_link *msm_dp_link, u32 bpp)
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
static int msm_dp_link_lane_map(struct device *dev, struct msm_dp_link *msm_dp_link)
int cnt = msm_dp_link->max_dp_lanes;
memcpy(msm_dp_link->lane_map, map, sizeof(map));
static int msm_dp_link_parse_dt(struct device *dev, struct msm_dp_link *msm_dp_link)
msm_dp_link->max_dp_lanes = cnt;
struct msm_dp_link_test_audio *req = &link->msm_dp_link.test_audio;
msm_dp_link->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
if (msm_dp_link_lane_map(dev, msm_dp_link)) {
msm_dp_link->max_dp_link_rate = msm_dp_link_link_frequencies(of_node);
if (!msm_dp_link->max_dp_link_rate)
msm_dp_link->max_dp_link_rate = DP_LINK_RATE_HBR2;
struct msm_dp_link *msm_dp_link_get(struct device *dev, struct drm_dp_aux *aux)
struct msm_dp_link *msm_dp_link;
msm_dp_link = &link->msm_dp_link;
ret = msm_dp_link_parse_dt(dev, msm_dp_link);
return msm_dp_link;
link->msm_dp_link.test_audio.test_audio_pattern_type = data;
link->msm_dp_link.test_audio.test_audio_sampling_rate = sampling_rate;
link->msm_dp_link.test_audio.test_audio_channel_count = channel_count;
link->msm_dp_link.test_video.test_video_pattern = bp;
link->msm_dp_link.test_video.test_dyn_range =
link->msm_dp_link.test_video.test_bit_depth = bp;
&link->msm_dp_link.test_video.test_h_total);
&link->msm_dp_link.test_video.test_v_total);
&link->msm_dp_link.test_video.test_h_start);
struct msm_dp_link msm_dp_link;
&link->msm_dp_link.test_video.test_v_start);
&link->msm_dp_link.test_video.test_hsync_pol,
&link->msm_dp_link.test_video.test_hsync_width);
&link->msm_dp_link.test_video.test_vsync_pol,
&link->msm_dp_link.test_video.test_vsync_width);
&link->msm_dp_link.test_video.test_h_width);
&link->msm_dp_link.test_video.test_v_height);
&link->msm_dp_link.test_video.test_rr_d);
link->msm_dp_link.test_video.test_rr_d &= DP_TEST_REFRESH_DENOMINATOR;
&link->msm_dp_link.test_video.test_rr_n);
link->msm_dp_link.test_video.test_video_pattern,
link->msm_dp_link.test_video.test_dyn_range,
link->msm_dp_link.test_video.test_bit_depth,
link->msm_dp_link.test_video.test_h_total,
link->msm_dp_link.test_video.test_v_total,
link->msm_dp_link.test_video.test_h_start,
link->msm_dp_link.test_video.test_v_start,
link->msm_dp_link.test_video.test_hsync_pol,
link->msm_dp_link.test_video.test_hsync_width,
link->msm_dp_link.test_video.test_vsync_pol,
link->msm_dp_link.test_video.test_vsync_width,
link->msm_dp_link.test_video.test_h_width,
link->msm_dp_link.test_video.test_v_height,
link->msm_dp_link.test_video.test_rr_d,
link->msm_dp_link.test_video.test_rr_n);
link->msm_dp_link.phy_params.phy_test_pattern_sel = data & 0x07;
link->msm_dp_link.test_response = DP_TEST_NAK;
link->msm_dp_link.test_response = DP_TEST_ACK;
link->msm_dp_link.test_response =
link->prev_sink_count = link->msm_dp_link.sink_count;
link->msm_dp_link.sink_count = ret;
link->msm_dp_link.link_params.num_lanes = link->request.test_lane_count;
link->msm_dp_link.link_params.rate =
bool msm_dp_link_send_test_response(struct msm_dp_link *msm_dp_link)
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
msm_dp_link->test_response);
int msm_dp_link_psm_config(struct msm_dp_link *msm_dp_link,
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
bool msm_dp_link_send_edid_checksum(struct msm_dp_link *msm_dp_link, u8 checksum)
if (!msm_dp_link) {
link = container_of(msm_dp_link, struct msm_dp_link_private, msm_dp_link);
link->msm_dp_link.phy_params.v_level,
link->msm_dp_link.phy_params.p_level);
link->msm_dp_link.phy_params.v_level =
link->msm_dp_link.phy_params.p_level =
link->msm_dp_link.phy_params.p_level >>= DP_TRAIN_PRE_EMPHASIS_SHIFT;
link->msm_dp_link.phy_params.v_level,
link->msm_dp_link.phy_params.p_level);
link->msm_dp_link.link_params.rate,
link->msm_dp_link.link_params.num_lanes);
link->msm_dp_link.link_params.num_lanes = link->request.test_lane_count;
link->msm_dp_link.link_params.rate =
link->msm_dp_link.link_params.num_lanes);
link->msm_dp_link.link_params.num_lanes);
if (link->prev_sink_count == link->msm_dp_link.sink_count)
link->prev_sink_count = link->msm_dp_link.sink_count;
void msm_dp_link_reset_phy_params_vx_px(struct msm_dp_link *msm_dp_link);
u32 msm_dp_link_get_test_bits_depth(struct msm_dp_link *msm_dp_link, u32 bpp);
int msm_dp_link_process_request(struct msm_dp_link *msm_dp_link);
int msm_dp_link_get_colorimetry_config(struct msm_dp_link *msm_dp_link);
int msm_dp_link_adjust_levels(struct msm_dp_link *msm_dp_link, u8 *link_status);
bool msm_dp_link_send_test_response(struct msm_dp_link *msm_dp_link);
int msm_dp_link_psm_config(struct msm_dp_link *msm_dp_link,
bool msm_dp_link_send_edid_checksum(struct msm_dp_link *msm_dp_link, u8 checksum);
struct msm_dp_link *msm_dp_link_get(struct device *dev, struct drm_dp_aux *aux);
struct msm_dp_link *link;
struct msm_dp_link *link,
struct msm_dp_link *link;
struct msm_dp_link *link,