return bp->cmd_tbl.dig_encoder_control(bp, cntl);
}
+static enum bp_result bios_parser_external_encoder_control(
+ struct dc_bios *dcb,
+ struct bp_external_encoder_control *cntl)
+{
+ struct bios_parser *bp = BP_FROM_DCB(dcb);
+
+ if (!bp->cmd_tbl.external_encoder_control)
+ return BP_RESULT_UNSUPPORTED;
+
+ return bp->cmd_tbl.external_encoder_control(bp, cntl);
+}
+
static enum bp_result bios_parser_dac_load_detection(
struct dc_bios *dcb,
enum engine_id engine_id)
.encoder_control = bios_parser_encoder_control,
+ .external_encoder_control = bios_parser_external_encoder_control,
+
.dac_load_detection = bios_parser_dac_load_detection,
.transmitter_control = bios_parser_transmitter_control,
cpu_to_le16((uint16_t)cntl->connector_obj_id.id);
break;
case EXTERNAL_ENCODER_CONTROL_SETUP:
+ case EXTERNAL_ENCODER_CONTROL_ENABLE:
/* EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3 pixel clock unit in
* 10KHz
* output display device pixel clock frequency in unit of 10KHz.
if (is_input_signal_dp) {
/* Bit[0]: indicate link rate, =1: 2.7Ghz, =0: 1.62Ghz,
* only valid in encoder setup with DP mode. */
- if (LINK_RATE_HIGH == cntl->link_rate)
- cntl_params->ucConfig |= 1;
+ if (cntl->link_rate == LINK_RATE_LOW)
+ cntl_params->ucConfig |=
+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ;
+ else if (cntl->link_rate == LINK_RATE_HIGH)
+ cntl_params->ucConfig |=
+ EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ;
+ else
+ dm_error("Link rate not supported by external encoder");
+
/* output color depth Indicate encoder data bpc format
* in DP mode, only valid in encoder setup in DP mode.
*/
- cntl_params->ucBitPerColor =
- (uint8_t)(cntl->color_depth);
+ cntl_params->ucBitPerColor = dc_color_depth_to_atom(cntl->color_depth);
}
/* Indicate how many lanes used by external encoder, only valid
* in encoder setup and enableoutput. */
cntl_params->ucLaneNum = (uint8_t)(cntl->lanes_number);
break;
- case EXTERNAL_ENCODER_CONTROL_ENABLE:
- cntl_params->usPixelClock =
- cpu_to_le16((uint16_t)(cntl->pixel_clock / 10));
- cntl_params->ucEncoderMode =
- (uint8_t)bp->cmd_helper->encoder_mode_bp_to_atom(
- cntl->signal, false);
- cntl_params->ucLaneNum = (uint8_t)cntl->lanes_number;
- break;
default:
break;
}
EXTERNAL_ENCODER_CONTROL_SETUP = 0xf,
EXTERNAL_ENCODER_CONTROL_UNBLANK = 0x10,
EXTERNAL_ENCODER_CONTROL_BLANK = 0x11,
+ EXTERNAL_ENCODER_CONTROL_DAC_LOAD_DETECT = 0x12,
+ EXTERNAL_ENCODER_CONTROL_DDC_SETUP = 0x14,
};
enum bp_pipe_control_action {