Lines Matching full:dsc
37 static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc_config *dsc);
159 struct drm_dsc_config *dsc; member
510 * @dsc: DRM DSC configuration for this DSI output
517 * - For VIDEO mode they are not compressed by DSC and are passed as is.
527 const struct drm_dsc_config *dsc) in dsi_adjust_pclk_for_compression() argument
529 int new_hdisplay = DIV_ROUND_UP(mode->hdisplay * drm_dsc_get_bpp_int(dsc), in dsi_adjust_pclk_for_compression()
530 dsc->bits_per_component * 3); in dsi_adjust_pclk_for_compression()
538 const struct drm_dsc_config *dsc, bool is_bonded_dsi) in dsi_get_pclk_rate() argument
544 if (dsc) in dsi_get_pclk_rate()
545 pclk_rate = dsi_adjust_pclk_for_compression(mode, dsc); in dsi_get_pclk_rate()
565 unsigned long pclk_rate = dsi_get_pclk_rate(mode, msm_host->dsc, is_bonded_dsi); in dsi_byte_clk_get_rate()
584 msm_host->pixel_clk_rate = dsi_get_pclk_rate(msm_host->mode, msm_host->dsc, is_bonded_dsi); in dsi_calc_pclk()
711 return msm_host->dsc && in msm_dsi_host_is_wide_bus_enabled()
839 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_update_dsc_timing() local
846 /* first calculate dsc parameters and then program in dsi_update_dsc_timing()
849 slice_per_intf = dsc->slice_count; in dsi_update_dsc_timing()
851 total_bytes_per_intf = dsc->slice_chunk_size * slice_per_intf; in dsi_update_dsc_timing()
852 bytes_per_pkt = dsc->slice_chunk_size; /* * slice_per_pkt; */ in dsi_update_dsc_timing()
889 reg_ctrl2 |= DSI_COMMAND_COMPRESSION_MODE_CTRL2_STREAM0_SLICE_WIDTH(dsc->slice_chunk_size); in dsi_update_dsc_timing()
933 if (msm_host->dsc) { in dsi_timing_setup()
934 struct drm_dsc_config *dsc = msm_host->dsc; in dsi_timing_setup() local
937 /* update dsc params with timing params */ in dsi_timing_setup()
938 if (!dsc || !mode->hdisplay || !mode->vdisplay) { in dsi_timing_setup()
944 dsc->pic_width = mode->hdisplay; in dsi_timing_setup()
945 dsc->pic_height = mode->vdisplay; in dsi_timing_setup()
946 DBG("Mode %dx%d\n", dsc->pic_width, dsc->pic_height); in dsi_timing_setup()
948 /* we do the calculations for dsc parameters here so that in dsi_timing_setup()
951 ret = dsi_populate_dsc_params(msm_host, dsc); in dsi_timing_setup()
974 hdisplay = DIV_ROUND_UP(msm_dsc_get_bytes_per_line(msm_host->dsc), bytes_per_pclk); in dsi_timing_setup()
981 if (msm_host->dsc) in dsi_timing_setup()
1002 if (msm_host->dsc) in dsi_timing_setup()
1006 if (!msm_host->dsc) in dsi_timing_setup()
1010 * When DSC is enabled, WC = slice_chunk_size * slice_per_pkt + 1. in dsi_timing_setup()
1014 * and adjust DSC math to account for slice_per_pkt. in dsi_timing_setup()
1016 wc = msm_host->dsc->slice_chunk_size + 1; in dsi_timing_setup()
1625 if (dsi->dsc) in dsi_host_attach()
1626 msm_host->dsc = dsi->dsc; in dsi_host_attach()
1753 static int dsi_populate_dsc_params(struct msm_dsi_host *msm_host, struct drm_dsc_config *dsc) in dsi_populate_dsc_params() argument
1757 if (dsc->bits_per_pixel & 0xf) { in dsi_populate_dsc_params()
1762 switch (dsc->bits_per_component) { in dsi_populate_dsc_params()
1767 * Only 8, 10, and 12 bpc are supported for DSC 1.1 block. in dsi_populate_dsc_params()
1769 * this quard with the appropriate DSC version verification. in dsi_populate_dsc_params()
1775 dsc->bits_per_component); in dsi_populate_dsc_params()
1779 dsc->simple_422 = 0; in dsi_populate_dsc_params()
1780 dsc->convert_rgb = 1; in dsi_populate_dsc_params()
1781 dsc->vbr_enable = 0; in dsi_populate_dsc_params()
1783 drm_dsc_set_const_params(dsc); in dsi_populate_dsc_params()
1784 drm_dsc_set_rc_buf_thresh(dsc); in dsi_populate_dsc_params()
1787 ret = drm_dsc_setup_rc_params(dsc, DRM_DSC_1_1_PRE_SCR); in dsi_populate_dsc_params()
1789 DRM_DEV_ERROR(&msm_host->pdev->dev, "could not find DSC RC parameters\n"); in dsi_populate_dsc_params()
1793 dsc->initial_scale_value = drm_dsc_initial_scale_value(dsc); in dsi_populate_dsc_params()
1794 dsc->line_buf_depth = dsc->bits_per_component + 1; in dsi_populate_dsc_params()
1796 return drm_dsc_compute_rc_parameters(dsc); in dsi_populate_dsc_params()
2482 struct drm_dsc_config *dsc = msm_host->dsc; in msm_dsi_host_check_dsc() local
2486 if (!msm_host->dsc) in msm_dsi_host_check_dsc()
2489 if (pic_width % dsc->slice_width) { in msm_dsi_host_check_dsc()
2491 pic_width, dsc->slice_width); in msm_dsi_host_check_dsc()
2495 if (pic_height % dsc->slice_height) { in msm_dsi_host_check_dsc()
2497 pic_height, dsc->slice_height); in msm_dsi_host_check_dsc()
2586 return msm_host->dsc; in msm_dsi_host_get_dsc_config()