Files
android_kernel_samsung_sm86…/rotator/sde_rotator_formats.c
Narendra Muppalla 3709853456 Display drivers kernel project initial snapshot
This change brings msm display driver including sde,
dp, dsi, rotator, dsi pll and dp pll from base 4.19 kernel
project. It is first source code snapshot from base kernel project.

Change-Id: Iec864c064ce5ea04e170f24414c728684002f284
Signed-off-by: Narendra Muppalla <NarendraM@codeaurora.org>
2019-04-14 22:20:59 -07:00

944 řádky
25 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2012, 2015-2019, The Linux Foundation. All rights reserved.
*/
#include <media/msm_sde_rotator.h>
#include "sde_rotator_formats.h"
#include "sde_rotator_util.h"
#define FMT_RGB_565(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = 0, \
.unpack_count = 3, \
.bpp = 2, \
.frame_format = (frame_fmt), \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.element = { (e0), (e1), (e2) }, \
.bits = { \
[C2_R_Cr] = SDE_COLOR_5BIT, \
[C0_G_Y] = SDE_COLOR_6BIT, \
[C1_B_Cb] = SDE_COLOR_5BIT, \
}, \
.is_ubwc = isubwc, \
}
#define FMT_RGB_888(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = 0, \
.unpack_count = 3, \
.bpp = 3, \
.frame_format = (frame_fmt), \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.element = { (e0), (e1), (e2) }, \
.bits = { \
[C2_R_Cr] = SDE_COLOR_8BIT, \
[C0_G_Y] = SDE_COLOR_8BIT, \
[C1_B_Cb] = SDE_COLOR_8BIT, \
}, \
.is_ubwc = isubwc, \
}
#define FMT_RGB_8888(fmt, desc, frame_fmt, flag_arg, \
alpha_en, e0, e1, e2, e3, isubwc) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = (alpha_en), \
.unpack_count = 4, \
.bpp = 4, \
.frame_format = (frame_fmt), \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.element = { (e0), (e1), (e2), (e3) }, \
.bits = { \
[C3_ALPHA] = SDE_COLOR_8BIT, \
[C2_R_Cr] = SDE_COLOR_8BIT, \
[C0_G_Y] = SDE_COLOR_8BIT, \
[C1_B_Cb] = SDE_COLOR_8BIT, \
}, \
.is_ubwc = isubwc, \
}
#define FMT_YUV10_COMMON(fmt) \
.format = (fmt), \
.is_yuv = 1, \
.bits = { \
[C2_R_Cr] = SDE_COLOR_8BIT, \
[C0_G_Y] = SDE_COLOR_8BIT, \
[C1_B_Cb] = SDE_COLOR_8BIT, \
}, \
.alpha_enable = 0
#define FMT_YUV_COMMON(fmt) \
.format = (fmt), \
.is_yuv = 1, \
.bits = { \
[C2_R_Cr] = SDE_COLOR_8BIT, \
[C0_G_Y] = SDE_COLOR_8BIT, \
[C1_B_Cb] = SDE_COLOR_8BIT, \
}, \
.alpha_enable = 0, \
.unpack_tight = 1, \
.unpack_align_msb = 0
#define FMT_YUV_PSEUDO(fmt, desc, frame_fmt, samp, pixel_type, \
flag_arg, e0, e1, isubwc) \
{ \
FMT_YUV_COMMON(fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR, \
.chroma_sample = samp, \
.unpack_count = 2, \
.bpp = 2, \
.frame_format = (frame_fmt), \
.pixel_mode = (pixel_type), \
.element = { (e0), (e1) }, \
.is_ubwc = isubwc, \
}
#define FMT_YUV_PLANR(fmt, desc, frame_fmt, samp, \
flag_arg, e0, e1) \
{ \
FMT_YUV_COMMON(fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_PLANAR, \
.chroma_sample = samp, \
.bpp = 1, \
.unpack_count = 1, \
.frame_format = (frame_fmt), \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.element = { (e0), (e1) }, \
.is_ubwc = SDE_MDP_COMPRESS_NONE, \
}
#define FMT_RGB_1555(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = (alpha_en), \
.unpack_count = 4, \
.bpp = 2, \
.element = { (e0), (e1), (e2), (e3) }, \
.frame_format = SDE_MDP_FMT_LINEAR, \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.bits = { \
[C3_ALPHA] = SDE_COLOR_ALPHA_1BIT, \
[C2_R_Cr] = SDE_COLOR_5BIT, \
[C0_G_Y] = SDE_COLOR_5BIT, \
[C1_B_Cb] = SDE_COLOR_5BIT, \
}, \
.is_ubwc = SDE_MDP_COMPRESS_NONE, \
}
#define FMT_RGB_4444(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = (alpha_en), \
.unpack_count = 4, \
.bpp = 2, \
.frame_format = SDE_MDP_FMT_LINEAR, \
.pixel_mode = SDE_MDP_PIXEL_NORMAL, \
.element = { (e0), (e1), (e2), (e3) }, \
.bits = { \
[C3_ALPHA] = SDE_COLOR_ALPHA_4BIT, \
[C2_R_Cr] = SDE_COLOR_4BIT, \
[C0_G_Y] = SDE_COLOR_4BIT, \
[C1_B_Cb] = SDE_COLOR_4BIT, \
}, \
.is_ubwc = SDE_MDP_COMPRESS_NONE, \
}
#define FMT_RGB_1010102(fmt, desc, frame_fmt, flag_arg, \
alpha_en, e0, e1, e2, e3, isubwc) \
{ \
.format = (fmt), \
.description = (desc), \
.flag = flag_arg, \
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
.unpack_tight = 1, \
.unpack_align_msb = 0, \
.alpha_enable = (alpha_en), \
.unpack_count = 4, \
.bpp = 4, \
.frame_format = frame_fmt, \
.pixel_mode = SDE_MDP_PIXEL_10BIT, \
.element = { (e0), (e1), (e2), (e3) }, \
.bits = { \
[C3_ALPHA] = SDE_COLOR_8BIT, \
[C2_R_Cr] = SDE_COLOR_8BIT, \
[C0_G_Y] = SDE_COLOR_8BIT, \
[C1_B_Cb] = SDE_COLOR_8BIT, \
}, \
.is_ubwc = isubwc, \
}
/*
* UBWC formats table:
* This table holds the UBWC formats supported.
* If a compression ratio needs to be used for this or any other format,
* the data will be passed by user-space.
*/
static struct sde_mdp_format_params_ubwc sde_mdp_format_ubwc_map[] = {
{
.mdp_format = FMT_RGB_565(SDE_PIX_FMT_RGB_565_UBWC,
"SDE/RGB_565_UBWC",
SDE_MDP_FMT_TILE_A5X, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBA_8888_UBWC,
"SDE/RGBA_8888_UBWC",
SDE_MDP_FMT_TILE_A5X, 0, 1,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBX_8888_UBWC,
"SDE/RGBX_8888_UBWC",
SDE_MDP_FMT_TILE_A5X, 0, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
"SDE/Y_CBCR_H2V2_UBWC",
SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
SDE_MDP_PIXEL_NORMAL,
0, C1_B_Cb, C2_R_Cr,
SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 8,
.tile_width = 32,
},
},
{
.mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102_UBWC,
"SDE/RGBA_1010102_UBWC",
SDE_MDP_FMT_TILE_A5X, 0, 1,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102_UBWC,
"SDE/RGBX_1010102_UBWC",
SDE_MDP_FMT_TILE_A5X, 0, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
"SDE/Y_CBCR_H2V2_TP10_UBWC",
SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
SDE_MDP_PIXEL_10BIT,
0,
C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_UBWC),
.micro = {
.tile_height = 4,
.tile_width = 48,
},
},
{
.mdp_format = {
FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_UBWC),
.description = "SDE/Y_CBCR_H2V2_P010_UBWC",
.flag = 0,
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
.chroma_sample = SDE_MDP_CHROMA_420,
.unpack_count = 2,
.bpp = 2,
.frame_format = SDE_MDP_FMT_TILE_A5X,
.pixel_mode = SDE_MDP_PIXEL_10BIT,
.element = { C1_B_Cb, C2_R_Cr },
.unpack_tight = 0,
.unpack_align_msb = 1,
.is_ubwc = SDE_MDP_COMPRESS_UBWC
},
.micro = {
.tile_height = 4,
.tile_width = 32,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102_TILE,
"SDE/RGBA_1010102_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102_TILE,
"SDE/RGBX_1010102102_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102_TILE,
"SDE/BGRA_1010102_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102_TILE,
"SDE/BGRX_1010102_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010_TILE,
"SDE/ARGB_2101010_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010_TILE,
"SDE/XRGB_2101010_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010_TILE,
"SDE/ABGR_2101010_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010_TILE,
"SDE/XBGR_2101010_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_TILE,
"Y_CRCB_H2V2_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
SDE_MDP_FORMAT_FLAG_PRIVATE,
C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 8,
.tile_width = 32,
},
},
{
.mdp_format =
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_TILE,
"Y_CBCR_H2V2_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
SDE_MDP_FORMAT_FLAG_PRIVATE,
C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 8,
.tile_width = 32,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_ABGR_8888_TILE,
"SDE/ABGR_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_XRGB_8888_TILE,
"SDE/XRGB_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 32,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_ARGB_8888_TILE,
"SDE/ARGB_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_RGBA_8888_TILE,
"SDE/RGBA_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_RGBX_8888_TILE,
"SDE/RGBX_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_BGRA_8888_TILE,
"SDE/BGRA_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_BGRX_8888_TILE,
"SDE/BGRX_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format =
FMT_RGB_8888(SDE_PIX_FMT_XBGR_8888_TILE,
"SDE/XBGR_8888_TILE",
SDE_MDP_FMT_TILE_A5X,
SDE_MDP_FORMAT_FLAG_PRIVATE,
0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
.micro = {
.tile_height = 4,
.tile_width = 16,
},
},
{
.mdp_format = {
FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE),
.description = "SDE/Y_CBCR_H2V2_P010_TILE",
.flag = SDE_MDP_FORMAT_FLAG_PRIVATE,
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
.chroma_sample = SDE_MDP_CHROMA_420,
.unpack_count = 2,
.bpp = 2,
.frame_format = SDE_MDP_FMT_TILE_A5X,
.pixel_mode = SDE_MDP_PIXEL_10BIT,
.element = { C1_B_Cb, C2_R_Cr },
.unpack_tight = 0,
.unpack_align_msb = 1,
.is_ubwc = SDE_MDP_COMPRESS_NONE,
},
.micro = {
.tile_height = 4,
.tile_width = 32,
},
},
};
static struct sde_mdp_format_params sde_mdp_format_map[] = {
FMT_RGB_565(
SDE_PIX_FMT_RGB_565, "RGB_565", SDE_MDP_FMT_LINEAR,
0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_RGB_565(
SDE_PIX_FMT_BGR_565, "BGR_565", SDE_MDP_FMT_LINEAR,
0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
FMT_RGB_888(
SDE_PIX_FMT_RGB_888, "RGB_888", SDE_MDP_FMT_LINEAR,
0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
FMT_RGB_888(
SDE_PIX_FMT_BGR_888, "BGR_888", SDE_MDP_FMT_LINEAR,
0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_ABGR_8888, "SDE/ABGR_8888", SDE_MDP_FMT_LINEAR,
0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_XRGB_8888, "SDE/XRGB_8888", SDE_MDP_FMT_LINEAR,
0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_ARGB_8888, "SDE/ARGB_8888", SDE_MDP_FMT_LINEAR,
0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_RGBA_8888, "SDE/RGBA_8888", SDE_MDP_FMT_LINEAR,
0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_RGBX_8888, "SDE/RGBX_8888", SDE_MDP_FMT_LINEAR,
0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_BGRA_8888, "SDE/BGRA_8888", SDE_MDP_FMT_LINEAR,
0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_BGRX_8888, "SDE/BGRX_8888", SDE_MDP_FMT_LINEAR,
0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_8888(
SDE_PIX_FMT_XBGR_8888, "SDE/XBGR_8888", SDE_MDP_FMT_LINEAR,
0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V1, "Y_CRCB_H2V1",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V1, "Y_CBCR_H2V1",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H1V2, "Y_CRCB_H1V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H1V2, "Y_CBCR_H1V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2, "Y_CRCB_H2V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2, "Y_CBCR_H2V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_VENUS, "SDE/Y_CBCR_H2V2_VENUS",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_VENUS, "SDE/Y_CRCB_H2V2_VENUS",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
{
FMT_YUV10_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010),
.description = "SDE/Y_CBCR_H2V2_P010",
.flag = 0,
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
.chroma_sample = SDE_MDP_CHROMA_420,
.unpack_count = 2,
.bpp = 2,
.frame_format = SDE_MDP_FMT_LINEAR,
.pixel_mode = SDE_MDP_PIXEL_10BIT,
.element = { C1_B_Cb, C2_R_Cr },
.unpack_tight = 0,
.unpack_align_msb = 1,
.is_ubwc = SDE_MDP_COMPRESS_NONE,
},
{
FMT_YUV10_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_VENUS),
.description = "SDE/Y_CBCR_H2V2_P010_VENUS",
.flag = 0,
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
.chroma_sample = SDE_MDP_CHROMA_420,
.unpack_count = 2,
.bpp = 2,
.frame_format = SDE_MDP_FMT_LINEAR,
.pixel_mode = SDE_MDP_PIXEL_10BIT,
.element = { C1_B_Cb, C2_R_Cr },
.unpack_tight = 0,
.unpack_align_msb = 1,
.is_ubwc = SDE_MDP_COMPRESS_NONE,
},
{
FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_TP10),
.description = "SDE/Y_CBCR_H2V2_TP10",
.flag = 0,
.fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
.chroma_sample = SDE_MDP_CHROMA_420,
.unpack_count = 2,
.bpp = 2,
.frame_format = SDE_MDP_FMT_TILE_A5X,
.pixel_mode = SDE_MDP_PIXEL_10BIT,
.element = { C1_B_Cb, C2_R_Cr },
.unpack_tight = 1,
.unpack_align_msb = 0,
.is_ubwc = SDE_MDP_COMPRESS_NONE,
},
FMT_YUV_PLANR(SDE_PIX_FMT_Y_CB_CR_H2V2, "Y_CB_CR_H2V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, 0, C2_R_Cr, C1_B_Cb),
FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_H2V2, "Y_CR_CB_H2V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_GH2V2, "SDE/Y_CR_CB_GH2V2",
SDE_MDP_FMT_LINEAR,
SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
{
FMT_YUV_COMMON(SDE_PIX_FMT_YCBYCR_H2V1),
.description = "YCBYCR_H2V1",
.flag = 0,
.fetch_planes = SDE_MDP_PLANE_INTERLEAVED,
.chroma_sample = SDE_MDP_CHROMA_H2V1,
.unpack_count = 4,
.bpp = 2,
.frame_format = SDE_MDP_FMT_LINEAR,
.pixel_mode = SDE_MDP_PIXEL_NORMAL,
.element = { C2_R_Cr, C0_G_Y, C1_B_Cb, C0_G_Y },
.is_ubwc = SDE_MDP_COMPRESS_NONE,
},
FMT_RGB_1555(SDE_PIX_FMT_RGBA_5551, "RGBA_5551", 1, 0,
C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
FMT_RGB_1555(SDE_PIX_FMT_ARGB_1555, "ARGB_1555", 1, 0,
C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
FMT_RGB_1555(SDE_PIX_FMT_ABGR_1555, "ABGR_1555", 1, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
FMT_RGB_1555(SDE_PIX_FMT_BGRA_5551, "BGRA_5551", 1, 0,
C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
FMT_RGB_1555(SDE_PIX_FMT_BGRX_5551, "BGRX_5551", 0, 0,
C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
FMT_RGB_1555(SDE_PIX_FMT_RGBX_5551, "RGBX_5551", 0, 0,
C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
FMT_RGB_1555(SDE_PIX_FMT_XBGR_1555, "XBGR_1555", 0, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
FMT_RGB_1555(SDE_PIX_FMT_XRGB_1555, "XRGB_1555", 0, 0,
C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
FMT_RGB_4444(SDE_PIX_FMT_RGBA_4444, "RGBA_4444", 1, 0,
C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
FMT_RGB_4444(SDE_PIX_FMT_ARGB_4444, "ARGB_4444", 1, 0,
C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
FMT_RGB_4444(SDE_PIX_FMT_BGRA_4444, "BGRA_4444", 1, 0,
C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
FMT_RGB_4444(SDE_PIX_FMT_ABGR_4444, "ABGR_4444", 1, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
FMT_RGB_4444(SDE_PIX_FMT_RGBX_4444, "RGBX_4444", 0, 0,
C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
FMT_RGB_4444(SDE_PIX_FMT_XRGB_4444, "XRGB_4444", 0, 0,
C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
FMT_RGB_4444(SDE_PIX_FMT_BGRX_4444, "BGRX_4444", 0, 0,
C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
FMT_RGB_4444(SDE_PIX_FMT_XBGR_4444, "XBGR_4444", 0, 0,
C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102, "SDE/RGBA_1010102",
SDE_MDP_FMT_LINEAR,
0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102, "SDE/RGBX_1010102",
SDE_MDP_FMT_LINEAR,
0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102, "SDE/BGRA_1010102",
SDE_MDP_FMT_LINEAR,
0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102, "SDE/BGRX_1010102",
SDE_MDP_FMT_LINEAR,
0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010, "SDE/ARGB_2101010",
SDE_MDP_FMT_LINEAR,
0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010, "SDE/XRGB_2101010",
SDE_MDP_FMT_LINEAR,
0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010, "SDE/ABGR_2101010",
SDE_MDP_FMT_LINEAR,
0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010, "SDE/XBGR_2101010",
SDE_MDP_FMT_LINEAR,
0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
SDE_MDP_COMPRESS_NONE),
};
/*
* sde_get_format_params - return format parameter of the given format
* @format: format to lookup
*/
struct sde_mdp_format_params *sde_get_format_params(u32 format)
{
struct sde_mdp_format_params *fmt = NULL;
int i;
bool fmt_found = false;
for (i = 0; i < ARRAY_SIZE(sde_mdp_format_map); i++) {
fmt = &sde_mdp_format_map[i];
if (format == fmt->format) {
fmt_found = true;
break;
}
}
if (!fmt_found) {
for (i = 0; i < ARRAY_SIZE(sde_mdp_format_ubwc_map); i++) {
fmt = &sde_mdp_format_ubwc_map[i].mdp_format;
if (format == fmt->format) {
fmt_found = true;
break;
}
}
}
/* If format not supported than return NULL */
if (!fmt_found)
fmt = NULL;
return fmt;
}
/*
* sde_rot_get_ubwc_micro_dim - return micro dimension of the given ubwc format
* @format: format to lookup
* @w: Pointer to returned width dimension
* @h: Pointer to returned height dimension
*/
int sde_rot_get_ubwc_micro_dim(u32 format, u16 *w, u16 *h)
{
struct sde_mdp_format_params_ubwc *fmt = NULL;
bool fmt_found = false;
int i;
for (i = 0; i < ARRAY_SIZE(sde_mdp_format_ubwc_map); i++) {
fmt = &sde_mdp_format_ubwc_map[i];
if (format == fmt->mdp_format.format) {
fmt_found = true;
break;
}
}
if (!fmt_found)
return -EINVAL;
*w = fmt->micro.tile_width;
*h = fmt->micro.tile_height;
return 0;
}
/*
* sde_rot_get_tilea5x_pixfmt - get base a5x tile format of given source format
* @src_pixfmt: source pixel format to be converted
* @dst_pixfmt: pointer to base a5x tile pixel format
* return: 0 if success; error code otherwise
*/
int sde_rot_get_base_tilea5x_pixfmt(u32 src_pixfmt, u32 *dst_pixfmt)
{
int rc = 0;
if (!dst_pixfmt) {
SDEROT_ERR("invalid parameters\n");
return -EINVAL;
}
switch (src_pixfmt) {
case SDE_PIX_FMT_Y_CBCR_H2V2:
case SDE_PIX_FMT_Y_CBCR_H2V2_UBWC:
case SDE_PIX_FMT_Y_CBCR_H2V2_TILE:
*dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_TILE;
break;
case SDE_PIX_FMT_Y_CRCB_H2V2:
case SDE_PIX_FMT_Y_CRCB_H2V2_TILE:
*dst_pixfmt = SDE_PIX_FMT_Y_CRCB_H2V2_TILE;
break;
case V4L2_PIX_FMT_RGB565:
case SDE_PIX_FMT_RGB_565_UBWC:
case SDE_PIX_FMT_RGB_565_TILE:
*dst_pixfmt = SDE_PIX_FMT_RGB_565_TILE;
break;
case SDE_PIX_FMT_RGBA_8888:
case SDE_PIX_FMT_RGBA_8888_UBWC:
case SDE_PIX_FMT_RGBA_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_RGBA_8888_TILE;
break;
case SDE_PIX_FMT_RGBX_8888:
case SDE_PIX_FMT_RGBX_8888_UBWC:
case SDE_PIX_FMT_RGBX_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_RGBX_8888_TILE;
break;
case SDE_PIX_FMT_ARGB_8888:
case SDE_PIX_FMT_ARGB_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_ARGB_8888_TILE;
break;
case SDE_PIX_FMT_XRGB_8888:
case SDE_PIX_FMT_XRGB_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_XRGB_8888_TILE;
break;
case SDE_PIX_FMT_ABGR_8888:
case SDE_PIX_FMT_ABGR_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_ABGR_8888_TILE;
break;
case SDE_PIX_FMT_XBGR_8888:
case SDE_PIX_FMT_XBGR_8888_TILE:
*dst_pixfmt = SDE_PIX_FMT_XBGR_8888_TILE;
break;
case SDE_PIX_FMT_ARGB_2101010:
case SDE_PIX_FMT_ARGB_2101010_TILE:
*dst_pixfmt = SDE_PIX_FMT_ARGB_2101010_TILE;
break;
case SDE_PIX_FMT_XRGB_2101010:
case SDE_PIX_FMT_XRGB_2101010_TILE:
*dst_pixfmt = SDE_PIX_FMT_XRGB_2101010_TILE;
break;
case SDE_PIX_FMT_ABGR_2101010:
case SDE_PIX_FMT_ABGR_2101010_TILE:
*dst_pixfmt = SDE_PIX_FMT_ABGR_2101010_TILE;
break;
case SDE_PIX_FMT_XBGR_2101010:
case SDE_PIX_FMT_XBGR_2101010_TILE:
*dst_pixfmt = SDE_PIX_FMT_XBGR_2101010_TILE;
break;
case SDE_PIX_FMT_BGRA_1010102:
case SDE_PIX_FMT_BGRA_1010102_TILE:
*dst_pixfmt = SDE_PIX_FMT_BGRA_1010102_TILE;
break;
case SDE_PIX_FMT_BGRX_1010102:
case SDE_PIX_FMT_BGRX_1010102_TILE:
*dst_pixfmt = SDE_PIX_FMT_BGRX_1010102_TILE;
break;
case SDE_PIX_FMT_Y_CBCR_H2V2_P010:
case SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE:
case SDE_PIX_FMT_Y_CBCR_H2V2_P010_UBWC:
*dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE;
break;
case SDE_PIX_FMT_Y_CBCR_H2V2_TP10:
case SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC:
*dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_TP10;
break;
default:
SDEROT_ERR("invalid src pixel format %c%c%c%c\n",
src_pixfmt >> 0, src_pixfmt >> 8,
src_pixfmt >> 16, src_pixfmt >> 24);
rc = -EINVAL;
break;
}
return rc;
}