int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev) { switch (dssdev->type) { case OMAP_DISPLAY_TYPE_DPI: if (dssdev->phy.dpi.data_lines == 24) return 24; else return 16; case OMAP_DISPLAY_TYPE_DBI: if (dssdev->ctrl.pixel_size == 24) return 24; else return 16; case OMAP_DISPLAY_TYPE_DSI: if (dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt) > 16) return 24; else return 16; case OMAP_DISPLAY_TYPE_VENC: case OMAP_DISPLAY_TYPE_SDI: case OMAP_DISPLAY_TYPE_HDMI: case OMAP_DISPLAY_TYPE_DVI: return 24; default: BUG(); return 0; } }
/* Checks if replication logic should be used. Only use for active matrix, * when overlay is in RGB12U or RGB16 mode, and LCD interface is * 18bpp or 24bpp */ bool dss_use_replication(struct omap_dss_device *dssdev, enum omap_color_mode mode) { int bpp; if (mode != OMAP_DSS_COLOR_RGB12U && mode != OMAP_DSS_COLOR_RGB16) return false; if (dssdev->type == OMAP_DISPLAY_TYPE_DPI && (dssdev->panel.config & OMAP_DSS_LCD_TFT) == 0) return false; switch (dssdev->type) { case OMAP_DISPLAY_TYPE_DPI: bpp = dssdev->phy.dpi.data_lines; break; case OMAP_DISPLAY_TYPE_HDMI: case OMAP_DISPLAY_TYPE_VENC: case OMAP_DISPLAY_TYPE_SDI: bpp = 24; break; case OMAP_DISPLAY_TYPE_DBI: bpp = dssdev->ctrl.pixel_size; break; case OMAP_DISPLAY_TYPE_DSI: bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt); break; default: BUG(); } return bpp > 16; }