161890ccaSMoudy Ho /* SPDX-License-Identifier: GPL-2.0-only */ 261890ccaSMoudy Ho /* 361890ccaSMoudy Ho * Copyright (c) 2022 MediaTek Inc. 461890ccaSMoudy Ho * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com> 561890ccaSMoudy Ho */ 661890ccaSMoudy Ho 761890ccaSMoudy Ho #ifndef __MTK_MDP3_REGS_H__ 861890ccaSMoudy Ho #define __MTK_MDP3_REGS_H__ 961890ccaSMoudy Ho 1061890ccaSMoudy Ho #include <linux/videodev2.h> 1161890ccaSMoudy Ho #include <media/videobuf2-core.h> 1261890ccaSMoudy Ho #include "mtk-img-ipi.h" 1361890ccaSMoudy Ho 1461890ccaSMoudy Ho /* 1561890ccaSMoudy Ho * MDP native color code 1661890ccaSMoudy Ho * Plane count: 1, 2, 3 1761890ccaSMoudy Ho * H-subsample: 0, 1, 2 1861890ccaSMoudy Ho * V-subsample: 0, 1 1961890ccaSMoudy Ho * Color group: 0-RGB, 1-YUV, 2-raw 2061890ccaSMoudy Ho */ 2161890ccaSMoudy Ho #define MDP_COLOR(PACKED, LOOSE, VIDEO, PLANE, HF, VF, BITS, GROUP, SWAP, ID)\ 2261890ccaSMoudy Ho (((PACKED) << 27) | ((LOOSE) << 26) | ((VIDEO) << 23) |\ 2361890ccaSMoudy Ho ((PLANE) << 21) | ((HF) << 19) | ((VF) << 18) | ((BITS) << 8) |\ 2461890ccaSMoudy Ho ((GROUP) << 6) | ((SWAP) << 5) | ((ID) << 0)) 2561890ccaSMoudy Ho 2661890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_PACKED(c) ((0x08000000 & (c)) >> 27) 2761890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_LOOSE(c) (((0x0c000000 & (c)) >> 26) == 1) 2861890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_TILE(c) (((0x0c000000 & (c)) >> 26) == 3) 2961890ccaSMoudy Ho #define MDP_COLOR_IS_UFP(c) ((0x02000000 & (c)) >> 25) 3061890ccaSMoudy Ho #define MDP_COLOR_IS_INTERLACED(c) ((0x01000000 & (c)) >> 24) 3161890ccaSMoudy Ho #define MDP_COLOR_IS_BLOCK_MODE(c) ((0x00800000 & (c)) >> 23) 3261890ccaSMoudy Ho #define MDP_COLOR_GET_PLANE_COUNT(c) ((0x00600000 & (c)) >> 21) 3361890ccaSMoudy Ho #define MDP_COLOR_GET_H_SUBSAMPLE(c) ((0x00180000 & (c)) >> 19) 3461890ccaSMoudy Ho #define MDP_COLOR_GET_V_SUBSAMPLE(c) ((0x00040000 & (c)) >> 18) 3561890ccaSMoudy Ho #define MDP_COLOR_BITS_PER_PIXEL(c) ((0x0003ff00 & (c)) >> 8) 3661890ccaSMoudy Ho #define MDP_COLOR_GET_GROUP(c) ((0x000000c0 & (c)) >> 6) 3761890ccaSMoudy Ho #define MDP_COLOR_IS_SWAPPED(c) ((0x00000020 & (c)) >> 5) 3861890ccaSMoudy Ho #define MDP_COLOR_GET_UNIQUE_ID(c) ((0x0000001f & (c)) >> 0) 3961890ccaSMoudy Ho #define MDP_COLOR_GET_HW_FORMAT(c) ((0x0000001f & (c)) >> 0) 4061890ccaSMoudy Ho 4161890ccaSMoudy Ho #define MDP_COLOR_IS_RGB(c) (MDP_COLOR_GET_GROUP(c) == 0) 4261890ccaSMoudy Ho #define MDP_COLOR_IS_YUV(c) (MDP_COLOR_GET_GROUP(c) == 1) 4361890ccaSMoudy Ho 4461890ccaSMoudy Ho enum mdp_color { 4561890ccaSMoudy Ho MDP_COLOR_UNKNOWN = 0, 4661890ccaSMoudy Ho 4761890ccaSMoudy Ho //MDP_COLOR_FULLG8, 4861890ccaSMoudy Ho MDP_COLOR_FULLG8_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 8, 2, 0, 21), 4961890ccaSMoudy Ho MDP_COLOR_FULLG8_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 8, 2, 0, 21), 5061890ccaSMoudy Ho MDP_COLOR_FULLG8_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 8, 2, 0, 21), 5161890ccaSMoudy Ho MDP_COLOR_FULLG8_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 8, 2, 0, 21), 5261890ccaSMoudy Ho MDP_COLOR_FULLG8 = MDP_COLOR_FULLG8_BGGR, 5361890ccaSMoudy Ho 5461890ccaSMoudy Ho //MDP_COLOR_FULLG10, 5561890ccaSMoudy Ho MDP_COLOR_FULLG10_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2, 0, 21), 5661890ccaSMoudy Ho MDP_COLOR_FULLG10_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 10, 2, 0, 21), 5761890ccaSMoudy Ho MDP_COLOR_FULLG10_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 10, 2, 0, 21), 5861890ccaSMoudy Ho MDP_COLOR_FULLG10_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 10, 2, 0, 21), 5961890ccaSMoudy Ho MDP_COLOR_FULLG10 = MDP_COLOR_FULLG10_BGGR, 6061890ccaSMoudy Ho 6161890ccaSMoudy Ho //MDP_COLOR_FULLG12, 6261890ccaSMoudy Ho MDP_COLOR_FULLG12_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2, 0, 21), 6361890ccaSMoudy Ho MDP_COLOR_FULLG12_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 12, 2, 0, 21), 6461890ccaSMoudy Ho MDP_COLOR_FULLG12_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 12, 2, 0, 21), 6561890ccaSMoudy Ho MDP_COLOR_FULLG12_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 12, 2, 0, 21), 6661890ccaSMoudy Ho MDP_COLOR_FULLG12 = MDP_COLOR_FULLG12_BGGR, 6761890ccaSMoudy Ho 6861890ccaSMoudy Ho //MDP_COLOR_FULLG14, 6961890ccaSMoudy Ho MDP_COLOR_FULLG14_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2, 0, 21), 7061890ccaSMoudy Ho MDP_COLOR_FULLG14_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 14, 2, 0, 21), 7161890ccaSMoudy Ho MDP_COLOR_FULLG14_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 14, 2, 0, 21), 7261890ccaSMoudy Ho MDP_COLOR_FULLG14_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 14, 2, 0, 21), 7361890ccaSMoudy Ho MDP_COLOR_FULLG14 = MDP_COLOR_FULLG14_BGGR, 7461890ccaSMoudy Ho 7561890ccaSMoudy Ho MDP_COLOR_UFO10 = MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2, 0, 24), 7661890ccaSMoudy Ho 7761890ccaSMoudy Ho //MDP_COLOR_BAYER8, 7861890ccaSMoudy Ho MDP_COLOR_BAYER8_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 8, 2, 0, 20), 7961890ccaSMoudy Ho MDP_COLOR_BAYER8_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 8, 2, 0, 20), 8061890ccaSMoudy Ho MDP_COLOR_BAYER8_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 8, 2, 0, 20), 8161890ccaSMoudy Ho MDP_COLOR_BAYER8_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 8, 2, 0, 20), 8261890ccaSMoudy Ho MDP_COLOR_BAYER8 = MDP_COLOR_BAYER8_BGGR, 8361890ccaSMoudy Ho 8461890ccaSMoudy Ho //MDP_COLOR_BAYER10, 8561890ccaSMoudy Ho MDP_COLOR_BAYER10_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2, 0, 20), 8661890ccaSMoudy Ho MDP_COLOR_BAYER10_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 10, 2, 0, 20), 8761890ccaSMoudy Ho MDP_COLOR_BAYER10_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 10, 2, 0, 20), 8861890ccaSMoudy Ho MDP_COLOR_BAYER10_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 10, 2, 0, 20), 8961890ccaSMoudy Ho MDP_COLOR_BAYER10 = MDP_COLOR_BAYER10_BGGR, 9061890ccaSMoudy Ho 9161890ccaSMoudy Ho //MDP_COLOR_BAYER12, 9261890ccaSMoudy Ho MDP_COLOR_BAYER12_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2, 0, 20), 9361890ccaSMoudy Ho MDP_COLOR_BAYER12_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 12, 2, 0, 20), 9461890ccaSMoudy Ho MDP_COLOR_BAYER12_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 12, 2, 0, 20), 9561890ccaSMoudy Ho MDP_COLOR_BAYER12_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 12, 2, 0, 20), 9661890ccaSMoudy Ho MDP_COLOR_BAYER12 = MDP_COLOR_BAYER12_BGGR, 9761890ccaSMoudy Ho 9861890ccaSMoudy Ho //MDP_COLOR_BAYER14, 9961890ccaSMoudy Ho MDP_COLOR_BAYER14_RGGB = MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2, 0, 20), 10061890ccaSMoudy Ho MDP_COLOR_BAYER14_GRBG = MDP_COLOR(0, 0, 0, 1, 0, 1, 14, 2, 0, 20), 10161890ccaSMoudy Ho MDP_COLOR_BAYER14_GBRG = MDP_COLOR(0, 0, 0, 1, 1, 0, 14, 2, 0, 20), 10261890ccaSMoudy Ho MDP_COLOR_BAYER14_BGGR = MDP_COLOR(0, 0, 0, 1, 1, 1, 14, 2, 0, 20), 10361890ccaSMoudy Ho MDP_COLOR_BAYER14 = MDP_COLOR_BAYER14_BGGR, 10461890ccaSMoudy Ho 10561890ccaSMoudy Ho MDP_COLOR_RGB48 = MDP_COLOR(0, 0, 0, 1, 0, 0, 48, 0, 0, 23), 10661890ccaSMoudy Ho /* For bayer+mono raw-16 */ 10761890ccaSMoudy Ho MDP_COLOR_RGB565_RAW = MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 2, 0, 0), 10861890ccaSMoudy Ho 10961890ccaSMoudy Ho MDP_COLOR_BAYER8_UNPAK = MDP_COLOR(0, 0, 0, 1, 0, 0, 8, 2, 0, 22), 11061890ccaSMoudy Ho MDP_COLOR_BAYER10_UNPAK = MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2, 0, 22), 11161890ccaSMoudy Ho MDP_COLOR_BAYER12_UNPAK = MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2, 0, 22), 11261890ccaSMoudy Ho MDP_COLOR_BAYER14_UNPAK = MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2, 0, 22), 11361890ccaSMoudy Ho 11461890ccaSMoudy Ho /* Unified formats */ 11561890ccaSMoudy Ho MDP_COLOR_GREY = MDP_COLOR(0, 0, 0, 1, 0, 0, 8, 1, 0, 7), 11661890ccaSMoudy Ho 11761890ccaSMoudy Ho MDP_COLOR_RGB565 = MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 0, 0, 0), 11861890ccaSMoudy Ho MDP_COLOR_BGR565 = MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 0, 1, 0), 11961890ccaSMoudy Ho MDP_COLOR_RGB888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 0, 1, 1), 12061890ccaSMoudy Ho MDP_COLOR_BGR888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 0, 0, 1), 12161890ccaSMoudy Ho MDP_COLOR_RGBA8888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0, 1, 2), 12261890ccaSMoudy Ho MDP_COLOR_BGRA8888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0, 0, 2), 12361890ccaSMoudy Ho MDP_COLOR_ARGB8888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0, 1, 3), 12461890ccaSMoudy Ho MDP_COLOR_ABGR8888 = MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0, 0, 3), 12561890ccaSMoudy Ho 12661890ccaSMoudy Ho MDP_COLOR_UYVY = MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1, 0, 4), 12761890ccaSMoudy Ho MDP_COLOR_VYUY = MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1, 1, 4), 12861890ccaSMoudy Ho MDP_COLOR_YUYV = MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1, 0, 5), 12961890ccaSMoudy Ho MDP_COLOR_YVYU = MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1, 1, 5), 13061890ccaSMoudy Ho 13161890ccaSMoudy Ho MDP_COLOR_I420 = MDP_COLOR(0, 0, 0, 3, 1, 1, 8, 1, 0, 8), 13261890ccaSMoudy Ho MDP_COLOR_YV12 = MDP_COLOR(0, 0, 0, 3, 1, 1, 8, 1, 1, 8), 13361890ccaSMoudy Ho MDP_COLOR_I422 = MDP_COLOR(0, 0, 0, 3, 1, 0, 8, 1, 0, 9), 13461890ccaSMoudy Ho MDP_COLOR_YV16 = MDP_COLOR(0, 0, 0, 3, 1, 0, 8, 1, 1, 9), 13561890ccaSMoudy Ho MDP_COLOR_I444 = MDP_COLOR(0, 0, 0, 3, 0, 0, 8, 1, 0, 10), 13661890ccaSMoudy Ho MDP_COLOR_YV24 = MDP_COLOR(0, 0, 0, 3, 0, 0, 8, 1, 1, 10), 13761890ccaSMoudy Ho 13861890ccaSMoudy Ho MDP_COLOR_NV12 = MDP_COLOR(0, 0, 0, 2, 1, 1, 8, 1, 0, 12), 13961890ccaSMoudy Ho MDP_COLOR_NV21 = MDP_COLOR(0, 0, 0, 2, 1, 1, 8, 1, 1, 12), 14061890ccaSMoudy Ho MDP_COLOR_NV16 = MDP_COLOR(0, 0, 0, 2, 1, 0, 8, 1, 0, 13), 14161890ccaSMoudy Ho MDP_COLOR_NV61 = MDP_COLOR(0, 0, 0, 2, 1, 0, 8, 1, 1, 13), 14261890ccaSMoudy Ho MDP_COLOR_NV24 = MDP_COLOR(0, 0, 0, 2, 0, 0, 8, 1, 0, 14), 14361890ccaSMoudy Ho MDP_COLOR_NV42 = MDP_COLOR(0, 0, 0, 2, 0, 0, 8, 1, 1, 14), 14461890ccaSMoudy Ho 14561890ccaSMoudy Ho /* MediaTek proprietary formats */ 14661890ccaSMoudy Ho /* UFO encoded block mode */ 14761890ccaSMoudy Ho MDP_COLOR_420_BLK_UFO = MDP_COLOR(0, 0, 5, 2, 1, 1, 256, 1, 0, 12), 14861890ccaSMoudy Ho /* Block mode */ 14961890ccaSMoudy Ho MDP_COLOR_420_BLK = MDP_COLOR(0, 0, 1, 2, 1, 1, 256, 1, 0, 12), 15061890ccaSMoudy Ho /* Block mode + field mode */ 15161890ccaSMoudy Ho MDP_COLOR_420_BLKI = MDP_COLOR(0, 0, 3, 2, 1, 1, 256, 1, 0, 12), 15261890ccaSMoudy Ho /* Block mode */ 15361890ccaSMoudy Ho MDP_COLOR_422_BLK = MDP_COLOR(0, 0, 1, 1, 1, 0, 512, 1, 0, 4), 15461890ccaSMoudy Ho 15561890ccaSMoudy Ho MDP_COLOR_IYU2 = MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 1, 0, 25), 15661890ccaSMoudy Ho MDP_COLOR_YUV444 = MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 1, 0, 30), 15761890ccaSMoudy Ho 15861890ccaSMoudy Ho /* Packed 10-bit formats */ 15961890ccaSMoudy Ho MDP_COLOR_RGBA1010102 = MDP_COLOR(1, 0, 0, 1, 0, 0, 32, 0, 1, 2), 16061890ccaSMoudy Ho MDP_COLOR_BGRA1010102 = MDP_COLOR(1, 0, 0, 1, 0, 0, 32, 0, 0, 2), 16161890ccaSMoudy Ho /* Packed 10-bit UYVY */ 16261890ccaSMoudy Ho MDP_COLOR_UYVY_10P = MDP_COLOR(1, 0, 0, 1, 1, 0, 20, 1, 0, 4), 16361890ccaSMoudy Ho /* Packed 10-bit NV21 */ 16461890ccaSMoudy Ho MDP_COLOR_NV21_10P = MDP_COLOR(1, 0, 0, 2, 1, 1, 10, 1, 1, 12), 16561890ccaSMoudy Ho /* 10-bit block mode */ 16661890ccaSMoudy Ho MDP_COLOR_420_BLK_10_H = MDP_COLOR(1, 0, 1, 2, 1, 1, 320, 1, 0, 12), 16761890ccaSMoudy Ho /* 10-bit HEVC tile mode */ 16861890ccaSMoudy Ho MDP_COLOR_420_BLK_10_V = MDP_COLOR(1, 1, 1, 2, 1, 1, 320, 1, 0, 12), 16961890ccaSMoudy Ho /* UFO encoded 10-bit block mode */ 17061890ccaSMoudy Ho MDP_COLOR_420_BLK_U10_H = MDP_COLOR(1, 0, 5, 2, 1, 1, 320, 1, 0, 12), 17161890ccaSMoudy Ho /* UFO encoded 10-bit HEVC tile mode */ 17261890ccaSMoudy Ho MDP_COLOR_420_BLK_U10_V = MDP_COLOR(1, 1, 5, 2, 1, 1, 320, 1, 0, 12), 17361890ccaSMoudy Ho 17461890ccaSMoudy Ho /* Loose 10-bit formats */ 17561890ccaSMoudy Ho MDP_COLOR_UYVY_10L = MDP_COLOR(0, 1, 0, 1, 1, 0, 20, 1, 0, 4), 17661890ccaSMoudy Ho MDP_COLOR_VYUY_10L = MDP_COLOR(0, 1, 0, 1, 1, 0, 20, 1, 1, 4), 17761890ccaSMoudy Ho MDP_COLOR_YUYV_10L = MDP_COLOR(0, 1, 0, 1, 1, 0, 20, 1, 0, 5), 17861890ccaSMoudy Ho MDP_COLOR_YVYU_10L = MDP_COLOR(0, 1, 0, 1, 1, 0, 20, 1, 1, 5), 17961890ccaSMoudy Ho MDP_COLOR_NV12_10L = MDP_COLOR(0, 1, 0, 2, 1, 1, 10, 1, 0, 12), 18061890ccaSMoudy Ho MDP_COLOR_NV21_10L = MDP_COLOR(0, 1, 0, 2, 1, 1, 10, 1, 1, 12), 18161890ccaSMoudy Ho MDP_COLOR_NV16_10L = MDP_COLOR(0, 1, 0, 2, 1, 0, 10, 1, 0, 13), 18261890ccaSMoudy Ho MDP_COLOR_NV61_10L = MDP_COLOR(0, 1, 0, 2, 1, 0, 10, 1, 1, 13), 18361890ccaSMoudy Ho MDP_COLOR_YV12_10L = MDP_COLOR(0, 1, 0, 3, 1, 1, 10, 1, 1, 8), 18461890ccaSMoudy Ho MDP_COLOR_I420_10L = MDP_COLOR(0, 1, 0, 3, 1, 1, 10, 1, 0, 8), 18561890ccaSMoudy Ho }; 18661890ccaSMoudy Ho 18761890ccaSMoudy Ho static inline bool MDP_COLOR_IS_UV_COPLANE(enum mdp_color c) 18861890ccaSMoudy Ho { 18961890ccaSMoudy Ho return (MDP_COLOR_GET_PLANE_COUNT(c) == 2 && MDP_COLOR_IS_YUV(c)); 19061890ccaSMoudy Ho } 19161890ccaSMoudy Ho 19261890ccaSMoudy Ho /* Minimum Y stride that is accepted by MDP HW */ 19361890ccaSMoudy Ho static inline u32 mdp_color_get_min_y_stride(enum mdp_color c, u32 width) 19461890ccaSMoudy Ho { 19561890ccaSMoudy Ho return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) + 4) >> 3; 19661890ccaSMoudy Ho } 19761890ccaSMoudy Ho 19861890ccaSMoudy Ho /* Minimum UV stride that is accepted by MDP HW */ 19961890ccaSMoudy Ho static inline u32 mdp_color_get_min_uv_stride(enum mdp_color c, u32 width) 20061890ccaSMoudy Ho { 20161890ccaSMoudy Ho u32 min_stride; 20261890ccaSMoudy Ho 20361890ccaSMoudy Ho if (MDP_COLOR_GET_PLANE_COUNT(c) == 1) 20461890ccaSMoudy Ho return 0; 20561890ccaSMoudy Ho min_stride = mdp_color_get_min_y_stride(c, width) 20661890ccaSMoudy Ho >> MDP_COLOR_GET_H_SUBSAMPLE(c); 20761890ccaSMoudy Ho if (MDP_COLOR_IS_UV_COPLANE(c) && !MDP_COLOR_IS_BLOCK_MODE(c)) 20861890ccaSMoudy Ho min_stride = min_stride * 2; 20961890ccaSMoudy Ho return min_stride; 21061890ccaSMoudy Ho } 21161890ccaSMoudy Ho 21261890ccaSMoudy Ho /* Minimum Y plane size that is necessary in buffer */ 21361890ccaSMoudy Ho static inline u32 mdp_color_get_min_y_size(enum mdp_color c, 21461890ccaSMoudy Ho u32 width, u32 height) 21561890ccaSMoudy Ho { 21661890ccaSMoudy Ho if (MDP_COLOR_IS_BLOCK_MODE(c)) 21761890ccaSMoudy Ho return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height; 21861890ccaSMoudy Ho return mdp_color_get_min_y_stride(c, width) * height; 21961890ccaSMoudy Ho } 22061890ccaSMoudy Ho 22161890ccaSMoudy Ho /* Minimum UV plane size that is necessary in buffer */ 22261890ccaSMoudy Ho static inline u32 mdp_color_get_min_uv_size(enum mdp_color c, 22361890ccaSMoudy Ho u32 width, u32 height) 22461890ccaSMoudy Ho { 22561890ccaSMoudy Ho height = height >> MDP_COLOR_GET_V_SUBSAMPLE(c); 22661890ccaSMoudy Ho if (MDP_COLOR_IS_BLOCK_MODE(c) && (MDP_COLOR_GET_PLANE_COUNT(c) > 1)) 22761890ccaSMoudy Ho return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height; 22861890ccaSMoudy Ho return mdp_color_get_min_uv_stride(c, width) * height; 22961890ccaSMoudy Ho } 23061890ccaSMoudy Ho 23161890ccaSMoudy Ho /* Combine colorspace, xfer_func, ycbcr_encoding, and quantization */ 23261890ccaSMoudy Ho enum mdp_ycbcr_profile { 23361890ccaSMoudy Ho /* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_LIM_RANGE */ 23461890ccaSMoudy Ho MDP_YCBCR_PROFILE_BT601, 23561890ccaSMoudy Ho /* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_LIM_RANGE */ 23661890ccaSMoudy Ho MDP_YCBCR_PROFILE_BT709, 23761890ccaSMoudy Ho /* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_FULL_RANGE */ 23861890ccaSMoudy Ho MDP_YCBCR_PROFILE_JPEG, 23961890ccaSMoudy Ho MDP_YCBCR_PROFILE_FULL_BT601 = MDP_YCBCR_PROFILE_JPEG, 24061890ccaSMoudy Ho 24161890ccaSMoudy Ho /* Colorspaces not support for capture */ 24261890ccaSMoudy Ho /* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_LIM_RANGE */ 24361890ccaSMoudy Ho MDP_YCBCR_PROFILE_BT2020, 24461890ccaSMoudy Ho /* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_FULL_RANGE */ 24561890ccaSMoudy Ho MDP_YCBCR_PROFILE_FULL_BT709, 24661890ccaSMoudy Ho /* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_FULL_RANGE */ 24761890ccaSMoudy Ho MDP_YCBCR_PROFILE_FULL_BT2020, 24861890ccaSMoudy Ho }; 24961890ccaSMoudy Ho 25061890ccaSMoudy Ho #define MDP_FMT_FLAG_OUTPUT BIT(0) 25161890ccaSMoudy Ho #define MDP_FMT_FLAG_CAPTURE BIT(1) 25261890ccaSMoudy Ho 25361890ccaSMoudy Ho struct mdp_format { 25461890ccaSMoudy Ho u32 pixelformat; 25561890ccaSMoudy Ho u32 mdp_color; 25661890ccaSMoudy Ho u8 depth[VIDEO_MAX_PLANES]; 25761890ccaSMoudy Ho u8 row_depth[VIDEO_MAX_PLANES]; 25861890ccaSMoudy Ho u8 num_planes; 25961890ccaSMoudy Ho u8 walign; 26061890ccaSMoudy Ho u8 halign; 26161890ccaSMoudy Ho u8 salign; 26261890ccaSMoudy Ho u32 flags; 26361890ccaSMoudy Ho }; 26461890ccaSMoudy Ho 26561890ccaSMoudy Ho struct mdp_pix_limit { 26661890ccaSMoudy Ho u32 wmin; 26761890ccaSMoudy Ho u32 hmin; 26861890ccaSMoudy Ho u32 wmax; 26961890ccaSMoudy Ho u32 hmax; 27061890ccaSMoudy Ho }; 27161890ccaSMoudy Ho 27261890ccaSMoudy Ho struct mdp_limit { 27361890ccaSMoudy Ho struct mdp_pix_limit out_limit; 27461890ccaSMoudy Ho struct mdp_pix_limit cap_limit; 27561890ccaSMoudy Ho u32 h_scale_up_max; 27661890ccaSMoudy Ho u32 v_scale_up_max; 27761890ccaSMoudy Ho u32 h_scale_down_max; 27861890ccaSMoudy Ho u32 v_scale_down_max; 27961890ccaSMoudy Ho }; 28061890ccaSMoudy Ho 28161890ccaSMoudy Ho enum mdp_stream_type { 28261890ccaSMoudy Ho MDP_STREAM_TYPE_UNKNOWN, 28361890ccaSMoudy Ho MDP_STREAM_TYPE_BITBLT, 28461890ccaSMoudy Ho MDP_STREAM_TYPE_GPU_BITBLT, 28561890ccaSMoudy Ho MDP_STREAM_TYPE_DUAL_BITBLT, 28661890ccaSMoudy Ho MDP_STREAM_TYPE_2ND_BITBLT, 28761890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_IC, 28861890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_VR, 28961890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_ZSD, 29061890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_IP, 29161890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_VSS, 29261890ccaSMoudy Ho MDP_STREAM_TYPE_ISP_ZSD_SLOW, 29361890ccaSMoudy Ho MDP_STREAM_TYPE_WPE, 29461890ccaSMoudy Ho MDP_STREAM_TYPE_WPE2, 29561890ccaSMoudy Ho }; 29661890ccaSMoudy Ho 29761890ccaSMoudy Ho struct mdp_crop { 29861890ccaSMoudy Ho struct v4l2_rect c; 29961890ccaSMoudy Ho struct v4l2_fract left_subpix; 30061890ccaSMoudy Ho struct v4l2_fract top_subpix; 30161890ccaSMoudy Ho struct v4l2_fract width_subpix; 30261890ccaSMoudy Ho struct v4l2_fract height_subpix; 30361890ccaSMoudy Ho }; 30461890ccaSMoudy Ho 30561890ccaSMoudy Ho struct mdp_frame { 30661890ccaSMoudy Ho struct v4l2_format format; 30761890ccaSMoudy Ho const struct mdp_format *mdp_fmt; 30861890ccaSMoudy Ho u32 ycbcr_prof; /* enum mdp_ycbcr_profile */ 30961890ccaSMoudy Ho u32 usage; /* enum mdp_buffer_usage */ 31061890ccaSMoudy Ho struct mdp_crop crop; 31161890ccaSMoudy Ho struct v4l2_rect compose; 31261890ccaSMoudy Ho s32 rotation; 31361890ccaSMoudy Ho u32 hflip:1; 31461890ccaSMoudy Ho u32 vflip:1; 31561890ccaSMoudy Ho u32 hdr:1; 31661890ccaSMoudy Ho u32 dre:1; 31761890ccaSMoudy Ho u32 sharpness:1; 31861890ccaSMoudy Ho u32 dither:1; 31961890ccaSMoudy Ho }; 32061890ccaSMoudy Ho 32161890ccaSMoudy Ho static inline bool mdp_target_is_crop(u32 target) 32261890ccaSMoudy Ho { 32361890ccaSMoudy Ho return (target == V4L2_SEL_TGT_CROP) || 32461890ccaSMoudy Ho (target == V4L2_SEL_TGT_CROP_DEFAULT) || 32561890ccaSMoudy Ho (target == V4L2_SEL_TGT_CROP_BOUNDS); 32661890ccaSMoudy Ho } 32761890ccaSMoudy Ho 32861890ccaSMoudy Ho static inline bool mdp_target_is_compose(u32 target) 32961890ccaSMoudy Ho { 33061890ccaSMoudy Ho return (target == V4L2_SEL_TGT_COMPOSE) || 33161890ccaSMoudy Ho (target == V4L2_SEL_TGT_COMPOSE_DEFAULT) || 33261890ccaSMoudy Ho (target == V4L2_SEL_TGT_COMPOSE_BOUNDS); 33361890ccaSMoudy Ho } 33461890ccaSMoudy Ho 33561890ccaSMoudy Ho #define MDP_MAX_CAPTURES IMG_MAX_HW_OUTPUTS 33661890ccaSMoudy Ho 33761890ccaSMoudy Ho #define MDP_VPU_INIT BIT(0) 33861890ccaSMoudy Ho #define MDP_M2M_CTX_ERROR BIT(1) 33961890ccaSMoudy Ho 34061890ccaSMoudy Ho struct mdp_frameparam { 34161890ccaSMoudy Ho struct list_head list; 34261890ccaSMoudy Ho struct mdp_m2m_ctx *ctx; 34361890ccaSMoudy Ho atomic_t state; 34461890ccaSMoudy Ho const struct mdp_limit *limit; 34561890ccaSMoudy Ho u32 type; /* enum mdp_stream_type */ 34661890ccaSMoudy Ho u32 frame_no; 34761890ccaSMoudy Ho struct mdp_frame output; 34861890ccaSMoudy Ho struct mdp_frame captures[MDP_MAX_CAPTURES]; 34961890ccaSMoudy Ho u32 num_captures; 35061890ccaSMoudy Ho enum v4l2_colorspace colorspace; 35161890ccaSMoudy Ho enum v4l2_ycbcr_encoding ycbcr_enc; 35261890ccaSMoudy Ho enum v4l2_xfer_func xfer_func; 35361890ccaSMoudy Ho enum v4l2_quantization quant; 35461890ccaSMoudy Ho }; 35561890ccaSMoudy Ho 356*6b8910e3SMoudy Ho struct mdp_dev; 357*6b8910e3SMoudy Ho 358*6b8910e3SMoudy Ho int mdp_enum_fmt_mplane(struct mdp_dev *mdp, struct v4l2_fmtdesc *f); 359*6b8910e3SMoudy Ho const struct mdp_format *mdp_try_fmt_mplane(struct mdp_dev *mdp, 360*6b8910e3SMoudy Ho struct v4l2_format *f, 36161890ccaSMoudy Ho struct mdp_frameparam *param, 36261890ccaSMoudy Ho u32 ctx_id); 36361890ccaSMoudy Ho enum mdp_ycbcr_profile mdp_map_ycbcr_prof_mplane(struct v4l2_format *f, 36461890ccaSMoudy Ho u32 mdp_color); 36561890ccaSMoudy Ho int mdp_try_crop(struct mdp_m2m_ctx *ctx, struct v4l2_rect *r, 36661890ccaSMoudy Ho const struct v4l2_selection *s, struct mdp_frame *frame); 36761890ccaSMoudy Ho int mdp_check_scaling_ratio(const struct v4l2_rect *crop, 36861890ccaSMoudy Ho const struct v4l2_rect *compose, s32 rotation, 36961890ccaSMoudy Ho const struct mdp_limit *limit); 37061890ccaSMoudy Ho void mdp_set_src_config(struct img_input *in, 37161890ccaSMoudy Ho struct mdp_frame *frame, struct vb2_buffer *vb); 37261890ccaSMoudy Ho void mdp_set_dst_config(struct img_output *out, 37361890ccaSMoudy Ho struct mdp_frame *frame, struct vb2_buffer *vb); 374*6b8910e3SMoudy Ho int mdp_frameparam_init(struct mdp_dev *mdp, struct mdp_frameparam *param); 37561890ccaSMoudy Ho 37661890ccaSMoudy Ho #endif /* __MTK_MDP3_REGS_H__ */ 377