root/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dwb_scl.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. wbscl_get_filter_3tap_16p
  2. wbscl_get_filter_4tap_16p
  3. wbscl_get_filter_5tap_16p
  4. wbscl_get_filter_6tap_16p
  5. wbscl_get_filter_7tap_16p
  6. wbscl_get_filter_8tap_16p
  7. wbscl_get_filter_9tap_16p
  8. wbscl_get_filter_10tap_16p
  9. wbscl_get_filter_11tap_16p
  10. wbscl_get_filter_12tap_16p
  11. wbscl_get_filter_coeffs_16p
  12. wbscl_set_scaler_filter
  13. dwb_program_horz_scalar
  14. dwb_program_vert_scalar

   1 /*
   2  * Copyright 2012-17 Advanced Micro Devices, Inc.
   3  *
   4  * Permission is hereby granted, free of charge, to any person obtaining a
   5  * copy of this software and associated documentation files (the "Software"),
   6  * to deal in the Software without restriction, including without limitation
   7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8  * and/or sell copies of the Software, and to permit persons to whom the
   9  * Software is furnished to do so, subject to the following conditions:
  10  *
  11  * The above copyright notice and this permission notice shall be included in
  12  * all copies or substantial portions of the Software.
  13  *
  14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20  * OTHER DEALINGS IN THE SOFTWARE.
  21  *
  22  * Authors: AMD
  23  *
  24  */
  25 
  26 #include "reg_helper.h"
  27 #include "fixed31_32.h"
  28 #include "resource.h"
  29 #include "dwb.h"
  30 #include "dcn20_dwb.h"
  31 
  32 #define NUM_PHASES    16
  33 #define HORZ_MAX_TAPS 12
  34 #define VERT_MAX_TAPS 12
  35 
  36 #define REG(reg)\
  37         dwbc20->dwbc_regs->reg
  38 
  39 #define CTX \
  40         dwbc20->base.ctx
  41 
  42 #undef FN
  43 #define FN(reg_name, field_name) \
  44         dwbc20->dwbc_shift->field_name, dwbc20->dwbc_mask->field_name
  45 
  46 #define TO_DCN20_DWBC(dwbc_base) \
  47         container_of(dwbc_base, struct dcn20_dwbc, base)
  48 
  49 
  50 static const uint16_t filter_3tap_16p_upscale[27] = {
  51         2048, 2048, 0,
  52         1708, 2424, 16348,
  53         1372, 2796, 16308,
  54         1056, 3148, 16272,
  55         768, 3464, 16244,
  56         512, 3728, 16236,
  57         296, 3928, 16252,
  58         124, 4052, 16296,
  59         0, 4096, 0
  60 };
  61 
  62 static const uint16_t filter_3tap_16p_117[27] = {
  63         2048, 2048, 0,
  64         1824, 2276, 16376,
  65         1600, 2496, 16380,
  66         1376, 2700, 16,
  67         1156, 2880, 52,
  68         948, 3032, 108,
  69         756, 3144, 192,
  70         580, 3212, 296,
  71         428, 3236, 428
  72 };
  73 
  74 static const uint16_t filter_3tap_16p_150[27] = {
  75         2048, 2048, 0,
  76         1872, 2184, 36,
  77         1692, 2308, 88,
  78         1516, 2420, 156,
  79         1340, 2516, 236,
  80         1168, 2592, 328,
  81         1004, 2648, 440,
  82         844, 2684, 560,
  83         696, 2696, 696
  84 };
  85 
  86 static const uint16_t filter_3tap_16p_183[27] = {
  87         2048, 2048, 0,
  88         1892, 2104, 92,
  89         1744, 2152, 196,
  90         1592, 2196, 300,
  91         1448, 2232, 412,
  92         1304, 2256, 528,
  93         1168, 2276, 648,
  94         1032, 2288, 772,
  95         900, 2292, 900
  96 };
  97 
  98 static const uint16_t filter_4tap_16p_upscale[36] = {
  99         0, 4096, 0, 0,
 100         16240, 4056, 180, 16380,
 101         16136, 3952, 404, 16364,
 102         16072, 3780, 664, 16344,
 103         16040, 3556, 952, 16312,
 104         16036, 3284, 1268, 16272,
 105         16052, 2980, 1604, 16224,
 106         16084, 2648, 1952, 16176,
 107         16128, 2304, 2304, 16128
 108 };
 109 
 110 static const uint16_t filter_4tap_16p_117[36] = {
 111         428, 3236, 428, 0,
 112         276, 3232, 604, 16364,
 113         148, 3184, 800, 16340,
 114         44, 3104, 1016, 16312,
 115         16344, 2984, 1244, 16284,
 116         16284, 2832, 1488, 16256,
 117         16244, 2648, 1732, 16236,
 118         16220, 2440, 1976, 16220,
 119         16212, 2216, 2216, 16212
 120 };
 121 
 122 static const uint16_t filter_4tap_16p_150[36] = {
 123         696, 2700, 696, 0,
 124         560, 2700, 848, 16364,
 125         436, 2676, 1008, 16348,
 126         328, 2628, 1180, 16336,
 127         232, 2556, 1356, 16328,
 128         152, 2460, 1536, 16328,
 129         84, 2344, 1716, 16332,
 130         28, 2208, 1888, 16348,
 131         16376, 2052, 2052, 16376
 132 };
 133 
 134 static const uint16_t filter_4tap_16p_183[36] = {
 135         940, 2208, 940, 0,
 136         832, 2200, 1052, 4,
 137         728, 2180, 1164, 16,
 138         628, 2148, 1280, 36,
 139         536, 2100, 1392, 60,
 140         448, 2044, 1504, 92,
 141         368, 1976, 1612, 132,
 142         296, 1900, 1716, 176,
 143         232, 1812, 1812, 232
 144 };
 145 
 146 static const uint16_t filter_5tap_16p_upscale[45] = {
 147         15936, 2496, 2496, 15936, 0,
 148         15992, 2128, 2832, 15896, 12,
 149         16056, 1760, 3140, 15876, 24,
 150         16120, 1404, 3420, 15876, 36,
 151         16188, 1060, 3652, 15908, 44,
 152         16248, 744, 3844, 15972, 44,
 153         16304, 460, 3980, 16072, 40,
 154         16348, 212, 4064, 16208, 24,
 155         0, 0, 4096, 0, 0,
 156 };
 157 
 158 static const uint16_t filter_5tap_16p_117[45] = {
 159         16056, 2372, 2372, 16056, 0,
 160         16052, 2124, 2600, 16076, 0,
 161         16060, 1868, 2808, 16120, 0,
 162         16080, 1612, 2992, 16180, 16376,
 163         16112, 1356, 3144, 16268, 16364,
 164         16144, 1108, 3268, 16376, 16344,
 165         16184, 872, 3356, 124, 16320,
 166         16220, 656, 3412, 276, 16292,
 167         16256, 456, 3428, 456, 16256,
 168 };
 169 
 170 static const uint16_t filter_5tap_16p_150[45] = {
 171         16368, 2064, 2064, 16368, 0,
 172         16316, 1924, 2204, 44, 16372,
 173         16280, 1772, 2328, 116, 16356,
 174         16256, 1616, 2440, 204, 16340,
 175         16240, 1456, 2536, 304, 16320,
 176         16232, 1296, 2612, 416, 16300,
 177         16232, 1132, 2664, 544, 16284,
 178         16240, 976, 2700, 680, 16264,
 179         16248, 824, 2708, 824, 16248,
 180 };
 181 
 182 static const uint16_t filter_5tap_16p_183[45] = {
 183         228, 1816, 1816, 228, 0,
 184         168, 1728, 1904, 300, 16372,
 185         116, 1632, 1988, 376, 16360,
 186         72, 1528, 2060, 460, 16348,
 187         36, 1424, 2120, 552, 16340,
 188         4, 1312, 2168, 652, 16336,
 189         16368, 1200, 2204, 752, 16332,
 190         16352, 1084, 2224, 860, 16332,
 191         16340, 972, 2232, 972, 16340,
 192 };
 193 
 194 static const uint16_t filter_6tap_16p_upscale[54] = {
 195         0, 0, 4092, 0, 0, 0,
 196         44, 16188, 4064, 228, 16324, 0,
 197         80, 16036, 3980, 492, 16256, 4,
 198         108, 15916, 3844, 788, 16184, 16,
 199         120, 15836, 3656, 1108, 16104, 28,
 200         128, 15792, 3420, 1448, 16024, 44,
 201         124, 15776, 3144, 1800, 15948, 64,
 202         112, 15792, 2836, 2152, 15880, 80,
 203         100, 15828, 2504, 2504, 15828, 100,
 204 };
 205 
 206 static const uint16_t filter_6tap_16p_117[54] = {
 207         16168, 476, 3568, 476, 16168, 0,
 208         16216, 280, 3540, 692, 16116, 8,
 209         16264, 104, 3472, 924, 16068, 16,
 210         16304, 16340, 3372, 1168, 16024, 28,
 211         16344, 16212, 3236, 1424, 15988, 36,
 212         16372, 16112, 3072, 1680, 15956, 44,
 213         12, 16036, 2880, 1936, 15940, 48,
 214         28, 15984, 2668, 2192, 15936, 48,
 215         40, 15952, 2436, 2436, 15952, 40,
 216 };
 217 
 218 static const uint16_t filter_6tap_16p_150[54] = {
 219         16148, 920, 2724, 920, 16148, 0,
 220         16156, 768, 2712, 1072, 16144, 0,
 221         16172, 628, 2684, 1232, 16148, 16380,
 222         16192, 492, 2632, 1388, 16160, 16372,
 223         16212, 368, 2564, 1548, 16180, 16364,
 224         16232, 256, 2480, 1704, 16212, 16352,
 225         16256, 156, 2380, 1856, 16256, 16336,
 226         16276, 64, 2268, 2004, 16308, 16320,
 227         16300, 16372, 2140, 2140, 16372, 16300,
 228 };
 229 
 230 static const uint16_t filter_6tap_16p_183[54] = {
 231         16296, 1032, 2196, 1032, 16296, 0,
 232         16284, 924, 2196, 1144, 16320, 16376,
 233         16272, 820, 2180, 1256, 16348, 16364,
 234         16268, 716, 2156, 1364, 16380, 16352,
 235         16264, 620, 2116, 1472, 36, 16340,
 236         16268, 524, 2068, 1576, 88, 16328,
 237         16272, 436, 2008, 1680, 144, 16316,
 238         16280, 352, 1940, 1772, 204, 16304,
 239         16292, 276, 1860, 1860, 276, 16292,
 240 };
 241 
 242 static const uint16_t filter_7tap_16p_upscale[63] = {
 243         176, 15760, 2488, 2488, 15760, 176, 0,
 244         160, 15812, 2152, 2816, 15728, 192, 16376,
 245         136, 15884, 1812, 3124, 15720, 196, 16368,
 246         108, 15964, 1468, 3400, 15740, 196, 16364,
 247         84, 16048, 1132, 3640, 15792, 180, 16360,
 248         56, 16140, 812, 3832, 15884, 152, 16360,
 249         32, 16228, 512, 3976, 16012, 116, 16364,
 250         12, 16308, 240, 4064, 16180, 60, 16372,
 251         0, 0, 0, 4096, 0, 0, 0,
 252 };
 253 
 254 static const uint16_t filter_7tap_16p_117[63] = {
 255         92, 15868, 2464, 2464, 15868, 92, 0,
 256         108, 15852, 2216, 2700, 15904, 72, 0,
 257         112, 15856, 1960, 2916, 15964, 44, 0,
 258         116, 15876, 1696, 3108, 16048, 8, 8,
 259         112, 15908, 1428, 3268, 16156, 16348, 12,
 260         104, 15952, 1168, 3400, 16288, 16300, 24,
 261         92, 16004, 916, 3496, 64, 16244, 36,
 262         80, 16064, 676, 3556, 248, 16184, 48,
 263         64, 16124, 452, 3576, 452, 16124, 64,
 264 };
 265 
 266 static const uint16_t filter_7tap_16p_150[63] = {
 267         16224, 16380, 2208, 2208, 16380, 16224, 0,
 268         16252, 16304, 2072, 2324, 84, 16196, 4,
 269         16276, 16240, 1924, 2432, 184, 16172, 8,
 270         16300, 16184, 1772, 2524, 296, 16144, 12,
 271         16324, 16144, 1616, 2600, 416, 16124, 12,
 272         16344, 16112, 1456, 2660, 548, 16104, 12,
 273         16360, 16092, 1296, 2704, 688, 16088, 12,
 274         16372, 16080, 1140, 2732, 832, 16080, 8,
 275         0, 16076, 984, 2740, 984, 16076, 0,
 276 };
 277 
 278 static const uint16_t filter_7tap_16p_183[63] = {
 279         16216, 324, 1884, 1884, 324, 16216, 0,
 280         16228, 248, 1804, 1960, 408, 16212, 16380,
 281         16240, 176, 1716, 2028, 496, 16208, 16376,
 282         16252, 112, 1624, 2084, 588, 16208, 16372,
 283         16264, 56, 1524, 2132, 684, 16212, 16364,
 284         16280, 4, 1424, 2168, 788, 16220, 16356,
 285         16292, 16344, 1320, 2196, 892, 16232, 16344,
 286         16308, 16308, 1212, 2212, 996, 16252, 16332,
 287         16320, 16276, 1104, 2216, 1104, 16276, 16320,
 288 };
 289 
 290 static const uint16_t filter_8tap_16p_upscale[72] = {
 291         0, 0, 0, 4096, 0, 0, 0, 0,
 292         16360, 76, 16172, 4064, 244, 16296, 24, 16380,
 293         16340, 136, 15996, 3980, 524, 16204, 56, 16380,
 294         16328, 188, 15860, 3844, 828, 16104, 92, 16372,
 295         16320, 224, 15760, 3656, 1156, 16008, 128, 16368,
 296         16320, 248, 15696, 3428, 1496, 15912, 160, 16360,
 297         16320, 256, 15668, 3156, 1844, 15828, 192, 16348,
 298         16324, 256, 15672, 2856, 2192, 15756, 220, 16340,
 299         16332, 244, 15704, 2532, 2532, 15704, 244, 16332,
 300 };
 301 
 302 static const uint16_t filter_8tap_16p_117[72] = {
 303         116, 16100, 428, 3564, 428, 16100, 116, 0,
 304         96, 16168, 220, 3548, 656, 16032, 136, 16376,
 305         76, 16236, 32, 3496, 904, 15968, 152, 16372,
 306         56, 16300, 16252, 3408, 1164, 15908, 164, 16368,
 307         36, 16360, 16116, 3284, 1428, 15856, 172, 16364,
 308         20, 28, 16000, 3124, 1700, 15820, 176, 16364,
 309         4, 76, 15912, 2940, 1972, 15800, 172, 16364,
 310         16380, 112, 15848, 2724, 2236, 15792, 160, 16364,
 311         16372, 140, 15812, 2488, 2488, 15812, 140, 16372,
 312 };
 313 
 314 static const uint16_t filter_8tap_16p_150[72] = {
 315         16380, 16020, 1032, 2756, 1032, 16020, 16380, 0,
 316         12, 16020, 876, 2744, 1184, 16032, 16364, 4,
 317         24, 16028, 728, 2716, 1344, 16052, 16340, 8,
 318         36, 16040, 584, 2668, 1500, 16080, 16316, 16,
 319         40, 16060, 448, 2608, 1652, 16120, 16288, 20,
 320         44, 16080, 320, 2528, 1804, 16168, 16260, 28,
 321         48, 16108, 204, 2436, 1948, 16232, 16228, 32,
 322         44, 16136, 100, 2328, 2084, 16304, 16200, 40,
 323         44, 16168, 4, 2212, 2212, 4, 16168, 44,
 324 };
 325 
 326 static const uint16_t filter_8tap_16p_183[72] = {
 327         16264, 16264, 1164, 2244, 1164, 16264, 16264, 0,
 328         16280, 16232, 1056, 2236, 1268, 16300, 16248, 0,
 329         16296, 16204, 948, 2220, 1372, 16348, 16232, 0,
 330         16312, 16184, 844, 2192, 1472, 12, 16216, 4,
 331         16328, 16172, 740, 2156, 1572, 72, 16200, 0,
 332         16340, 16160, 640, 2108, 1668, 136, 16188, 0,
 333         16352, 16156, 544, 2052, 1756, 204, 16176, 16380,
 334         16360, 16156, 452, 1988, 1840, 280, 16164, 16376,
 335         16368, 16160, 364, 1920, 1920, 364, 16160, 16368,
 336 };
 337 
 338 static const uint16_t filter_9tap_16p_upscale[81] = {
 339         16284, 296, 15660, 2572, 2572, 15660, 296, 16284, 0,
 340         16296, 272, 15712, 2228, 2896, 15632, 304, 16276, 4,
 341         16308, 240, 15788, 1876, 3192, 15632, 304, 16276, 4,
 342         16320, 204, 15876, 1520, 3452, 15664, 288, 16280, 8,
 343         16336, 164, 15976, 1176, 3676, 15732, 260, 16288, 12,
 344         16348, 120, 16080, 844, 3856, 15840, 216, 16300, 12,
 345         16364, 76, 16188, 532, 3988, 15984, 156, 16324, 8,
 346         16376, 36, 16288, 252, 4068, 16164, 84, 16352, 4,
 347         0, 0, 0, 0, 4096, 0, 0, 0, 0,
 348 };
 349 
 350 static const uint16_t filter_9tap_16p_117[81] = {
 351         16356, 172, 15776, 2504, 2504, 15776, 172, 16356, 0,
 352         16344, 200, 15756, 2252, 2740, 15816, 136, 16372, 16380,
 353         16336, 216, 15756, 1988, 2956, 15884, 92, 8, 16380,
 354         16332, 224, 15780, 1720, 3144, 15976, 40, 28, 16376,
 355         16328, 224, 15816, 1448, 3304, 16096, 16364, 52, 16372,
 356         16328, 216, 15868, 1180, 3432, 16240, 16296, 80, 16364,
 357         16332, 200, 15928, 916, 3524, 24, 16224, 108, 16356,
 358         16336, 184, 15996, 668, 3580, 220, 16148, 132, 16352,
 359         16344, 160, 16072, 436, 3600, 436, 16072, 160, 16344,
 360 };
 361 
 362 static const uint16_t filter_9tap_16p_150[81] = {
 363         84, 16128, 0, 2216, 2216, 0, 16128, 84, 0,
 364         80, 16160, 16296, 2088, 2332, 100, 16092, 84, 0,
 365         76, 16196, 16220, 1956, 2432, 208, 16064, 80, 0,
 366         72, 16232, 16152, 1812, 2524, 328, 16036, 76, 4,
 367         64, 16264, 16096, 1664, 2600, 460, 16012, 64, 8,
 368         56, 16300, 16052, 1508, 2656, 596, 15996, 52, 12,
 369         48, 16328, 16020, 1356, 2700, 740, 15984, 36, 20,
 370         40, 16356, 15996, 1196, 2728, 888, 15980, 20, 24,
 371         32, 0, 15984, 1044, 2736, 1044, 15984, 0, 32,
 372 };
 373 
 374 static const uint16_t filter_9tap_16p_183[81] = {
 375         16356, 16112, 388, 1952, 1952, 388, 16112, 16356, 0,
 376         16368, 16116, 304, 1876, 2020, 480, 16112, 16344, 4,
 377         16376, 16124, 224, 1792, 2080, 576, 16116, 16328, 8,
 378         0, 16136, 148, 1700, 2132, 672, 16124, 16312, 8,
 379         8, 16148, 80, 1604, 2176, 772, 16140, 16296, 12,
 380         12, 16164, 16, 1504, 2208, 876, 16156, 16276, 16,
 381         16, 16180, 16344, 1404, 2232, 980, 16184, 16256, 20,
 382         20, 16200, 16296, 1300, 2244, 1088, 16212, 16240, 20,
 383         20, 16220, 16252, 1196, 2252, 1196, 16252, 16220, 20,
 384 };
 385 
 386 static const uint16_t filter_10tap_16p_upscale[90] = {
 387         0, 0, 0, 0, 4096, 0, 0, 0, 0, 0,
 388         12, 16344, 88, 16160, 4068, 252, 16280, 44, 16368, 0,
 389         24, 16308, 168, 15976, 3988, 540, 16176, 92, 16348, 0,
 390         32, 16280, 236, 15828, 3852, 852, 16064, 140, 16328, 4,
 391         36, 16260, 284, 15720, 3672, 1184, 15956, 188, 16308, 8,
 392         36, 16244, 320, 15648, 3448, 1528, 15852, 236, 16288, 12,
 393         36, 16240, 336, 15612, 3184, 1880, 15764, 276, 16272, 20,
 394         32, 16240, 340, 15608, 2888, 2228, 15688, 308, 16256, 24,
 395         28, 16244, 332, 15636, 2568, 2568, 15636, 332, 16244, 28,
 396 };
 397 
 398 static const uint16_t filter_10tap_16p_117[90] = {
 399         16308, 196, 16048, 440, 3636, 440, 16048, 196, 16308, 0,
 400         16316, 164, 16132, 220, 3612, 676, 15972, 220, 16300, 0,
 401         16324, 132, 16212, 20, 3552, 932, 15900, 240, 16296, 4,
 402         16336, 100, 16292, 16232, 3456, 1192, 15836, 256, 16296, 4,
 403         16348, 68, 16364, 16084, 3324, 1464, 15784, 264, 16296, 8,
 404         16356, 36, 48, 15960, 3164, 1736, 15748, 260, 16304, 4,
 405         16364, 8, 108, 15864, 2972, 2008, 15728, 252, 16312, 4,
 406         16372, 16368, 160, 15792, 2756, 2268, 15724, 228, 16328, 0,
 407         16380, 16344, 200, 15748, 2520, 2520, 15748, 200, 16344, 16380,
 408 };
 409 
 410 static const uint16_t filter_10tap_16p_150[90] = {
 411         64, 0, 15956, 1048, 2716, 1048, 15956, 0, 64, 0,
 412         52, 24, 15952, 896, 2708, 1204, 15972, 16356, 72, 16380,
 413         44, 48, 15952, 748, 2684, 1360, 16000, 16320, 84, 16380,
 414         32, 68, 15964, 604, 2644, 1516, 16032, 16288, 92, 16376,
 415         24, 88, 15980, 464, 2588, 1668, 16080, 16248, 100, 16376,
 416         16, 100, 16004, 332, 2516, 1816, 16140, 16212, 108, 16376,
 417         8, 108, 16032, 212, 2428, 1956, 16208, 16172, 112, 16376,
 418         4, 116, 16060, 100, 2328, 2092, 16288, 16132, 116, 16380,
 419         0, 116, 16096, 16380, 2216, 2216, 16380, 16096, 116, 0,
 420 };
 421 
 422 static const uint16_t filter_10tap_16p_183[90] = {
 423         40, 16180, 16240, 1216, 2256, 1216, 16240, 16180, 40, 0,
 424         44, 16204, 16200, 1112, 2252, 1320, 16288, 16160, 36, 0,
 425         44, 16224, 16168, 1004, 2236, 1424, 16344, 16144, 28, 4,
 426         44, 16248, 16136, 900, 2208, 1524, 16, 16124, 24, 8,
 427         44, 16268, 16116, 796, 2176, 1620, 84, 16108, 12, 12,
 428         40, 16288, 16100, 692, 2132, 1712, 156, 16096, 4, 16,
 429         36, 16308, 16088, 592, 2080, 1796, 232, 16088, 16376, 20,
 430         32, 16328, 16080, 496, 2020, 1876, 316, 16080, 16360, 24,
 431         28, 16344, 16080, 404, 1952, 1952, 404, 16080, 16344, 28,
 432 };
 433 
 434 static const uint16_t filter_11tap_16p_upscale[99] = {
 435         60, 16216, 356, 15620, 2556, 2556, 15620, 356, 16216, 60, 0,
 436         52, 16224, 336, 15672, 2224, 2876, 15592, 368, 16208, 64, 16380,
 437         44, 16244, 304, 15744, 1876, 3176, 15596, 364, 16212, 64, 16376,
 438         36, 16264, 260, 15836, 1532, 3440, 15636, 340, 16220, 60, 16376,
 439         28, 16288, 212, 15940, 1188, 3668, 15708, 304, 16236, 56, 16376,
 440         20, 16312, 160, 16052, 856, 3848, 15820, 248, 16264, 48, 16376,
 441         12, 16336, 104, 16164, 544, 3984, 15968, 180, 16296, 36, 16376,
 442         4, 16360, 48, 16276, 256, 4068, 16160, 96, 16336, 16, 16380,
 443         0, 0, 0, 0, 0, 4096, 0, 0, 0, 0, 0,
 444 };
 445 
 446 static const uint16_t filter_11tap_16p_117[99] = {
 447         16380, 16332, 220, 15728, 2536, 2536, 15728, 220, 16332, 16380, 0,
 448         4, 16308, 256, 15704, 2280, 2768, 15772, 176, 16360, 16368, 0,
 449         12, 16292, 280, 15704, 2016, 2984, 15848, 120, 8, 16356, 0,
 450         20, 16276, 292, 15724, 1744, 3172, 15948, 56, 40, 16340, 4,
 451         24, 16268, 292, 15760, 1468, 3328, 16072, 16368, 80, 16324, 8,
 452         24, 16264, 288, 15816, 1196, 3456, 16224, 16288, 116, 16312, 12,
 453         24, 16264, 272, 15880, 932, 3548, 16, 16208, 152, 16296, 16,
 454         24, 16268, 248, 15956, 676, 3604, 216, 16120, 188, 16284, 20,
 455         24, 16276, 220, 16036, 436, 3624, 436, 16036, 220, 16276, 24,
 456 };
 457 
 458 static const uint16_t filter_11tap_16p_150[99] = {
 459         0, 144, 16072, 0, 2212, 2212, 0, 16072, 144, 0, 0,
 460         16376, 144, 16112, 16288, 2092, 2324, 104, 16036, 140, 8, 16380,
 461         16368, 144, 16152, 16204, 1960, 2424, 216, 16004, 132, 16, 16376,
 462         16364, 140, 16192, 16132, 1820, 2512, 340, 15976, 116, 28, 16376,
 463         16364, 132, 16232, 16072, 1676, 2584, 476, 15952, 100, 40, 16372,
 464         16360, 124, 16272, 16020, 1528, 2644, 612, 15936, 80, 52, 16368,
 465         16360, 116, 16312, 15980, 1372, 2684, 760, 15928, 56, 64, 16364,
 466         16360, 104, 16348, 15952, 1216, 2712, 908, 15928, 28, 76, 16364,
 467         16360, 92, 0, 15936, 1064, 2720, 1064, 15936, 0, 92, 16360,
 468 };
 469 
 470 static const uint16_t filter_11tap_16p_183[99] = {
 471         60, 16336, 16052, 412, 1948, 1948, 412, 16052, 16336, 60, 0,
 472         56, 16356, 16052, 324, 1876, 2016, 504, 16056, 16316, 64, 0,
 473         48, 16372, 16060, 240, 1796, 2072, 604, 16064, 16292, 64, 0,
 474         44, 4, 16068, 160, 1712, 2124, 700, 16080, 16272, 68, 0,
 475         40, 20, 16080, 84, 1620, 2164, 804, 16096, 16248, 68, 4,
 476         32, 32, 16096, 16, 1524, 2200, 908, 16124, 16224, 68, 4,
 477         28, 40, 16112, 16340, 1428, 2220, 1012, 16152, 16200, 64, 8,
 478         24, 52, 16132, 16284, 1328, 2236, 1120, 16192, 16176, 64, 12,
 479         16, 56, 16156, 16236, 1224, 2240, 1224, 16236, 16156, 56, 16,
 480 };
 481 
 482 static const uint16_t filter_12tap_16p_upscale[108] = {
 483         0, 0, 0, 0, 0, 4096, 0, 0, 0, 0, 0, 0,
 484         16376, 24, 16332, 100, 16156, 4068, 260, 16272, 56, 16356, 8, 0,
 485         16368, 44, 16284, 188, 15964, 3988, 548, 16156, 112, 16328, 20, 16380,
 486         16360, 64, 16248, 260, 15812, 3856, 864, 16040, 172, 16296, 32, 16380,
 487         16360, 76, 16216, 320, 15696, 3672, 1196, 15928, 228, 16268, 44, 16376,
 488         16356, 84, 16196, 360, 15620, 3448, 1540, 15820, 280, 16240, 56, 16372,
 489         16356, 88, 16184, 384, 15580, 3188, 1888, 15728, 324, 16216, 68, 16368,
 490         16360, 88, 16180, 392, 15576, 2892, 2236, 15652, 360, 16200, 80, 16364,
 491         16360, 84, 16188, 384, 15600, 2576, 2576, 15600, 384, 16188, 84, 16360,
 492 };
 493 
 494 static const uint16_t filter_12tap_16p_117[108] = {
 495         48, 16248, 240, 16028, 436, 3612, 436, 16028, 240, 16248, 48, 0,
 496         44, 16260, 208, 16116, 212, 3596, 676, 15944, 272, 16240, 48, 16380,
 497         40, 16276, 168, 16204, 12, 3540, 932, 15868, 296, 16240, 48, 16380,
 498         36, 16292, 128, 16288, 16220, 3452, 1196, 15800, 312, 16240, 44, 16380,
 499         28, 16308, 84, 16372, 16064, 3324, 1472, 15748, 316, 16244, 40, 16380,
 500         24, 16328, 44, 64, 15936, 3168, 1744, 15708, 312, 16256, 32, 16380,
 501         16, 16344, 8, 132, 15836, 2980, 2016, 15688, 300, 16272, 20, 0,
 502         12, 16364, 16356, 188, 15760, 2768, 2280, 15688, 272, 16296, 8, 4,
 503         8, 16380, 16324, 236, 15712, 2532, 2532, 15712, 236, 16324, 16380, 8,
 504 };
 505 
 506 static const uint16_t filter_12tap_16p_150[108] = {
 507         16340, 116, 0, 15916, 1076, 2724, 1076, 15916, 0, 116, 16340, 0,
 508         16340, 100, 32, 15908, 920, 2716, 1232, 15936, 16344, 128, 16340, 0,
 509         16344, 84, 64, 15908, 772, 2692, 1388, 15968, 16304, 140, 16344, 16380,
 510         16344, 68, 92, 15912, 624, 2652, 1540, 16008, 16264, 152, 16344, 16380,
 511         16348, 52, 112, 15928, 484, 2592, 1688, 16060, 16220, 160, 16348, 16380,
 512         16352, 40, 132, 15952, 348, 2520, 1836, 16124, 16176, 168, 16356, 16376,
 513         16356, 24, 148, 15980, 224, 2436, 1976, 16200, 16132, 172, 16364, 16372,
 514         16360, 12, 160, 16012, 108, 2336, 2104, 16288, 16088, 172, 16372, 16368,
 515         16364, 0, 168, 16048, 0, 2228, 2228, 0, 16048, 168, 0, 16364,
 516 };
 517 
 518 static const uint16_t filter_12tap_16p_183[108] = {
 519         36, 72, 16132, 16228, 1224, 2224, 1224, 16228, 16132, 72, 36, 0,
 520         28, 80, 16156, 16184, 1120, 2224, 1328, 16280, 16112, 64, 40, 16380,
 521         24, 84, 16180, 16144, 1016, 2208, 1428, 16340, 16092, 52, 48, 16380,
 522         16, 88, 16208, 16112, 912, 2188, 1524, 16, 16072, 36, 56, 16380,
 523         12, 92, 16232, 16084, 812, 2156, 1620, 88, 16056, 24, 64, 16380,
 524         8, 92, 16256, 16064, 708, 2116, 1708, 164, 16044, 4, 68, 16380,
 525         4, 88, 16280, 16048, 608, 2068, 1792, 244, 16036, 16372, 76, 16380,
 526         0, 88, 16308, 16036, 512, 2008, 1872, 328, 16032, 16352, 80, 16380,
 527         0, 84, 16328, 16032, 416, 1944, 1944, 416, 16032, 16328, 84, 0,
 528 };
 529 
 530 const uint16_t *wbscl_get_filter_3tap_16p(struct fixed31_32 ratio)
 531 {
 532         if (ratio.value < dc_fixpt_one.value)
 533                 return filter_3tap_16p_upscale;
 534         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 535                 return filter_3tap_16p_117;
 536         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 537                 return filter_3tap_16p_150;
 538         else
 539                 return filter_3tap_16p_183;
 540 }
 541 
 542 const uint16_t *wbscl_get_filter_4tap_16p(struct fixed31_32 ratio)
 543 {
 544         if (ratio.value < dc_fixpt_one.value)
 545                 return filter_4tap_16p_upscale;
 546         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 547                 return filter_4tap_16p_117;
 548         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 549                 return filter_4tap_16p_150;
 550         else
 551                 return filter_4tap_16p_183;
 552 }
 553 
 554 static const uint16_t *wbscl_get_filter_5tap_16p(struct fixed31_32 ratio)
 555 {
 556         if (ratio.value < dc_fixpt_one.value)
 557                 return filter_5tap_16p_upscale;
 558         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 559                 return filter_5tap_16p_117;
 560         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 561                 return filter_5tap_16p_150;
 562         else
 563                 return filter_5tap_16p_183;
 564 }
 565 
 566 static const uint16_t *wbscl_get_filter_6tap_16p(struct fixed31_32 ratio)
 567 {
 568         if (ratio.value < dc_fixpt_one.value)
 569                 return filter_6tap_16p_upscale;
 570         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 571                 return filter_6tap_16p_117;
 572         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 573                 return filter_6tap_16p_150;
 574         else
 575                 return filter_6tap_16p_183;
 576 }
 577 
 578 static const uint16_t *wbscl_get_filter_7tap_16p(struct fixed31_32 ratio)
 579 {
 580         if (ratio.value < dc_fixpt_one.value)
 581                 return filter_7tap_16p_upscale;
 582         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 583                 return filter_7tap_16p_117;
 584         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 585                 return filter_7tap_16p_150;
 586         else
 587                 return filter_7tap_16p_183;
 588 }
 589 
 590 static const uint16_t *wbscl_get_filter_8tap_16p(struct fixed31_32 ratio)
 591 {
 592         if (ratio.value < dc_fixpt_one.value)
 593                 return filter_8tap_16p_upscale;
 594         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 595                 return filter_8tap_16p_117;
 596         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 597                 return filter_8tap_16p_150;
 598         else
 599                 return filter_8tap_16p_183;
 600 }
 601 
 602 static const uint16_t *wbscl_get_filter_9tap_16p(struct fixed31_32 ratio)
 603 {
 604         if (ratio.value < dc_fixpt_one.value)
 605                 return filter_9tap_16p_upscale;
 606         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 607                 return filter_9tap_16p_117;
 608         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 609                 return filter_9tap_16p_150;
 610         else
 611                 return filter_9tap_16p_183;
 612 }
 613 static const uint16_t *wbscl_get_filter_10tap_16p(struct fixed31_32 ratio)
 614 {
 615         if (ratio.value < dc_fixpt_one.value)
 616                 return filter_10tap_16p_upscale;
 617         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 618                 return filter_10tap_16p_117;
 619         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 620                 return filter_10tap_16p_150;
 621         else
 622                 return filter_10tap_16p_183;
 623 }
 624 
 625 static const uint16_t *wbscl_get_filter_11tap_16p(struct fixed31_32 ratio)
 626 {
 627         if (ratio.value < dc_fixpt_one.value)
 628                 return filter_11tap_16p_upscale;
 629         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 630                 return filter_11tap_16p_117;
 631         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 632                 return filter_11tap_16p_150;
 633         else
 634                 return filter_11tap_16p_183;
 635 }
 636 
 637 static const uint16_t *wbscl_get_filter_12tap_16p(struct fixed31_32 ratio)
 638 {
 639         if (ratio.value < dc_fixpt_one.value)
 640                 return filter_12tap_16p_upscale;
 641         else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
 642                 return filter_12tap_16p_117;
 643         else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
 644                 return filter_12tap_16p_150;
 645         else
 646                 return filter_12tap_16p_183;
 647 }
 648 
 649 static const uint16_t *wbscl_get_filter_coeffs_16p(int taps, struct fixed31_32 ratio)
 650 {
 651         if (taps == 12)
 652                 return wbscl_get_filter_12tap_16p(ratio);
 653         else if (taps == 11)
 654                 return wbscl_get_filter_11tap_16p(ratio);
 655         else if (taps == 10)
 656                 return wbscl_get_filter_10tap_16p(ratio);
 657         else if (taps == 9)
 658                 return wbscl_get_filter_9tap_16p(ratio);
 659         else if (taps == 8)
 660                 return wbscl_get_filter_8tap_16p(ratio);
 661         else if (taps == 7)
 662                 return wbscl_get_filter_7tap_16p(ratio);
 663         else if (taps == 6)
 664                 return wbscl_get_filter_6tap_16p(ratio);
 665         else if (taps == 5)
 666                 return wbscl_get_filter_5tap_16p(ratio);
 667         else if (taps == 4)
 668                 return wbscl_get_filter_4tap_16p(ratio);
 669         else if (taps == 3)
 670                 return wbscl_get_filter_3tap_16p(ratio);
 671         else if (taps == 2)
 672                 return get_filter_2tap_16p();
 673         else if (taps == 1)
 674                 return NULL;
 675         else {
 676                 /* should never happen, bug */
 677                 BREAK_TO_DEBUGGER();
 678                 return NULL;
 679         }
 680 }
 681 
 682 static void wbscl_set_scaler_filter(
 683         struct dcn20_dwbc *dwbc20,
 684         uint32_t taps,
 685         enum wbscl_coef_filter_type_sel filter_type,
 686         const uint16_t *filter)
 687 {
 688         const int tap_pairs = (taps + 1) / 2;
 689         int phase;
 690         int pair;
 691         uint16_t odd_coef, even_coef;
 692 
 693         for (phase = 0; phase < (NUM_PHASES / 2 + 1); phase++) {
 694                 for (pair = 0; pair < tap_pairs; pair++) {
 695                         even_coef = filter[phase * taps + 2 * pair];
 696                         if ((pair * 2 + 1) < taps)
 697                                 odd_coef = filter[phase * taps + 2 * pair + 1];
 698                         else
 699                                 odd_coef = 0;
 700 
 701                         REG_SET_3(WBSCL_COEF_RAM_SELECT, 0,
 702                                 WBSCL_COEF_RAM_TAP_PAIR_IDX, pair,
 703                                 WBSCL_COEF_RAM_PHASE, phase,
 704                                 WBSCL_COEF_RAM_FILTER_TYPE, filter_type);
 705 
 706                         REG_SET_4(WBSCL_COEF_RAM_TAP_DATA, 0,
 707                                 /* Even tap coefficient (bits 1:0 fixed to 0) */
 708                                 WBSCL_COEF_RAM_EVEN_TAP_COEF, even_coef,
 709                                 /* Write/read control for even coefficient */
 710                                 WBSCL_COEF_RAM_EVEN_TAP_COEF_EN, 1,
 711                                 /* Odd tap coefficient (bits 1:0 fixed to 0) */
 712                                 WBSCL_COEF_RAM_ODD_TAP_COEF, odd_coef,
 713                                 /* Write/read control for odd coefficient */
 714                                 WBSCL_COEF_RAM_ODD_TAP_COEF_EN, 1);
 715                 }
 716         }
 717 }
 718 
 719 bool dwb_program_horz_scalar(struct dcn20_dwbc *dwbc20,
 720                 uint32_t src_width,
 721                 uint32_t dest_width,
 722                 struct scaling_taps num_taps)
 723 {
 724         uint32_t h_ratio_luma = 1;
 725         uint32_t h_ratio_chroma = 1;
 726         uint32_t h_taps_luma = num_taps.h_taps;
 727         uint32_t h_taps_chroma = num_taps.h_taps_c;
 728         int32_t h_init_phase_luma = 0;
 729         int32_t h_init_phase_chroma = 0;
 730         uint32_t h_init_phase_luma_int = 0;
 731         uint32_t h_init_phase_luma_frac = 0;
 732         uint32_t h_init_phase_chroma_int = 0;
 733         uint32_t h_init_phase_chroma_frac = 0;
 734         const uint16_t *filter_h = NULL;
 735         const uint16_t *filter_h_c = NULL;
 736 
 737 
 738         struct fixed31_32 tmp_h_init_phase_luma = dc_fixpt_from_int(0);
 739         struct fixed31_32 tmp_h_init_phase_chroma = dc_fixpt_from_int(0);
 740 
 741 
 742         /*Calculate ratio*/
 743         struct fixed31_32 tmp_h_ratio_luma = dc_fixpt_from_fraction(
 744                 src_width, dest_width);
 745 
 746         if (dc_fixpt_floor(tmp_h_ratio_luma) == 8)
 747                 h_ratio_luma = -1;
 748         else
 749                 h_ratio_luma = dc_fixpt_u3d19(tmp_h_ratio_luma) << 5;
 750         h_ratio_chroma = h_ratio_luma * 2;
 751 
 752         /*Program ratio*/
 753         REG_UPDATE(WBSCL_HORZ_FILTER_SCALE_RATIO, WBSCL_H_SCALE_RATIO, h_ratio_luma);
 754 
 755         /* Program taps*/
 756         REG_UPDATE(WBSCL_TAP_CONTROL, WBSCL_H_NUM_OF_TAPS_Y_RGB, h_taps_luma - 1);
 757         REG_UPDATE(WBSCL_TAP_CONTROL, WBSCL_H_NUM_OF_TAPS_CBCR, h_taps_chroma - 1);
 758 
 759         /* Calculate phase*/
 760         tmp_h_init_phase_luma = dc_fixpt_add_int(tmp_h_ratio_luma, h_taps_luma + 1);
 761         tmp_h_init_phase_luma = dc_fixpt_div_int(tmp_h_init_phase_luma, 2);
 762         tmp_h_init_phase_luma = dc_fixpt_sub_int(tmp_h_init_phase_luma, h_taps_luma);
 763 
 764         h_init_phase_luma = dc_fixpt_s4d19(tmp_h_init_phase_luma);
 765         h_init_phase_luma_int = (h_init_phase_luma >> 19) & 0x1f;
 766         h_init_phase_luma_frac = (h_init_phase_luma & 0x7ffff) << 5;
 767 
 768         tmp_h_init_phase_chroma = dc_fixpt_mul_int(tmp_h_ratio_luma, 2);
 769         tmp_h_init_phase_chroma = dc_fixpt_add_int(tmp_h_init_phase_chroma, h_taps_chroma + 1);
 770         tmp_h_init_phase_chroma = dc_fixpt_div_int(tmp_h_init_phase_chroma, 2);
 771         tmp_h_init_phase_chroma = dc_fixpt_sub_int(tmp_h_init_phase_chroma, h_taps_chroma);
 772         tmp_h_init_phase_chroma = dc_fixpt_add(tmp_h_init_phase_chroma, dc_fixpt_from_fraction(1, 4));
 773 
 774         h_init_phase_chroma = dc_fixpt_s4d19(tmp_h_init_phase_chroma);
 775         h_init_phase_chroma_int = (h_init_phase_chroma >> 19) & 0x1f;
 776         h_init_phase_chroma_frac = (h_init_phase_chroma & 0x7ffff) << 5;
 777 
 778         /* Program phase*/
 779         REG_UPDATE(WBSCL_HORZ_FILTER_INIT_Y_RGB, WBSCL_H_INIT_INT_Y_RGB, h_init_phase_luma_int);
 780         REG_UPDATE(WBSCL_HORZ_FILTER_INIT_Y_RGB, WBSCL_H_INIT_FRAC_Y_RGB, h_init_phase_luma_frac);
 781         REG_UPDATE(WBSCL_HORZ_FILTER_INIT_CBCR, WBSCL_H_INIT_INT_CBCR, h_init_phase_chroma_int);
 782         REG_UPDATE(WBSCL_HORZ_FILTER_INIT_CBCR, WBSCL_H_INIT_FRAC_CBCR, h_init_phase_chroma_frac);
 783 
 784         /* Program LUT coefficients*/
 785         filter_h = wbscl_get_filter_coeffs_16p(
 786                 h_taps_luma, tmp_h_ratio_luma);
 787         filter_h_c = wbscl_get_filter_coeffs_16p(
 788                 h_taps_chroma, dc_fixpt_from_int(h_ratio_luma * 2));
 789 
 790         wbscl_set_scaler_filter(dwbc20, h_taps_luma,
 791                 WBSCL_COEF_LUMA_HORZ_FILTER, filter_h);
 792 
 793         wbscl_set_scaler_filter(dwbc20, h_taps_chroma,
 794                 WBSCL_COEF_CHROMA_HORZ_FILTER, filter_h_c);
 795 
 796         return true;
 797 }
 798 
 799 bool dwb_program_vert_scalar(struct dcn20_dwbc *dwbc20,
 800                 uint32_t src_height,
 801                 uint32_t dest_height,
 802                 struct scaling_taps num_taps,
 803                 enum dwb_subsample_position subsample_position)
 804 {
 805         uint32_t v_ratio_luma = 1;
 806         uint32_t v_ratio_chroma = 1;
 807         uint32_t v_taps_luma = num_taps.v_taps;
 808         uint32_t v_taps_chroma = num_taps.v_taps_c;
 809         int32_t v_init_phase_luma = 0;
 810         int32_t v_init_phase_chroma = 0;
 811         uint32_t v_init_phase_luma_int = 0;
 812         uint32_t v_init_phase_luma_frac = 0;
 813         uint32_t v_init_phase_chroma_int = 0;
 814         uint32_t v_init_phase_chroma_frac = 0;
 815 
 816         const uint16_t *filter_v = NULL;
 817         const uint16_t *filter_v_c = NULL;
 818 
 819         struct fixed31_32 tmp_v_init_phase_luma = dc_fixpt_from_int(0);
 820         struct fixed31_32 tmp_v_init_phase_chroma = dc_fixpt_from_int(0);
 821 
 822         /*Calculate ratio*/
 823         struct fixed31_32 tmp_v_ratio_luma = dc_fixpt_from_fraction(
 824                 src_height, dest_height);
 825 
 826         if (dc_fixpt_floor(tmp_v_ratio_luma) == 8)
 827                 v_ratio_luma = -1;
 828         else
 829                 v_ratio_luma = dc_fixpt_u3d19(tmp_v_ratio_luma) << 5;
 830         v_ratio_chroma = v_ratio_luma * 2;
 831 
 832         /*Program ratio*/
 833         REG_UPDATE(WBSCL_VERT_FILTER_SCALE_RATIO, WBSCL_V_SCALE_RATIO, v_ratio_luma);
 834 
 835         /* Program taps*/
 836         REG_UPDATE(WBSCL_TAP_CONTROL, WBSCL_V_NUM_OF_TAPS_Y_RGB, v_taps_luma - 1);
 837         REG_UPDATE(WBSCL_TAP_CONTROL, WBSCL_V_NUM_OF_TAPS_CBCR, v_taps_chroma - 1);
 838 
 839         /* Calculate phase*/
 840         tmp_v_init_phase_luma = dc_fixpt_add_int(tmp_v_ratio_luma, v_taps_luma + 1);
 841         tmp_v_init_phase_luma = dc_fixpt_div_int(tmp_v_init_phase_luma, 2);
 842         tmp_v_init_phase_luma = dc_fixpt_sub_int(tmp_v_init_phase_luma, v_taps_luma);
 843 
 844         v_init_phase_luma = dc_fixpt_s4d19(tmp_v_init_phase_luma);
 845         v_init_phase_luma_int = (v_init_phase_luma >> 19) & 0x1f;
 846         v_init_phase_luma_frac = (v_init_phase_luma & 0x7ffff) << 5;
 847 
 848         tmp_v_init_phase_chroma = dc_fixpt_mul_int(tmp_v_ratio_luma, 2);
 849         tmp_v_init_phase_chroma = dc_fixpt_add_int(tmp_v_init_phase_chroma, v_taps_chroma + 1);
 850         tmp_v_init_phase_chroma = dc_fixpt_div_int(tmp_v_init_phase_chroma, 2);
 851         tmp_v_init_phase_chroma = dc_fixpt_sub_int(tmp_v_init_phase_chroma, v_taps_chroma);
 852         if (subsample_position == DWB_COSITED_SUBSAMPLING)
 853                 tmp_v_init_phase_chroma = dc_fixpt_add(tmp_v_init_phase_chroma, dc_fixpt_from_fraction(1, 4));
 854 
 855         v_init_phase_chroma = dc_fixpt_s4d19(tmp_v_init_phase_chroma);
 856         v_init_phase_chroma_int = (v_init_phase_chroma >> 19) & 0x1f;
 857         v_init_phase_chroma_frac = (v_init_phase_chroma & 0x7ffff) << 5;
 858 
 859         /* Program phase*/
 860         REG_UPDATE(WBSCL_VERT_FILTER_INIT_Y_RGB, WBSCL_V_INIT_INT_Y_RGB, v_init_phase_luma_int);
 861         REG_UPDATE(WBSCL_VERT_FILTER_INIT_Y_RGB, WBSCL_V_INIT_FRAC_Y_RGB, v_init_phase_luma_frac);
 862         REG_UPDATE(WBSCL_VERT_FILTER_INIT_CBCR, WBSCL_V_INIT_INT_CBCR, v_init_phase_chroma_int);
 863         REG_UPDATE(WBSCL_VERT_FILTER_INIT_CBCR, WBSCL_V_INIT_FRAC_CBCR, v_init_phase_chroma_frac);
 864 
 865 
 866         /* Program LUT coefficients*/
 867         filter_v  = wbscl_get_filter_coeffs_16p(
 868                 v_taps_luma, tmp_v_ratio_luma);
 869         filter_v_c = wbscl_get_filter_coeffs_16p(
 870                 v_taps_chroma, dc_fixpt_from_int(v_ratio_luma * 2));
 871         wbscl_set_scaler_filter(dwbc20, v_taps_luma,
 872                 WBSCL_COEF_LUMA_VERT_FILTER, filter_v);
 873 
 874         wbscl_set_scaler_filter(dwbc20, v_taps_chroma,
 875                 WBSCL_COEF_CHROMA_VERT_FILTER, filter_v_c);
 876         return true;
 877 }

/* [<][>][^][v][top][bottom][index][help] */