/* Copyright (c) 2007, 2012-2013, 2018, The Linux Foundation. All rights reserved. * Copyright (C) 2007 Google Incorporated * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include "mdss_fb.h" #include "mdp3_ppp.h" #define MDP_IS_IMGTYPE_BAD(x) ((x) >= MDP_IMGTYPE_LIMIT) /* bg_config_lut not needed since it is same as src */ const uint32_t src_cfg_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = MDP_RGB_565_SRC_REG, [MDP_BGR_565] = MDP_RGB_565_SRC_REG, [MDP_RGB_888] = MDP_RGB_888_SRC_REG, [MDP_BGR_888] = MDP_RGB_888_SRC_REG, [MDP_BGRA_8888] = MDP_RGBX_8888_SRC_REG, [MDP_RGBA_8888] = MDP_RGBX_8888_SRC_REG, [MDP_ARGB_8888] = MDP_RGBX_8888_SRC_REG, [MDP_XRGB_8888] = MDP_RGBX_8888_SRC_REG, [MDP_RGBX_8888] = MDP_RGBX_8888_SRC_REG, [MDP_Y_CRCB_H2V2] = MDP_Y_CBCR_H2V2_SRC_REG, [MDP_Y_CBCR_H2V2] = MDP_Y_CBCR_H2V2_SRC_REG, [MDP_Y_CBCR_H2V2_ADRENO] = MDP_Y_CBCR_H2V2_SRC_REG, [MDP_Y_CBCR_H2V2_VENUS] = MDP_Y_CBCR_H2V2_SRC_REG, [MDP_YCRYCB_H2V1] = MDP_YCRYCB_H2V1_SRC_REG, [MDP_Y_CBCR_H2V1] = MDP_Y_CRCB_H2V1_SRC_REG, [MDP_Y_CRCB_H2V1] = MDP_Y_CRCB_H2V1_SRC_REG, [MDP_BGRX_8888] = MDP_RGBX_8888_SRC_REG, }; const uint32_t out_cfg_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = MDP_RGB_565_DST_REG, [MDP_BGR_565] = MDP_RGB_565_DST_REG, [MDP_RGB_888] = MDP_RGB_888_DST_REG, [MDP_BGR_888] = MDP_RGB_888_DST_REG, [MDP_BGRA_8888] = MDP_RGBX_8888_DST_REG, [MDP_RGBA_8888] = MDP_RGBX_8888_DST_REG, [MDP_ARGB_8888] = MDP_RGBX_8888_DST_REG, [MDP_XRGB_8888] = MDP_RGBX_8888_DST_REG, [MDP_RGBX_8888] = MDP_RGBX_8888_DST_REG, [MDP_Y_CRCB_H2V2] = MDP_Y_CBCR_H2V2_DST_REG, [MDP_Y_CBCR_H2V2] = MDP_Y_CBCR_H2V2_DST_REG, [MDP_Y_CBCR_H2V2_ADRENO] = MDP_Y_CBCR_H2V2_DST_REG, [MDP_Y_CBCR_H2V2_VENUS] = MDP_Y_CBCR_H2V2_DST_REG, [MDP_YCRYCB_H2V1] = MDP_YCRYCB_H2V1_DST_REG, [MDP_Y_CBCR_H2V1] = MDP_Y_CRCB_H2V1_DST_REG, [MDP_Y_CRCB_H2V1] = MDP_Y_CRCB_H2V1_DST_REG, [MDP_BGRX_8888] = MDP_RGBX_8888_DST_REG, }; const uint32_t pack_patt_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_565] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_RGB_888] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_BGR_888] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGRA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_RGBA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), [MDP_ARGB_8888] = PPP_GET_PACK_PATTERN(CLR_R, CLR_G, CLR_B, CLR_ALPHA, 8), [MDP_XRGB_8888] = PPP_GET_PACK_PATTERN(CLR_R, CLR_G, CLR_B, CLR_ALPHA, 8), [MDP_RGBX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), [MDP_Y_CRCB_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y, CLR_CR, CLR_Y, CLR_CB, 8), [MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CRCB_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_BGRX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), }; const uint32_t swapped_pack_patt_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_565] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_RGB_888] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_888] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_BGRA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), [MDP_RGBA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_ARGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_XRGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_RGBX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_Y_CRCB_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y, CLR_CB, CLR_Y, CLR_CR, 8), [MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CRCB_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_BGRX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), }; const uint32_t dst_op_reg[MDP_IMGTYPE_LIMIT] = { [MDP_Y_CRCB_H2V2] = PPP_OP_DST_CHROMA_420, [MDP_Y_CBCR_H2V2] = PPP_OP_DST_CHROMA_420, [MDP_Y_CBCR_H2V1] = PPP_OP_DST_CHROMA_H2V1, [MDP_Y_CRCB_H2V1] = PPP_OP_DST_CHROMA_H2V1, [MDP_YCRYCB_H2V1] = PPP_OP_DST_CHROMA_H2V1, }; const uint32_t src_op_reg[MDP_IMGTYPE_LIMIT] = { [MDP_Y_CRCB_H2V2] = PPP_OP_SRC_CHROMA_420 | PPP_OP_COLOR_SPACE_YCBCR, [MDP_Y_CBCR_H2V2] = PPP_OP_SRC_CHROMA_420 | PPP_OP_COLOR_SPACE_YCBCR, [MDP_Y_CBCR_H2V2_ADRENO] = PPP_OP_SRC_CHROMA_420 | PPP_OP_COLOR_SPACE_YCBCR, [MDP_Y_CBCR_H2V2_VENUS] = PPP_OP_SRC_CHROMA_420 | PPP_OP_COLOR_SPACE_YCBCR, [MDP_Y_CBCR_H2V1] = PPP_OP_SRC_CHROMA_H2V1, [MDP_Y_CRCB_H2V1] = PPP_OP_SRC_CHROMA_H2V1, [MDP_YCRYCB_H2V1] = PPP_OP_SRC_CHROMA_H2V1, }; const uint32_t bytes_per_pixel[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = 2, [MDP_BGR_565] = 2, [MDP_RGB_888] = 3, [MDP_BGR_888] = 3, [MDP_XRGB_8888] = 4, [MDP_ARGB_8888] = 4, [MDP_RGBA_8888] = 4, [MDP_BGRA_8888] = 4, [MDP_RGBX_8888] = 4, [MDP_Y_CBCR_H2V1] = 1, [MDP_Y_CBCR_H2V2] = 1, [MDP_Y_CBCR_H2V2_ADRENO] = 1, [MDP_Y_CBCR_H2V2_VENUS] = 1, [MDP_Y_CRCB_H2V1] = 1, [MDP_Y_CRCB_H2V2] = 1, [MDP_YCRYCB_H2V1] = 2, [MDP_BGRX_8888] = 4, }; const bool per_pixel_alpha[MDP_IMGTYPE_LIMIT] = { [MDP_BGRA_8888] = true, [MDP_RGBA_8888] = true, [MDP_ARGB_8888] = true, }; const bool multi_plane[MDP_IMGTYPE_LIMIT] = { [MDP_Y_CRCB_H2V2] = true, [MDP_Y_CBCR_H2V2] = true, [MDP_Y_CBCR_H2V1] = true, [MDP_Y_CRCB_H2V1] = true, }; /* lut default */ uint32_t default_pre_lut_val[PPP_LUT_MAX] = { 0x0, 0x151515, 0x1d1d1d, 0x232323, 0x272727, 0x2b2b2b, 0x2f2f2f, 0x333333, 0x363636, 0x393939, 0x3b3b3b, 0x3e3e3e, 0x404040, 0x434343, 0x454545, 0x474747, 0x494949, 0x4b4b4b, 0x4d4d4d, 0x4f4f4f, 0x515151, 0x535353, 0x555555, 0x565656, 0x585858, 0x5a5a5a, 0x5b5b5b, 0x5d5d5d, 0x5e5e5e, 0x606060, 0x616161, 0x636363, 0x646464, 0x666666, 0x676767, 0x686868, 0x6a6a6a, 0x6b6b6b, 0x6c6c6c, 0x6e6e6e, 0x6f6f6f, 0x707070, 0x717171, 0x727272, 0x747474, 0x757575, 0x767676, 0x777777, 0x787878, 0x797979, 0x7a7a7a, 0x7c7c7c, 0x7d7d7d, 0x7e7e7e, 0x7f7f7f, 0x808080, 0x818181, 0x828282, 0x838383, 0x848484, 0x858585, 0x868686, 0x878787, 0x888888, 0x898989, 0x8a8a8a, 0x8b8b8b, 0x8c8c8c, 0x8d8d8d, 0x8e8e8e, 0x8f8f8f, 0x8f8f8f, 0x909090, 0x919191, 0x929292, 0x939393, 0x949494, 0x959595, 0x969696, 0x969696, 0x979797, 0x989898, 0x999999, 0x9a9a9a, 0x9b9b9b, 0x9c9c9c, 0x9c9c9c, 0x9d9d9d, 0x9e9e9e, 0x9f9f9f, 0xa0a0a0, 0xa0a0a0, 0xa1a1a1, 0xa2a2a2, 0xa3a3a3, 0xa4a4a4, 0xa4a4a4, 0xa5a5a5, 0xa6a6a6, 0xa7a7a7, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xaaaaaa, 0xaaaaaa, 0xababab, 0xacacac, 0xadadad, 0xadadad, 0xaeaeae, 0xafafaf, 0xafafaf, 0xb0b0b0, 0xb1b1b1, 0xb2b2b2, 0xb2b2b2, 0xb3b3b3, 0xb4b4b4, 0xb4b4b4, 0xb5b5b5, 0xb6b6b6, 0xb6b6b6, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb9b9b9, 0xbababa, 0xbababa, 0xbbbbbb, 0xbcbcbc, 0xbcbcbc, 0xbdbdbd, 0xbebebe, 0xbebebe, 0xbfbfbf, 0xc0c0c0, 0xc0c0c0, 0xc1c1c1, 0xc1c1c1, 0xc2c2c2, 0xc3c3c3, 0xc3c3c3, 0xc4c4c4, 0xc5c5c5, 0xc5c5c5, 0xc6c6c6, 0xc6c6c6, 0xc7c7c7, 0xc8c8c8, 0xc8c8c8, 0xc9c9c9, 0xc9c9c9, 0xcacaca, 0xcbcbcb, 0xcbcbcb, 0xcccccc, 0xcccccc, 0xcdcdcd, 0xcecece, 0xcecece, 0xcfcfcf, 0xcfcfcf, 0xd0d0d0, 0xd0d0d0, 0xd1d1d1, 0xd2d2d2, 0xd2d2d2, 0xd3d3d3, 0xd3d3d3, 0xd4d4d4, 0xd4d4d4, 0xd5d5d5, 0xd6d6d6, 0xd6d6d6, 0xd7d7d7, 0xd7d7d7, 0xd8d8d8, 0xd8d8d8, 0xd9d9d9, 0xd9d9d9, 0xdadada, 0xdbdbdb, 0xdbdbdb, 0xdcdcdc, 0xdcdcdc, 0xdddddd, 0xdddddd, 0xdedede, 0xdedede, 0xdfdfdf, 0xdfdfdf, 0xe0e0e0, 0xe0e0e0, 0xe1e1e1, 0xe1e1e1, 0xe2e2e2, 0xe3e3e3, 0xe3e3e3, 0xe4e4e4, 0xe4e4e4, 0xe5e5e5, 0xe5e5e5, 0xe6e6e6, 0xe6e6e6, 0xe7e7e7, 0xe7e7e7, 0xe8e8e8, 0xe8e8e8, 0xe9e9e9, 0xe9e9e9, 0xeaeaea, 0xeaeaea, 0xebebeb, 0xebebeb, 0xececec, 0xececec, 0xededed, 0xededed, 0xeeeeee, 0xeeeeee, 0xefefef, 0xefefef, 0xf0f0f0, 0xf0f0f0, 0xf1f1f1, 0xf1f1f1, 0xf2f2f2, 0xf2f2f2, 0xf2f2f2, 0xf3f3f3, 0xf3f3f3, 0xf4f4f4, 0xf4f4f4, 0xf5f5f5, 0xf5f5f5, 0xf6f6f6, 0xf6f6f6, 0xf7f7f7, 0xf7f7f7, 0xf8f8f8, 0xf8f8f8, 0xf9f9f9, 0xf9f9f9, 0xfafafa, 0xfafafa, 0xfafafa, 0xfbfbfb, 0xfbfbfb, 0xfcfcfc, 0xfcfcfc, 0xfdfdfd, 0xfdfdfd, 0xfefefe, 0xfefefe, 0xffffff, 0xffffff, }; uint32_t default_post_lut_val[PPP_LUT_MAX] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x10101, 0x20202, 0x20202, 0x20202, 0x20202, 0x20202, 0x20202, 0x30303, 0x30303, 0x30303, 0x30303, 0x30303, 0x40404, 0x40404, 0x40404, 0x40404, 0x40404, 0x50505, 0x50505, 0x50505, 0x50505, 0x60606, 0x60606, 0x60606, 0x70707, 0x70707, 0x70707, 0x70707, 0x80808, 0x80808, 0x80808, 0x90909, 0x90909, 0xa0a0a, 0xa0a0a, 0xa0a0a, 0xb0b0b, 0xb0b0b, 0xb0b0b, 0xc0c0c, 0xc0c0c, 0xd0d0d, 0xd0d0d, 0xe0e0e, 0xe0e0e, 0xe0e0e, 0xf0f0f, 0xf0f0f, 0x101010, 0x101010, 0x111111, 0x111111, 0x121212, 0x121212, 0x131313, 0x131313, 0x141414, 0x151515, 0x151515, 0x161616, 0x161616, 0x171717, 0x171717, 0x181818, 0x191919, 0x191919, 0x1a1a1a, 0x1b1b1b, 0x1b1b1b, 0x1c1c1c, 0x1c1c1c, 0x1d1d1d, 0x1e1e1e, 0x1f1f1f, 0x1f1f1f, 0x202020, 0x212121, 0x212121, 0x222222, 0x232323, 0x242424, 0x242424, 0x252525, 0x262626, 0x272727, 0x272727, 0x282828, 0x292929, 0x2a2a2a, 0x2b2b2b, 0x2c2c2c, 0x2c2c2c, 0x2d2d2d, 0x2e2e2e, 0x2f2f2f, 0x303030, 0x313131, 0x323232, 0x333333, 0x333333, 0x343434, 0x353535, 0x363636, 0x373737, 0x383838, 0x393939, 0x3a3a3a, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x3e3e3e, 0x3f3f3f, 0x404040, 0x414141, 0x424242, 0x434343, 0x444444, 0x464646, 0x474747, 0x484848, 0x494949, 0x4a4a4a, 0x4b4b4b, 0x4c4c4c, 0x4d4d4d, 0x4f4f4f, 0x505050, 0x515151, 0x525252, 0x535353, 0x545454, 0x565656, 0x575757, 0x585858, 0x595959, 0x5b5b5b, 0x5c5c5c, 0x5d5d5d, 0x5e5e5e, 0x606060, 0x616161, 0x626262, 0x646464, 0x656565, 0x666666, 0x686868, 0x696969, 0x6a6a6a, 0x6c6c6c, 0x6d6d6d, 0x6f6f6f, 0x707070, 0x717171, 0x737373, 0x747474, 0x767676, 0x777777, 0x797979, 0x7a7a7a, 0x7c7c7c, 0x7d7d7d, 0x7f7f7f, 0x808080, 0x828282, 0x838383, 0x858585, 0x868686, 0x888888, 0x898989, 0x8b8b8b, 0x8d8d8d, 0x8e8e8e, 0x909090, 0x919191, 0x939393, 0x959595, 0x969696, 0x989898, 0x9a9a9a, 0x9b9b9b, 0x9d9d9d, 0x9f9f9f, 0xa1a1a1, 0xa2a2a2, 0xa4a4a4, 0xa6a6a6, 0xa7a7a7, 0xa9a9a9, 0xababab, 0xadadad, 0xafafaf, 0xb0b0b0, 0xb2b2b2, 0xb4b4b4, 0xb6b6b6, 0xb8b8b8, 0xbababa, 0xbbbbbb, 0xbdbdbd, 0xbfbfbf, 0xc1c1c1, 0xc3c3c3, 0xc5c5c5, 0xc7c7c7, 0xc9c9c9, 0xcbcbcb, 0xcdcdcd, 0xcfcfcf, 0xd1d1d1, 0xd3d3d3, 0xd5d5d5, 0xd7d7d7, 0xd9d9d9, 0xdbdbdb, 0xdddddd, 0xdfdfdf, 0xe1e1e1, 0xe3e3e3, 0xe5e5e5, 0xe7e7e7, 0xe9e9e9, 0xebebeb, 0xeeeeee, 0xf0f0f0, 0xf2f2f2, 0xf4f4f4, 0xf6f6f6, 0xf8f8f8, 0xfbfbfb, 0xfdfdfd, 0xffffff, }; struct ppp_csc_table rgb2yuv = { .fwd_matrix = { 0x83, 0x102, 0x32, 0xffb5, 0xff6c, 0xe1, 0xe1, 0xff45, 0xffdc, }, .rev_matrix = { 0x254, 0x0, 0x331, 0x254, 0xff38, 0xfe61, 0x254, 0x409, 0x0, }, .bv = { 0x10, 0x80, 0x80, }, .lv = { 0x10, 0xeb, 0x10, 0xf0, }, }; struct ppp_csc_table default_table2 = { .fwd_matrix = { 0x5d, 0x13a, 0x20, 0xffcd, 0xff54, 0xe1, 0xe1, 0xff35, }, .rev_matrix = { 0x254, 0x0, 0x396, 0x254, 0xff94, 0xfef0, 0x254, 0x43a, 0x0, }, .bv = { 0x10, 0x80, 0x80, }, .lv = { 0x10, 0xeb, 0x10, 0xf0, }, }; const struct ppp_table upscale_table[PPP_UPSCALE_MAX] = { { 0x5fffc, 0x0 }, { 0x50200, 0x7fc00000 }, { 0x5fffc, 0xff80000d }, { 0x50204, 0x7ec003f9 }, { 0x5fffc, 0xfec0001c }, { 0x50208, 0x7d4003f3 }, { 0x5fffc, 0xfe40002b }, { 0x5020c, 0x7b8003ed }, { 0x5fffc, 0xfd80003c }, { 0x50210, 0x794003e8 }, { 0x5fffc, 0xfcc0004d }, { 0x50214, 0x76c003e4 }, { 0x5fffc, 0xfc40005f }, { 0x50218, 0x73c003e0 }, { 0x5fffc, 0xfb800071 }, { 0x5021c, 0x708003de }, { 0x5fffc, 0xfac00085 }, { 0x50220, 0x6d0003db }, { 0x5fffc, 0xfa000098 }, { 0x50224, 0x698003d9 }, { 0x5fffc, 0xf98000ac }, { 0x50228, 0x654003d8 }, { 0x5fffc, 0xf8c000c1 }, { 0x5022c, 0x610003d7 }, { 0x5fffc, 0xf84000d5 }, { 0x50230, 0x5c8003d7 }, { 0x5fffc, 0xf7c000e9 }, { 0x50234, 0x580003d7 }, { 0x5fffc, 0xf74000fd }, { 0x50238, 0x534003d8 }, { 0x5fffc, 0xf6c00112 }, { 0x5023c, 0x4e8003d8 }, { 0x5fffc, 0xf6800126 }, { 0x50240, 0x494003da }, { 0x5fffc, 0xf600013a }, { 0x50244, 0x448003db }, { 0x5fffc, 0xf600014d }, { 0x50248, 0x3f4003dd }, { 0x5fffc, 0xf5c00160 }, { 0x5024c, 0x3a4003df }, { 0x5fffc, 0xf5c00172 }, { 0x50250, 0x354003e1 }, { 0x5fffc, 0xf5c00184 }, { 0x50254, 0x304003e3 }, { 0x5fffc, 0xf6000195 }, { 0x50258, 0x2b0003e6 }, { 0x5fffc, 0xf64001a6 }, { 0x5025c, 0x260003e8 }, { 0x5fffc, 0xf6c001b4 }, { 0x50260, 0x214003eb }, { 0x5fffc, 0xf78001c2 }, { 0x50264, 0x1c4003ee }, { 0x5fffc, 0xf80001cf }, { 0x50268, 0x17c003f1 }, { 0x5fffc, 0xf90001db }, { 0x5026c, 0x134003f3 }, { 0x5fffc, 0xfa0001e5 }, { 0x50270, 0xf0003f6 }, { 0x5fffc, 0xfb4001ee }, { 0x50274, 0xac003f9 }, { 0x5fffc, 0xfcc001f5 }, { 0x50278, 0x70003fb }, { 0x5fffc, 0xfe4001fb }, { 0x5027c, 0x34003fe }, }; const struct ppp_table mdp_gaussian_blur_table[PPP_BLUR_SCALE_MAX] = { /* max variance */ { 0x5fffc, 0x20000080 }, { 0x50280, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50284, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50288, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5028c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50290, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50294, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50298, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5029c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502a0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502a4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502a8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502ac, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502b0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502b4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502b8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502bc, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502c0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502c4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502c8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502cc, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502d0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502d4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502d8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502dc, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502e0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502e4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502e8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502ec, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502f0, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502f4, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502f8, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x502fc, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50300, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50304, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50308, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5030c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50310, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50314, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50318, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5031c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50320, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50324, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50328, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5032c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50330, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50334, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50338, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5033c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50340, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50344, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50348, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5034c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50350, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50354, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50358, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5035c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50360, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50364, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50368, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5036c, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50370, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50374, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x50378, 0x20000080 }, { 0x5fffc, 0x20000080 }, { 0x5037c, 0x20000080 }, }; const struct ppp_table downscale_x_table_pt2topt4[] = { { 0x5fffc, 0x740008c }, { 0x50280, 0x33800088 }, { 0x5fffc, 0x800008e }, { 0x50284, 0x33400084 }, { 0x5fffc, 0x8400092 }, { 0x50288, 0x33000080 }, { 0x5fffc, 0x9000094 }, { 0x5028c, 0x3300007b }, { 0x5fffc, 0x9c00098 }, { 0x50290, 0x32400077 }, { 0x5fffc, 0xa40009b }, { 0x50294, 0x32000073 }, { 0x5fffc, 0xb00009d }, { 0x50298, 0x31c0006f }, { 0x5fffc, 0xbc000a0 }, { 0x5029c, 0x3140006b }, { 0x5fffc, 0xc8000a2 }, { 0x502a0, 0x31000067 }, { 0x5fffc, 0xd8000a5 }, { 0x502a4, 0x30800062 }, { 0x5fffc, 0xe4000a8 }, { 0x502a8, 0x2fc0005f }, { 0x5fffc, 0xec000aa }, { 0x502ac, 0x2fc0005b }, { 0x5fffc, 0xf8000ad }, { 0x502b0, 0x2f400057 }, { 0x5fffc, 0x108000b0 }, { 0x502b4, 0x2e400054 }, { 0x5fffc, 0x114000b2 }, { 0x502b8, 0x2e000050 }, { 0x5fffc, 0x124000b4 }, { 0x502bc, 0x2d80004c }, { 0x5fffc, 0x130000b6 }, { 0x502c0, 0x2d000049 }, { 0x5fffc, 0x140000b8 }, { 0x502c4, 0x2c800045 }, { 0x5fffc, 0x150000b9 }, { 0x502c8, 0x2c000042 }, { 0x5fffc, 0x15c000bd }, { 0x502cc, 0x2b40003e }, { 0x5fffc, 0x16c000bf }, { 0x502d0, 0x2a80003b }, { 0x5fffc, 0x17c000bf }, { 0x502d4, 0x2a000039 }, { 0x5fffc, 0x188000c2 }, { 0x502d8, 0x29400036 }, { 0x5fffc, 0x19c000c4 }, { 0x502dc, 0x28800032 }, { 0x5fffc, 0x1ac000c5 }, { 0x502e0, 0x2800002f }, { 0x5fffc, 0x1bc000c7 }, { 0x502e4, 0x2740002c }, { 0x5fffc, 0x1cc000c8 }, { 0x502e8, 0x26c00029 }, { 0x5fffc, 0x1dc000c9 }, { 0x502ec, 0x26000027 }, { 0x5fffc, 0x1ec000cc }, { 0x502f0, 0x25000024 }, { 0x5fffc, 0x200000cc }, { 0x502f4, 0x24800021 }, { 0x5fffc, 0x210000cd }, { 0x502f8, 0x23800020 }, { 0x5fffc, 0x220000ce }, { 0x502fc, 0x2300001d }, }; static const struct ppp_table downscale_x_table_pt4topt6[] = { { 0x5fffc, 0x740008c }, { 0x50280, 0x33800088 }, { 0x5fffc, 0x800008e }, { 0x50284, 0x33400084 }, { 0x5fffc, 0x8400092 }, { 0x50288, 0x33000080 }, { 0x5fffc, 0x9000094 }, { 0x5028c, 0x3300007b }, { 0x5fffc, 0x9c00098 }, { 0x50290, 0x32400077 }, { 0x5fffc, 0xa40009b }, { 0x50294, 0x32000073 }, { 0x5fffc, 0xb00009d }, { 0x50298, 0x31c0006f }, { 0x5fffc, 0xbc000a0 }, { 0x5029c, 0x3140006b }, { 0x5fffc, 0xc8000a2 }, { 0x502a0, 0x31000067 }, { 0x5fffc, 0xd8000a5 }, { 0x502a4, 0x30800062 }, { 0x5fffc, 0xe4000a8 }, { 0x502a8, 0x2fc0005f }, { 0x5fffc, 0xec000aa }, { 0x502ac, 0x2fc0005b }, { 0x5fffc, 0xf8000ad }, { 0x502b0, 0x2f400057 }, { 0x5fffc, 0x108000b0 }, { 0x502b4, 0x2e400054 }, { 0x5fffc, 0x114000b2 }, { 0x502b8, 0x2e000050 }, { 0x5fffc, 0x124000b4 }, { 0x502bc, 0x2d80004c }, { 0x5fffc, 0x130000b6 }, { 0x502c0, 0x2d000049 }, { 0x5fffc, 0x140000b8 }, { 0x502c4, 0x2c800045 }, { 0x5fffc, 0x150000b9 }, { 0x502c8, 0x2c000042 }, { 0x5fffc, 0x15c000bd }, { 0x502cc, 0x2b40003e }, { 0x5fffc, 0x16c000bf }, { 0x502d0, 0x2a80003b }, { 0x5fffc, 0x17c000bf }, { 0x502d4, 0x2a000039 }, { 0x5fffc, 0x188000c2 }, { 0x502d8, 0x29400036 }, { 0x5fffc, 0x19c000c4 }, { 0x502dc, 0x28800032 }, { 0x5fffc, 0x1ac000c5 }, { 0x502e0, 0x2800002f }, { 0x5fffc, 0x1bc000c7 }, { 0x502e4, 0x2740002c }, { 0x5fffc, 0x1cc000c8 }, { 0x502e8, 0x26c00029 }, { 0x5fffc, 0x1dc000c9 }, { 0x502ec, 0x26000027 }, { 0x5fffc, 0x1ec000cc }, { 0x502f0, 0x25000024 }, { 0x5fffc, 0x200000cc }, { 0x502f4, 0x24800021 }, { 0x5fffc, 0x210000cd }, { 0x502f8, 0x23800020 }, { 0x5fffc, 0x220000ce }, { 0x502fc, 0x2300001d }, }; static const struct ppp_table downscale_x_table_pt6topt8[] = { { 0x5fffc, 0xfe000070 }, { 0x50280, 0x4bc00068 }, { 0x5fffc, 0xfe000078 }, { 0x50284, 0x4bc00060 }, { 0x5fffc, 0xfe000080 }, { 0x50288, 0x4b800059 }, { 0x5fffc, 0xfe000089 }, { 0x5028c, 0x4b000052 }, { 0x5fffc, 0xfe400091 }, { 0x50290, 0x4a80004b }, { 0x5fffc, 0xfe40009a }, { 0x50294, 0x4a000044 }, { 0x5fffc, 0xfe8000a3 }, { 0x50298, 0x4940003d }, { 0x5fffc, 0xfec000ac }, { 0x5029c, 0x48400037 }, { 0x5fffc, 0xff0000b4 }, { 0x502a0, 0x47800031 }, { 0x5fffc, 0xff8000bd }, { 0x502a4, 0x4640002b }, { 0x5fffc, 0xc5 }, { 0x502a8, 0x45000026 }, { 0x5fffc, 0x8000ce }, { 0x502ac, 0x43800021 }, { 0x5fffc, 0x10000d6 }, { 0x502b0, 0x4240001c }, { 0x5fffc, 0x18000df }, { 0x502b4, 0x40800018 }, { 0x5fffc, 0x24000e6 }, { 0x502b8, 0x3f000014 }, { 0x5fffc, 0x30000ee }, { 0x502bc, 0x3d400010 }, { 0x5fffc, 0x40000f5 }, { 0x502c0, 0x3b80000c }, { 0x5fffc, 0x50000fc }, { 0x502c4, 0x39800009 }, { 0x5fffc, 0x6000102 }, { 0x502c8, 0x37c00006 }, { 0x5fffc, 0x7000109 }, { 0x502cc, 0x35800004 }, { 0x5fffc, 0x840010e }, { 0x502d0, 0x33800002 }, { 0x5fffc, 0x9800114 }, { 0x502d4, 0x31400000 }, { 0x5fffc, 0xac00119 }, { 0x502d8, 0x2f4003fe }, { 0x5fffc, 0xc40011e }, { 0x502dc, 0x2d0003fc }, { 0x5fffc, 0xdc00121 }, { 0x502e0, 0x2b0003fb }, { 0x5fffc, 0xf400125 }, { 0x502e4, 0x28c003fa }, { 0x5fffc, 0x11000128 }, { 0x502e8, 0x268003f9 }, { 0x5fffc, 0x12c0012a }, { 0x502ec, 0x244003f9 }, { 0x5fffc, 0x1480012c }, { 0x502f0, 0x224003f8 }, { 0x5fffc, 0x1640012e }, { 0x502f4, 0x200003f8 }, { 0x5fffc, 0x1800012f }, { 0x502f8, 0x1e0003f8 }, { 0x5fffc, 0x1a00012f }, { 0x502fc, 0x1c0003f8 }, }; static const struct ppp_table downscale_x_table_pt8topt1[] = { { 0x5fffc, 0x0 }, { 0x50280, 0x7fc00000 }, { 0x5fffc, 0xff80000d }, { 0x50284, 0x7ec003f9 }, { 0x5fffc, 0xfec0001c }, { 0x50288, 0x7d4003f3 }, { 0x5fffc, 0xfe40002b }, { 0x5028c, 0x7b8003ed }, { 0x5fffc, 0xfd80003c }, { 0x50290, 0x794003e8 }, { 0x5fffc, 0xfcc0004d }, { 0x50294, 0x76c003e4 }, { 0x5fffc, 0xfc40005f }, { 0x50298, 0x73c003e0 }, { 0x5fffc, 0xfb800071 }, { 0x5029c, 0x708003de }, { 0x5fffc, 0xfac00085 }, { 0x502a0, 0x6d0003db }, { 0x5fffc, 0xfa000098 }, { 0x502a4, 0x698003d9 }, { 0x5fffc, 0xf98000ac }, { 0x502a8, 0x654003d8 }, { 0x5fffc, 0xf8c000c1 }, { 0x502ac, 0x610003d7 }, { 0x5fffc, 0xf84000d5 }, { 0x502b0, 0x5c8003d7 }, { 0x5fffc, 0xf7c000e9 }, { 0x502b4, 0x580003d7 }, { 0x5fffc, 0xf74000fd }, { 0x502b8, 0x534003d8 }, { 0x5fffc, 0xf6c00112 }, { 0x502bc, 0x4e8003d8 }, { 0x5fffc, 0xf6800126 }, { 0x502c0, 0x494003da }, { 0x5fffc, 0xf600013a }, { 0x502c4, 0x448003db }, { 0x5fffc, 0xf600014d }, { 0x502c8, 0x3f4003dd }, { 0x5fffc, 0xf5c00160 }, { 0x502cc, 0x3a4003df }, { 0x5fffc, 0xf5c00172 }, { 0x502d0, 0x354003e1 }, { 0x5fffc, 0xf5c00184 }, { 0x502d4, 0x304003e3 }, { 0x5fffc, 0xf6000195 }, { 0x502d8, 0x2b0003e6 }, { 0x5fffc, 0xf64001a6 }, { 0x502dc, 0x260003e8 }, { 0x5fffc, 0xf6c001b4 }, { 0x502e0, 0x214003eb }, { 0x5fffc, 0xf78001c2 }, { 0x502e4, 0x1c4003ee }, { 0x5fffc, 0xf80001cf }, { 0x502e8, 0x17c003f1 }, { 0x5fffc, 0xf90001db }, { 0x502ec, 0x134003f3 }, { 0x5fffc, 0xfa0001e5 }, { 0x502f0, 0xf0003f6 }, { 0x5fffc, 0xfb4001ee }, { 0x502f4, 0xac003f9 }, { 0x5fffc, 0xfcc001f5 }, { 0x502f8, 0x70003fb }, { 0x5fffc, 0xfe4001fb }, { 0x502fc, 0x34003fe }, }; static const struct ppp_table *downscale_x_table[PPP_DOWNSCALE_MAX] = { [PPP_DOWNSCALE_PT2TOPT4] = downscale_x_table_pt2topt4, [PPP_DOWNSCALE_PT4TOPT6] = downscale_x_table_pt4topt6, [PPP_DOWNSCALE_PT6TOPT8] = downscale_x_table_pt6topt8, [PPP_DOWNSCALE_PT8TOPT1] = downscale_x_table_pt8topt1, }; static const struct ppp_table downscale_y_table_pt2topt4[] = { { 0x5fffc, 0x740008c }, { 0x50300, 0x33800088 }, { 0x5fffc, 0x800008e }, { 0x50304, 0x33400084 }, { 0x5fffc, 0x8400092 }, { 0x50308, 0x33000080 }, { 0x5fffc, 0x9000094 }, { 0x5030c, 0x3300007b }, { 0x5fffc, 0x9c00098 }, { 0x50310, 0x32400077 }, { 0x5fffc, 0xa40009b }, { 0x50314, 0x32000073 }, { 0x5fffc, 0xb00009d }, { 0x50318, 0x31c0006f }, { 0x5fffc, 0xbc000a0 }, { 0x5031c, 0x3140006b }, { 0x5fffc, 0xc8000a2 }, { 0x50320, 0x31000067 }, { 0x5fffc, 0xd8000a5 }, { 0x50324, 0x30800062 }, { 0x5fffc, 0xe4000a8 }, { 0x50328, 0x2fc0005f }, { 0x5fffc, 0xec000aa }, { 0x5032c, 0x2fc0005b }, { 0x5fffc, 0xf8000ad }, { 0x50330, 0x2f400057 }, { 0x5fffc, 0x108000b0 }, { 0x50334, 0x2e400054 }, { 0x5fffc, 0x114000b2 }, { 0x50338, 0x2e000050 }, { 0x5fffc, 0x124000b4 }, { 0x5033c, 0x2d80004c }, { 0x5fffc, 0x130000b6 }, { 0x50340, 0x2d000049 }, { 0x5fffc, 0x140000b8 }, { 0x50344, 0x2c800045 }, { 0x5fffc, 0x150000b9 }, { 0x50348, 0x2c000042 }, { 0x5fffc, 0x15c000bd }, { 0x5034c, 0x2b40003e }, { 0x5fffc, 0x16c000bf }, { 0x50350, 0x2a80003b }, { 0x5fffc, 0x17c000bf }, { 0x50354, 0x2a000039 }, { 0x5fffc, 0x188000c2 }, { 0x50358, 0x29400036 }, { 0x5fffc, 0x19c000c4 }, { 0x5035c, 0x28800032 }, { 0x5fffc, 0x1ac000c5 }, { 0x50360, 0x2800002f }, { 0x5fffc, 0x1bc000c7 }, { 0x50364, 0x2740002c }, { 0x5fffc, 0x1cc000c8 }, { 0x50368, 0x26c00029 }, { 0x5fffc, 0x1dc000c9 }, { 0x5036c, 0x26000027 }, { 0x5fffc, 0x1ec000cc }, { 0x50370, 0x25000024 }, { 0x5fffc, 0x200000cc }, { 0x50374, 0x24800021 }, { 0x5fffc, 0x210000cd }, { 0x50378, 0x23800020 }, { 0x5fffc, 0x220000ce }, { 0x5037c, 0x2300001d }, }; static const struct ppp_table downscale_y_table_pt4topt6[] = { { 0x5fffc, 0x740008c }, { 0x50300, 0x33800088 }, { 0x5fffc, 0x800008e }, { 0x50304, 0x33400084 }, { 0x5fffc, 0x8400092 }, { 0x50308, 0x33000080 }, { 0x5fffc, 0x9000094 }, { 0x5030c, 0x3300007b }, { 0x5fffc, 0x9c00098 }, { 0x50310, 0x32400077 }, { 0x5fffc, 0xa40009b }, { 0x50314, 0x32000073 }, { 0x5fffc, 0xb00009d }, { 0x50318, 0x31c0006f }, { 0x5fffc, 0xbc000a0 }, { 0x5031c, 0x3140006b }, { 0x5fffc, 0xc8000a2 }, { 0x50320, 0x31000067 }, { 0x5fffc, 0xd8000a5 }, { 0x50324, 0x30800062 }, { 0x5fffc, 0xe4000a8 }, { 0x50328, 0x2fc0005f }, { 0x5fffc, 0xec000aa }, { 0x5032c, 0x2fc0005b }, { 0x5fffc, 0xf8000ad }, { 0x50330, 0x2f400057 }, { 0x5fffc, 0x108000b0 }, { 0x50334, 0x2e400054 }, { 0x5fffc, 0x114000b2 }, { 0x50338, 0x2e000050 }, { 0x5fffc, 0x124000b4 }, { 0x5033c, 0x2d80004c }, { 0x5fffc, 0x130000b6 }, { 0x50340, 0x2d000049 }, { 0x5fffc, 0x140000b8 }, { 0x50344, 0x2c800045 }, { 0x5fffc, 0x150000b9 }, { 0x50348, 0x2c000042 }, { 0x5fffc, 0x15c000bd }, { 0x5034c, 0x2b40003e }, { 0x5fffc, 0x16c000bf }, { 0x50350, 0x2a80003b }, { 0x5fffc, 0x17c000bf }, { 0x50354, 0x2a000039 }, { 0x5fffc, 0x188000c2 }, { 0x50358, 0x29400036 }, { 0x5fffc, 0x19c000c4 }, { 0x5035c, 0x28800032 }, { 0x5fffc, 0x1ac000c5 }, { 0x50360, 0x2800002f }, { 0x5fffc, 0x1bc000c7 }, { 0x50364, 0x2740002c }, { 0x5fffc, 0x1cc000c8 }, { 0x50368, 0x26c00029 }, { 0x5fffc, 0x1dc000c9 }, { 0x5036c, 0x26000027 }, { 0x5fffc, 0x1ec000cc }, { 0x50370, 0x25000024 }, { 0x5fffc, 0x200000cc }, { 0x50374, 0x24800021 }, { 0x5fffc, 0x210000cd }, { 0x50378, 0x23800020 }, { 0x5fffc, 0x220000ce }, { 0x5037c, 0x2300001d }, }; static const struct ppp_table downscale_y_table_pt6topt8[] = { { 0x5fffc, 0xfe000070 }, { 0x50300, 0x4bc00068 }, { 0x5fffc, 0xfe000078 }, { 0x50304, 0x4bc00060 }, { 0x5fffc, 0xfe000080 }, { 0x50308, 0x4b800059 }, { 0x5fffc, 0xfe000089 }, { 0x5030c, 0x4b000052 }, { 0x5fffc, 0xfe400091 }, { 0x50310, 0x4a80004b }, { 0x5fffc, 0xfe40009a }, { 0x50314, 0x4a000044 }, { 0x5fffc, 0xfe8000a3 }, { 0x50318, 0x4940003d }, { 0x5fffc, 0xfec000ac }, { 0x5031c, 0x48400037 }, { 0x5fffc, 0xff0000b4 }, { 0x50320, 0x47800031 }, { 0x5fffc, 0xff8000bd }, { 0x50324, 0x4640002b }, { 0x5fffc, 0xc5 }, { 0x50328, 0x45000026 }, { 0x5fffc, 0x8000ce }, { 0x5032c, 0x43800021 }, { 0x5fffc, 0x10000d6 }, { 0x50330, 0x4240001c }, { 0x5fffc, 0x18000df }, { 0x50334, 0x40800018 }, { 0x5fffc, 0x24000e6 }, { 0x50338, 0x3f000014 }, { 0x5fffc, 0x30000ee }, { 0x5033c, 0x3d400010 }, { 0x5fffc, 0x40000f5 }, { 0x50340, 0x3b80000c }, { 0x5fffc, 0x50000fc }, { 0x50344, 0x39800009 }, { 0x5fffc, 0x6000102 }, { 0x50348, 0x37c00006 }, { 0x5fffc, 0x7000109 }, { 0x5034c, 0x35800004 }, { 0x5fffc, 0x840010e }, { 0x50350, 0x33800002 }, { 0x5fffc, 0x9800114 }, { 0x50354, 0x31400000 }, { 0x5fffc, 0xac00119 }, { 0x50358, 0x2f4003fe }, { 0x5fffc, 0xc40011e }, { 0x5035c, 0x2d0003fc }, { 0x5fffc, 0xdc00121 }, { 0x50360, 0x2b0003fb }, { 0x5fffc, 0xf400125 }, { 0x50364, 0x28c003fa }, { 0x5fffc, 0x11000128 }, { 0x50368, 0x268003f9 }, { 0x5fffc, 0x12c0012a }, { 0x5036c, 0x244003f9 }, { 0x5fffc, 0x1480012c }, { 0x50370, 0x224003f8 }, { 0x5fffc, 0x1640012e }, { 0x50374, 0x200003f8 }, { 0x5fffc, 0x1800012f }, { 0x50378, 0x1e0003f8 }, { 0x5fffc, 0x1a00012f }, { 0x5037c, 0x1c0003f8 }, }; static const struct ppp_table downscale_y_table_pt8topt1[] = { { 0x5fffc, 0x0 }, { 0x50300, 0x7fc00000 }, { 0x5fffc, 0xff80000d }, { 0x50304, 0x7ec003f9 }, { 0x5fffc, 0xfec0001c }, { 0x50308, 0x7d4003f3 }, { 0x5fffc, 0xfe40002b }, { 0x5030c, 0x7b8003ed }, { 0x5fffc, 0xfd80003c }, { 0x50310, 0x794003e8 }, { 0x5fffc, 0xfcc0004d }, { 0x50314, 0x76c003e4 }, { 0x5fffc, 0xfc40005f }, { 0x50318, 0x73c003e0 }, { 0x5fffc, 0xfb800071 }, { 0x5031c, 0x708003de }, { 0x5fffc, 0xfac00085 }, { 0x50320, 0x6d0003db }, { 0x5fffc, 0xfa000098 }, { 0x50324, 0x698003d9 }, { 0x5fffc, 0xf98000ac }, { 0x50328, 0x654003d8 }, { 0x5fffc, 0xf8c000c1 }, { 0x5032c, 0x610003d7 }, { 0x5fffc, 0xf84000d5 }, { 0x50330, 0x5c8003d7 }, { 0x5fffc, 0xf7c000e9 }, { 0x50334, 0x580003d7 }, { 0x5fffc, 0xf74000fd }, { 0x50338, 0x534003d8 }, { 0x5fffc, 0xf6c00112 }, { 0x5033c, 0x4e8003d8 }, { 0x5fffc, 0xf6800126 }, { 0x50340, 0x494003da }, { 0x5fffc, 0xf600013a }, { 0x50344, 0x448003db }, { 0x5fffc, 0xf600014d }, { 0x50348, 0x3f4003dd }, { 0x5fffc, 0xf5c00160 }, { 0x5034c, 0x3a4003df }, { 0x5fffc, 0xf5c00172 }, { 0x50350, 0x354003e1 }, { 0x5fffc, 0xf5c00184 }, { 0x50354, 0x304003e3 }, { 0x5fffc, 0xf6000195 }, { 0x50358, 0x2b0003e6 }, { 0x5fffc, 0xf64001a6 }, { 0x5035c, 0x260003e8 }, { 0x5fffc, 0xf6c001b4 }, { 0x50360, 0x214003eb }, { 0x5fffc, 0xf78001c2 }, { 0x50364, 0x1c4003ee }, { 0x5fffc, 0xf80001cf }, { 0x50368, 0x17c003f1 }, { 0x5fffc, 0xf90001db }, { 0x5036c, 0x134003f3 }, { 0x5fffc, 0xfa0001e5 }, { 0x50370, 0xf0003f6 }, { 0x5fffc, 0xfb4001ee }, { 0x50374, 0xac003f9 }, { 0x5fffc, 0xfcc001f5 }, { 0x50378, 0x70003fb }, { 0x5fffc, 0xfe4001fb }, { 0x5037c, 0x34003fe }, }; static const struct ppp_table *downscale_y_table[PPP_DOWNSCALE_MAX] = { [PPP_DOWNSCALE_PT2TOPT4] = downscale_y_table_pt2topt4, [PPP_DOWNSCALE_PT4TOPT6] = downscale_y_table_pt4topt6, [PPP_DOWNSCALE_PT6TOPT8] = downscale_y_table_pt6topt8, [PPP_DOWNSCALE_PT8TOPT1] = downscale_y_table_pt8topt1, }; void ppp_load_table(const struct ppp_table *table, int len) { int i; for (i = 0; i < len; i++) PPP_WRITEL(table[i].val, table[i].reg); } void ppp_load_up_lut(void) { ppp_load_table(upscale_table, PPP_UPSCALE_MAX); } void ppp_load_gaussian_lut(void) { ppp_load_table(mdp_gaussian_blur_table, PPP_BLUR_SCALE_MAX); } void ppp_load_x_scale_table(int idx) { ppp_load_table(downscale_x_table[idx], 64); } void ppp_load_y_scale_table(int idx) { ppp_load_table(downscale_y_table[idx], 64); } uint32_t ppp_bpp(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return bytes_per_pixel[type]; } uint32_t ppp_src_config(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return src_cfg_lut[type]; } uint32_t ppp_out_config(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return out_cfg_lut[type]; } uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; if (yuv2rgb) return swapped_pack_patt_lut[type]; return pack_patt_lut[type]; } uint32_t ppp_dst_op_reg(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return dst_op_reg[type]; } uint32_t ppp_src_op_reg(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return src_op_reg[type]; } bool ppp_per_p_alpha(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return per_pixel_alpha[type]; } bool ppp_multi_plane(uint32_t type) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; return multi_plane[type]; } uint32_t *ppp_default_pre_lut(void) { return default_pre_lut_val; } uint32_t *ppp_default_post_lut(void) { return default_post_lut_val; } struct ppp_csc_table *ppp_csc_rgb2yuv(void) { return &rgb2yuv; } struct ppp_csc_table *ppp_csc_table2(void) { return &default_table2; }