Lines Matching full:dsc
38 static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc_config *dsc);
162 struct drm_dsc_config *dsc; member
532 const struct drm_dsc_config *dsc) in dsi_adjust_pclk_for_compression() argument
534 int new_hdisplay = DIV_ROUND_UP(mode->hdisplay * drm_dsc_get_bpp_int(dsc), in dsi_adjust_pclk_for_compression()
535 dsc->bits_per_component * 3); in dsi_adjust_pclk_for_compression()
543 const struct drm_dsc_config *dsc, bool is_bonded_dsi) in dsi_get_pclk_rate() argument
549 if (dsc) in dsi_get_pclk_rate()
550 pclk_rate = dsi_adjust_pclk_for_compression(mode, dsc); in dsi_get_pclk_rate()
570 unsigned long pclk_rate = dsi_get_pclk_rate(mode, msm_host->dsc, is_bonded_dsi); in dsi_byte_clk_get_rate()
589 msm_host->pixel_clk_rate = dsi_get_pclk_rate(msm_host->mode, msm_host->dsc, is_bonded_dsi); in dsi_calc_pclk()
829 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_update_dsc_timing() local
835 /* first calculate dsc parameters and then program in dsi_update_dsc_timing()
838 slice_per_intf = msm_dsc_get_slices_per_intf(dsc, hdisplay); in dsi_update_dsc_timing()
840 total_bytes_per_intf = dsc->slice_chunk_size * slice_per_intf; in dsi_update_dsc_timing()
873 reg_ctrl2 |= DSI_COMMAND_COMPRESSION_MODE_CTRL2_STREAM0_SLICE_WIDTH(dsc->slice_chunk_size); in dsi_update_dsc_timing()
915 if (msm_host->dsc) { in dsi_timing_setup()
916 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_timing_setup() local
918 /* update dsc params with timing params */ in dsi_timing_setup()
919 if (!dsc || !mode->hdisplay || !mode->vdisplay) { in dsi_timing_setup()
925 dsc->pic_width = mode->hdisplay; in dsi_timing_setup()
926 dsc->pic_height = mode->vdisplay; in dsi_timing_setup()
927 DBG("Mode %dx%d\n", dsc->pic_width, dsc->pic_height); in dsi_timing_setup()
929 /* we do the calculations for dsc parameters here so that in dsi_timing_setup()
932 ret = dsi_populate_dsc_params(msm_host, dsc); in dsi_timing_setup()
940 hdisplay = DIV_ROUND_UP(msm_dsc_get_bytes_per_line(msm_host->dsc), 3); in dsi_timing_setup()
946 if (msm_host->dsc) in dsi_timing_setup()
967 if (msm_host->dsc) in dsi_timing_setup()
971 if (!msm_host->dsc) in dsi_timing_setup()
975 * When DSC is enabled, WC = slice_chunk_size * slice_per_pkt + 1. in dsi_timing_setup()
979 * and adjust DSC math to account for slice_per_pkt. in dsi_timing_setup()
981 wc = msm_host->dsc->slice_chunk_size + 1; in dsi_timing_setup()
1606 if (dsi->dsc) in dsi_host_attach()
1607 msm_host->dsc = dsi->dsc; in dsi_host_attach()
1739 static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc_config *dsc) in dsi_populate_dsc_params() argument
1743 if (dsc->bits_per_pixel & 0xf) { in dsi_populate_dsc_params()
1748 if (dsc->bits_per_component != 8) { in dsi_populate_dsc_params()
1753 dsc->simple_422 = 0; in dsi_populate_dsc_params()
1754 dsc->convert_rgb = 1; in dsi_populate_dsc_params()
1755 dsc->vbr_enable = 0; in dsi_populate_dsc_params()
1757 drm_dsc_set_const_params(dsc); in dsi_populate_dsc_params()
1758 drm_dsc_set_rc_buf_thresh(dsc); in dsi_populate_dsc_params()
1761 ret = drm_dsc_setup_rc_params(dsc, DRM_DSC_1_1_PRE_SCR); in dsi_populate_dsc_params()
1763 DRM_DEV_ERROR(&msm_host->pdev->dev, "could not find DSC RC parameters\n"); in dsi_populate_dsc_params()
1767 dsc->initial_scale_value = drm_dsc_initial_scale_value(dsc); in dsi_populate_dsc_params()
1768 dsc->line_buf_depth = dsc->bits_per_component + 1; in dsi_populate_dsc_params()
1770 return drm_dsc_compute_rc_parameters(dsc); in dsi_populate_dsc_params()
2458 struct drm_dsc_config *dsc = msm_host->dsc; in msm_dsi_host_check_dsc() local
2462 if (!msm_host->dsc) in msm_dsi_host_check_dsc()
2465 if (pic_width % dsc->slice_width) { in msm_dsi_host_check_dsc()
2467 pic_width, dsc->slice_width); in msm_dsi_host_check_dsc()
2471 if (pic_height % dsc->slice_height) { in msm_dsi_host_check_dsc()
2473 pic_height, dsc->slice_height); in msm_dsi_host_check_dsc()
2562 return msm_host->dsc; in msm_dsi_host_get_dsc_config()