drm/i915/dsc: add support for computing and writing PPS for DSI encoders
Add DSI specific computation and transmission to display of PPS. With hopes that this approach will work for both DP and DSI encoders. Cc: Manasi Navare <manasi.d.navare@intel.com> Cc: Vandita Kulkarni <vandita.kulkarni@intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Vandita Kulkarni <vandita.kulkarni@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/461db10b1f4d76625625a9f2b1e3d932fff42799.1575974743.git.jani.nikula@intel.com
This commit is contained in:
parent
c42c38ec30
commit
2d15f3925a
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "i915_drv.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_dsi.h"
|
||||
#include "intel_vdsc.h"
|
||||
|
||||
enum ROW_INDEX_BPP {
|
||||
|
@ -844,6 +845,25 @@ static void intel_dsc_pps_configure(struct intel_encoder *encoder,
|
|||
}
|
||||
}
|
||||
|
||||
static void intel_dsc_dsi_pps_write(struct intel_encoder *encoder,
|
||||
const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
const struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
|
||||
struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
|
||||
struct mipi_dsi_device *dsi;
|
||||
struct drm_dsc_picture_parameter_set pps;
|
||||
enum port port;
|
||||
|
||||
drm_dsc_pps_payload_pack(&pps, vdsc_cfg);
|
||||
|
||||
for_each_dsi_port(port, intel_dsi->ports) {
|
||||
dsi = intel_dsi->dsi_hosts[port]->device;
|
||||
|
||||
mipi_dsi_picture_parameter_set(dsi, &pps);
|
||||
mipi_dsi_compression_mode(dsi, true);
|
||||
}
|
||||
}
|
||||
|
||||
static void intel_dsc_dp_pps_write(struct intel_encoder *encoder,
|
||||
const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
|
@ -882,6 +902,9 @@ void intel_dsc_enable(struct intel_encoder *encoder,
|
|||
|
||||
intel_dsc_pps_configure(encoder, crtc_state);
|
||||
|
||||
if (encoder->type == INTEL_OUTPUT_DSI)
|
||||
intel_dsc_dsi_pps_write(encoder, crtc_state);
|
||||
else
|
||||
intel_dsc_dp_pps_write(encoder, crtc_state);
|
||||
|
||||
if (crtc_state->cpu_transcoder == TRANSCODER_EDP) {
|
||||
|
|
Loading…
Reference in New Issue