Commit 46ed6ff6 authored by Hsiao Chien Sung's avatar Hsiao Chien Sung Committed by Chun-Kuang Hu
parent a4c9410b
...@@ -76,6 +76,22 @@ ...@@ -76,6 +76,22 @@
#define OVL_COLOR_ALPHA GENMASK(31, 24) #define OVL_COLOR_ALPHA GENMASK(31, 24)
static inline bool is_10bit_rgb(u32 fmt)
{
switch (fmt) {
case DRM_FORMAT_XRGB2101010:
case DRM_FORMAT_ARGB2101010:
case DRM_FORMAT_RGBX1010102:
case DRM_FORMAT_RGBA1010102:
case DRM_FORMAT_XBGR2101010:
case DRM_FORMAT_ABGR2101010:
case DRM_FORMAT_BGRX1010102:
case DRM_FORMAT_BGRA1010102:
return true;
}
return false;
}
static const u32 mt8173_formats[] = { static const u32 mt8173_formats[] = {
DRM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888,
DRM_FORMAT_ARGB8888, DRM_FORMAT_ARGB8888,
...@@ -93,12 +109,18 @@ static const u32 mt8173_formats[] = { ...@@ -93,12 +109,18 @@ static const u32 mt8173_formats[] = {
static const u32 mt8195_formats[] = { static const u32 mt8195_formats[] = {
DRM_FORMAT_XRGB8888, DRM_FORMAT_XRGB8888,
DRM_FORMAT_ARGB8888, DRM_FORMAT_ARGB8888,
DRM_FORMAT_XRGB2101010,
DRM_FORMAT_ARGB2101010, DRM_FORMAT_ARGB2101010,
DRM_FORMAT_BGRX8888, DRM_FORMAT_BGRX8888,
DRM_FORMAT_BGRA8888, DRM_FORMAT_BGRA8888,
DRM_FORMAT_BGRX1010102,
DRM_FORMAT_BGRA1010102, DRM_FORMAT_BGRA1010102,
DRM_FORMAT_ABGR8888, DRM_FORMAT_ABGR8888,
DRM_FORMAT_XBGR8888, DRM_FORMAT_XBGR8888,
DRM_FORMAT_XBGR2101010,
DRM_FORMAT_ABGR2101010,
DRM_FORMAT_RGBX1010102,
DRM_FORMAT_RGBA1010102,
DRM_FORMAT_RGB888, DRM_FORMAT_RGB888,
DRM_FORMAT_BGR888, DRM_FORMAT_BGR888,
DRM_FORMAT_RGB565, DRM_FORMAT_RGB565,
...@@ -258,9 +280,7 @@ static void mtk_ovl_set_bit_depth(struct device *dev, int idx, u32 format, ...@@ -258,9 +280,7 @@ static void mtk_ovl_set_bit_depth(struct device *dev, int idx, u32 format,
reg = readl(ovl->regs + DISP_REG_OVL_CLRFMT_EXT); reg = readl(ovl->regs + DISP_REG_OVL_CLRFMT_EXT);
reg &= ~OVL_CON_CLRFMT_BIT_DEPTH_MASK(idx); reg &= ~OVL_CON_CLRFMT_BIT_DEPTH_MASK(idx);
if (format == DRM_FORMAT_RGBA1010102 || if (is_10bit_rgb(format))
format == DRM_FORMAT_BGRA1010102 ||
format == DRM_FORMAT_ARGB2101010)
bit_depth = OVL_CON_CLRFMT_10_BIT; bit_depth = OVL_CON_CLRFMT_10_BIT;
reg |= OVL_CON_CLRFMT_BIT_DEPTH(bit_depth, idx); reg |= OVL_CON_CLRFMT_BIT_DEPTH(bit_depth, idx);
...@@ -379,17 +399,23 @@ static unsigned int ovl_fmt_convert(struct mtk_disp_ovl *ovl, unsigned int fmt) ...@@ -379,17 +399,23 @@ static unsigned int ovl_fmt_convert(struct mtk_disp_ovl *ovl, unsigned int fmt)
return OVL_CON_CLRFMT_RGB888(ovl) | OVL_CON_BYTE_SWAP; return OVL_CON_CLRFMT_RGB888(ovl) | OVL_CON_BYTE_SWAP;
case DRM_FORMAT_RGBX8888: case DRM_FORMAT_RGBX8888:
case DRM_FORMAT_RGBA8888: case DRM_FORMAT_RGBA8888:
case DRM_FORMAT_RGBX1010102:
case DRM_FORMAT_RGBA1010102:
return OVL_CON_CLRFMT_RGBA8888; return OVL_CON_CLRFMT_RGBA8888;
case DRM_FORMAT_BGRX8888: case DRM_FORMAT_BGRX8888:
case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRA8888:
case DRM_FORMAT_BGRX1010102:
case DRM_FORMAT_BGRA1010102: case DRM_FORMAT_BGRA1010102:
return OVL_CON_CLRFMT_BGRA8888; return OVL_CON_CLRFMT_BGRA8888;
case DRM_FORMAT_XRGB8888: case DRM_FORMAT_XRGB8888:
case DRM_FORMAT_ARGB8888: case DRM_FORMAT_ARGB8888:
case DRM_FORMAT_XRGB2101010:
case DRM_FORMAT_ARGB2101010: case DRM_FORMAT_ARGB2101010:
return OVL_CON_CLRFMT_ARGB8888; return OVL_CON_CLRFMT_ARGB8888;
case DRM_FORMAT_XBGR8888: case DRM_FORMAT_XBGR8888:
case DRM_FORMAT_ABGR8888: case DRM_FORMAT_ABGR8888:
case DRM_FORMAT_XBGR2101010:
case DRM_FORMAT_ABGR2101010:
return OVL_CON_CLRFMT_ABGR8888; return OVL_CON_CLRFMT_ABGR8888;
case DRM_FORMAT_UYVY: case DRM_FORMAT_UYVY:
return OVL_CON_CLRFMT_UYVY | OVL_CON_MTX_YUV_TO_RGB; return OVL_CON_CLRFMT_UYVY | OVL_CON_MTX_YUV_TO_RGB;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment