aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/ti-vpe
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-31 12:31:14 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-31 12:31:14 -0500
commitb399c46ea0070671f3abbe1915d26076101a42f2 (patch)
tree8945606976fc46c3446c09f8a9e0d4f45f6c408e /drivers/media/platform/ti-vpe
parentb890eb4ecc718907223a3b7b7b069b59b33f28ef (diff)
parent6c3df5da67f1f53df78c7e20cd53a481dc28eade (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - a new jpeg codec driver for Samsung Exynos (jpeg-hw-exynos4) - a new dvb frontend for ds2103 chipset (m88ds2103) - a new sensor driver for Samsung S5K5BAF UXGA (s5k5baf) - new drivers for R-Car VSP1 - a new radio driver: radio-raremono - a new tuner driver for ts2022 chipset (m88ts2022) - the analog part of em28xx is now a separate module that only load/runs if the device is not a pure digital TV device - added a staging driver for bcm2048 radio devices - the omap 2 video driver (omap24xx) was moved to staging. This driver is for an old hardware and uses a deprecated Kernel internal API. If nobody cares enough to fix it, it would be removed on a couple Kernel releases - the sn9c102 driver was moved to staging. This driver was replaced by gspca, and disabled on some distros, as almost all devices are known to work properly with gspca. It should be removed from kernel on a couple Kernel releases - lots of driver fixes, improvements and cleanups * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (421 commits) [media] media: v4l2-dev: fix video device index assignment [media] rc-core: reuse device numbers [media] em28xx-cards: properly initialize the device bitmap [media] Staging: media: Fix line length exceeding 80 characters in as102_drv.c [media] Staging: media: Fix line length exceeding 80 characters in as102_fe.c [media] Staging: media: Fix quoted string split across line in as102_fe.c [media] media: st-rc: Add reset support [media] m2m-deinterlace: fix allocated struct type [media] radio-usb-si4713: fix sparse non static symbol warnings [media] em28xx-audio: remove needless check before usb_free_coherent() [media] au0828: Fix sparse non static symbol warning Revert "[media] go7007-usb: only use go->dev after allocated" [media] em28xx-audio: provide an error code when URB submit fails [media] em28xx: fix check for audio only usb interfaces when changing the usb alternate setting [media] em28xx: fix usb alternate setting for analog and digital video endpoints > 0 [media] em28xx: make 'em28xx_ctrl_ops' static em28xx-alsa: Fix error patch for init/fini [media] em28xx-audio: flush work at .fini [media] drxk: remove the option to load firmware asynchronously [media] em28xx: adjust period size at runtime ...
Diffstat (limited to 'drivers/media/platform/ti-vpe')
-rw-r--r--drivers/media/platform/ti-vpe/Makefile2
-rw-r--r--drivers/media/platform/ti-vpe/csc.c196
-rw-r--r--drivers/media/platform/ti-vpe/csc.h68
-rw-r--r--drivers/media/platform/ti-vpe/sc.c311
-rw-r--r--drivers/media/platform/ti-vpe/sc.h208
-rw-r--r--drivers/media/platform/ti-vpe/sc_coeff.h1342
-rw-r--r--drivers/media/platform/ti-vpe/vpdma.c40
-rw-r--r--drivers/media/platform/ti-vpe/vpdma.h12
-rw-r--r--drivers/media/platform/ti-vpe/vpdma_priv.h2
-rw-r--r--drivers/media/platform/ti-vpe/vpe.c327
-rw-r--r--drivers/media/platform/ti-vpe/vpe_regs.h187
11 files changed, 2389 insertions, 306 deletions
diff --git a/drivers/media/platform/ti-vpe/Makefile b/drivers/media/platform/ti-vpe/Makefile
index cbf0a806ba1d..be680f839e77 100644
--- a/drivers/media/platform/ti-vpe/Makefile
+++ b/drivers/media/platform/ti-vpe/Makefile
@@ -1,5 +1,5 @@
1obj-$(CONFIG_VIDEO_TI_VPE) += ti-vpe.o 1obj-$(CONFIG_VIDEO_TI_VPE) += ti-vpe.o
2 2
3ti-vpe-y := vpe.o vpdma.o 3ti-vpe-y := vpe.o sc.o csc.o vpdma.o
4 4
5ccflags-$(CONFIG_VIDEO_TI_VPE_DEBUG) += -DDEBUG 5ccflags-$(CONFIG_VIDEO_TI_VPE_DEBUG) += -DDEBUG
diff --git a/drivers/media/platform/ti-vpe/csc.c b/drivers/media/platform/ti-vpe/csc.c
new file mode 100644
index 000000000000..acfea500710e
--- /dev/null
+++ b/drivers/media/platform/ti-vpe/csc.c
@@ -0,0 +1,196 @@
1/*
2 * Color space converter library
3 *
4 * Copyright (c) 2013 Texas Instruments Inc.
5 *
6 * David Griego, <dagriego@biglakesoftware.com>
7 * Dale Farnsworth, <dale@farnsworth.org>
8 * Archit Taneja, <archit@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published by
12 * the Free Software Foundation.
13 */
14
15#include <linux/err.h>
16#include <linux/io.h>
17#include <linux/platform_device.h>
18#include <linux/slab.h>
19#include <linux/videodev2.h>
20
21#include "csc.h"
22
23/*
24 * 16 coefficients in the order:
25 * a0, b0, c0, a1, b1, c1, a2, b2, c2, d0, d1, d2
26 * (we may need to pass non-default values from user space later on, we might
27 * need to make the coefficient struct more easy to populate)
28 */
29struct colorspace_coeffs {
30 u16 sd[12];
31 u16 hd[12];
32};
33
34/* VIDEO_RANGE: limited range, GRAPHICS_RANGE: full range */
35#define CSC_COEFFS_VIDEO_RANGE_Y2R 0
36#define CSC_COEFFS_GRAPHICS_RANGE_Y2R 1
37#define CSC_COEFFS_VIDEO_RANGE_R2Y 2
38#define CSC_COEFFS_GRAPHICS_RANGE_R2Y 3
39
40/* default colorspace coefficients */
41static struct colorspace_coeffs colorspace_coeffs[4] = {
42 [CSC_COEFFS_VIDEO_RANGE_Y2R] = {
43 {
44 /* SDTV */
45 0x0400, 0x0000, 0x057D, 0x0400, 0x1EA7, 0x1D35,
46 0x0400, 0x06EF, 0x1FFE, 0x0D40, 0x0210, 0x0C88,
47 },
48 {
49 /* HDTV */
50 0x0400, 0x0000, 0x0629, 0x0400, 0x1F45, 0x1E2B,
51 0x0400, 0x0742, 0x0000, 0x0CEC, 0x0148, 0x0C60,
52 },
53 },
54 [CSC_COEFFS_GRAPHICS_RANGE_Y2R] = {
55 {
56 /* SDTV */
57 0x04A8, 0x1FFE, 0x0662, 0x04A8, 0x1E6F, 0x1CBF,
58 0x04A8, 0x0812, 0x1FFF, 0x0C84, 0x0220, 0x0BAC,
59 },
60 {
61 /* HDTV */
62 0x04A8, 0x0000, 0x072C, 0x04A8, 0x1F26, 0x1DDE,
63 0x04A8, 0x0873, 0x0000, 0x0C20, 0x0134, 0x0B7C,
64 },
65 },
66 [CSC_COEFFS_VIDEO_RANGE_R2Y] = {
67 {
68 /* SDTV */
69 0x0132, 0x0259, 0x0075, 0x1F50, 0x1EA5, 0x020B,
70 0x020B, 0x1E4A, 0x1FAB, 0x0000, 0x0200, 0x0200,
71 },
72 {
73 /* HDTV */
74 0x00DA, 0x02DC, 0x004A, 0x1F88, 0x1E6C, 0x020C,
75 0x020C, 0x1E24, 0x1FD0, 0x0000, 0x0200, 0x0200,
76 },
77 },
78 [CSC_COEFFS_GRAPHICS_RANGE_R2Y] = {
79 {
80 /* SDTV */
81 0x0107, 0x0204, 0x0064, 0x1F68, 0x1ED6, 0x01C2,
82 0x01C2, 0x1E87, 0x1FB7, 0x0040, 0x0200, 0x0200,
83 },
84 {
85 /* HDTV */
86 0x04A8, 0x0000, 0x072C, 0x04A8, 0x1F26, 0x1DDE,
87 0x04A8, 0x0873, 0x0000, 0x0C20, 0x0134, 0x0B7C,
88 },
89 },
90};
91
92void csc_dump_regs(struct csc_data *csc)
93{
94 struct device *dev = &csc->pdev->dev;
95
96 u32 read_reg(struct csc_data *csc, int offset)
97 {
98 return ioread32(csc->base + offset);
99 }
100
101#define DUMPREG(r) dev_dbg(dev, "%-35s %08x\n", #r, read_reg(csc, CSC_##r))
102
103 DUMPREG(CSC00);
104 DUMPREG(CSC01);
105 DUMPREG(CSC02);
106 DUMPREG(CSC03);
107 DUMPREG(CSC04);
108 DUMPREG(CSC05);
109
110#undef DUMPREG
111}
112
113void csc_set_coeff_bypass(struct csc_data *csc, u32 *csc_reg5)
114{
115 *csc_reg5 |= CSC_BYPASS;
116}
117
118/*
119 * set the color space converter coefficient shadow register values
120 */
121void csc_set_coeff(struct csc_data *csc, u32 *csc_reg0,
122 enum v4l2_colorspace src_colorspace,
123 enum v4l2_colorspace dst_colorspace)
124{
125 u32 *csc_reg5 = csc_reg0 + 5;
126 u32 *shadow_csc = csc_reg0;
127 struct colorspace_coeffs *sd_hd_coeffs;
128 u16 *coeff, *end_coeff;
129 enum v4l2_colorspace yuv_colorspace;
130 int sel = 0;
131
132 /*
133 * support only graphics data range(full range) for now, a control ioctl
134 * would be nice here
135 */
136 /* Y2R */
137 if (dst_colorspace == V4L2_COLORSPACE_SRGB &&
138 (src_colorspace == V4L2_COLORSPACE_SMPTE170M ||
139 src_colorspace == V4L2_COLORSPACE_REC709)) {
140 /* Y2R */
141 sel = 1;
142 yuv_colorspace = src_colorspace;
143 } else if ((dst_colorspace == V4L2_COLORSPACE_SMPTE170M ||
144 dst_colorspace == V4L2_COLORSPACE_REC709) &&
145 src_colorspace == V4L2_COLORSPACE_SRGB) {
146 /* R2Y */
147 sel = 3;
148 yuv_colorspace = dst_colorspace;
149 } else {
150 *csc_reg5 |= CSC_BYPASS;
151 return;
152 }
153
154 sd_hd_coeffs = &colorspace_coeffs[sel];
155
156 /* select between SD or HD coefficients */
157 if (yuv_colorspace == V4L2_COLORSPACE_SMPTE170M)
158 coeff = sd_hd_coeffs->sd;
159 else
160 coeff = sd_hd_coeffs->hd;
161
162 end_coeff = coeff + 12;
163
164 for (; coeff < end_coeff; coeff += 2)
165 *shadow_csc++ = (*(coeff + 1) << 16) | *coeff;
166}
167
168struct csc_data *csc_create(struct platform_device *pdev)
169{
170 struct csc_data *csc;
171
172 dev_dbg(&pdev->dev, "csc_create\n");
173
174 csc = devm_kzalloc(&pdev->dev, sizeof(*csc), GFP_KERNEL);
175 if (!csc) {
176 dev_err(&pdev->dev, "couldn't alloc csc_data\n");
177 return ERR_PTR(-ENOMEM);
178 }
179
180 csc->pdev = pdev;
181
182 csc->res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
183 "vpe_csc");
184 if (csc->res == NULL) {
185 dev_err(&pdev->dev, "missing platform resources data\n");
186 return ERR_PTR(-ENODEV);
187 }
188
189 csc->base = devm_ioremap_resource(&pdev->dev, csc->res);
190 if (!csc->base) {
191 dev_err(&pdev->dev, "failed to ioremap\n");
192 return ERR_PTR(-ENOMEM);
193 }
194
195 return csc;
196}
diff --git a/drivers/media/platform/ti-vpe/csc.h b/drivers/media/platform/ti-vpe/csc.h
new file mode 100644
index 000000000000..1ad2b6dad561
--- /dev/null
+++ b/drivers/media/platform/ti-vpe/csc.h
@@ -0,0 +1,68 @@
1/*
2 * Copyright (c) 2013 Texas Instruments Inc.
3 *
4 * David Griego, <dagriego@biglakesoftware.com>
5 * Dale Farnsworth, <dale@farnsworth.org>
6 * Archit Taneja, <archit@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
11 */
12#ifndef TI_CSC_H
13#define TI_CSC_H
14
15/* VPE color space converter regs */
16#define CSC_CSC00 0x00
17#define CSC_A0_MASK 0x1fff
18#define CSC_A0_SHIFT 0
19#define CSC_B0_MASK 0x1fff
20#define CSC_B0_SHIFT 16
21
22#define CSC_CSC01 0x04
23#define CSC_C0_MASK 0x1fff
24#define CSC_C0_SHIFT 0
25#define CSC_A1_MASK 0x1fff
26#define CSC_A1_SHIFT 16
27
28#define CSC_CSC02 0x08
29#define CSC_B1_MASK 0x1fff
30#define CSC_B1_SHIFT 0
31#define CSC_C1_MASK 0x1fff
32#define CSC_C1_SHIFT 16
33
34#define CSC_CSC03 0x0c
35#define CSC_A2_MASK 0x1fff
36#define CSC_A2_SHIFT 0
37#define CSC_B2_MASK 0x1fff
38#define CSC_B2_SHIFT 16
39
40#define CSC_CSC04 0x10
41#define CSC_C2_MASK 0x1fff
42#define CSC_C2_SHIFT 0
43#define CSC_D0_MASK 0x0fff
44#define CSC_D0_SHIFT 16
45
46#define CSC_CSC05 0x14
47#define CSC_D1_MASK 0x0fff
48#define CSC_D1_SHIFT 0
49#define CSC_D2_MASK 0x0fff
50#define CSC_D2_SHIFT 16
51
52#define CSC_BYPASS (1 << 28)
53
54struct csc_data {
55 void __iomem *base;
56 struct resource *res;
57
58 struct platform_device *pdev;
59};
60
61void csc_dump_regs(struct csc_data *csc);
62void csc_set_coeff_bypass(struct csc_data *csc, u32 *csc_reg5);
63void csc_set_coeff(struct csc_data *csc, u32 *csc_reg0,
64 enum v4l2_colorspace src_colorspace,
65 enum v4l2_colorspace dst_colorspace);
66struct csc_data *csc_create(struct platform_device *pdev);
67
68#endif
diff --git a/drivers/media/platform/ti-vpe/sc.c b/drivers/media/platform/ti-vpe/sc.c
new file mode 100644
index 000000000000..93f0af546b76
--- /dev/null
+++ b/drivers/media/platform/ti-vpe/sc.c
@@ -0,0 +1,311 @@
1/*
2 * Scaler library
3 *
4 * Copyright (c) 2013 Texas Instruments Inc.
5 *
6 * David Griego, <dagriego@biglakesoftware.com>
7 * Dale Farnsworth, <dale@farnsworth.org>
8 * Archit Taneja, <archit@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published by
12 * the Free Software Foundation.
13 */
14
15#include <linux/err.h>
16#include <linux/io.h>
17#include <linux/platform_device.h>
18#include <linux/slab.h>
19
20#include "sc.h"
21#include "sc_coeff.h"
22
23void sc_dump_regs(struct sc_data *sc)
24{
25 struct device *dev = &sc->pdev->dev;
26
27 u32 read_reg(struct sc_data *sc, int offset)
28 {
29 return ioread32(sc->base + offset);
30 }
31
32#define DUMPREG(r) dev_dbg(dev, "%-35s %08x\n", #r, read_reg(sc, CFG_##r))
33
34 DUMPREG(SC0);
35 DUMPREG(SC1);
36 DUMPREG(SC2);
37 DUMPREG(SC3);
38 DUMPREG(SC4);
39 DUMPREG(SC5);
40 DUMPREG(SC6);
41 DUMPREG(SC8);
42 DUMPREG(SC9);
43 DUMPREG(SC10);
44 DUMPREG(SC11);
45 DUMPREG(SC12);
46 DUMPREG(SC13);
47 DUMPREG(SC17);
48 DUMPREG(SC18);
49 DUMPREG(SC19);
50 DUMPREG(SC20);
51 DUMPREG(SC21);
52 DUMPREG(SC22);
53 DUMPREG(SC23);
54 DUMPREG(SC24);
55 DUMPREG(SC25);
56
57#undef DUMPREG
58}
59
60/*
61 * set the horizontal scaler coefficients according to the ratio of output to
62 * input widths, after accounting for up to two levels of decimation
63 */
64void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w,
65 unsigned int dst_w)
66{
67 int sixteenths;
68 int idx;
69 int i, j;
70 u16 *coeff_h = addr;
71 const u16 *cp;
72
73 if (dst_w > src_w) {
74 idx = HS_UP_SCALE;
75 } else {
76 if ((dst_w << 1) < src_w)
77 dst_w <<= 1; /* first level decimation */
78 if ((dst_w << 1) < src_w)
79 dst_w <<= 1; /* second level decimation */
80
81 if (dst_w == src_w) {
82 idx = HS_LE_16_16_SCALE;
83 } else {
84 sixteenths = (dst_w << 4) / src_w;
85 if (sixteenths < 8)
86 sixteenths = 8;
87 idx = HS_LT_9_16_SCALE + sixteenths - 8;
88 }
89 }
90
91 if (idx == sc->hs_index)
92 return;
93
94 cp = scaler_hs_coeffs[idx];
95
96 for (i = 0; i < SC_NUM_PHASES * 2; i++) {
97 for (j = 0; j < SC_H_NUM_TAPS; j++)
98 *coeff_h++ = *cp++;
99 /*
100 * for each phase, the scaler expects space for 8 coefficients
101 * in it's memory. For the horizontal scaler, we copy the first
102 * 7 coefficients and skip the last slot to move to the next
103 * row to hold coefficients for the next phase
104 */
105 coeff_h += SC_NUM_TAPS_MEM_ALIGN - SC_H_NUM_TAPS;
106 }
107
108 sc->hs_index = idx;
109
110 sc->load_coeff_h = true;
111}
112
113/*
114 * set the vertical scaler coefficients according to the ratio of output to
115 * input heights
116 */
117void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h,
118 unsigned int dst_h)
119{
120 int sixteenths;
121 int idx;
122 int i, j;
123 u16 *coeff_v = addr;
124 const u16 *cp;
125
126 if (dst_h > src_h) {
127 idx = VS_UP_SCALE;
128 } else if (dst_h == src_h) {
129 idx = VS_1_TO_1_SCALE;
130 } else {
131 sixteenths = (dst_h << 4) / src_h;
132 if (sixteenths < 8)
133 sixteenths = 8;
134 idx = VS_LT_9_16_SCALE + sixteenths - 8;
135 }
136
137 if (idx == sc->vs_index)
138 return;
139
140 cp = scaler_vs_coeffs[idx];
141
142 for (i = 0; i < SC_NUM_PHASES * 2; i++) {
143 for (j = 0; j < SC_V_NUM_TAPS; j++)
144 *coeff_v++ = *cp++;
145 /*
146 * for the vertical scaler, we copy the first 5 coefficients and
147 * skip the last 3 slots to move to the next row to hold
148 * coefficients for the next phase
149 */
150 coeff_v += SC_NUM_TAPS_MEM_ALIGN - SC_V_NUM_TAPS;
151 }
152
153 sc->vs_index = idx;
154 sc->load_coeff_v = true;
155}
156
157void sc_config_scaler(struct sc_data *sc, u32 *sc_reg0, u32 *sc_reg8,
158 u32 *sc_reg17, unsigned int src_w, unsigned int src_h,
159 unsigned int dst_w, unsigned int dst_h)
160{
161 struct device *dev = &sc->pdev->dev;
162 u32 val;
163 int dcm_x, dcm_shift;
164 bool use_rav;
165 unsigned long lltmp;
166 u32 lin_acc_inc, lin_acc_inc_u;
167 u32 col_acc_offset;
168 u16 factor = 0;
169 int row_acc_init_rav = 0, row_acc_init_rav_b = 0;
170 u32 row_acc_inc = 0, row_acc_offset = 0, row_acc_offset_b = 0;
171 /*
172 * location of SC register in payload memory with respect to the first
173 * register in the mmr address data block
174 */
175 u32 *sc_reg9 = sc_reg8 + 1;
176 u32 *sc_reg12 = sc_reg8 + 4;
177 u32 *sc_reg13 = sc_reg8 + 5;
178 u32 *sc_reg24 = sc_reg17 + 7;
179
180 val = sc_reg0[0];
181
182 /* clear all the features(they may get enabled elsewhere later) */
183 val &= ~(CFG_SELFGEN_FID | CFG_TRIM | CFG_ENABLE_SIN2_VER_INTP |
184 CFG_INTERLACE_I | CFG_DCM_4X | CFG_DCM_2X | CFG_AUTO_HS |
185 CFG_ENABLE_EV | CFG_USE_RAV | CFG_INVT_FID | CFG_SC_BYPASS |
186 CFG_INTERLACE_O | CFG_Y_PK_EN | CFG_HP_BYPASS | CFG_LINEAR);
187
188 if (src_w == dst_w && src_h == dst_h) {
189 val |= CFG_SC_BYPASS;
190 sc_reg0[0] = val;
191 return;
192 }
193
194 /* we only support linear scaling for now */
195 val |= CFG_LINEAR;
196
197 /* configure horizontal scaler */
198
199 /* enable 2X or 4X decimation */
200 dcm_x = src_w / dst_w;
201 if (dcm_x > 4) {
202 val |= CFG_DCM_4X;
203 dcm_shift = 2;
204 } else if (dcm_x > 2) {
205 val |= CFG_DCM_2X;
206 dcm_shift = 1;
207 } else {
208 dcm_shift = 0;
209 }
210
211 lltmp = dst_w - 1;
212 lin_acc_inc = div64_u64(((u64)(src_w >> dcm_shift) - 1) << 24, lltmp);
213 lin_acc_inc_u = 0;
214 col_acc_offset = 0;
215
216 dev_dbg(dev, "hs config: src_w = %d, dst_w = %d, decimation = %s, lin_acc_inc = %08x\n",
217 src_w, dst_w, dcm_shift == 2 ? "4x" :
218 (dcm_shift == 1 ? "2x" : "none"), lin_acc_inc);
219
220 /* configure vertical scaler */
221
222 /* use RAV for vertical scaler if vertical downscaling is > 4x */
223 if (dst_h < (src_h >> 2)) {
224 use_rav = true;
225 val |= CFG_USE_RAV;
226 } else {
227 use_rav = false;
228 }
229
230 if (use_rav) {
231 /* use RAV */
232 factor = (u16) ((dst_h << 10) / src_h);
233
234 row_acc_init_rav = factor + ((1 + factor) >> 1);
235 if (row_acc_init_rav >= 1024)
236 row_acc_init_rav -= 1024;
237
238 row_acc_init_rav_b = row_acc_init_rav +
239 (1 + (row_acc_init_rav >> 1)) -
240 (1024 >> 1);
241
242 if (row_acc_init_rav_b < 0) {
243 row_acc_init_rav_b += row_acc_init_rav;
244 row_acc_init_rav *= 2;
245 }
246
247 dev_dbg(dev, "vs config(RAV): src_h = %d, dst_h = %d, factor = %d, acc_init = %08x, acc_init_b = %08x\n",
248 src_h, dst_h, factor, row_acc_init_rav,
249 row_acc_init_rav_b);
250 } else {
251 /* use polyphase */
252 row_acc_inc = ((src_h - 1) << 16) / (dst_h - 1);
253 row_acc_offset = 0;
254 row_acc_offset_b = 0;
255
256 dev_dbg(dev, "vs config(POLY): src_h = %d, dst_h = %d,row_acc_inc = %08x\n",
257 src_h, dst_h, row_acc_inc);
258 }
259
260
261 sc_reg0[0] = val;
262 sc_reg0[1] = row_acc_inc;
263 sc_reg0[2] = row_acc_offset;
264 sc_reg0[3] = row_acc_offset_b;
265
266 sc_reg0[4] = ((lin_acc_inc_u & CFG_LIN_ACC_INC_U_MASK) <<
267 CFG_LIN_ACC_INC_U_SHIFT) | (dst_w << CFG_TAR_W_SHIFT) |
268 (dst_h << CFG_TAR_H_SHIFT);
269
270 sc_reg0[5] = (src_w << CFG_SRC_W_SHIFT) | (src_h << CFG_SRC_H_SHIFT);
271
272 sc_reg0[6] = (row_acc_init_rav_b << CFG_ROW_ACC_INIT_RAV_B_SHIFT) |
273 (row_acc_init_rav << CFG_ROW_ACC_INIT_RAV_SHIFT);
274
275 *sc_reg9 = lin_acc_inc;
276
277 *sc_reg12 = col_acc_offset << CFG_COL_ACC_OFFSET_SHIFT;
278
279 *sc_reg13 = factor;
280
281 *sc_reg24 = (src_w << CFG_ORG_W_SHIFT) | (src_h << CFG_ORG_H_SHIFT);
282}
283
284struct sc_data *sc_create(struct platform_device *pdev)
285{
286 struct sc_data *sc;
287
288 dev_dbg(&pdev->dev, "sc_create\n");
289
290 sc = devm_kzalloc(&pdev->dev, sizeof(*sc), GFP_KERNEL);
291 if (!sc) {
292 dev_err(&pdev->dev, "couldn't alloc sc_data\n");
293 return ERR_PTR(-ENOMEM);
294 }
295
296 sc->pdev = pdev;
297
298 sc->res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sc");
299 if (!sc->res) {
300 dev_err(&pdev->dev, "missing platform resources data\n");
301 return ERR_PTR(-ENODEV);
302 }
303
304 sc->base = devm_ioremap_resource(&pdev->dev, sc->res);
305 if (!sc->base) {
306 dev_err(&pdev->dev, "failed to ioremap\n");
307 return ERR_PTR(-ENOMEM);
308 }
309
310 return sc;
311}
diff --git a/drivers/media/platform/ti-vpe/sc.h b/drivers/media/platform/ti-vpe/sc.h
new file mode 100644
index 000000000000..60e411e05c30
--- /dev/null
+++ b/drivers/media/platform/ti-vpe/sc.h
@@ -0,0 +1,208 @@
1/*
2 * Copyright (c) 2013 Texas Instruments Inc.
3 *
4 * David Griego, <dagriego@biglakesoftware.com>
5 * Dale Farnsworth, <dale@farnsworth.org>
6 * Archit Taneja, <archit@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
11 */
12#ifndef TI_SC_H
13#define TI_SC_H
14
15/* Scaler regs */
16#define CFG_SC0 0x0
17#define CFG_INTERLACE_O (1 << 0)
18#define CFG_LINEAR (1 << 1)
19#define CFG_SC_BYPASS (1 << 2)
20#define CFG_INVT_FID (1 << 3)
21#define CFG_USE_RAV (1 << 4)
22#define CFG_ENABLE_EV (1 << 5)
23#define CFG_AUTO_HS (1 << 6)
24#define CFG_DCM_2X (1 << 7)
25#define CFG_DCM_4X (1 << 8)
26#define CFG_HP_BYPASS (1 << 9)
27#define CFG_INTERLACE_I (1 << 10)
28#define CFG_ENABLE_SIN2_VER_INTP (1 << 11)
29#define CFG_Y_PK_EN (1 << 14)
30#define CFG_TRIM (1 << 15)
31#define CFG_SELFGEN_FID (1 << 16)
32
33#define CFG_SC1 0x4
34#define CFG_ROW_ACC_INC_MASK 0x07ffffff
35#define CFG_ROW_ACC_INC_SHIFT 0
36
37#define CFG_SC2 0x08
38#define CFG_ROW_ACC_OFFSET_MASK 0x0fffffff
39#define CFG_ROW_ACC_OFFSET_SHIFT 0
40
41#define CFG_SC3 0x0c
42#define CFG_ROW_ACC_OFFSET_B_MASK 0x0fffffff
43#define CFG_ROW_ACC_OFFSET_B_SHIFT 0
44
45#define CFG_SC4 0x10
46#define CFG_TAR_H_MASK 0x07ff
47#define CFG_TAR_H_SHIFT 0
48#define CFG_TAR_W_MASK 0x07ff
49#define CFG_TAR_W_SHIFT 12
50#define CFG_LIN_ACC_INC_U_MASK 0x07
51#define CFG_LIN_ACC_INC_U_SHIFT 24
52#define CFG_NLIN_ACC_INIT_U_MASK 0x07
53#define CFG_NLIN_ACC_INIT_U_SHIFT 28
54
55#define CFG_SC5 0x14
56#define CFG_SRC_H_MASK 0x07ff
57#define CFG_SRC_H_SHIFT 0
58#define CFG_SRC_W_MASK 0x07ff
59#define CFG_SRC_W_SHIFT 12
60#define CFG_NLIN_ACC_INC_U_MASK 0x07
61#define CFG_NLIN_ACC_INC_U_SHIFT 24
62
63#define CFG_SC6 0x18
64#define CFG_ROW_ACC_INIT_RAV_MASK 0x03ff
65#define CFG_ROW_ACC_INIT_RAV_SHIFT 0
66#define CFG_ROW_ACC_INIT_RAV_B_MASK 0x03ff
67#define CFG_ROW_ACC_INIT_RAV_B_SHIFT 10
68
69#define CFG_SC8 0x20
70#define CFG_NLIN_LEFT_MASK 0x07ff
71#define CFG_NLIN_LEFT_SHIFT 0
72#define CFG_NLIN_RIGHT_MASK 0x07ff
73#define CFG_NLIN_RIGHT_SHIFT 12
74
75#define CFG_SC9 0x24
76#define CFG_LIN_ACC_INC CFG_SC9
77
78#define CFG_SC10 0x28
79#define CFG_NLIN_ACC_INIT CFG_SC10
80
81#define CFG_SC11 0x2c
82#define CFG_NLIN_ACC_INC CFG_SC11
83
84#define CFG_SC12 0x30
85#define CFG_COL_ACC_OFFSET_MASK 0x01ffffff
86#define CFG_COL_ACC_OFFSET_SHIFT 0
87
88#define CFG_SC13 0x34
89#define CFG_SC_FACTOR_RAV_MASK 0xff
90#define CFG_SC_FACTOR_RAV_SHIFT 0
91#define CFG_CHROMA_INTP_THR_MASK 0x03ff
92#define CFG_CHROMA_INTP_THR_SHIFT 12
93#define CFG_DELTA_CHROMA_THR_MASK 0x0f
94#define CFG_DELTA_CHROMA_THR_SHIFT 24
95
96#define CFG_SC17 0x44
97#define CFG_EV_THR_MASK 0x03ff
98#define CFG_EV_THR_SHIFT 12
99#define CFG_DELTA_LUMA_THR_MASK 0x0f
100#define CFG_DELTA_LUMA_THR_SHIFT 24
101#define CFG_DELTA_EV_THR_MASK 0x0f
102#define CFG_DELTA_EV_THR_SHIFT 28
103
104#define CFG_SC18 0x48
105#define CFG_HS_FACTOR_MASK 0x03ff
106#define CFG_HS_FACTOR_SHIFT 0
107#define CFG_CONF_DEFAULT_MASK 0x01ff
108#define CFG_CONF_DEFAULT_SHIFT 16
109
110#define CFG_SC19 0x4c
111#define CFG_HPF_COEFF0_MASK 0xff
112#define CFG_HPF_COEFF0_SHIFT 0
113#define CFG_HPF_COEFF1_MASK 0xff
114#define CFG_HPF_COEFF1_SHIFT 8
115#define CFG_HPF_COEFF2_MASK 0xff
116#define CFG_HPF_COEFF2_SHIFT 16
117#define CFG_HPF_COEFF3_MASK 0xff
118#define CFG_HPF_COEFF3_SHIFT 23
119
120#define CFG_SC20 0x50
121#define CFG_HPF_COEFF4_MASK 0xff
122#define CFG_HPF_COEFF4_SHIFT 0
123#define CFG_HPF_COEFF5_MASK 0xff
124#define CFG_HPF_COEFF5_SHIFT 8
125#define CFG_HPF_NORM_SHIFT_MASK 0x07
126#define CFG_HPF_NORM_SHIFT_SHIFT 16
127#define CFG_NL_LIMIT_MASK 0x1ff
128#define CFG_NL_LIMIT_SHIFT 20
129
130#define CFG_SC21 0x54
131#define CFG_NL_LO_THR_MASK 0x01ff
132#define CFG_NL_LO_THR_SHIFT 0
133#define CFG_NL_LO_SLOPE_MASK 0xff
134#define CFG_NL_LO_SLOPE_SHIFT 16
135
136#define CFG_SC22 0x58
137#define CFG_NL_HI_THR_MASK 0x01ff
138#define CFG_NL_HI_THR_SHIFT 0
139#define CFG_NL_HI_SLOPE_SH_MASK 0x07
140#define CFG_NL_HI_SLOPE_SH_SHIFT 16
141
142#define CFG_SC23 0x5c
143#define CFG_GRADIENT_THR_MASK 0x07ff
144#define CFG_GRADIENT_THR_SHIFT 0
145#define CFG_GRADIENT_THR_RANGE_MASK 0x0f
146#define CFG_GRADIENT_THR_RANGE_SHIFT 12
147#define CFG_MIN_GY_THR_MASK 0xff
148#define CFG_MIN_GY_THR_SHIFT 16
149#define CFG_MIN_GY_THR_RANGE_MASK 0x0f
150#define CFG_MIN_GY_THR_RANGE_SHIFT 28
151
152#define CFG_SC24 0x60
153#define CFG_ORG_H_MASK 0x07ff
154#define CFG_ORG_H_SHIFT 0
155#define CFG_ORG_W_MASK 0x07ff
156#define CFG_ORG_W_SHIFT 16
157
158#define CFG_SC25 0x64
159#define CFG_OFF_H_MASK 0x07ff
160#define CFG_OFF_H_SHIFT 0
161#define CFG_OFF_W_MASK 0x07ff
162#define CFG_OFF_W_SHIFT 16
163
164/* number of phases supported by the polyphase scalers */
165#define SC_NUM_PHASES 32
166
167/* number of taps used by horizontal polyphase scaler */
168#define SC_H_NUM_TAPS 7
169
170/* number of taps used by vertical polyphase scaler */
171#define SC_V_NUM_TAPS 5
172
173/* number of taps expected by the scaler in it's coefficient memory */
174#define SC_NUM_TAPS_MEM_ALIGN 8
175
176/*
177 * coefficient memory size in bytes:
178 * num phases x num sets(luma and chroma) x num taps(aligned) x coeff size
179 */
180#define SC_COEF_SRAM_SIZE (SC_NUM_PHASES * 2 * SC_NUM_TAPS_MEM_ALIGN * 2)
181
182struct sc_data {
183 void __iomem *base;
184 struct resource *res;
185
186 dma_addr_t loaded_coeff_h; /* loaded h coeffs in SC */
187 dma_addr_t loaded_coeff_v; /* loaded v coeffs in SC */
188
189 bool load_coeff_h; /* have new h SC coeffs */
190 bool load_coeff_v; /* have new v SC coeffs */
191
192 unsigned int hs_index; /* h SC coeffs selector */
193 unsigned int vs_index; /* v SC coeffs selector */
194
195 struct platform_device *pdev;
196};
197
198void sc_dump_regs(struct sc_data *sc);
199void sc_set_hs_coeffs(struct sc_data *sc, void *addr, unsigned int src_w,
200 unsigned int dst_w);
201void sc_set_vs_coeffs(struct sc_data *sc, void *addr, unsigned int src_h,
202 unsigned int dst_h);
203void sc_config_scaler(struct sc_data *sc, u32 *sc_reg0, u32 *sc_reg8,
204 u32 *sc_reg17, unsigned int src_w, unsigned int src_h,
205 unsigned int dst_w, unsigned int dst_h);
206struct sc_data *sc_create(struct platform_device *pdev);
207
208#endif
diff --git a/drivers/media/platform/ti-vpe/sc_coeff.h b/drivers/media/platform/ti-vpe/sc_coeff.h
new file mode 100644
index 000000000000..5bfa5c03aec6
--- /dev/null
+++ b/drivers/media/platform/ti-vpe/sc_coeff.h
@@ -0,0 +1,1342 @@
1/*
2 * VPE SC coefs
3 *
4 * Copyright (c) 2013 Texas Instruments Inc.
5 *
6 * David Griego, <dagriego@biglakesoftware.com>
7 * Dale Farnsworth, <dale@farnsworth.org>
8 * Archit Taneja, <archit@ti.com>
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published by
12 * the Free Software Foundation.
13 */
14
15#ifndef __TI_SC_COEFF_H
16#define __TI_SC_COEFF_H
17
18/* horizontal scaler coefficients */
19enum {
20 HS_UP_SCALE = 0,
21 HS_LT_9_16_SCALE,
22 HS_LT_10_16_SCALE,
23 HS_LT_11_16_SCALE,
24 HS_LT_12_16_SCALE,
25 HS_LT_13_16_SCALE,
26 HS_LT_14_16_SCALE,
27 HS_LT_15_16_SCALE,
28 HS_LE_16_16_SCALE,
29};
30
31static const u16 scaler_hs_coeffs[13][SC_NUM_PHASES * 2 * SC_H_NUM_TAPS] = {
32 [HS_UP_SCALE] = {
33 /* Luma */
34 0x001F, 0x1F90, 0x00D2, 0x06FE, 0x00D2, 0x1F90, 0x001F,
35 0x001C, 0x1F9E, 0x009F, 0x06FB, 0x0108, 0x1F82, 0x0022,
36 0x0019, 0x1FAC, 0x006F, 0x06F3, 0x0140, 0x1F74, 0x0025,
37 0x0016, 0x1FB9, 0x0041, 0x06E7, 0x017B, 0x1F66, 0x0028,
38 0x0013, 0x1FC6, 0x0017, 0x06D6, 0x01B7, 0x1F58, 0x002B,
39 0x0010, 0x1FD3, 0x1FEF, 0x06C0, 0x01F6, 0x1F4B, 0x002D,
40 0x000E, 0x1FDF, 0x1FCB, 0x06A5, 0x0235, 0x1F3F, 0x002F,
41 0x000B, 0x1FEA, 0x1FAA, 0x0686, 0x0277, 0x1F33, 0x0031,
42 0x0009, 0x1FF5, 0x1F8C, 0x0663, 0x02B8, 0x1F28, 0x0033,
43 0x0007, 0x1FFF, 0x1F72, 0x063A, 0x02FB, 0x1F1F, 0x0034,
44 0x0005, 0x0008, 0x1F5A, 0x060F, 0x033E, 0x1F17, 0x0035,
45 0x0003, 0x0010, 0x1F46, 0x05E0, 0x0382, 0x1F10, 0x0035,
46 0x0002, 0x0017, 0x1F34, 0x05AF, 0x03C5, 0x1F0B, 0x0034,
47 0x0001, 0x001E, 0x1F26, 0x0579, 0x0407, 0x1F08, 0x0033,
48 0x0000, 0x0023, 0x1F1A, 0x0541, 0x0449, 0x1F07, 0x0032,
49 0x1FFF, 0x0028, 0x1F12, 0x0506, 0x048A, 0x1F08, 0x002F,
50 0x002C, 0x1F0C, 0x04C8, 0x04C8, 0x1F0C, 0x002C, 0x0000,
51 0x002F, 0x1F08, 0x048A, 0x0506, 0x1F12, 0x0028, 0x1FFF,
52 0x0032, 0x1F07, 0x0449, 0x0541, 0x1F1A, 0x0023, 0x0000,
53 0x0033, 0x1F08, 0x0407, 0x0579, 0x1F26, 0x001E, 0x0001,
54 0x0034, 0x1F0B, 0x03C5, 0x05AF, 0x1F34, 0x0017, 0x0002,
55 0x0035, 0x1F10, 0x0382, 0x05E0, 0x1F46, 0x0010, 0x0003,
56 0x0035, 0x1F17, 0x033E, 0x060F, 0x1F5A, 0x0008, 0x0005,
57 0x0034, 0x1F1F, 0x02FB, 0x063A, 0x1F72, 0x1FFF, 0x0007,
58 0x0033, 0x1F28, 0x02B8, 0x0663, 0x1F8C, 0x1FF5, 0x0009,
59 0x0031, 0x1F33, 0x0277, 0x0686, 0x1FAA, 0x1FEA, 0x000B,
60 0x002F, 0x1F3F, 0x0235, 0x06A5, 0x1FCB, 0x1FDF, 0x000E,
61 0x002D, 0x1F4B, 0x01F6, 0x06C0, 0x1FEF, 0x1FD3, 0x0010,
62 0x002B, 0x1F58, 0x01B7, 0x06D6, 0x0017, 0x1FC6, 0x0013,
63 0x0028, 0x1F66, 0x017B, 0x06E7, 0x0041, 0x1FB9, 0x0016,
64 0x0025, 0x1F74, 0x0140, 0x06F3, 0x006F, 0x1FAC, 0x0019,
65 0x0022, 0x1F82, 0x0108, 0x06FB, 0x009F, 0x1F9E, 0x001C,
66 /* Chroma */
67 0x001F, 0x1F90, 0x00D2, 0x06FE, 0x00D2, 0x1F90, 0x001F,
68 0x001C, 0x1F9E, 0x009F, 0x06FB, 0x0108, 0x1F82, 0x0022,
69 0x0019, 0x1FAC, 0x006F, 0x06F3, 0x0140, 0x1F74, 0x0025,
70 0x0016, 0x1FB9, 0x0041, 0x06E7, 0x017B, 0x1F66, 0x0028,
71 0x0013, 0x1FC6, 0x0017, 0x06D6, 0x01B7, 0x1F58, 0x002B,
72 0x0010, 0x1FD3, 0x1FEF, 0x06C0, 0x01F6, 0x1F4B, 0x002D,
73 0x000E, 0x1FDF, 0x1FCB, 0x06A5, 0x0235, 0x1F3F, 0x002F,
74 0x000B, 0x1FEA, 0x1FAA, 0x0686, 0x0277, 0x1F33, 0x0031,
75 0x0009, 0x1FF5, 0x1F8C, 0x0663, 0x02B8, 0x1F28, 0x0033,
76 0x0007, 0x1FFF, 0x1F72, 0x063A, 0x02FB, 0x1F1F, 0x0034,
77 0x0005, 0x0008, 0x1F5A, 0x060F, 0x033E, 0x1F17, 0x0035,
78 0x0003, 0x0010, 0x1F46, 0x05E0, 0x0382, 0x1F10, 0x0035,
79 0x0002, 0x0017, 0x1F34, 0x05AF, 0x03C5, 0x1F0B, 0x0034,
80 0x0001, 0x001E, 0x1F26, 0x0579, 0x0407, 0x1F08, 0x0033,
81 0x0000, 0x0023, 0x1F1A, 0x0541, 0x0449, 0x1F07, 0x0032,
82 0x1FFF, 0x0028, 0x1F12, 0x0506, 0x048A, 0x1F08, 0x002F,
83 0x002C, 0x1F0C, 0x04C8, 0x04C8, 0x1F0C, 0x002C, 0x0000,
84 0x002F, 0x1F08, 0x048A, 0x0506, 0x1F12, 0x0028, 0x1FFF,
85 0x0032, 0x1F07, 0x0449, 0x0541, 0x1F1A, 0x0023, 0x0000,
86 0x0033, 0x1F08, 0x0407, 0x0579, 0x1F26, 0x001E, 0x0001,
87 0x0034, 0x1F0B, 0x03C5, 0x05AF, 0x1F34, 0x0017, 0x0002,
88 0x0035, 0x1F10, 0x0382, 0x05E0, 0x1F46, 0x0010, 0x0003,
89 0x0035, 0x1F17, 0x033E, 0x060F, 0x1F5A, 0x0008, 0x0005,
90 0x0034, 0x1F1F, 0x02FB, 0x063A, 0x1F72, 0x1FFF, 0x0007,
91 0x0033, 0x1F28, 0x02B8, 0x0663, 0x1F8C, 0x1FF5, 0x0009,
92 0x0031, 0x1F33, 0x0277, 0x0686, 0x1FAA, 0x1FEA, 0x000B,
93 0x002F, 0x1F3F, 0x0235, 0x06A5, 0x1FCB, 0x1FDF, 0x000E,
94 0x002D, 0x1F4B, 0x01F6, 0x06C0, 0x1FEF, 0x1FD3, 0x0010,
95 0x002B, 0x1F58, 0x01B7, 0x06D6, 0x0017, 0x1FC6, 0x0013,
96 0x0028, 0x1F66, 0x017B, 0x06E7, 0x0041, 0x1FB9, 0x0016,
97 0x0025, 0x1F74, 0x0140, 0x06F3, 0x006F, 0x1FAC, 0x0019,
98 0x0022, 0x1F82, 0x0108, 0x06FB, 0x009F, 0x1F9E, 0x001C,
99 },
100 [HS_LT_9_16_SCALE] = {
101 /* Luma */
102 0x1FA3, 0x005E, 0x024A, 0x036A, 0x024A, 0x005E, 0x1FA3,
103 0x1FA3, 0x0052, 0x023A, 0x036A, 0x0259, 0x006A, 0x1FA4,
104 0x1FA3, 0x0046, 0x022A, 0x036A, 0x0269, 0x0076, 0x1FA4,
105 0x1FA3, 0x003B, 0x021A, 0x0368, 0x0278, 0x0083, 0x1FA5,
106 0x1FA4, 0x0031, 0x020A, 0x0365, 0x0286, 0x0090, 0x1FA6,
107 0x1FA5, 0x0026, 0x01F9, 0x0362, 0x0294, 0x009E, 0x1FA8,
108 0x1FA6, 0x001C, 0x01E8, 0x035E, 0x02A3, 0x00AB, 0x1FAA,
109 0x1FA7, 0x0013, 0x01D7, 0x035A, 0x02B0, 0x00B9, 0x1FAC,
110 0x1FA9, 0x000A, 0x01C6, 0x0354, 0x02BD, 0x00C7, 0x1FAF,
111 0x1FAA, 0x0001, 0x01B6, 0x034E, 0x02C9, 0x00D6, 0x1FB2,
112 0x1FAC, 0x1FF9, 0x01A5, 0x0347, 0x02D5, 0x00E5, 0x1FB5,
113 0x1FAE, 0x1FF1, 0x0194, 0x0340, 0x02E1, 0x00F3, 0x1FB9,
114 0x1FB0, 0x1FEA, 0x0183, 0x0338, 0x02EC, 0x0102, 0x1FBD,
115 0x1FB2, 0x1FE3, 0x0172, 0x0330, 0x02F6, 0x0112, 0x1FC1,
116 0x1FB4, 0x1FDC, 0x0161, 0x0327, 0x0301, 0x0121, 0x1FC6,
117 0x1FB7, 0x1FD6, 0x0151, 0x031D, 0x030A, 0x0130, 0x1FCB,
118 0x1FD2, 0x0136, 0x02F8, 0x02F8, 0x0136, 0x1FD2, 0x0000,
119 0x1FCB, 0x0130, 0x030A, 0x031D, 0x0151, 0x1FD6, 0x1FB7,
120 0x1FC6, 0x0121, 0x0301, 0x0327, 0x0161, 0x1FDC, 0x1FB4,
121 0x1FC1, 0x0112, 0x02F6, 0x0330, 0x0172, 0x1FE3, 0x1FB2,
122 0x1FBD, 0x0102, 0x02EC, 0x0338, 0x0183, 0x1FEA, 0x1FB0,
123 0x1FB9, 0x00F3, 0x02E1, 0x0340, 0x0194, 0x1FF1, 0x1FAE,
124 0x1FB5, 0x00E5, 0x02D5, 0x0347, 0x01A5, 0x1FF9, 0x1FAC,
125 0x1FB2, 0x00D6, 0x02C9, 0x034E, 0x01B6, 0x0001, 0x1FAA,
126 0x1FAF, 0x00C7, 0x02BD, 0x0354, 0x01C6, 0x000A, 0x1FA9,
127 0x1FAC, 0x00B9, 0x02B0, 0x035A, 0x01D7, 0x0013, 0x1FA7,
128 0x1FAA, 0x00AB, 0x02A3, 0x035E, 0x01E8, 0x001C, 0x1FA6,
129 0x1FA8, 0x009E, 0x0294, 0x0362, 0x01F9, 0x0026, 0x1FA5,
130 0x1FA6, 0x0090, 0x0286, 0x0365, 0x020A, 0x0031, 0x1FA4,
131 0x1FA5, 0x0083, 0x0278, 0x0368, 0x021A, 0x003B, 0x1FA3,
132 0x1FA4, 0x0076, 0x0269, 0x036A, 0x022A, 0x0046, 0x1FA3,
133 0x1FA4, 0x006A, 0x0259, 0x036A, 0x023A, 0x0052, 0x1FA3,
134 /* Chroma */
135 0x1FA3, 0x005E, 0x024A, 0x036A, 0x024A, 0x005E, 0x1FA3,
136 0x1FA3, 0x0052, 0x023A, 0x036A, 0x0259, 0x006A, 0x1FA4,
137 0x1FA3, 0x0046, 0x022A, 0x036A, 0x0269, 0x0076, 0x1FA4,
138 0x1FA3, 0x003B, 0x021A, 0x0368, 0x0278, 0x0083, 0x1FA5,
139 0x1FA4, 0x0031, 0x020A, 0x0365, 0x0286, 0x0090, 0x1FA6,
140 0x1FA5, 0x0026, 0x01F9, 0x0362, 0x0294, 0x009E, 0x1FA8,
141 0x1FA6, 0x001C, 0x01E8, 0x035E, 0x02A3, 0x00AB, 0x1FAA,
142 0x1FA7, 0x0013, 0x01D7, 0x035A, 0x02B0, 0x00B9, 0x1FAC,
143 0x1FA9, 0x000A, 0x01C6, 0x0354, 0x02BD, 0x00C7, 0x1FAF,
144 0x1FAA, 0x0001, 0x01B6, 0x034E, 0x02C9, 0x00D6, 0x1FB2,
145 0x1FAC, 0x1FF9, 0x01A5, 0x0347, 0x02D5, 0x00E5, 0x1FB5,
146 0x1FAE, 0x1FF1, 0x0194, 0x0340, 0x02E1, 0x00F3, 0x1FB9,
147 0x1FB0, 0x1FEA, 0x0183, 0x0338, 0x02EC, 0x0102, 0x1FBD,
148 0x1FB2, 0x1FE3, 0x0172, 0x0330, 0x02F6, 0x0112, 0x1FC1,
149 0x1FB4, 0x1FDC, 0x0161, 0x0327, 0x0301, 0x0121, 0x1FC6,
150 0x1FB7, 0x1FD6, 0x0151, 0x031D, 0x030A, 0x0130, 0x1FCB,
151 0x1FD2, 0x0136, 0x02F8, 0x02F8, 0x0136, 0x1FD2, 0x0000,
152 0x1FCB, 0x0130, 0x030A, 0x031D, 0x0151, 0x1FD6, 0x1FB7,
153 0x1FC6, 0x0121, 0x0301, 0x0327, 0x0161, 0x1FDC, 0x1FB4,
154 0x1FC1, 0x0112, 0x02F6, 0x0330, 0x0172, 0x1FE3, 0x1FB2,
155 0x1FBD, 0x0102, 0x02EC, 0x0338, 0x0183, 0x1FEA, 0x1FB0,
156 0x1FB9, 0x00F3, 0x02E1, 0x0340, 0x0194, 0x1FF1, 0x1FAE,
157 0x1FB5, 0x00E5, 0x02D5, 0x0347, 0x01A5, 0x1FF9, 0x1FAC,
158 0x1FB2, 0x00D6, 0x02C9, 0x034E, 0x01B6, 0x0001, 0x1FAA,
159 0x1FAF, 0x00C7, 0x02BD, 0x0354, 0x01C6, 0x000A, 0x1FA9,
160 0x1FAC, 0x00B9, 0x02B0, 0x035A, 0x01D7, 0x0013, 0x1FA7,
161 0x1FAA, 0x00AB, 0x02A3, 0x035E, 0x01E8, 0x001C, 0x1FA6,
162 0x1FA8, 0x009E, 0x0294, 0x0362, 0x01F9, 0x0026, 0x1FA5,
163 0x1FA6, 0x0090, 0x0286, 0x0365, 0x020A, 0x0031, 0x1FA4,
164 0x1FA5, 0x0083, 0x0278, 0x0368, 0x021A, 0x003B, 0x1FA3,
165 0x1FA4, 0x0076, 0x0269, 0x036A, 0x022A, 0x0046, 0x1FA3,
166 0x1FA4, 0x006A, 0x0259, 0x036A, 0x023A, 0x0052, 0x1FA3,
167 },
168 [HS_LT_10_16_SCALE] = {
169 /* Luma */
170 0x1F8D, 0x000C, 0x026A, 0x03FA, 0x026A, 0x000C, 0x1F8D,
171 0x1F8F, 0x0000, 0x0255, 0x03FA, 0x027F, 0x0019, 0x1F8A,
172 0x1F92, 0x1FF5, 0x023F, 0x03F8, 0x0293, 0x0027, 0x1F88,
173 0x1F95, 0x1FEA, 0x022A, 0x03F6, 0x02A7, 0x0034, 0x1F86,
174 0x1F99, 0x1FDF, 0x0213, 0x03F2, 0x02BB, 0x0043, 0x1F85,
175 0x1F9C, 0x1FD5, 0x01FE, 0x03ED, 0x02CF, 0x0052, 0x1F83,
176 0x1FA0, 0x1FCC, 0x01E8, 0x03E7, 0x02E1, 0x0061, 0x1F83,
177 0x1FA4, 0x1FC3, 0x01D2, 0x03E0, 0x02F4, 0x0071, 0x1F82,
178 0x1FA7, 0x1FBB, 0x01BC, 0x03D9, 0x0306, 0x0081, 0x1F82,
179 0x1FAB, 0x1FB4, 0x01A6, 0x03D0, 0x0317, 0x0092, 0x1F82,
180 0x1FAF, 0x1FAD, 0x0190, 0x03C7, 0x0327, 0x00A3, 0x1F83,
181 0x1FB3, 0x1FA7, 0x017A, 0x03BC, 0x0337, 0x00B5, 0x1F84,
182 0x1FB8, 0x1FA1, 0x0165, 0x03B0, 0x0346, 0x00C7, 0x1F85,
183 0x1FBC, 0x1F9C, 0x0150, 0x03A4, 0x0354, 0x00D9, 0x1F87,
184 0x1FC0, 0x1F98, 0x013A, 0x0397, 0x0361, 0x00EC, 0x1F8A,
185 0x1FC4, 0x1F93, 0x0126, 0x0389, 0x036F, 0x00FE, 0x1F8D,
186 0x1F93, 0x010A, 0x0363, 0x0363, 0x010A, 0x1F93, 0x0000,
187 0x1F8D, 0x00FE, 0x036F, 0x0389, 0x0126, 0x1F93, 0x1FC4,
188 0x1F8A, 0x00EC, 0x0361, 0x0397, 0x013A, 0x1F98, 0x1FC0,
189 0x1F87, 0x00D9, 0x0354, 0x03A4, 0x0150, 0x1F9C, 0x1FBC,
190 0x1F85, 0x00C7, 0x0346, 0x03B0, 0x0165, 0x1FA1, 0x1FB8,
191 0x1F84, 0x00B5, 0x0337, 0x03BC, 0x017A, 0x1FA7, 0x1FB3,
192 0x1F83, 0x00A3, 0x0327, 0x03C7, 0x0190, 0x1FAD, 0x1FAF,
193 0x1F82, 0x0092, 0x0317, 0x03D0, 0x01A6, 0x1FB4, 0x1FAB,
194 0x1F82, 0x0081, 0x0306, 0x03D9, 0x01BC, 0x1FBB, 0x1FA7,
195 0x1F82, 0x0071, 0x02F4, 0x03E0, 0x01D2, 0x1FC3, 0x1FA4,
196 0x1F83, 0x0061, 0x02E1, 0x03E7, 0x01E8, 0x1FCC, 0x1FA0,
197 0x1F83, 0x0052, 0x02CF, 0x03ED, 0x01FE, 0x1FD5, 0x1F9C,
198 0x1F85, 0x0043, 0x02BB, 0x03F2, 0x0213, 0x1FDF, 0x1F99,
199 0x1F86, 0x0034, 0x02A7, 0x03F6, 0x022A, 0x1FEA, 0x1F95,
200 0x1F88, 0x0027, 0x0293, 0x03F8, 0x023F, 0x1FF5, 0x1F92,
201 0x1F8A, 0x0019, 0x027F, 0x03FA, 0x0255, 0x0000, 0x1F8F,
202 /* Chroma */
203 0x1F8D, 0x000C, 0x026A, 0x03FA, 0x026A, 0x000C, 0x1F8D,
204 0x1F8F, 0x0000, 0x0255, 0x03FA, 0x027F, 0x0019, 0x1F8A,
205 0x1F92, 0x1FF5, 0x023F, 0x03F8, 0x0293, 0x0027, 0x1F88,
206 0x1F95, 0x1FEA, 0x022A, 0x03F6, 0x02A7, 0x0034, 0x1F86,
207 0x1F99, 0x1FDF, 0x0213, 0x03F2, 0x02BB, 0x0043, 0x1F85,
208 0x1F9C, 0x1FD5, 0x01FE, 0x03ED, 0x02CF, 0x0052, 0x1F83,
209 0x1FA0, 0x1FCC, 0x01E8, 0x03E7, 0x02E1, 0x0061, 0x1F83,
210 0x1FA4, 0x1FC3, 0x01D2, 0x03E0, 0x02F4, 0x0071, 0x1F82,
211 0x1FA7, 0x1FBB, 0x01BC, 0x03D9, 0x0306, 0x0081, 0x1F82,
212 0x1FAB, 0x1FB4, 0x01A6, 0x03D0, 0x0317, 0x0092, 0x1F82,
213 0x1FAF, 0x1FAD, 0x0190, 0x03C7, 0x0327, 0x00A3, 0x1F83,
214 0x1FB3, 0x1FA7, 0x017A, 0x03BC, 0x0337, 0x00B5, 0x1F84,
215 0x1FB8, 0x1FA1, 0x0165, 0x03B0, 0x0346, 0x00C7, 0x1F85,
216 0x1FBC, 0x1F9C, 0x0150, 0x03A4, 0x0354, 0x00D9, 0x1F87,
217 0x1FC0, 0x1F98, 0x013A, 0x0397, 0x0361, 0x00EC, 0x1F8A,
218 0x1FC4, 0x1F93, 0x0126, 0x0389, 0x036F, 0x00FE, 0x1F8D,
219 0x1F93, 0x010A, 0x0363, 0x0363, 0x010A, 0x1F93, 0x0000,
220 0x1F8D, 0x00FE, 0x036F, 0x0389, 0x0126, 0x1F93, 0x1FC4,
221 0x1F8A, 0x00EC, 0x0361, 0x0397, 0x013A, 0x1F98, 0x1FC0,
222 0x1F87, 0x00D9, 0x0354, 0x03A4, 0x0150, 0x1F9C, 0x1FBC,
223 0x1F85, 0x00C7, 0x0346, 0x03B0, 0x0165, 0x1FA1, 0x1FB8,
224 0x1F84, 0x00B5, 0x0337, 0x03BC, 0x017A, 0x1FA7, 0x1FB3,
225 0x1F83, 0x00A3, 0x0327, 0x03C7, 0x0190, 0x1FAD, 0x1FAF,
226 0x1F82, 0x0092, 0x0317, 0x03D0, 0x01A6, 0x1FB4, 0x1FAB,
227 0x1F82, 0x0081, 0x0306, 0x03D9, 0x01BC, 0x1FBB, 0x1FA7,
228 0x1F82, 0x0071, 0x02F4, 0x03E0, 0x01D2, 0x1FC3, 0x1FA4,
229 0x1F83, 0x0061, 0x02E1, 0x03E7, 0x01E8, 0x1FCC, 0x1FA0,
230 0x1F83, 0x0052, 0x02CF, 0x03ED, 0x01FE, 0x1FD5, 0x1F9C,
231 0x1F85, 0x0043, 0x02BB, 0x03F2, 0x0213, 0x1FDF, 0x1F99,
232 0x1F86, 0x0034, 0x02A7, 0x03F6, 0x022A, 0x1FEA, 0x1F95,
233 0x1F88, 0x0027, 0x0293, 0x03F8, 0x023F, 0x1FF5, 0x1F92,
234 0x1F8A, 0x0019, 0x027F, 0x03FA, 0x0255, 0x0000, 0x1F8F,
235 },
236 [HS_LT_11_16_SCALE] = {
237 /* Luma */
238 0x1F95, 0x1FB5, 0x0272, 0x0488, 0x0272, 0x1FB5, 0x1F95,
239 0x1F9B, 0x1FAA, 0x0257, 0x0486, 0x028D, 0x1FC1, 0x1F90,
240 0x1FA0, 0x1FA0, 0x023C, 0x0485, 0x02A8, 0x1FCD, 0x1F8A,
241 0x1FA6, 0x1F96, 0x0221, 0x0481, 0x02C2, 0x1FDB, 0x1F85,
242 0x1FAC, 0x1F8E, 0x0205, 0x047C, 0x02DC, 0x1FE9, 0x1F80,
243 0x1FB1, 0x1F86, 0x01E9, 0x0476, 0x02F6, 0x1FF8, 0x1F7C,
244 0x1FB7, 0x1F7F, 0x01CE, 0x046E, 0x030F, 0x0008, 0x1F77,
245 0x1FBD, 0x1F79, 0x01B3, 0x0465, 0x0326, 0x0019, 0x1F73,
246 0x1FC3, 0x1F73, 0x0197, 0x045B, 0x033E, 0x002A, 0x1F70,
247 0x1FC8, 0x1F6F, 0x017D, 0x044E, 0x0355, 0x003C, 0x1F6D,
248 0x1FCE, 0x1F6B, 0x0162, 0x0441, 0x036B, 0x004F, 0x1F6A,
249 0x1FD3, 0x1F68, 0x0148, 0x0433, 0x0380, 0x0063, 0x1F67,
250 0x1FD8, 0x1F65, 0x012E, 0x0424, 0x0395, 0x0077, 0x1F65,
251 0x1FDE, 0x1F63, 0x0115, 0x0413, 0x03A8, 0x008B, 0x1F64,
252 0x1FE3, 0x1F62, 0x00FC, 0x0403, 0x03BA, 0x00A0, 0x1F62,
253 0x1FE7, 0x1F62, 0x00E4, 0x03EF, 0x03CC, 0x00B6, 0x1F62,
254 0x1F63, 0x00CA, 0x03D3, 0x03D3, 0x00CA, 0x1F63, 0x0000,
255 0x1F62, 0x00B6, 0x03CC, 0x03EF, 0x00E4, 0x1F62, 0x1FE7,
256 0x1F62, 0x00A0, 0x03BA, 0x0403, 0x00FC, 0x1F62, 0x1FE3,
257 0x1F64, 0x008B, 0x03A8, 0x0413, 0x0115, 0x1F63, 0x1FDE,
258 0x1F65, 0x0077, 0x0395, 0x0424, 0x012E, 0x1F65, 0x1FD8,
259 0x1F67, 0x0063, 0x0380, 0x0433, 0x0148, 0x1F68, 0x1FD3,
260 0x1F6A, 0x004F, 0x036B, 0x0441, 0x0162, 0x1F6B, 0x1FCE,
261 0x1F6D, 0x003C, 0x0355, 0x044E, 0x017D, 0x1F6F, 0x1FC8,
262 0x1F70, 0x002A, 0x033E, 0x045B, 0x0197, 0x1F73, 0x1FC3,
263 0x1F73, 0x0019, 0x0326, 0x0465, 0x01B3, 0x1F79, 0x1FBD,
264 0x1F77, 0x0008, 0x030F, 0x046E, 0x01CE, 0x1F7F, 0x1FB7,
265 0x1F7C, 0x1FF8, 0x02F6, 0x0476, 0x01E9, 0x1F86, 0x1FB1,
266 0x1F80, 0x1FE9, 0x02DC, 0x047C, 0x0205, 0x1F8E, 0x1FAC,
267 0x1F85, 0x1FDB, 0x02C2, 0x0481, 0x0221, 0x1F96, 0x1FA6,
268 0x1F8A, 0x1FCD, 0x02A8, 0x0485, 0x023C, 0x1FA0, 0x1FA0,
269 0x1F90, 0x1FC1, 0x028D, 0x0486, 0x0257, 0x1FAA, 0x1F9B,
270 /* Chroma */
271 0x1F95, 0x1FB5, 0x0272, 0x0488, 0x0272, 0x1FB5, 0x1F95,
272 0x1F9B, 0x1FAA, 0x0257, 0x0486, 0x028D, 0x1FC1, 0x1F90,
273 0x1FA0, 0x1FA0, 0x023C, 0x0485, 0x02A8, 0x1FCD, 0x1F8A,
274 0x1FA6, 0x1F96, 0x0221, 0x0481, 0x02C2, 0x1FDB, 0x1F85,
275 0x1FAC, 0x1F8E, 0x0205, 0x047C, 0x02DC, 0x1FE9, 0x1F80,
276 0x1FB1, 0x1F86, 0x01E9, 0x0476, 0x02F6, 0x1FF8, 0x1F7C,
277 0x1FB7, 0x1F7F, 0x01CE, 0x046E, 0x030F, 0x0008, 0x1F77,
278 0x1FBD, 0x1F79, 0x01B3, 0x0465, 0x0326, 0x0019, 0x1F73,
279 0x1FC3, 0x1F73, 0x0197, 0x045B, 0x033E, 0x002A, 0x1F70,
280 0x1FC8, 0x1F6F, 0x017D, 0x044E, 0x0355, 0x003C, 0x1F6D,
281 0x1FCE, 0x1F6B, 0x0162, 0x0441, 0x036B, 0x004F, 0x1F6A,
282 0x1FD3, 0x1F68, 0x0148, 0x0433, 0x0380, 0x0063, 0x1F67,
283 0x1FD8, 0x1F65, 0x012E, 0x0424, 0x0395, 0x0077, 0x1F65,
284 0x1FDE, 0x1F63, 0x0115, 0x0413, 0x03A8, 0x008B, 0x1F64,
285 0x1FE3, 0x1F62, 0x00FC, 0x0403, 0x03BA, 0x00A0, 0x1F62,
286 0x1FE7, 0x1F62, 0x00E4, 0x03EF, 0x03CC, 0x00B6, 0x1F62,
287 0x1F63, 0x00CA, 0x03D3, 0x03D3, 0x00CA, 0x1F63, 0x0000,
288 0x1F62, 0x00B6, 0x03CC, 0x03EF, 0x00E4, 0x1F62, 0x1FE7,
289 0x1F62, 0x00A0, 0x03BA, 0x0403, 0x00FC, 0x1F62, 0x1FE3,
290 0x1F64, 0x008B, 0x03A8, 0x0413, 0x0115, 0x1F63, 0x1FDE,
291 0x1F65, 0x0077, 0x0395, 0x0424, 0x012E, 0x1F65, 0x1FD8,
292 0x1F67, 0x0063, 0x0380, 0x0433, 0x0148, 0x1F68, 0x1FD3,
293 0x1F6A, 0x004F, 0x036B, 0x0441, 0x0162, 0x1F6B, 0x1FCE,
294 0x1F6D, 0x003C, 0x0355, 0x044E, 0x017D, 0x1F6F, 0x1FC8,
295 0x1F70, 0x002A, 0x033E, 0x045B, 0x0197, 0x1F73, 0x1FC3,
296 0x1F73, 0x0019, 0x0326, 0x0465, 0x01B3, 0x1F79, 0x1FBD,
297 0x1F77, 0x0008, 0x030F, 0x046E, 0x01CE, 0x1F7F, 0x1FB7,
298 0x1F7C, 0x1FF8, 0x02F6, 0x0476, 0x01E9, 0x1F86, 0x1FB1,
299 0x1F80, 0x1FE9, 0x02DC, 0x047C, 0x0205, 0x1F8E, 0x1FAC,
300 0x1F85, 0x1FDB, 0x02C2, 0x0481, 0x0221, 0x1F96, 0x1FA6,
301 0x1F8A, 0x1FCD, 0x02A8, 0x0485, 0x023C, 0x1FA0, 0x1FA0,
302 0x1F90, 0x1FC1, 0x028D, 0x0486, 0x0257, 0x1FAA, 0x1F9B,
303 },
304 [HS_LT_12_16_SCALE] = {
305 /* Luma */
306 0x1FBB, 0x1F65, 0x025E, 0x0504, 0x025E, 0x1F65, 0x1FBB,
307 0x1FC3, 0x1F5D, 0x023C, 0x0503, 0x027F, 0x1F6E, 0x1FB4,
308 0x1FCA, 0x1F56, 0x021B, 0x0501, 0x02A0, 0x1F78, 0x1FAC,
309 0x1FD1, 0x1F50, 0x01FA, 0x04FD, 0x02C0, 0x1F83, 0x1FA5,
310 0x1FD8, 0x1F4B, 0x01D9, 0x04F6, 0x02E1, 0x1F90, 0x1F9D,
311 0x1FDF, 0x1F47, 0x01B8, 0x04EF, 0x0301, 0x1F9D, 0x1F95,
312 0x1FE6, 0x1F43, 0x0198, 0x04E5, 0x0321, 0x1FAB, 0x1F8E,
313 0x1FEC, 0x1F41, 0x0178, 0x04DA, 0x0340, 0x1FBB, 0x1F86,
314 0x1FF2, 0x1F40, 0x0159, 0x04CC, 0x035E, 0x1FCC, 0x1F7F,
315 0x1FF8, 0x1F40, 0x013A, 0x04BE, 0x037B, 0x1FDD, 0x1F78,
316 0x1FFE, 0x1F40, 0x011B, 0x04AD, 0x0398, 0x1FF0, 0x1F72,
317 0x0003, 0x1F41, 0x00FD, 0x049C, 0x03B4, 0x0004, 0x1F6B,
318 0x0008, 0x1F43, 0x00E0, 0x0489, 0x03CE, 0x0019, 0x1F65,
319 0x000D, 0x1F46, 0x00C4, 0x0474, 0x03E8, 0x002E, 0x1F5F,
320 0x0011, 0x1F49, 0x00A9, 0x045E, 0x0400, 0x0045, 0x1F5A,
321 0x0015, 0x1F4D, 0x008E, 0x0447, 0x0418, 0x005C, 0x1F55,
322 0x1F4F, 0x0076, 0x043B, 0x043B, 0x0076, 0x1F4F, 0x0000,
323 0x1F55, 0x005C, 0x0418, 0x0447, 0x008E, 0x1F4D, 0x0015,
324 0x1F5A, 0x0045, 0x0400, 0x045E, 0x00A9, 0x1F49, 0x0011,
325 0x1F5F, 0x002E, 0x03E8, 0x0474, 0x00C4, 0x1F46, 0x000D,
326 0x1F65, 0x0019, 0x03CE, 0x0489, 0x00E0, 0x1F43, 0x0008,
327 0x1F6B, 0x0004, 0x03B4, 0x049C, 0x00FD, 0x1F41, 0x0003,
328 0x1F72, 0x1FF0, 0x0398, 0x04AD, 0x011B, 0x1F40, 0x1FFE,
329 0x1F78, 0x1FDD, 0x037B, 0x04BE, 0x013A, 0x1F40, 0x1FF8,
330 0x1F7F, 0x1FCC, 0x035E, 0x04CC, 0x0159, 0x1F40, 0x1FF2,
331 0x1F86, 0x1FBB, 0x0340, 0x04DA, 0x0178, 0x1F41, 0x1FEC,
332 0x1F8E, 0x1FAB, 0x0321, 0x04E5, 0x0198, 0x1F43, 0x1FE6,
333 0x1F95, 0x1F9D, 0x0301, 0x04EF, 0x01B8, 0x1F47, 0x1FDF,
334 0x1F9D, 0x1F90, 0x02E1, 0x04F6, 0x01D9, 0x1F4B, 0x1FD8,
335 0x1FA5, 0x1F83, 0x02C0, 0x04FD, 0x01FA, 0x1F50, 0x1FD1,
336 0x1FAC, 0x1F78, 0x02A0, 0x0501, 0x021B, 0x1F56, 0x1FCA,
337 0x1FB4, 0x1F6E, 0x027F, 0x0503, 0x023C, 0x1F5D, 0x1FC3,
338 /* Chroma */
339 0x1FBB, 0x1F65, 0x025E, 0x0504, 0x025E, 0x1F65, 0x1FBB,
340 0x1FC3, 0x1F5D, 0x023C, 0x0503, 0x027F, 0x1F6E, 0x1FB4,
341 0x1FCA, 0x1F56, 0x021B, 0x0501, 0x02A0, 0x1F78, 0x1FAC,
342 0x1FD1, 0x1F50, 0x01FA, 0x04FD, 0x02C0, 0x1F83, 0x1FA5,
343 0x1FD8, 0x1F4B, 0x01D9, 0x04F6, 0x02E1, 0x1F90, 0x1F9D,
344 0x1FDF, 0x1F47, 0x01B8, 0x04EF, 0x0301, 0x1F9D, 0x1F95,
345 0x1FE6, 0x1F43, 0x0198, 0x04E5, 0x0321, 0x1FAB, 0x1F8E,
346 0x1FEC, 0x1F41, 0x0178, 0x04DA, 0x0340, 0x1FBB, 0x1F86,
347 0x1FF2, 0x1F40, 0x0159, 0x04CC, 0x035E, 0x1FCC, 0x1F7F,
348 0x1FF8, 0x1F40, 0x013A, 0x04BE, 0x037B, 0x1FDD, 0x1F78,
349 0x1FFE, 0x1F40, 0x011B, 0x04AD, 0x0398, 0x1FF0, 0x1F72,
350 0x0003, 0x1F41, 0x00FD, 0x049C, 0x03B4, 0x0004, 0x1F6B,
351 0x0008, 0x1F43, 0x00E0, 0x0489, 0x03CE, 0x0019, 0x1F65,
352 0x000D, 0x1F46, 0x00C4, 0x0474, 0x03E8, 0x002E, 0x1F5F,
353 0x0011, 0x1F49, 0x00A9, 0x045E, 0x0400, 0x0045, 0x1F5A,
354 0x0015, 0x1F4D, 0x008E, 0x0447, 0x0418, 0x005C, 0x1F55,
355 0x1F4F, 0x0076, 0x043B, 0x043B, 0x0076, 0x1F4F, 0x0000,
356 0x1F55, 0x005C, 0x0418, 0x0447, 0x008E, 0x1F4D, 0x0015,
357 0x1F5A, 0x0045, 0x0400, 0x045E, 0x00A9, 0x1F49, 0x0011,
358 0x1F5F, 0x002E, 0x03E8, 0x0474, 0x00C4, 0x1F46, 0x000D,
359 0x1F65, 0x0019, 0x03CE, 0x0489, 0x00E0, 0x1F43, 0x0008,
360 0x1F6B, 0x0004, 0x03B4, 0x049C, 0x00FD, 0x1F41, 0x0003,
361 0x1F72, 0x1FF0, 0x0398, 0x04AD, 0x011B, 0x1F40, 0x1FFE,
362 0x1F78, 0x1FDD, 0x037B, 0x04BE, 0x013A, 0x1F40, 0x1FF8,
363 0x1F7F, 0x1FCC, 0x035E, 0x04CC, 0x0159, 0x1F40, 0x1FF2,
364 0x1F86, 0x1FBB, 0x0340, 0x04DA, 0x0178, 0x1F41, 0x1FEC,
365 0x1F8E, 0x1FAB, 0x0321, 0x04E5, 0x0198, 0x1F43, 0x1FE6,
366 0x1F95, 0x1F9D, 0x0301, 0x04EF, 0x01B8, 0x1F47, 0x1FDF,
367 0x1F9D, 0x1F90, 0x02E1, 0x04F6, 0x01D9, 0x1F4B, 0x1FD8,
368 0x1FA5, 0x1F83, 0x02C0, 0x04FD, 0x01FA, 0x1F50, 0x1FD1,
369 0x1FAC, 0x1F78, 0x02A0, 0x0501, 0x021B, 0x1F56, 0x1FCA,
370 0x1FB4, 0x1F6E, 0x027F, 0x0503, 0x023C, 0x1F5D, 0x1FC3,
371 },
372 [HS_LT_13_16_SCALE] = {
373 /* Luma */
374 0x1FF4, 0x1F29, 0x022D, 0x056C, 0x022D, 0x1F29, 0x1FF4,
375 0x1FFC, 0x1F26, 0x0206, 0x056A, 0x0254, 0x1F2E, 0x1FEC,
376 0x0003, 0x1F24, 0x01E0, 0x0567, 0x027A, 0x1F34, 0x1FE4,
377 0x000A, 0x1F23, 0x01BA, 0x0561, 0x02A2, 0x1F3B, 0x1FDB,
378 0x0011, 0x1F22, 0x0194, 0x055B, 0x02C9, 0x1F43, 0x1FD2,
379 0x0017, 0x1F23, 0x016F, 0x0551, 0x02F0, 0x1F4D, 0x1FC9,
380 0x001D, 0x1F25, 0x014B, 0x0545, 0x0316, 0x1F58, 0x1FC0,
381 0x0022, 0x1F28, 0x0127, 0x0538, 0x033C, 0x1F65, 0x1FB6,
382 0x0027, 0x1F2C, 0x0104, 0x0528, 0x0361, 0x1F73, 0x1FAD,
383 0x002B, 0x1F30, 0x00E2, 0x0518, 0x0386, 0x1F82, 0x1FA3,
384 0x002F, 0x1F36, 0x00C2, 0x0504, 0x03AA, 0x1F92, 0x1F99,
385 0x0032, 0x1F3C, 0x00A2, 0x04EF, 0x03CD, 0x1FA4, 0x1F90,
386 0x0035, 0x1F42, 0x0083, 0x04D9, 0x03EF, 0x1FB8, 0x1F86,
387 0x0038, 0x1F49, 0x0065, 0x04C0, 0x0410, 0x1FCD, 0x1F7D,
388 0x003A, 0x1F51, 0x0048, 0x04A6, 0x0431, 0x1FE3, 0x1F73,
389 0x003C, 0x1F59, 0x002D, 0x048A, 0x0450, 0x1FFA, 0x1F6A,
390 0x1F5D, 0x0014, 0x048F, 0x048F, 0x0014, 0x1F5D, 0x0000,
391 0x1F6A, 0x1FFA, 0x0450, 0x048A, 0x002D, 0x1F59, 0x003C,
392 0x1F73, 0x1FE3, 0x0431, 0x04A6, 0x0048, 0x1F51, 0x003A,
393 0x1F7D, 0x1FCD, 0x0410, 0x04C0, 0x0065, 0x1F49, 0x0038,
394 0x1F86, 0x1FB8, 0x03EF, 0x04D9, 0x0083, 0x1F42, 0x0035,
395 0x1F90, 0x1FA4, 0x03CD, 0x04EF, 0x00A2, 0x1F3C, 0x0032,
396 0x1F99, 0x1F92, 0x03AA, 0x0504, 0x00C2, 0x1F36, 0x002F,
397 0x1FA3, 0x1F82, 0x0386, 0x0518, 0x00E2, 0x1F30, 0x002B,
398 0x1FAD, 0x1F73, 0x0361, 0x0528, 0x0104, 0x1F2C, 0x0027,
399 0x1FB6, 0x1F65, 0x033C, 0x0538, 0x0127, 0x1F28, 0x0022,
400 0x1FC0, 0x1F58, 0x0316, 0x0545, 0x014B, 0x1F25, 0x001D,
401 0x1FC9, 0x1F4D, 0x02F0, 0x0551, 0x016F, 0x1F23, 0x0017,
402 0x1FD2, 0x1F43, 0x02C9, 0x055B, 0x0194, 0x1F22, 0x0011,
403 0x1FDB, 0x1F3B, 0x02A2, 0x0561, 0x01BA, 0x1F23, 0x000A,
404 0x1FE4, 0x1F34, 0x027A, 0x0567, 0x01E0, 0x1F24, 0x0003,
405 0x1FEC, 0x1F2E, 0x0254, 0x056A, 0x0206, 0x1F26, 0x1FFC,
406 /* Chroma */
407 0x1FF4, 0x1F29, 0x022D, 0x056C, 0x022D, 0x1F29, 0x1FF4,
408 0x1FFC, 0x1F26, 0x0206, 0x056A, 0x0254, 0x1F2E, 0x1FEC,
409 0x0003, 0x1F24, 0x01E0, 0x0567, 0x027A, 0x1F34, 0x1FE4,
410 0x000A, 0x1F23, 0x01BA, 0x0561, 0x02A2, 0x1F3B, 0x1FDB,
411 0x0011, 0x1F22, 0x0194, 0x055B, 0x02C9, 0x1F43, 0x1FD2,
412 0x0017, 0x1F23, 0x016F, 0x0551, 0x02F0, 0x1F4D, 0x1FC9,
413 0x001D, 0x1F25, 0x014B, 0x0545, 0x0316, 0x1F58, 0x1FC0,
414 0x0022, 0x1F28, 0x0127, 0x0538, 0x033C, 0x1F65, 0x1FB6,
415 0x0027, 0x1F2C, 0x0104, 0x0528, 0x0361, 0x1F73, 0x1FAD,
416 0x002B, 0x1F30, 0x00E2, 0x0518, 0x0386, 0x1F82, 0x1FA3,
417 0x002F, 0x1F36, 0x00C2, 0x0504, 0x03AA, 0x1F92, 0x1F99,
418 0x0032, 0x1F3C, 0x00A2, 0x04EF, 0x03CD, 0x1FA4, 0x1F90,
419 0x0035, 0x1F42, 0x0083, 0x04D9, 0x03EF, 0x1FB8, 0x1F86,
420 0x0038, 0x1F49, 0x0065, 0x04C0, 0x0410, 0x1FCD, 0x1F7D,
421 0x003A, 0x1F51, 0x0048, 0x04A6, 0x0431, 0x1FE3, 0x1F73,
422 0x003C, 0x1F59, 0x002D, 0x048A, 0x0450, 0x1FFA, 0x1F6A,
423 0x1F5D, 0x0014, 0x048F, 0x048F, 0x0014, 0x1F5D, 0x0000,
424 0x1F6A, 0x1FFA, 0x0450, 0x048A, 0x002D, 0x1F59, 0x003C,
425 0x1F73, 0x1FE3, 0x0431, 0x04A6, 0x0048, 0x1F51, 0x003A,
426 0x1F7D, 0x1FCD, 0x0410, 0x04C0, 0x0065, 0x1F49, 0x0038,
427 0x1F86, 0x1FB8, 0x03EF, 0x04D9, 0x0083, 0x1F42, 0x0035,
428 0x1F90, 0x1FA4, 0x03CD, 0x04EF, 0x00A2, 0x1F3C, 0x0032,
429 0x1F99, 0x1F92, 0x03AA, 0x0504, 0x00C2, 0x1F36, 0x002F,
430 0x1FA3, 0x1F82, 0x0386, 0x0518, 0x00E2, 0x1F30, 0x002B,
431 0x1FAD, 0x1F73, 0x0361, 0x0528, 0x0104, 0x1F2C, 0x0027,
432 0x1FB6, 0x1F65, 0x033C, 0x0538, 0x0127, 0x1F28, 0x0022,
433 0x1FC0, 0x1F58, 0x0316, 0x0545, 0x014B, 0x1F25, 0x001D,
434 0x1FC9, 0x1F4D, 0x02F0, 0x0551, 0x016F, 0x1F23, 0x0017,
435 0x1FD2, 0x1F43, 0x02C9, 0x055B, 0x0194, 0x1F22, 0x0011,
436 0x1FDB, 0x1F3B, 0x02A2, 0x0561, 0x01BA, 0x1F23, 0x000A,
437 0x1FE4, 0x1F34, 0x027A, 0x0567, 0x01E0, 0x1F24, 0x0003,
438 0x1FEC, 0x1F2E, 0x0254, 0x056A, 0x0206, 0x1F26, 0x1FFC,
439 },
440 [HS_LT_14_16_SCALE] = {
441 /* Luma */
442 0x002F, 0x1F0B, 0x01E7, 0x05BE, 0x01E7, 0x1F0B, 0x002F,
443 0x0035, 0x1F0D, 0x01BC, 0x05BD, 0x0213, 0x1F0A, 0x0028,
444 0x003A, 0x1F11, 0x0191, 0x05BA, 0x023F, 0x1F0A, 0x0021,
445 0x003F, 0x1F15, 0x0167, 0x05B3, 0x026C, 0x1F0C, 0x001A,
446 0x0043, 0x1F1B, 0x013E, 0x05AA, 0x0299, 0x1F0F, 0x0012,
447 0x0046, 0x1F21, 0x0116, 0x05A1, 0x02C6, 0x1F13, 0x0009,
448 0x0049, 0x1F28, 0x00EF, 0x0593, 0x02F4, 0x1F19, 0x0000,
449 0x004C, 0x1F30, 0x00C9, 0x0584, 0x0321, 0x1F20, 0x1FF6,
450 0x004E, 0x1F39, 0x00A4, 0x0572, 0x034D, 0x1F2A, 0x1FEC,
451 0x004F, 0x1F43, 0x0080, 0x055E, 0x037A, 0x1F34, 0x1FE2,
452 0x0050, 0x1F4D, 0x005E, 0x0548, 0x03A5, 0x1F41, 0x1FD7,
453 0x0050, 0x1F57, 0x003D, 0x0531, 0x03D1, 0x1F4F, 0x1FCB,
454 0x0050, 0x1F62, 0x001E, 0x0516, 0x03FB, 0x1F5F, 0x1FC0,
455 0x004F, 0x1F6D, 0x0000, 0x04FA, 0x0425, 0x1F71, 0x1FB4,
456 0x004E, 0x1F79, 0x1FE4, 0x04DC, 0x044D, 0x1F84, 0x1FA8,
457 0x004D, 0x1F84, 0x1FCA, 0x04BC, 0x0474, 0x1F99, 0x1F9C,
458 0x1F8C, 0x1FAE, 0x04C6, 0x04C6, 0x1FAE, 0x1F8C, 0x0000,
459 0x1F9C, 0x1F99, 0x0474, 0x04BC, 0x1FCA, 0x1F84, 0x004D,
460 0x1FA8, 0x1F84, 0x044D, 0x04DC, 0x1FE4, 0x1F79, 0x004E,
461 0x1FB4, 0x1F71, 0x0425, 0x04FA, 0x0000, 0x1F6D, 0x004F,
462 0x1FC0, 0x1F5F, 0x03FB, 0x0516, 0x001E, 0x1F62, 0x0050,
463 0x1FCB, 0x1F4F, 0x03D1, 0x0531, 0x003D, 0x1F57, 0x0050,
464 0x1FD7, 0x1F41, 0x03A5, 0x0548, 0x005E, 0x1F4D, 0x0050,
465 0x1FE2, 0x1F34, 0x037A, 0x055E, 0x0080, 0x1F43, 0x004F,
466 0x1FEC, 0x1F2A, 0x034D, 0x0572, 0x00A4, 0x1F39, 0x004E,
467 0x1FF6, 0x1F20, 0x0321, 0x0584, 0x00C9, 0x1F30, 0x004C,
468 0x0000, 0x1F19, 0x02F4, 0x0593, 0x00EF, 0x1F28, 0x0049,
469 0x0009, 0x1F13, 0x02C6, 0x05A1, 0x0116, 0x1F21, 0x0046,
470 0x0012, 0x1F0F, 0x0299, 0x05AA, 0x013E, 0x1F1B, 0x0043,
471 0x001A, 0x1F0C, 0x026C, 0x05B3, 0x0167, 0x1F15, 0x003F,
472 0x0021, 0x1F0A, 0x023F, 0x05BA, 0x0191, 0x1F11, 0x003A,
473 0x0028, 0x1F0A, 0x0213, 0x05BD, 0x01BC, 0x1F0D, 0x0035,
474 /* Chroma */
475 0x002F, 0x1F0B, 0x01E7, 0x05BE, 0x01E7, 0x1F0B, 0x002F,
476 0x0035, 0x1F0D, 0x01BC, 0x05BD, 0x0213, 0x1F0A, 0x0028,
477 0x003A, 0x1F11, 0x0191, 0x05BA, 0x023F, 0x1F0A, 0x0021,
478 0x003F, 0x1F15, 0x0167, 0x05B3, 0x026C, 0x1F0C, 0x001A,
479 0x0043, 0x1F1B, 0x013E, 0x05AA, 0x0299, 0x1F0F, 0x0012,
480 0x0046, 0x1F21, 0x0116, 0x05A1, 0x02C6, 0x1F13, 0x0009,
481 0x0049, 0x1F28, 0x00EF, 0x0593, 0x02F4, 0x1F19, 0x0000,
482 0x004C, 0x1F30, 0x00C9, 0x0584, 0x0321, 0x1F20, 0x1FF6,
483 0x004E, 0x1F39, 0x00A4, 0x0572, 0x034D, 0x1F2A, 0x1FEC,
484 0x004F, 0x1F43, 0x0080, 0x055E, 0x037A, 0x1F34, 0x1FE2,
485 0x0050, 0x1F4D, 0x005E, 0x0548, 0x03A5, 0x1F41, 0x1FD7,
486 0x0050, 0x1F57, 0x003D, 0x0531, 0x03D1, 0x1F4F, 0x1FCB,
487 0x0050, 0x1F62, 0x001E, 0x0516, 0x03FB, 0x1F5F, 0x1FC0,
488 0x004F, 0x1F6D, 0x0000, 0x04FA, 0x0425, 0x1F71, 0x1FB4,
489 0x004E, 0x1F79, 0x1FE4, 0x04DC, 0x044D, 0x1F84, 0x1FA8,
490 0x004D, 0x1F84, 0x1FCA, 0x04BC, 0x0474, 0x1F99, 0x1F9C,
491 0x1F8C, 0x1FAE, 0x04C6, 0x04C6, 0x1FAE, 0x1F8C, 0x0000,
492 0x1F9C, 0x1F99, 0x0474, 0x04BC, 0x1FCA, 0x1F84, 0x004D,
493 0x1FA8, 0x1F84, 0x044D, 0x04DC, 0x1FE4, 0x1F79, 0x004E,
494 0x1FB4, 0x1F71, 0x0425, 0x04FA, 0x0000, 0x1F6D, 0x004F,
495 0x1FC0, 0x1F5F, 0x03FB, 0x0516, 0x001E, 0x1F62, 0x0050,
496 0x1FCB, 0x1F4F, 0x03D1, 0x0531, 0x003D, 0x1F57, 0x0050,
497 0x1FD7, 0x1F41, 0x03A5, 0x0548, 0x005E, 0x1F4D, 0x0050,
498 0x1FE2, 0x1F34, 0x037A, 0x055E, 0x0080, 0x1F43, 0x004F,
499 0x1FEC, 0x1F2A, 0x034D, 0x0572, 0x00A4, 0x1F39, 0x004E,
500 0x1FF6, 0x1F20, 0x0321, 0x0584, 0x00C9, 0x1F30, 0x004C,
501 0x0000, 0x1F19, 0x02F4, 0x0593, 0x00EF, 0x1F28, 0x0049,
502 0x0009, 0x1F13, 0x02C6, 0x05A1, 0x0116, 0x1F21, 0x0046,
503 0x0012, 0x1F0F, 0x0299, 0x05AA, 0x013E, 0x1F1B, 0x0043,
504 0x001A, 0x1F0C, 0x026C, 0x05B3, 0x0167, 0x1F15, 0x003F,
505 0x0021, 0x1F0A, 0x023F, 0x05BA, 0x0191, 0x1F11, 0x003A,
506 0x0028, 0x1F0A, 0x0213, 0x05BD, 0x01BC, 0x1F0D, 0x0035,
507 },
508 [HS_LT_15_16_SCALE] = {
509 /* Luma */
510 0x005B, 0x1F0A, 0x0195, 0x060C, 0x0195, 0x1F0A, 0x005B,
511 0x005D, 0x1F13, 0x0166, 0x0609, 0x01C6, 0x1F03, 0x0058,
512 0x005F, 0x1F1C, 0x0138, 0x0605, 0x01F7, 0x1EFD, 0x0054,
513 0x0060, 0x1F26, 0x010B, 0x05FF, 0x0229, 0x1EF8, 0x004F,
514 0x0060, 0x1F31, 0x00DF, 0x05F5, 0x025C, 0x1EF5, 0x004A,
515 0x0060, 0x1F3D, 0x00B5, 0x05E8, 0x028F, 0x1EF3, 0x0044,
516 0x005F, 0x1F49, 0x008C, 0x05DA, 0x02C3, 0x1EF2, 0x003D,
517 0x005E, 0x1F56, 0x0065, 0x05C7, 0x02F6, 0x1EF4, 0x0036,
518 0x005C, 0x1F63, 0x003F, 0x05B3, 0x032B, 0x1EF7, 0x002D,
519 0x0059, 0x1F71, 0x001B, 0x059D, 0x035F, 0x1EFB, 0x0024,
520 0x0057, 0x1F7F, 0x1FF9, 0x0583, 0x0392, 0x1F02, 0x001A,
521 0x0053, 0x1F8D, 0x1FD9, 0x0567, 0x03C5, 0x1F0B, 0x0010,
522 0x0050, 0x1F9B, 0x1FBB, 0x0548, 0x03F8, 0x1F15, 0x0005,
523 0x004C, 0x1FA9, 0x1F9E, 0x0528, 0x042A, 0x1F22, 0x1FF9,
524 0x0048, 0x1FB7, 0x1F84, 0x0505, 0x045A, 0x1F31, 0x1FED,
525 0x0043, 0x1FC5, 0x1F6C, 0x04E0, 0x048A, 0x1F42, 0x1FE0,
526 0x1FD1, 0x1F50, 0x04DF, 0x04DF, 0x1F50, 0x1FD1, 0x0000,
527 0x1FE0, 0x1F42, 0x048A, 0x04E0, 0x1F6C, 0x1FC5, 0x0043,
528 0x1FED, 0x1F31, 0x045A, 0x0505, 0x1F84, 0x1FB7, 0x0048,
529 0x1FF9, 0x1F22, 0x042A, 0x0528, 0x1F9E, 0x1FA9, 0x004C,
530 0x0005, 0x1F15, 0x03F8, 0x0548, 0x1FBB, 0x1F9B, 0x0050,
531 0x0010, 0x1F0B, 0x03C5, 0x0567, 0x1FD9, 0x1F8D, 0x0053,
532 0x001A, 0x1F02, 0x0392, 0x0583, 0x1FF9, 0x1F7F, 0x0057,
533 0x0024, 0x1EFB, 0x035F, 0x059D, 0x001B, 0x1F71, 0x0059,
534 0x002D, 0x1EF7, 0x032B, 0x05B3, 0x003F, 0x1F63, 0x005C,
535 0x0036, 0x1EF4, 0x02F6, 0x05C7, 0x0065, 0x1F56, 0x005E,
536 0x003D, 0x1EF2, 0x02C3, 0x05DA, 0x008C, 0x1F49, 0x005F,
537 0x0044, 0x1EF3, 0x028F, 0x05E8, 0x00B5, 0x1F3D, 0x0060,
538 0x004A, 0x1EF5, 0x025C, 0x05F5, 0x00DF, 0x1F31, 0x0060,
539 0x004F, 0x1EF8, 0x0229, 0x05FF, 0x010B, 0x1F26, 0x0060,
540 0x0054, 0x1EFD, 0x01F7, 0x0605, 0x0138, 0x1F1C, 0x005F,
541 0x0058, 0x1F03, 0x01C6, 0x0609, 0x0166, 0x1F13, 0x005D,
542 /* Chroma */
543 0x005B, 0x1F0A, 0x0195, 0x060C, 0x0195, 0x1F0A, 0x005B,
544 0x005D, 0x1F13, 0x0166, 0x0609, 0x01C6, 0x1F03, 0x0058,
545 0x005F, 0x1F1C, 0x0138, 0x0605, 0x01F7, 0x1EFD, 0x0054,
546 0x0060, 0x1F26, 0x010B, 0x05FF, 0x0229, 0x1EF8, 0x004F,
547 0x0060, 0x1F31, 0x00DF, 0x05F5, 0x025C, 0x1EF5, 0x004A,
548 0x0060, 0x1F3D, 0x00B5, 0x05E8, 0x028F, 0x1EF3, 0x0044,
549 0x005F, 0x1F49, 0x008C, 0x05DA, 0x02C3, 0x1EF2, 0x003D,
550 0x005E, 0x1F56, 0x0065, 0x05C7, 0x02F6, 0x1EF4, 0x0036,
551 0x005C, 0x1F63, 0x003F, 0x05B3, 0x032B, 0x1EF7, 0x002D,
552 0x0059, 0x1F71, 0x001B, 0x059D, 0x035F, 0x1EFB, 0x0024,
553 0x0057, 0x1F7F, 0x1FF9, 0x0583, 0x0392, 0x1F02, 0x001A,
554 0x0053, 0x1F8D, 0x1FD9, 0x0567, 0x03C5, 0x1F0B, 0x0010,
555 0x0050, 0x1F9B, 0x1FBB, 0x0548, 0x03F8, 0x1F15, 0x0005,
556 0x004C, 0x1FA9, 0x1F9E, 0x0528, 0x042A, 0x1F22, 0x1FF9,
557 0x0048, 0x1FB7, 0x1F84, 0x0505, 0x045A, 0x1F31, 0x1FED,
558 0x0043, 0x1FC5, 0x1F6C, 0x04E0, 0x048A, 0x1F42, 0x1FE0,
559 0x1FD1, 0x1F50, 0x04DF, 0x04DF, 0x1F50, 0x1FD1, 0x0000,
560 0x1FE0, 0x1F42, 0x048A, 0x04E0, 0x1F6C, 0x1FC5, 0x0043,
561 0x1FED, 0x1F31, 0x045A, 0x0505, 0x1F84, 0x1FB7, 0x0048,
562 0x1FF9, 0x1F22, 0x042A, 0x0528, 0x1F9E, 0x1FA9, 0x004C,
563 0x0005, 0x1F15, 0x03F8, 0x0548, 0x1FBB, 0x1F9B, 0x0050,
564 0x0010, 0x1F0B, 0x03C5, 0x0567, 0x1FD9, 0x1F8D, 0x0053,
565 0x001A, 0x1F02, 0x0392, 0x0583, 0x1FF9, 0x1F7F, 0x0057,
566 0x0024, 0x1EFB, 0x035F, 0x059D, 0x001B, 0x1F71, 0x0059,
567 0x002D, 0x1EF7, 0x032B, 0x05B3, 0x003F, 0x1F63, 0x005C,
568 0x0036, 0x1EF4, 0x02F6, 0x05C7, 0x0065, 0x1F56, 0x005E,
569 0x003D, 0x1EF2, 0x02C3, 0x05DA, 0x008C, 0x1F49, 0x005F,
570 0x0044, 0x1EF3, 0x028F, 0x05E8, 0x00B5, 0x1F3D, 0x0060,
571 0x004A, 0x1EF5, 0x025C, 0x05F5, 0x00DF, 0x1F31, 0x0060,
572 0x004F, 0x1EF8, 0x0229, 0x05FF, 0x010B, 0x1F26, 0x0060,
573 0x0054, 0x1EFD, 0x01F7, 0x0605, 0x0138, 0x1F1C, 0x005F,
574 0x0058, 0x1F03, 0x01C6, 0x0609, 0x0166, 0x1F13, 0x005D,
575 },
576 [HS_LE_16_16_SCALE] = {
577 /* Luma */
578 0x006E, 0x1F24, 0x013E, 0x0660, 0x013E, 0x1F24, 0x006E,
579 0x006C, 0x1F33, 0x010B, 0x065D, 0x0172, 0x1F17, 0x0070,
580 0x0069, 0x1F41, 0x00DA, 0x0659, 0x01A8, 0x1F0B, 0x0070,
581 0x0066, 0x1F51, 0x00AA, 0x0650, 0x01DF, 0x1F00, 0x0070,
582 0x0062, 0x1F61, 0x007D, 0x0644, 0x0217, 0x1EF6, 0x006F,
583 0x005E, 0x1F71, 0x0051, 0x0636, 0x0250, 0x1EED, 0x006D,
584 0x0059, 0x1F81, 0x0028, 0x0624, 0x028A, 0x1EE5, 0x006B,
585 0x0054, 0x1F91, 0x0000, 0x060F, 0x02C5, 0x1EE0, 0x0067,
586 0x004E, 0x1FA2, 0x1FDB, 0x05F6, 0x0300, 0x1EDC, 0x0063,
587 0x0049, 0x1FB2, 0x1FB8, 0x05DB, 0x033B, 0x1EDA, 0x005D,
588 0x0043, 0x1FC3, 0x1F98, 0x05BC, 0x0376, 0x1ED9, 0x0057,
589 0x003D, 0x1FD3, 0x1F7A, 0x059B, 0x03B1, 0x1EDB, 0x004F,
590 0x0036, 0x1FE2, 0x1F5E, 0x0578, 0x03EC, 0x1EDF, 0x0047,
591 0x0030, 0x1FF1, 0x1F45, 0x0551, 0x0426, 0x1EE6, 0x003D,
592 0x002A, 0x0000, 0x1F2E, 0x0528, 0x045F, 0x1EEE, 0x0033,
593 0x0023, 0x000E, 0x1F19, 0x04FD, 0x0498, 0x1EFA, 0x0027,
594 0x001B, 0x1F04, 0x04E1, 0x04E1, 0x1F04, 0x001B, 0x0000,
595 0x0027, 0x1EFA, 0x0498, 0x04FD, 0x1F19, 0x000E, 0x0023,
596 0x0033, 0x1EEE, 0x045F, 0x0528, 0x1F2E, 0x0000, 0x002A,
597 0x003D, 0x1EE6, 0x0426, 0x0551, 0x1F45, 0x1FF1, 0x0030,
598 0x0047, 0x1EDF, 0x03EC, 0x0578, 0x1F5E, 0x1FE2, 0x0036,
599 0x004F, 0x1EDB, 0x03B1, 0x059B, 0x1F7A, 0x1FD3, 0x003D,
600 0x0057, 0x1ED9, 0x0376, 0x05BC, 0x1F98, 0x1FC3, 0x0043,
601 0x005D, 0x1EDA, 0x033B, 0x05DB, 0x1FB8, 0x1FB2, 0x0049,
602 0x0063, 0x1EDC, 0x0300, 0x05F6, 0x1FDB, 0x1FA2, 0x004E,
603 0x0067, 0x1EE0, 0x02C5, 0x060F, 0x0000, 0x1F91, 0x0054,
604 0x006B, 0x1EE5, 0x028A, 0x0624, 0x0028, 0x1F81, 0x0059,
605 0x006D, 0x1EED, 0x0250, 0x0636, 0x0051, 0x1F71, 0x005E,
606 0x006F, 0x1EF6, 0x0217, 0x0644, 0x007D, 0x1F61, 0x0062,
607 0x0070, 0x1F00, 0x01DF, 0x0650, 0x00AA, 0x1F51, 0x0066,
608 0x0070, 0x1F0B, 0x01A8, 0x0659, 0x00DA, 0x1F41, 0x0069,
609 0x0070, 0x1F17, 0x0172, 0x065D, 0x010B, 0x1F33, 0x006C,
610 /* Chroma */
611 0x006E, 0x1F24, 0x013E, 0x0660, 0x013E, 0x1F24, 0x006E,
612 0x006C, 0x1F33, 0x010B, 0x065D, 0x0172, 0x1F17, 0x0070,
613 0x0069, 0x1F41, 0x00DA, 0x0659, 0x01A8, 0x1F0B, 0x0070,
614 0x0066, 0x1F51, 0x00AA, 0x0650, 0x01DF, 0x1F00, 0x0070,
615 0x0062, 0x1F61, 0x007D, 0x0644, 0x0217, 0x1EF6, 0x006F,
616 0x005E, 0x1F71, 0x0051, 0x0636, 0x0250, 0x1EED, 0x006D,
617 0x0059, 0x1F81, 0x0028, 0x0624, 0x028A, 0x1EE5, 0x006B,
618 0x0054, 0x1F91, 0x0000, 0x060F, 0x02C5, 0x1EE0, 0x0067,
619 0x004E, 0x1FA2, 0x1FDB, 0x05F6, 0x0300, 0x1EDC, 0x0063,
620 0x0049, 0x1FB2, 0x1FB8, 0x05DB, 0x033B, 0x1EDA, 0x005D,
621 0x0043, 0x1FC3, 0x1F98, 0x05BC, 0x0376, 0x1ED9, 0x0057,
622 0x003D, 0x1FD3, 0x1F7A, 0x059B, 0x03B1, 0x1EDB, 0x004F,
623 0x0036, 0x1FE2, 0x1F5E, 0x0578, 0x03EC, 0x1EDF, 0x0047,
624 0x0030, 0x1FF1, 0x1F45, 0x0551, 0x0426, 0x1EE6, 0x003D,
625 0x002A, 0x0000, 0x1F2E, 0x0528, 0x045F, 0x1EEE, 0x0033,
626 0x0023, 0x000E, 0x1F19, 0x04FD, 0x0498, 0x1EFA, 0x0027,
627 0x001B, 0x1F04, 0x04E1, 0x04E1, 0x1F04, 0x001B, 0x0000,
628 0x0027, 0x1EFA, 0x0498, 0x04FD, 0x1F19, 0x000E, 0x0023,
629 0x0033, 0x1EEE, 0x045F, 0x0528, 0x1F2E, 0x0000, 0x002A,
630 0x003D, 0x1EE6, 0x0426, 0x0551, 0x1F45, 0x1FF1, 0x0030,
631 0x0047, 0x1EDF, 0x03EC, 0x0578, 0x1F5E, 0x1FE2, 0x0036,
632 0x004F, 0x1EDB, 0x03B1, 0x059B, 0x1F7A, 0x1FD3, 0x003D,
633 0x0057, 0x1ED9, 0x0376, 0x05BC, 0x1F98, 0x1FC3, 0x0043,
634 0x005D, 0x1EDA, 0x033B, 0x05DB, 0x1FB8, 0x1FB2, 0x0049,
635 0x0063, 0x1EDC, 0x0300, 0x05F6, 0x1FDB, 0x1FA2, 0x004E,
636 0x0067, 0x1EE0, 0x02C5, 0x060F, 0x0000, 0x1F91, 0x0054,
637 0x006B, 0x1EE5, 0x028A, 0x0624, 0x0028, 0x1F81, 0x0059,
638 0x006D, 0x1EED, 0x0250, 0x0636, 0x0051, 0x1F71, 0x005E,
639 0x006F, 0x1EF6, 0x0217, 0x0644, 0x007D, 0x1F61, 0x0062,
640 0x0070, 0x1F00, 0x01DF, 0x0650, 0x00AA, 0x1F51, 0x0066,
641 0x0070, 0x1F0B, 0x01A8, 0x0659, 0x00DA, 0x1F41, 0x0069,
642 0x0070, 0x1F17, 0x0172, 0x065D, 0x010B, 0x1F33, 0x006C,
643 },
644};
645
646/* vertical scaler coefficients */
647enum {
648 VS_UP_SCALE = 0,
649 VS_LT_9_16_SCALE,
650 VS_LT_10_16_SCALE,
651 VS_LT_11_16_SCALE,
652 VS_LT_12_16_SCALE,
653 VS_LT_13_16_SCALE,
654 VS_LT_14_16_SCALE,
655 VS_LT_15_16_SCALE,
656 VS_LT_16_16_SCALE,
657 VS_1_TO_1_SCALE,
658};
659
660static const u16 scaler_vs_coeffs[15][SC_NUM_PHASES * 2 * SC_V_NUM_TAPS] = {
661 [VS_UP_SCALE] = {
662 /* Luma */
663 0x1FD1, 0x00B1, 0x06FC, 0x00B1, 0x1FD1,
664 0x1FD8, 0x0085, 0x06F9, 0x00E1, 0x1FC9,
665 0x1FDF, 0x005B, 0x06F2, 0x0114, 0x1FC0,
666 0x1FE5, 0x0035, 0x06E5, 0x014A, 0x1FB7,
667 0x1FEB, 0x0012, 0x06D3, 0x0182, 0x1FAE,
668 0x1FF1, 0x1FF3, 0x06BA, 0x01BD, 0x1FA5,
669 0x1FF5, 0x1FD7, 0x069D, 0x01FB, 0x1F9C,
670 0x1FF9, 0x1FBE, 0x067C, 0x023A, 0x1F93,
671 0x1FFD, 0x1FA8, 0x0656, 0x027B, 0x1F8A,
672 0x0000, 0x1F95, 0x062B, 0x02BF, 0x1F81,
673 0x0002, 0x1F86, 0x05FC, 0x0303, 0x1F79,
674 0x0004, 0x1F79, 0x05CA, 0x0347, 0x1F72,
675 0x0005, 0x1F6F, 0x0594, 0x038D, 0x1F6B,
676 0x0006, 0x1F67, 0x055B, 0x03D2, 0x1F66,
677 0x0007, 0x1F62, 0x051E, 0x0417, 0x1F62,
678 0x0007, 0x1F5F, 0x04DF, 0x045C, 0x1F5F,
679 0x1F5E, 0x04A2, 0x04A2, 0x1F5E, 0x0000,
680 0x1F5F, 0x045C, 0x04DF, 0x1F5F, 0x0007,
681 0x1F62, 0x0417, 0x051E, 0x1F62, 0x0007,
682 0x1F66, 0x03D2, 0x055B, 0x1F67, 0x0006,
683 0x1F6B, 0x038D, 0x0594, 0x1F6F, 0x0005,
684 0x1F72, 0x0347, 0x05CA, 0x1F79, 0x0004,
685 0x1F79, 0x0303, 0x05FC, 0x1F86, 0x0002,
686 0x1F81, 0x02BF, 0x062B, 0x1F95, 0x0000,
687 0x1F8A, 0x027B, 0x0656, 0x1FA8, 0x1FFD,
688 0x1F93, 0x023A, 0x067C, 0x1FBE, 0x1FF9,
689 0x1F9C, 0x01FB, 0x069D, 0x1FD7, 0x1FF5,
690 0x1FA5, 0x01BD, 0x06BA, 0x1FF3, 0x1FF1,
691 0x1FAE, 0x0182, 0x06D3, 0x0012, 0x1FEB,
692 0x1FB7, 0x014A, 0x06E5, 0x0035, 0x1FE5,
693 0x1FC0, 0x0114, 0x06F2, 0x005B, 0x1FDF,
694 0x1FC9, 0x00E1, 0x06F9, 0x0085, 0x1FD8,
695 /* Chroma */
696 0x1FD1, 0x00B1, 0x06FC, 0x00B1, 0x1FD1,
697 0x1FD8, 0x0085, 0x06F9, 0x00E1, 0x1FC9,
698 0x1FDF, 0x005B, 0x06F2, 0x0114, 0x1FC0,
699 0x1FE5, 0x0035, 0x06E5, 0x014A, 0x1FB7,
700 0x1FEB, 0x0012, 0x06D3, 0x0182, 0x1FAE,
701 0x1FF1, 0x1FF3, 0x06BA, 0x01BD, 0x1FA5,
702 0x1FF5, 0x1FD7, 0x069D, 0x01FB, 0x1F9C,
703 0x1FF9, 0x1FBE, 0x067C, 0x023A, 0x1F93,
704 0x1FFD, 0x1FA8, 0x0656, 0x027B, 0x1F8A,
705 0x0000, 0x1F95, 0x062B, 0x02BF, 0x1F81,
706 0x0002, 0x1F86, 0x05FC, 0x0303, 0x1F79,
707 0x0004, 0x1F79, 0x05CA, 0x0347, 0x1F72,
708 0x0005, 0x1F6F, 0x0594, 0x038D, 0x1F6B,
709 0x0006, 0x1F67, 0x055B, 0x03D2, 0x1F66,
710 0x0007, 0x1F62, 0x051E, 0x0417, 0x1F62,
711 0x0007, 0x1F5F, 0x04DF, 0x045C, 0x1F5F,
712 0x1F5E, 0x04A2, 0x04A2, 0x1F5E, 0x0000,
713 0x1F5F, 0x045C, 0x04DF, 0x1F5F, 0x0007,
714 0x1F62, 0x0417, 0x051E, 0x1F62, 0x0007,
715 0x1F66, 0x03D2, 0x055B, 0x1F67, 0x0006,
716 0x1F6B, 0x038D, 0x0594, 0x1F6F, 0x0005,
717 0x1F72, 0x0347, 0x05CA, 0x1F79, 0x0004,
718 0x1F79, 0x0303, 0x05FC, 0x1F86, 0x0002,
719 0x1F81, 0x02BF, 0x062B, 0x1F95, 0x0000,
720 0x1F8A, 0x027B, 0x0656, 0x1FA8, 0x1FFD,
721 0x1F93, 0x023A, 0x067C, 0x1FBE, 0x1FF9,
722 0x1F9C, 0x01FB, 0x069D, 0x1FD7, 0x1FF5,
723 0x1FA5, 0x01BD, 0x06BA, 0x1FF3, 0x1FF1,
724 0x1FAE, 0x0182, 0x06D3, 0x0012, 0x1FEB,
725 0x1FB7, 0x014A, 0x06E5, 0x0035, 0x1FE5,
726 0x1FC0, 0x0114, 0x06F2, 0x005B, 0x1FDF,
727 0x1FC9, 0x00E1, 0x06F9, 0x0085, 0x1FD8,
728 },
729 [VS_LT_9_16_SCALE] = {
730 /* Luma */
731 0x001C, 0x01F6, 0x03DC, 0x01F6, 0x001C,
732 0x0018, 0x01DF, 0x03DB, 0x020C, 0x0022,
733 0x0013, 0x01C9, 0x03D9, 0x0223, 0x0028,
734 0x000F, 0x01B3, 0x03D6, 0x023A, 0x002E,
735 0x000C, 0x019D, 0x03D2, 0x0250, 0x0035,
736 0x0009, 0x0188, 0x03CC, 0x0266, 0x003D,
737 0x0006, 0x0173, 0x03C5, 0x027D, 0x0045,
738 0x0004, 0x015E, 0x03BD, 0x0293, 0x004E,
739 0x0002, 0x014A, 0x03B4, 0x02A8, 0x0058,
740 0x0000, 0x0136, 0x03AA, 0x02BE, 0x0062,
741 0x1FFF, 0x0123, 0x039E, 0x02D3, 0x006D,
742 0x1FFE, 0x0110, 0x0392, 0x02E8, 0x0078,
743 0x1FFD, 0x00FE, 0x0384, 0x02FC, 0x0085,
744 0x1FFD, 0x00ED, 0x0376, 0x030F, 0x0091,
745 0x1FFC, 0x00DC, 0x0367, 0x0322, 0x009F,
746 0x1FFC, 0x00CC, 0x0357, 0x0334, 0x00AD,
747 0x00BC, 0x0344, 0x0344, 0x00BC, 0x0000,
748 0x00AD, 0x0334, 0x0357, 0x00CC, 0x1FFC,
749 0x009F, 0x0322, 0x0367, 0x00DC, 0x1FFC,
750 0x0091, 0x030F, 0x0376, 0x00ED, 0x1FFD,
751 0x0085, 0x02FC, 0x0384, 0x00FE, 0x1FFD,
752 0x0078, 0x02E8, 0x0392, 0x0110, 0x1FFE,
753 0x006D, 0x02D3, 0x039E, 0x0123, 0x1FFF,
754 0x0062, 0x02BE, 0x03AA, 0x0136, 0x0000,
755 0x0058, 0x02A8, 0x03B4, 0x014A, 0x0002,
756 0x004E, 0x0293, 0x03BD, 0x015E, 0x0004,
757 0x0045, 0x027D, 0x03C5, 0x0173, 0x0006,
758 0x003D, 0x0266, 0x03CC, 0x0188, 0x0009,
759 0x0035, 0x0250, 0x03D2, 0x019D, 0x000C,
760 0x002E, 0x023A, 0x03D6, 0x01B3, 0x000F,
761 0x0028, 0x0223, 0x03D9, 0x01C9, 0x0013,
762 0x0022, 0x020C, 0x03DB, 0x01DF, 0x0018,
763 /* Chroma */
764 0x001C, 0x01F6, 0x03DC, 0x01F6, 0x001C,
765 0x0018, 0x01DF, 0x03DB, 0x020C, 0x0022,
766 0x0013, 0x01C9, 0x03D9, 0x0223, 0x0028,
767 0x000F, 0x01B3, 0x03D6, 0x023A, 0x002E,
768 0x000C, 0x019D, 0x03D2, 0x0250, 0x0035,
769 0x0009, 0x0188, 0x03CC, 0x0266, 0x003D,
770 0x0006, 0x0173, 0x03C5, 0x027D, 0x0045,
771 0x0004, 0x015E, 0x03BD, 0x0293, 0x004E,
772 0x0002, 0x014A, 0x03B4, 0x02A8, 0x0058,
773 0x0000, 0x0136, 0x03AA, 0x02BE, 0x0062,
774 0x1FFF, 0x0123, 0x039E, 0x02D3, 0x006D,
775 0x1FFE, 0x0110, 0x0392, 0x02E8, 0x0078,
776 0x1FFD, 0x00FE, 0x0384, 0x02FC, 0x0085,
777 0x1FFD, 0x00ED, 0x0376, 0x030F, 0x0091,
778 0x1FFC, 0x00DC, 0x0367, 0x0322, 0x009F,
779 0x1FFC, 0x00CC, 0x0357, 0x0334, 0x00AD,
780 0x00BC, 0x0344, 0x0344, 0x00BC, 0x0000,
781 0x00AD, 0x0334, 0x0357, 0x00CC, 0x1FFC,
782 0x009F, 0x0322, 0x0367, 0x00DC, 0x1FFC,
783 0x0091, 0x030F, 0x0376, 0x00ED, 0x1FFD,
784 0x0085, 0x02FC, 0x0384, 0x00FE, 0x1FFD,
785 0x0078, 0x02E8, 0x0392, 0x0110, 0x1FFE,
786 0x006D, 0x02D3, 0x039E, 0x0123, 0x1FFF,
787 0x0062, 0x02BE, 0x03AA, 0x0136, 0x0000,
788 0x0058, 0x02A8, 0x03B4, 0x014A, 0x0002,
789 0x004E, 0x0293, 0x03BD, 0x015E, 0x0004,
790 0x0045, 0x027D, 0x03C5, 0x0173, 0x0006,
791 0x003D, 0x0266, 0x03CC, 0x0188, 0x0009,
792 0x0035, 0x0250, 0x03D2, 0x019D, 0x000C,
793 0x002E, 0x023A, 0x03D6, 0x01B3, 0x000F,
794 0x0028, 0x0223, 0x03D9, 0x01C9, 0x0013,
795 0x0022, 0x020C, 0x03DB, 0x01DF, 0x0018,
796 },
797 [VS_LT_10_16_SCALE] = {
798 /* Luma */
799 0x0003, 0x01E9, 0x0428, 0x01E9, 0x0003,
800 0x0000, 0x01D0, 0x0426, 0x0203, 0x0007,
801 0x1FFD, 0x01B7, 0x0424, 0x021C, 0x000C,
802 0x1FFB, 0x019E, 0x0420, 0x0236, 0x0011,
803 0x1FF9, 0x0186, 0x041A, 0x0250, 0x0017,
804 0x1FF7, 0x016E, 0x0414, 0x026A, 0x001D,
805 0x1FF6, 0x0157, 0x040B, 0x0284, 0x0024,
806 0x1FF5, 0x0140, 0x0401, 0x029E, 0x002C,
807 0x1FF4, 0x012A, 0x03F6, 0x02B7, 0x0035,
808 0x1FF4, 0x0115, 0x03E9, 0x02D0, 0x003E,
809 0x1FF4, 0x0100, 0x03DB, 0x02E9, 0x0048,
810 0x1FF4, 0x00EC, 0x03CC, 0x0301, 0x0053,
811 0x1FF4, 0x00D9, 0x03BC, 0x0318, 0x005F,
812 0x1FF5, 0x00C7, 0x03AA, 0x032F, 0x006B,
813 0x1FF6, 0x00B5, 0x0398, 0x0345, 0x0078,
814 0x1FF6, 0x00A5, 0x0384, 0x035B, 0x0086,
815 0x0094, 0x036C, 0x036C, 0x0094, 0x0000,
816 0x0086, 0x035B, 0x0384, 0x00A5, 0x1FF6,
817 0x0078, 0x0345, 0x0398, 0x00B5, 0x1FF6,
818 0x006B, 0x032F, 0x03AA, 0x00C7, 0x1FF5,
819 0x005F, 0x0318, 0x03BC, 0x00D9, 0x1FF4,
820 0x0053, 0x0301, 0x03CC, 0x00EC, 0x1FF4,
821 0x0048, 0x02E9, 0x03DB, 0x0100, 0x1FF4,
822 0x003E, 0x02D0, 0x03E9, 0x0115, 0x1FF4,
823 0x0035, 0x02B7, 0x03F6, 0x012A, 0x1FF4,
824 0x002C, 0x029E, 0x0401, 0x0140, 0x1FF5,
825 0x0024, 0x0284, 0x040B, 0x0157, 0x1FF6,
826 0x001D, 0x026A, 0x0414, 0x016E, 0x1FF7,
827 0x0017, 0x0250, 0x041A, 0x0186, 0x1FF9,
828 0x0011, 0x0236, 0x0420, 0x019E, 0x1FFB,
829 0x000C, 0x021C, 0x0424, 0x01B7, 0x1FFD,
830 0x0007, 0x0203, 0x0426, 0x01D0, 0x0000,
831 /* Chroma */
832 0x0003, 0x01E9, 0x0428, 0x01E9, 0x0003,
833 0x0000, 0x01D0, 0x0426, 0x0203, 0x0007,
834 0x1FFD, 0x01B7, 0x0424, 0x021C, 0x000C,
835 0x1FFB, 0x019E, 0x0420, 0x0236, 0x0011,
836 0x1FF9, 0x0186, 0x041A, 0x0250, 0x0017,
837 0x1FF7, 0x016E, 0x0414, 0x026A, 0x001D,
838 0x1FF6, 0x0157, 0x040B, 0x0284, 0x0024,
839 0x1FF5, 0x0140, 0x0401, 0x029E, 0x002C,
840 0x1FF4, 0x012A, 0x03F6, 0x02B7, 0x0035,
841 0x1FF4, 0x0115, 0x03E9, 0x02D0, 0x003E,
842 0x1FF4, 0x0100, 0x03DB, 0x02E9, 0x0048,
843 0x1FF4, 0x00EC, 0x03CC, 0x0301, 0x0053,
844 0x1FF4, 0x00D9, 0x03BC, 0x0318, 0x005F,
845 0x1FF5, 0x00C7, 0x03AA, 0x032F, 0x006B,
846 0x1FF6, 0x00B5, 0x0398, 0x0345, 0x0078,
847 0x1FF6, 0x00A5, 0x0384, 0x035B, 0x0086,
848 0x0094, 0x036C, 0x036C, 0x0094, 0x0000,
849 0x0086, 0x035B, 0x0384, 0x00A5, 0x1FF6,
850 0x0078, 0x0345, 0x0398, 0x00B5, 0x1FF6,
851 0x006B, 0x032F, 0x03AA, 0x00C7, 0x1FF5,
852 0x005F, 0x0318, 0x03BC, 0x00D9, 0x1FF4,
853 0x0053, 0x0301, 0x03CC, 0x00EC, 0x1FF4,
854 0x0048, 0x02E9, 0x03DB, 0x0100, 0x1FF4,
855 0x003E, 0x02D0, 0x03E9, 0x0115, 0x1FF4,
856 0x0035, 0x02B7, 0x03F6, 0x012A, 0x1FF4,
857 0x002C, 0x029E, 0x0401, 0x0140, 0x1FF5,
858 0x0024, 0x0284, 0x040B, 0x0157, 0x1FF6,
859 0x001D, 0x026A, 0x0414, 0x016E, 0x1FF7,
860 0x0017, 0x0250, 0x041A, 0x0186, 0x1FF9,
861 0x0011, 0x0236, 0x0420, 0x019E, 0x1FFB,
862 0x000C, 0x021C, 0x0424, 0x01B7, 0x1FFD,
863 0x0007, 0x0203, 0x0426, 0x01D0, 0x0000,
864 },
865 [VS_LT_11_16_SCALE] = {
866 /* Luma */
867 0x1FEC, 0x01D6, 0x047C, 0x01D6, 0x1FEC,
868 0x1FEA, 0x01BA, 0x047B, 0x01F3, 0x1FEE,
869 0x1FE9, 0x019D, 0x0478, 0x0211, 0x1FF1,
870 0x1FE8, 0x0182, 0x0473, 0x022E, 0x1FF5,
871 0x1FE8, 0x0167, 0x046C, 0x024C, 0x1FF9,
872 0x1FE8, 0x014D, 0x0464, 0x026A, 0x1FFD,
873 0x1FE8, 0x0134, 0x0459, 0x0288, 0x0003,
874 0x1FE9, 0x011B, 0x044D, 0x02A6, 0x0009,
875 0x1FE9, 0x0104, 0x0440, 0x02C3, 0x0010,
876 0x1FEA, 0x00ED, 0x0430, 0x02E1, 0x0018,
877 0x1FEB, 0x00D7, 0x0420, 0x02FD, 0x0021,
878 0x1FED, 0x00C2, 0x040D, 0x0319, 0x002B,
879 0x1FEE, 0x00AE, 0x03F9, 0x0336, 0x0035,
880 0x1FF0, 0x009C, 0x03E3, 0x0350, 0x0041,
881 0x1FF1, 0x008A, 0x03CD, 0x036B, 0x004D,
882 0x1FF3, 0x0079, 0x03B5, 0x0384, 0x005B,
883 0x0069, 0x0397, 0x0397, 0x0069, 0x0000,
884 0x005B, 0x0384, 0x03B5, 0x0079, 0x1FF3,
885 0x004D, 0x036B, 0x03CD, 0x008A, 0x1FF1,
886 0x0041, 0x0350, 0x03E3, 0x009C, 0x1FF0,
887 0x0035, 0x0336, 0x03F9, 0x00AE, 0x1FEE,
888 0x002B, 0x0319, 0x040D, 0x00C2, 0x1FED,
889 0x0021, 0x02FD, 0x0420, 0x00D7, 0x1FEB,
890 0x0018, 0x02E1, 0x0430, 0x00ED, 0x1FEA,
891 0x0010, 0x02C3, 0x0440, 0x0104, 0x1FE9,
892 0x0009, 0x02A6, 0x044D, 0x011B, 0x1FE9,
893 0x0003, 0x0288, 0x0459, 0x0134, 0x1FE8,
894 0x1FFD, 0x026A, 0x0464, 0x014D, 0x1FE8,
895 0x1FF9, 0x024C, 0x046C, 0x0167, 0x1FE8,
896 0x1FF5, 0x022E, 0x0473, 0x0182, 0x1FE8,
897 0x1FF1, 0x0211, 0x0478, 0x019D, 0x1FE9,
898 0x1FEE, 0x01F3, 0x047B, 0x01BA, 0x1FEA,
899 /* Chroma */
900 0x1FEC, 0x01D6, 0x047C, 0x01D6, 0x1FEC,
901 0x1FEA, 0x01BA, 0x047B, 0x01F3, 0x1FEE,
902 0x1FE9, 0x019D, 0x0478, 0x0211, 0x1FF1,
903 0x1FE8, 0x0182, 0x0473, 0x022E, 0x1FF5,
904 0x1FE8, 0x0167, 0x046C, 0x024C, 0x1FF9,
905 0x1FE8, 0x014D, 0x0464, 0x026A, 0x1FFD,
906 0x1FE8, 0x0134, 0x0459, 0x0288, 0x0003,
907 0x1FE9, 0x011B, 0x044D, 0x02A6, 0x0009,
908 0x1FE9, 0x0104, 0x0440, 0x02C3, 0x0010,
909 0x1FEA, 0x00ED, 0x0430, 0x02E1, 0x0018,
910 0x1FEB, 0x00D7, 0x0420, 0x02FD, 0x0021,
911 0x1FED, 0x00C2, 0x040D, 0x0319, 0x002B,
912 0x1FEE, 0x00AE, 0x03F9, 0x0336, 0x0035,
913 0x1FF0, 0x009C, 0x03E3, 0x0350, 0x0041,
914 0x1FF1, 0x008A, 0x03CD, 0x036B, 0x004D,
915 0x1FF3, 0x0079, 0x03B5, 0x0384, 0x005B,
916 0x0069, 0x0397, 0x0397, 0x0069, 0x0000,
917 0x005B, 0x0384, 0x03B5, 0x0079, 0x1FF3,
918 0x004D, 0x036B, 0x03CD, 0x008A, 0x1FF1,
919 0x0041, 0x0350, 0x03E3, 0x009C, 0x1FF0,
920 0x0035, 0x0336, 0x03F9, 0x00AE, 0x1FEE,
921 0x002B, 0x0319, 0x040D, 0x00C2, 0x1FED,
922 0x0021, 0x02FD, 0x0420, 0x00D7, 0x1FEB,
923 0x0018, 0x02E1, 0x0430, 0x00ED, 0x1FEA,
924 0x0010, 0x02C3, 0x0440, 0x0104, 0x1FE9,
925 0x0009, 0x02A6, 0x044D, 0x011B, 0x1FE9,
926 0x0003, 0x0288, 0x0459, 0x0134, 0x1FE8,
927 0x1FFD, 0x026A, 0x0464, 0x014D, 0x1FE8,
928 0x1FF9, 0x024C, 0x046C, 0x0167, 0x1FE8,
929 0x1FF5, 0x022E, 0x0473, 0x0182, 0x1FE8,
930 0x1FF1, 0x0211, 0x0478, 0x019D, 0x1FE9,
931 0x1FEE, 0x01F3, 0x047B, 0x01BA, 0x1FEA,
932 },
933 [VS_LT_12_16_SCALE] = {
934 /* Luma */
935 0x1FD8, 0x01BC, 0x04D8, 0x01BC, 0x1FD8,
936 0x1FD8, 0x019C, 0x04D8, 0x01DC, 0x1FD8,
937 0x1FD8, 0x017D, 0x04D4, 0x01FE, 0x1FD9,
938 0x1FD9, 0x015E, 0x04CF, 0x0220, 0x1FDA,
939 0x1FDB, 0x0141, 0x04C7, 0x0241, 0x1FDC,
940 0x1FDC, 0x0125, 0x04BC, 0x0264, 0x1FDF,
941 0x1FDE, 0x0109, 0x04B0, 0x0286, 0x1FE3,
942 0x1FE0, 0x00EF, 0x04A1, 0x02A9, 0x1FE7,
943 0x1FE2, 0x00D6, 0x0491, 0x02CB, 0x1FEC,
944 0x1FE4, 0x00BE, 0x047E, 0x02EE, 0x1FF2,
945 0x1FE6, 0x00A7, 0x046A, 0x030F, 0x1FFA,
946 0x1FE9, 0x0092, 0x0453, 0x0330, 0x0002,
947 0x1FEB, 0x007E, 0x043B, 0x0351, 0x000B,
948 0x1FED, 0x006B, 0x0421, 0x0372, 0x0015,
949 0x1FEF, 0x005A, 0x0406, 0x0391, 0x0020,
950 0x1FF1, 0x0049, 0x03EA, 0x03AF, 0x002D,
951 0x003A, 0x03C6, 0x03C6, 0x003A, 0x0000,
952 0x002D, 0x03AF, 0x03EA, 0x0049, 0x1FF1,
953 0x0020, 0x0391, 0x0406, 0x005A, 0x1FEF,
954 0x0015, 0x0372, 0x0421, 0x006B, 0x1FED,
955 0x000B, 0x0351, 0x043B, 0x007E, 0x1FEB,
956 0x0002, 0x0330, 0x0453, 0x0092, 0x1FE9,
957 0x1FFA, 0x030F, 0x046A, 0x00A7, 0x1FE6,
958 0x1FF2, 0x02EE, 0x047E, 0x00BE, 0x1FE4,
959 0x1FEC, 0x02CB, 0x0491, 0x00D6, 0x1FE2,
960 0x1FE7, 0x02A9, 0x04A1, 0x00EF, 0x1FE0,
961 0x1FE3, 0x0286, 0x04B0, 0x0109, 0x1FDE,
962 0x1FDF, 0x0264, 0x04BC, 0x0125, 0x1FDC,
963 0x1FDC, 0x0241, 0x04C7, 0x0141, 0x1FDB,
964 0x1FDA, 0x0220, 0x04CF, 0x015E, 0x1FD9,
965 0x1FD9, 0x01FE, 0x04D4, 0x017D, 0x1FD8,
966 0x1FD8, 0x01DC, 0x04D8, 0x019C, 0x1FD8,
967 /* Chroma */
968 0x1FD8, 0x01BC, 0x04D8, 0x01BC, 0x1FD8,
969 0x1FD8, 0x019C, 0x04D8, 0x01DC, 0x1FD8,
970 0x1FD8, 0x017D, 0x04D4, 0x01FE, 0x1FD9,
971 0x1FD9, 0x015E, 0x04CF, 0x0220, 0x1FDA,
972 0x1FDB, 0x0141, 0x04C7, 0x0241, 0x1FDC,
973 0x1FDC, 0x0125, 0x04BC, 0x0264, 0x1FDF,
974 0x1FDE, 0x0109, 0x04B0, 0x0286, 0x1FE3,
975 0x1FE0, 0x00EF, 0x04A1, 0x02A9, 0x1FE7,
976 0x1FE2, 0x00D6, 0x0491, 0x02CB, 0x1FEC,
977 0x1FE4, 0x00BE, 0x047E, 0x02EE, 0x1FF2,
978 0x1FE6, 0x00A7, 0x046A, 0x030F, 0x1FFA,
979 0x1FE9, 0x0092, 0x0453, 0x0330, 0x0002,
980 0x1FEB, 0x007E, 0x043B, 0x0351, 0x000B,
981 0x1FED, 0x006B, 0x0421, 0x0372, 0x0015,
982 0x1FEF, 0x005A, 0x0406, 0x0391, 0x0020,
983 0x1FF1, 0x0049, 0x03EA, 0x03AF, 0x002D,
984 0x003A, 0x03C6, 0x03C6, 0x003A, 0x0000,
985 0x002D, 0x03AF, 0x03EA, 0x0049, 0x1FF1,
986 0x0020, 0x0391, 0x0406, 0x005A, 0x1FEF,
987 0x0015, 0x0372, 0x0421, 0x006B, 0x1FED,
988 0x000B, 0x0351, 0x043B, 0x007E, 0x1FEB,
989 0x0002, 0x0330, 0x0453, 0x0092, 0x1FE9,
990 0x1FFA, 0x030F, 0x046A, 0x00A7, 0x1FE6,
991 0x1FF2, 0x02EE, 0x047E, 0x00BE, 0x1FE4,
992 0x1FEC, 0x02CB, 0x0491, 0x00D6, 0x1FE2,
993 0x1FE7, 0x02A9, 0x04A1, 0x00EF, 0x1FE0,
994 0x1FE3, 0x0286, 0x04B0, 0x0109, 0x1FDE,
995 0x1FDF, 0x0264, 0x04BC, 0x0125, 0x1FDC,
996 0x1FDC, 0x0241, 0x04C7, 0x0141, 0x1FDB,
997 0x1FDA, 0x0220, 0x04CF, 0x015E, 0x1FD9,
998 0x1FD9, 0x01FE, 0x04D4, 0x017D, 0x1FD8,
999 0x1FD8, 0x01DC, 0x04D8, 0x019C, 0x1FD8,
1000 },
1001 [VS_LT_13_16_SCALE] = {
1002 /* Luma */
1003 0x1FC8, 0x0199, 0x053E, 0x0199, 0x1FC8,
1004 0x1FCA, 0x0175, 0x053E, 0x01BD, 0x1FC6,
1005 0x1FCD, 0x0153, 0x0539, 0x01E2, 0x1FC5,
1006 0x1FCF, 0x0132, 0x0532, 0x0209, 0x1FC4,
1007 0x1FD2, 0x0112, 0x0529, 0x022F, 0x1FC4,
1008 0x1FD5, 0x00F4, 0x051C, 0x0256, 0x1FC5,
1009 0x1FD8, 0x00D7, 0x050D, 0x027E, 0x1FC6,
1010 0x1FDC, 0x00BB, 0x04FB, 0x02A6, 0x1FC8,
1011 0x1FDF, 0x00A1, 0x04E7, 0x02CE, 0x1FCB,
1012 0x1FE2, 0x0089, 0x04D1, 0x02F5, 0x1FCF,
1013 0x1FE5, 0x0072, 0x04B8, 0x031D, 0x1FD4,
1014 0x1FE8, 0x005D, 0x049E, 0x0344, 0x1FD9,
1015 0x1FEB, 0x0049, 0x0480, 0x036B, 0x1FE1,
1016 0x1FEE, 0x0037, 0x0462, 0x0390, 0x1FE9,
1017 0x1FF0, 0x0026, 0x0442, 0x03B6, 0x1FF2,
1018 0x1FF2, 0x0017, 0x0420, 0x03DA, 0x1FFD,
1019 0x0009, 0x03F7, 0x03F7, 0x0009, 0x0000,
1020 0x1FFD, 0x03DA, 0x0420, 0x0017, 0x1FF2,
1021 0x1FF2, 0x03B6, 0x0442, 0x0026, 0x1FF0,
1022 0x1FE9, 0x0390, 0x0462, 0x0037, 0x1FEE,
1023 0x1FE1, 0x036B, 0x0480, 0x0049, 0x1FEB,
1024 0x1FD9, 0x0344, 0x049E, 0x005D, 0x1FE8,
1025 0x1FD4, 0x031D, 0x04B8, 0x0072, 0x1FE5,
1026 0x1FCF, 0x02F5, 0x04D1, 0x0089, 0x1FE2,
1027 0x1FCB, 0x02CE, 0x04E7, 0x00A1, 0x1FDF,
1028 0x1FC8, 0x02A6, 0x04FB, 0x00BB, 0x1FDC,
1029 0x1FC6, 0x027E, 0x050D, 0x00D7, 0x1FD8,
1030 0x1FC5, 0x0256, 0x051C, 0x00F4, 0x1FD5,
1031 0x1FC4, 0x022F, 0x0529, 0x0112, 0x1FD2,
1032 0x1FC4, 0x0209, 0x0532, 0x0132, 0x1FCF,
1033 0x1FC5, 0x01E2, 0x0539, 0x0153, 0x1FCD,
1034 0x1FC6, 0x01BD, 0x053E, 0x0175, 0x1FCA,
1035 /* Chroma */
1036 0x1FC8, 0x0199, 0x053E, 0x0199, 0x1FC8,
1037 0x1FCA, 0x0175, 0x053E, 0x01BD, 0x1FC6,
1038 0x1FCD, 0x0153, 0x0539, 0x01E2, 0x1FC5,
1039 0x1FCF, 0x0132, 0x0532, 0x0209, 0x1FC4,
1040 0x1FD2, 0x0112, 0x0529, 0x022F, 0x1FC4,
1041 0x1FD5, 0x00F4, 0x051C, 0x0256, 0x1FC5,
1042 0x1FD8, 0x00D7, 0x050D, 0x027E, 0x1FC6,
1043 0x1FDC, 0x00BB, 0x04FB, 0x02A6, 0x1FC8,
1044 0x1FDF, 0x00A1, 0x04E7, 0x02CE, 0x1FCB,
1045 0x1FE2, 0x0089, 0x04D1, 0x02F5, 0x1FCF,
1046 0x1FE5, 0x0072, 0x04B8, 0x031D, 0x1FD4,
1047 0x1FE8, 0x005D, 0x049E, 0x0344, 0x1FD9,
1048 0x1FEB, 0x0049, 0x0480, 0x036B, 0x1FE1,
1049 0x1FEE, 0x0037, 0x0462, 0x0390, 0x1FE9,
1050 0x1FF0, 0x0026, 0x0442, 0x03B6, 0x1FF2,
1051 0x1FF2, 0x0017, 0x0420, 0x03DA, 0x1FFD,
1052 0x0009, 0x03F7, 0x03F7, 0x0009, 0x0000,
1053 0x1FFD, 0x03DA, 0x0420, 0x0017, 0x1FF2,
1054 0x1FF2, 0x03B6, 0x0442, 0x0026, 0x1FF0,
1055 0x1FE9, 0x0390, 0x0462, 0x0037, 0x1FEE,
1056 0x1FE1, 0x036B, 0x0480, 0x0049, 0x1FEB,
1057 0x1FD9, 0x0344, 0x049E, 0x005D, 0x1FE8,
1058 0x1FD4, 0x031D, 0x04B8, 0x0072, 0x1FE5,
1059 0x1FCF, 0x02F5, 0x04D1, 0x0089, 0x1FE2,
1060 0x1FCB, 0x02CE, 0x04E7, 0x00A1, 0x1FDF,
1061 0x1FC8, 0x02A6, 0x04FB, 0x00BB, 0x1FDC,
1062 0x1FC6, 0x027E, 0x050D, 0x00D7, 0x1FD8,
1063 0x1FC5, 0x0256, 0x051C, 0x00F4, 0x1FD5,
1064 0x1FC4, 0x022F, 0x0529, 0x0112, 0x1FD2,
1065 0x1FC4, 0x0209, 0x0532, 0x0132, 0x1FCF,
1066 0x1FC5, 0x01E2, 0x0539, 0x0153, 0x1FCD,
1067 0x1FC6, 0x01BD, 0x053E, 0x0175, 0x1FCA,
1068 },
1069 [VS_LT_14_16_SCALE] = {
1070 /* Luma */
1071 0x1FBF, 0x016C, 0x05AA, 0x016C, 0x1FBF,
1072 0x1FC3, 0x0146, 0x05A8, 0x0194, 0x1FBB,
1073 0x1FC7, 0x0121, 0x05A3, 0x01BD, 0x1FB8,
1074 0x1FCB, 0x00FD, 0x059B, 0x01E8, 0x1FB5,
1075 0x1FD0, 0x00DC, 0x058F, 0x0213, 0x1FB2,
1076 0x1FD4, 0x00BC, 0x0580, 0x0240, 0x1FB0,
1077 0x1FD8, 0x009E, 0x056E, 0x026D, 0x1FAF,
1078 0x1FDC, 0x0082, 0x055A, 0x029A, 0x1FAE,
1079 0x1FE0, 0x0067, 0x0542, 0x02C9, 0x1FAE,
1080 0x1FE4, 0x004F, 0x0528, 0x02F6, 0x1FAF,
1081 0x1FE8, 0x0038, 0x050A, 0x0325, 0x1FB1,
1082 0x1FEB, 0x0024, 0x04EB, 0x0352, 0x1FB4,
1083 0x1FEE, 0x0011, 0x04C8, 0x0380, 0x1FB9,
1084 0x1FF1, 0x0000, 0x04A4, 0x03AC, 0x1FBF,
1085 0x1FF4, 0x1FF1, 0x047D, 0x03D8, 0x1FC6,
1086 0x1FF6, 0x1FE4, 0x0455, 0x0403, 0x1FCE,
1087 0x1FD8, 0x0428, 0x0428, 0x1FD8, 0x0000,
1088 0x1FCE, 0x0403, 0x0455, 0x1FE4, 0x1FF6,
1089 0x1FC6, 0x03D8, 0x047D, 0x1FF1, 0x1FF4,
1090 0x1FBF, 0x03AC, 0x04A4, 0x0000, 0x1FF1,
1091 0x1FB9, 0x0380, 0x04C8, 0x0011, 0x1FEE,
1092 0x1FB4, 0x0352, 0x04EB, 0x0024, 0x1FEB,
1093 0x1FB1, 0x0325, 0x050A, 0x0038, 0x1FE8,
1094 0x1FAF, 0x02F6, 0x0528, 0x004F, 0x1FE4,
1095 0x1FAE, 0x02C9, 0x0542, 0x0067, 0x1FE0,
1096 0x1FAE, 0x029A, 0x055A, 0x0082, 0x1FDC,
1097 0x1FAF, 0x026D, 0x056E, 0x009E, 0x1FD8,
1098 0x1FB0, 0x0240, 0x0580, 0x00BC, 0x1FD4,
1099 0x1FB2, 0x0213, 0x058F, 0x00DC, 0x1FD0,
1100 0x1FB5, 0x01E8, 0x059B, 0x00FD, 0x1FCB,
1101 0x1FB8, 0x01BD, 0x05A3, 0x0121, 0x1FC7,
1102 0x1FBB, 0x0194, 0x05A8, 0x0146, 0x1FC3,
1103 /* Chroma */
1104 0x1FBF, 0x016C, 0x05AA, 0x016C, 0x1FBF,
1105 0x1FC3, 0x0146, 0x05A8, 0x0194, 0x1FBB,
1106 0x1FC7, 0x0121, 0x05A3, 0x01BD, 0x1FB8,
1107 0x1FCB, 0x00FD, 0x059B, 0x01E8, 0x1FB5,
1108 0x1FD0, 0x00DC, 0x058F, 0x0213, 0x1FB2,
1109 0x1FD4, 0x00BC, 0x0580, 0x0240, 0x1FB0,
1110 0x1FD8, 0x009E, 0x056E, 0x026D, 0x1FAF,
1111 0x1FDC, 0x0082, 0x055A, 0x029A, 0x1FAE,
1112 0x1FE0, 0x0067, 0x0542, 0x02C9, 0x1FAE,
1113 0x1FE4, 0x004F, 0x0528, 0x02F6, 0x1FAF,
1114 0x1FE8, 0x0038, 0x050A, 0x0325, 0x1FB1,
1115 0x1FEB, 0x0024, 0x04EB, 0x0352, 0x1FB4,
1116 0x1FEE, 0x0011, 0x04C8, 0x0380, 0x1FB9,
1117 0x1FF1, 0x0000, 0x04A4, 0x03AC, 0x1FBF,
1118 0x1FF4, 0x1FF1, 0x047D, 0x03D8, 0x1FC6,
1119 0x1FF6, 0x1FE4, 0x0455, 0x0403, 0x1FCE,
1120 0x1FD8, 0x0428, 0x0428, 0x1FD8, 0x0000,
1121 0x1FCE, 0x0403, 0x0455, 0x1FE4, 0x1FF6,
1122 0x1FC6, 0x03D8, 0x047D, 0x1FF1, 0x1FF4,
1123 0x1FBF, 0x03AC, 0x04A4, 0x0000, 0x1FF1,
1124 0x1FB9, 0x0380, 0x04C8, 0x0011, 0x1FEE,
1125 0x1FB4, 0x0352, 0x04EB, 0x0024, 0x1FEB,
1126 0x1FB1, 0x0325, 0x050A, 0x0038, 0x1FE8,
1127 0x1FAF, 0x02F6, 0x0528, 0x004F, 0x1FE4,
1128 0x1FAE, 0x02C9, 0x0542, 0x0067, 0x1FE0,
1129 0x1FAE, 0x029A, 0x055A, 0x0082, 0x1FDC,
1130 0x1FAF, 0x026D, 0x056E, 0x009E, 0x1FD8,
1131 0x1FB0, 0x0240, 0x0580, 0x00BC, 0x1FD4,
1132 0x1FB2, 0x0213, 0x058F, 0x00DC, 0x1FD0,
1133 0x1FB5, 0x01E8, 0x059B, 0x00FD, 0x1FCB,
1134 0x1FB8, 0x01BD, 0x05A3, 0x0121, 0x1FC7,
1135 0x1FBB, 0x0194, 0x05A8, 0x0146, 0x1FC3,
1136 },
1137 [VS_LT_15_16_SCALE] = {
1138 /* Luma */
1139 0x1FBD, 0x0136, 0x061A, 0x0136, 0x1FBD,
1140 0x1FC3, 0x010D, 0x0617, 0x0161, 0x1FB8,
1141 0x1FC9, 0x00E6, 0x0611, 0x018E, 0x1FB2,
1142 0x1FCE, 0x00C1, 0x0607, 0x01BD, 0x1FAD,
1143 0x1FD4, 0x009E, 0x05F9, 0x01ED, 0x1FA8,
1144 0x1FD9, 0x007D, 0x05E8, 0x021F, 0x1FA3,
1145 0x1FDE, 0x005E, 0x05D3, 0x0252, 0x1F9F,
1146 0x1FE2, 0x0042, 0x05BC, 0x0285, 0x1F9B,
1147 0x1FE7, 0x0029, 0x059F, 0x02B9, 0x1F98,
1148 0x1FEA, 0x0011, 0x0580, 0x02EF, 0x1F96,
1149 0x1FEE, 0x1FFC, 0x055D, 0x0324, 0x1F95,
1150 0x1FF1, 0x1FE9, 0x0538, 0x0359, 0x1F95,
1151 0x1FF4, 0x1FD8, 0x0510, 0x038E, 0x1F96,
1152 0x1FF7, 0x1FC9, 0x04E5, 0x03C2, 0x1F99,
1153 0x1FF9, 0x1FBD, 0x04B8, 0x03F5, 0x1F9D,
1154 0x1FFB, 0x1FB2, 0x0489, 0x0428, 0x1FA2,
1155 0x1FAA, 0x0456, 0x0456, 0x1FAA, 0x0000,
1156 0x1FA2, 0x0428, 0x0489, 0x1FB2, 0x1FFB,
1157 0x1F9D, 0x03F5, 0x04B8, 0x1FBD, 0x1FF9,
1158 0x1F99, 0x03C2, 0x04E5, 0x1FC9, 0x1FF7,
1159 0x1F96, 0x038E, 0x0510, 0x1FD8, 0x1FF4,
1160 0x1F95, 0x0359, 0x0538, 0x1FE9, 0x1FF1,
1161 0x1F95, 0x0324, 0x055D, 0x1FFC, 0x1FEE,
1162 0x1F96, 0x02EF, 0x0580, 0x0011, 0x1FEA,
1163 0x1F98, 0x02B9, 0x059F, 0x0029, 0x1FE7,
1164 0x1F9B, 0x0285, 0x05BC, 0x0042, 0x1FE2,
1165 0x1F9F, 0x0252, 0x05D3, 0x005E, 0x1FDE,
1166 0x1FA3, 0x021F, 0x05E8, 0x007D, 0x1FD9,
1167 0x1FA8, 0x01ED, 0x05F9, 0x009E, 0x1FD4,
1168 0x1FAD, 0x01BD, 0x0607, 0x00C1, 0x1FCE,
1169 0x1FB2, 0x018E, 0x0611, 0x00E6, 0x1FC9,
1170 0x1FB8, 0x0161, 0x0617, 0x010D, 0x1FC3,
1171 /* Chroma */
1172 0x1FBD, 0x0136, 0x061A, 0x0136, 0x1FBD,
1173 0x1FC3, 0x010D, 0x0617, 0x0161, 0x1FB8,
1174 0x1FC9, 0x00E6, 0x0611, 0x018E, 0x1FB2,
1175 0x1FCE, 0x00C1, 0x0607, 0x01BD, 0x1FAD,
1176 0x1FD4, 0x009E, 0x05F9, 0x01ED, 0x1FA8,
1177 0x1FD9, 0x007D, 0x05E8, 0x021F, 0x1FA3,
1178 0x1FDE, 0x005E, 0x05D3, 0x0252, 0x1F9F,
1179 0x1FE2, 0x0042, 0x05BC, 0x0285, 0x1F9B,
1180 0x1FE7, 0x0029, 0x059F, 0x02B9, 0x1F98,
1181 0x1FEA, 0x0011, 0x0580, 0x02EF, 0x1F96,
1182 0x1FEE, 0x1FFC, 0x055D, 0x0324, 0x1F95,
1183 0x1FF1, 0x1FE9, 0x0538, 0x0359, 0x1F95,
1184 0x1FF4, 0x1FD8, 0x0510, 0x038E, 0x1F96,
1185 0x1FF7, 0x1FC9, 0x04E5, 0x03C2, 0x1F99,
1186 0x1FF9, 0x1FBD, 0x04B8, 0x03F5, 0x1F9D,
1187 0x1FFB, 0x1FB2, 0x0489, 0x0428, 0x1FA2,
1188 0x1FAA, 0x0456, 0x0456, 0x1FAA, 0x0000,
1189 0x1FA2, 0x0428, 0x0489, 0x1FB2, 0x1FFB,
1190 0x1F9D, 0x03F5, 0x04B8, 0x1FBD, 0x1FF9,
1191 0x1F99, 0x03C2, 0x04E5, 0x1FC9, 0x1FF7,
1192 0x1F96, 0x038E, 0x0510, 0x1FD8, 0x1FF4,
1193 0x1F95, 0x0359, 0x0538, 0x1FE9, 0x1FF1,
1194 0x1F95, 0x0324, 0x055D, 0x1FFC, 0x1FEE,
1195 0x1F96, 0x02EF, 0x0580, 0x0011, 0x1FEA,
1196 0x1F98, 0x02B9, 0x059F, 0x0029, 0x1FE7,
1197 0x1F9B, 0x0285, 0x05BC, 0x0042, 0x1FE2,
1198 0x1F9F, 0x0252, 0x05D3, 0x005E, 0x1FDE,
1199 0x1FA3, 0x021F, 0x05E8, 0x007D, 0x1FD9,
1200 0x1FA8, 0x01ED, 0x05F9, 0x009E, 0x1FD4,
1201 0x1FAD, 0x01BD, 0x0607, 0x00C1, 0x1FCE,
1202 0x1FB2, 0x018E, 0x0611, 0x00E6, 0x1FC9,
1203 0x1FB8, 0x0161, 0x0617, 0x010D, 0x1FC3,
1204 },
1205 [VS_LT_16_16_SCALE] = {
1206 /* Luma */
1207 0x1FC3, 0x00F8, 0x068A, 0x00F8, 0x1FC3,
1208 0x1FCA, 0x00CC, 0x0689, 0x0125, 0x1FBC,
1209 0x1FD1, 0x00A3, 0x0681, 0x0156, 0x1FB5,
1210 0x1FD7, 0x007D, 0x0676, 0x0188, 0x1FAE,
1211 0x1FDD, 0x005A, 0x0666, 0x01BD, 0x1FA6,
1212 0x1FE3, 0x0039, 0x0652, 0x01F3, 0x1F9F,
1213 0x1FE8, 0x001B, 0x0639, 0x022C, 0x1F98,
1214 0x1FEC, 0x0000, 0x061D, 0x0265, 0x1F92,
1215 0x1FF0, 0x1FE8, 0x05FC, 0x02A0, 0x1F8C,
1216 0x1FF4, 0x1FD2, 0x05D7, 0x02DC, 0x1F87,
1217 0x1FF7, 0x1FBF, 0x05AF, 0x0319, 0x1F82,
1218 0x1FFA, 0x1FAF, 0x0583, 0x0356, 0x1F7E,
1219 0x1FFC, 0x1FA1, 0x0554, 0x0393, 0x1F7C,
1220 0x1FFE, 0x1F95, 0x0523, 0x03CF, 0x1F7B,
1221 0x0000, 0x1F8C, 0x04EE, 0x040B, 0x1F7B,
1222 0x0001, 0x1F85, 0x04B8, 0x0446, 0x1F7C,
1223 0x1F80, 0x0480, 0x0480, 0x1F80, 0x0000,
1224 0x1F7C, 0x0446, 0x04B8, 0x1F85, 0x0001,
1225 0x1F7B, 0x040B, 0x04EE, 0x1F8C, 0x0000,
1226 0x1F7B, 0x03CF, 0x0523, 0x1F95, 0x1FFE,
1227 0x1F7C, 0x0393, 0x0554, 0x1FA1, 0x1FFC,
1228 0x1F7E, 0x0356, 0x0583, 0x1FAF, 0x1FFA,
1229 0x1F82, 0x0319, 0x05AF, 0x1FBF, 0x1FF7,
1230 0x1F87, 0x02DC, 0x05D7, 0x1FD2, 0x1FF4,
1231 0x1F8C, 0x02A0, 0x05FC, 0x1FE8, 0x1FF0,
1232 0x1F92, 0x0265, 0x061D, 0x0000, 0x1FEC,
1233 0x1F98, 0x022C, 0x0639, 0x001B, 0x1FE8,
1234 0x1F9F, 0x01F3, 0x0652, 0x0039, 0x1FE3,
1235 0x1FA6, 0x01BD, 0x0666, 0x005A, 0x1FDD,
1236 0x1FAE, 0x0188, 0x0676, 0x007D, 0x1FD7,
1237 0x1FB5, 0x0156, 0x0681, 0x00A3, 0x1FD1,
1238 0x1FBC, 0x0125, 0x0689, 0x00CC, 0x1FCA,
1239 /* Chroma */
1240 0x1FC3, 0x00F8, 0x068A, 0x00F8, 0x1FC3,
1241 0x1FCA, 0x00CC, 0x0689, 0x0125, 0x1FBC,
1242 0x1FD1, 0x00A3, 0x0681, 0x0156, 0x1FB5,
1243 0x1FD7, 0x007D, 0x0676, 0x0188, 0x1FAE,
1244 0x1FDD, 0x005A, 0x0666, 0x01BD, 0x1FA6,
1245 0x1FE3, 0x0039, 0x0652, 0x01F3, 0x1F9F,
1246 0x1FE8, 0x001B, 0x0639, 0x022C, 0x1F98,
1247 0x1FEC, 0x0000, 0x061D, 0x0265, 0x1F92,
1248 0x1FF0, 0x1FE8, 0x05FC, 0x02A0, 0x1F8C,
1249 0x1FF4, 0x1FD2, 0x05D7, 0x02DC, 0x1F87,
1250 0x1FF7, 0x1FBF, 0x05AF, 0x0319, 0x1F82,
1251 0x1FFA, 0x1FAF, 0x0583, 0x0356, 0x1F7E,
1252 0x1FFC, 0x1FA1, 0x0554, 0x0393, 0x1F7C,
1253 0x1FFE, 0x1F95, 0x0523, 0x03CF, 0x1F7B,
1254 0x0000, 0x1F8C, 0x04EE, 0x040B, 0x1F7B,
1255 0x0001, 0x1F85, 0x04B8, 0x0446, 0x1F7C,
1256 0x1F80, 0x0480, 0x0480, 0x1F80, 0x0000,
1257 0x1F7C, 0x0446, 0x04B8, 0x1F85, 0x0001,
1258 0x1F7B, 0x040B, 0x04EE, 0x1F8C, 0x0000,
1259 0x1F7B, 0x03CF, 0x0523, 0x1F95, 0x1FFE,
1260 0x1F7C, 0x0393, 0x0554, 0x1FA1, 0x1FFC,
1261 0x1F7E, 0x0356, 0x0583, 0x1FAF, 0x1FFA,
1262 0x1F82, 0x0319, 0x05AF, 0x1FBF, 0x1FF7,
1263 0x1F87, 0x02DC, 0x05D7, 0x1FD2, 0x1FF4,
1264 0x1F8C, 0x02A0, 0x05FC, 0x1FE8, 0x1FF0,
1265 0x1F92, 0x0265, 0x061D, 0x0000, 0x1FEC,
1266 0x1F98, 0x022C, 0x0639, 0x001B, 0x1FE8,
1267 0x1F9F, 0x01F3, 0x0652, 0x0039, 0x1FE3,
1268 0x1FA6, 0x01BD, 0x0666, 0x005A, 0x1FDD,
1269 0x1FAE, 0x0188, 0x0676, 0x007D, 0x1FD7,
1270 0x1FB5, 0x0156, 0x0681, 0x00A3, 0x1FD1,
1271 0x1FBC, 0x0125, 0x0689, 0x00CC, 0x1FCA,
1272 },
1273 [VS_1_TO_1_SCALE] = {
1274 /* Luma */
1275 0x0000, 0x0000, 0x0800, 0x0000, 0x0000,
1276 0x1FD8, 0x0085, 0x06F9, 0x00E1, 0x1FC9,
1277 0x1FDF, 0x005B, 0x06F2, 0x0114, 0x1FC0,
1278 0x1FE5, 0x0035, 0x06E5, 0x014A, 0x1FB7,
1279 0x1FEB, 0x0012, 0x06D3, 0x0182, 0x1FAE,
1280 0x1FF1, 0x1FF3, 0x06BA, 0x01BD, 0x1FA5,
1281 0x1FF5, 0x1FD7, 0x069D, 0x01FB, 0x1F9C,
1282 0x1FF9, 0x1FBE, 0x067C, 0x023A, 0x1F93,
1283 0x1FFD, 0x1FA8, 0x0656, 0x027B, 0x1F8A,
1284 0x0000, 0x1F95, 0x062B, 0x02BF, 0x1F81,
1285 0x0002, 0x1F86, 0x05FC, 0x0303, 0x1F79,
1286 0x0004, 0x1F79, 0x05CA, 0x0347, 0x1F72,
1287 0x0005, 0x1F6F, 0x0594, 0x038D, 0x1F6B,
1288 0x0006, 0x1F67, 0x055B, 0x03D2, 0x1F66,
1289 0x0007, 0x1F62, 0x051E, 0x0417, 0x1F62,
1290 0x0007, 0x1F5F, 0x04DF, 0x045C, 0x1F5F,
1291 0x1F5E, 0x04A2, 0x04A2, 0x1F5E, 0x0000,
1292 0x1F5F, 0x045C, 0x04DF, 0x1F5F, 0x0007,
1293 0x1F62, 0x0417, 0x051E, 0x1F62, 0x0007,
1294 0x1F66, 0x03D2, 0x055B, 0x1F67, 0x0006,
1295 0x1F6B, 0x038D, 0x0594, 0x1F6F, 0x0005,
1296 0x1F72, 0x0347, 0x05CA, 0x1F79, 0x0004,
1297 0x1F79, 0x0303, 0x05FC, 0x1F86, 0x0002,
1298 0x1F81, 0x02BF, 0x062B, 0x1F95, 0x0000,
1299 0x1F8A, 0x027B, 0x0656, 0x1FA8, 0x1FFD,
1300 0x1F93, 0x023A, 0x067C, 0x1FBE, 0x1FF9,
1301 0x1F9C, 0x01FB, 0x069D, 0x1FD7, 0x1FF5,
1302 0x1FA5, 0x01BD, 0x06BA, 0x1FF3, 0x1FF1,
1303 0x1FAE, 0x0182, 0x06D3, 0x0012, 0x1FEB,
1304 0x1FB7, 0x014A, 0x06E5, 0x0035, 0x1FE5,
1305 0x1FC0, 0x0114, 0x06F2, 0x005B, 0x1FDF,
1306 0x1FC9, 0x00E1, 0x06F9, 0x0085, 0x1FD8,
1307 /* Chroma */
1308 0x0000, 0x0000, 0x0800, 0x0000, 0x0000,
1309 0x1FD8, 0x0085, 0x06F9, 0x00E1, 0x1FC9,
1310 0x1FDF, 0x005B, 0x06F2, 0x0114, 0x1FC0,
1311 0x1FE5, 0x0035, 0x06E5, 0x014A, 0x1FB7,
1312 0x1FEB, 0x0012, 0x06D3, 0x0182, 0x1FAE,
1313 0x1FF1, 0x1FF3, 0x06BA, 0x01BD, 0x1FA5,
1314 0x1FF5, 0x1FD7, 0x069D, 0x01FB, 0x1F9C,
1315 0x1FF9, 0x1FBE, 0x067C, 0x023A, 0x1F93,
1316 0x1FFD, 0x1FA8, 0x0656, 0x027B, 0x1F8A,
1317 0x0000, 0x1F95, 0x062B, 0x02BF, 0x1F81,
1318 0x0002, 0x1F86, 0x05FC, 0x0303, 0x1F79,
1319 0x0004, 0x1F79, 0x05CA, 0x0347, 0x1F72,
1320 0x0005, 0x1F6F, 0x0594, 0x038D, 0x1F6B,
1321 0x0006, 0x1F67, 0x055B, 0x03D2, 0x1F66,
1322 0x0007, 0x1F62, 0x051E, 0x0417, 0x1F62,
1323 0x0007, 0x1F5F, 0x04DF, 0x045C, 0x1F5F,
1324 0x1F5E, 0x04A2, 0x04A2, 0x1F5E, 0x0000,
1325 0x1F5F, 0x045C, 0x04DF, 0x1F5F, 0x0007,
1326 0x1F62, 0x0417, 0x051E, 0x1F62, 0x0007,
1327 0x1F66, 0x03D2, 0x055B, 0x1F67, 0x0006,
1328 0x1F6B, 0x038D, 0x0594, 0x1F6F, 0x0005,
1329 0x1F72, 0x0347, 0x05CA, 0x1F79, 0x0004,
1330 0x1F79, 0x0303, 0x05FC, 0x1F86, 0x0002,
1331 0x1F81, 0x02BF, 0x062B, 0x1F95, 0x0000,
1332 0x1F8A, 0x027B, 0x0656, 0x1FA8, 0x1FFD,
1333 0x1F93, 0x023A, 0x067C, 0x1FBE, 0x1FF9,
1334 0x1F9C, 0x01FB, 0x069D, 0x1FD7, 0x1FF5,
1335 0x1FA5, 0x01BD, 0x06BA, 0x1FF3, 0x1FF1,
1336 0x1FAE, 0x0182, 0x06D3, 0x0012, 0x1FEB,
1337 0x1FB7, 0x014A, 0x06E5, 0x0035, 0x1FE5,
1338 0x1FC0, 0x0114, 0x06F2, 0x005B, 0x1FDF,
1339 0x1FC9, 0x00E1, 0x06F9, 0x0085, 0x1FD8,
1340 },
1341};
1342#endif
diff --git a/drivers/media/platform/ti-vpe/vpdma.c b/drivers/media/platform/ti-vpe/vpdma.c
index fcbe48a09cf8..e8175e7938ed 100644
--- a/drivers/media/platform/ti-vpe/vpdma.c
+++ b/drivers/media/platform/ti-vpe/vpdma.c
@@ -30,38 +30,47 @@
30 30
31const struct vpdma_data_format vpdma_yuv_fmts[] = { 31const struct vpdma_data_format vpdma_yuv_fmts[] = {
32 [VPDMA_DATA_FMT_Y444] = { 32 [VPDMA_DATA_FMT_Y444] = {
33 .type = VPDMA_DATA_FMT_TYPE_YUV,
33 .data_type = DATA_TYPE_Y444, 34 .data_type = DATA_TYPE_Y444,
34 .depth = 8, 35 .depth = 8,
35 }, 36 },
36 [VPDMA_DATA_FMT_Y422] = { 37 [VPDMA_DATA_FMT_Y422] = {
38 .type = VPDMA_DATA_FMT_TYPE_YUV,
37 .data_type = DATA_TYPE_Y422, 39 .data_type = DATA_TYPE_Y422,
38 .depth = 8, 40 .depth = 8,
39 }, 41 },
40 [VPDMA_DATA_FMT_Y420] = { 42 [VPDMA_DATA_FMT_Y420] = {
43 .type = VPDMA_DATA_FMT_TYPE_YUV,
41 .data_type = DATA_TYPE_Y420, 44 .data_type = DATA_TYPE_Y420,
42 .depth = 8, 45 .depth = 8,
43 }, 46 },
44 [VPDMA_DATA_FMT_C444] = { 47 [VPDMA_DATA_FMT_C444] = {
48 .type = VPDMA_DATA_FMT_TYPE_YUV,
45 .data_type = DATA_TYPE_C444, 49 .data_type = DATA_TYPE_C444,
46 .depth = 8, 50 .depth = 8,
47 }, 51 },
48 [VPDMA_DATA_FMT_C422] = { 52 [VPDMA_DATA_FMT_C422] = {
53 .type = VPDMA_DATA_FMT_TYPE_YUV,
49 .data_type = DATA_TYPE_C422, 54 .data_type = DATA_TYPE_C422,
50 .depth = 8, 55 .depth = 8,
51 }, 56 },
52 [VPDMA_DATA_FMT_C420] = { 57 [VPDMA_DATA_FMT_C420] = {
58 .type = VPDMA_DATA_FMT_TYPE_YUV,
53 .data_type = DATA_TYPE_C420, 59 .data_type = DATA_TYPE_C420,
54 .depth = 4, 60 .depth = 4,
55 }, 61 },
56 [VPDMA_DATA_FMT_YC422] = { 62 [VPDMA_DATA_FMT_YC422] = {
63 .type = VPDMA_DATA_FMT_TYPE_YUV,
57 .data_type = DATA_TYPE_YC422, 64 .data_type = DATA_TYPE_YC422,
58 .depth = 16, 65 .depth = 16,
59 }, 66 },
60 [VPDMA_DATA_FMT_YC444] = { 67 [VPDMA_DATA_FMT_YC444] = {
68 .type = VPDMA_DATA_FMT_TYPE_YUV,
61 .data_type = DATA_TYPE_YC444, 69 .data_type = DATA_TYPE_YC444,
62 .depth = 24, 70 .depth = 24,
63 }, 71 },
64 [VPDMA_DATA_FMT_CY422] = { 72 [VPDMA_DATA_FMT_CY422] = {
73 .type = VPDMA_DATA_FMT_TYPE_YUV,
65 .data_type = DATA_TYPE_CY422, 74 .data_type = DATA_TYPE_CY422,
66 .depth = 16, 75 .depth = 16,
67 }, 76 },
@@ -69,82 +78,102 @@ const struct vpdma_data_format vpdma_yuv_fmts[] = {
69 78
70const struct vpdma_data_format vpdma_rgb_fmts[] = { 79const struct vpdma_data_format vpdma_rgb_fmts[] = {
71 [VPDMA_DATA_FMT_RGB565] = { 80 [VPDMA_DATA_FMT_RGB565] = {
81 .type = VPDMA_DATA_FMT_TYPE_RGB,
72 .data_type = DATA_TYPE_RGB16_565, 82 .data_type = DATA_TYPE_RGB16_565,
73 .depth = 16, 83 .depth = 16,
74 }, 84 },
75 [VPDMA_DATA_FMT_ARGB16_1555] = { 85 [VPDMA_DATA_FMT_ARGB16_1555] = {
86 .type = VPDMA_DATA_FMT_TYPE_RGB,
76 .data_type = DATA_TYPE_ARGB_1555, 87 .data_type = DATA_TYPE_ARGB_1555,
77 .depth = 16, 88 .depth = 16,
78 }, 89 },
79 [VPDMA_DATA_FMT_ARGB16] = { 90 [VPDMA_DATA_FMT_ARGB16] = {
91 .type = VPDMA_DATA_FMT_TYPE_RGB,
80 .data_type = DATA_TYPE_ARGB_4444, 92 .data_type = DATA_TYPE_ARGB_4444,
81 .depth = 16, 93 .depth = 16,
82 }, 94 },
83 [VPDMA_DATA_FMT_RGBA16_5551] = { 95 [VPDMA_DATA_FMT_RGBA16_5551] = {
96 .type = VPDMA_DATA_FMT_TYPE_RGB,
84 .data_type = DATA_TYPE_RGBA_5551, 97 .data_type = DATA_TYPE_RGBA_5551,
85 .depth = 16, 98 .depth = 16,
86 }, 99 },
87 [VPDMA_DATA_FMT_RGBA16] = { 100 [VPDMA_DATA_FMT_RGBA16] = {
101 .type = VPDMA_DATA_FMT_TYPE_RGB,
88 .data_type = DATA_TYPE_RGBA_4444, 102 .data_type = DATA_TYPE_RGBA_4444,
89 .depth = 16, 103 .depth = 16,
90 }, 104 },
91 [VPDMA_DATA_FMT_ARGB24] = { 105 [VPDMA_DATA_FMT_ARGB24] = {
106 .type = VPDMA_DATA_FMT_TYPE_RGB,
92 .data_type = DATA_TYPE_ARGB24_6666, 107 .data_type = DATA_TYPE_ARGB24_6666,
93 .depth = 24, 108 .depth = 24,
94 }, 109 },
95 [VPDMA_DATA_FMT_RGB24] = { 110 [VPDMA_DATA_FMT_RGB24] = {
111 .type = VPDMA_DATA_FMT_TYPE_RGB,
96 .data_type = DATA_TYPE_RGB24_888, 112 .data_type = DATA_TYPE_RGB24_888,
97 .depth = 24, 113 .depth = 24,
98 }, 114 },
99 [VPDMA_DATA_FMT_ARGB32] = { 115 [VPDMA_DATA_FMT_ARGB32] = {
116 .type = VPDMA_DATA_FMT_TYPE_RGB,
100 .data_type = DATA_TYPE_ARGB32_8888, 117 .data_type = DATA_TYPE_ARGB32_8888,
101 .depth = 32, 118 .depth = 32,
102 }, 119 },
103 [VPDMA_DATA_FMT_RGBA24] = { 120 [VPDMA_DATA_FMT_RGBA24] = {
121 .type = VPDMA_DATA_FMT_TYPE_RGB,
104 .data_type = DATA_TYPE_RGBA24_6666, 122 .data_type = DATA_TYPE_RGBA24_6666,
105 .depth = 24, 123 .depth = 24,
106 }, 124 },
107 [VPDMA_DATA_FMT_RGBA32] = { 125 [VPDMA_DATA_FMT_RGBA32] = {
126 .type = VPDMA_DATA_FMT_TYPE_RGB,
108 .data_type = DATA_TYPE_RGBA32_8888, 127 .data_type = DATA_TYPE_RGBA32_8888,
109 .depth = 32, 128 .depth = 32,
110 }, 129 },
111 [VPDMA_DATA_FMT_BGR565] = { 130 [VPDMA_DATA_FMT_BGR565] = {
131 .type = VPDMA_DATA_FMT_TYPE_RGB,
112 .data_type = DATA_TYPE_BGR16_565, 132 .data_type = DATA_TYPE_BGR16_565,
113 .depth = 16, 133 .depth = 16,
114 }, 134 },
115 [VPDMA_DATA_FMT_ABGR16_1555] = { 135 [VPDMA_DATA_FMT_ABGR16_1555] = {
136 .type = VPDMA_DATA_FMT_TYPE_RGB,
116 .data_type = DATA_TYPE_ABGR_1555, 137 .data_type = DATA_TYPE_ABGR_1555,
117 .depth = 16, 138 .depth = 16,
118 }, 139 },
119 [VPDMA_DATA_FMT_ABGR16] = { 140 [VPDMA_DATA_FMT_ABGR16] = {
141 .type = VPDMA_DATA_FMT_TYPE_RGB,
120 .data_type = DATA_TYPE_ABGR_4444, 142 .data_type = DATA_TYPE_ABGR_4444,
121 .depth = 16, 143 .depth = 16,
122 }, 144 },
123 [VPDMA_DATA_FMT_BGRA16_5551] = { 145 [VPDMA_DATA_FMT_BGRA16_5551] = {
146 .type = VPDMA_DATA_FMT_TYPE_RGB,
124 .data_type = DATA_TYPE_BGRA_5551, 147 .data_type = DATA_TYPE_BGRA_5551,
125 .depth = 16, 148 .depth = 16,
126 }, 149 },
127 [VPDMA_DATA_FMT_BGRA16] = { 150 [VPDMA_DATA_FMT_BGRA16] = {
151 .type = VPDMA_DATA_FMT_TYPE_RGB,
128 .data_type = DATA_TYPE_BGRA_4444, 152 .data_type = DATA_TYPE_BGRA_4444,
129 .depth = 16, 153 .depth = 16,
130 }, 154 },
131 [VPDMA_DATA_FMT_ABGR24] = { 155 [VPDMA_DATA_FMT_ABGR24] = {
156 .type = VPDMA_DATA_FMT_TYPE_RGB,
132 .data_type = DATA_TYPE_ABGR24_6666, 157 .data_type = DATA_TYPE_ABGR24_6666,
133 .depth = 24, 158 .depth = 24,
134 }, 159 },
135 [VPDMA_DATA_FMT_BGR24] = { 160 [VPDMA_DATA_FMT_BGR24] = {
161 .type = VPDMA_DATA_FMT_TYPE_RGB,
136 .data_type = DATA_TYPE_BGR24_888, 162 .data_type = DATA_TYPE_BGR24_888,
137 .depth = 24, 163 .depth = 24,
138 }, 164 },
139 [VPDMA_DATA_FMT_ABGR32] = { 165 [VPDMA_DATA_FMT_ABGR32] = {
166 .type = VPDMA_DATA_FMT_TYPE_RGB,
140 .data_type = DATA_TYPE_ABGR32_8888, 167 .data_type = DATA_TYPE_ABGR32_8888,
141 .depth = 32, 168 .depth = 32,
142 }, 169 },
143 [VPDMA_DATA_FMT_BGRA24] = { 170 [VPDMA_DATA_FMT_BGRA24] = {
171 .type = VPDMA_DATA_FMT_TYPE_RGB,
144 .data_type = DATA_TYPE_BGRA24_6666, 172 .data_type = DATA_TYPE_BGRA24_6666,
145 .depth = 24, 173 .depth = 24,
146 }, 174 },
147 [VPDMA_DATA_FMT_BGRA32] = { 175 [VPDMA_DATA_FMT_BGRA32] = {
176 .type = VPDMA_DATA_FMT_TYPE_RGB,
148 .data_type = DATA_TYPE_BGRA32_8888, 177 .data_type = DATA_TYPE_BGRA32_8888,
149 .depth = 32, 178 .depth = 32,
150 }, 179 },
@@ -152,6 +181,7 @@ const struct vpdma_data_format vpdma_rgb_fmts[] = {
152 181
153const struct vpdma_data_format vpdma_misc_fmts[] = { 182const struct vpdma_data_format vpdma_misc_fmts[] = {
154 [VPDMA_DATA_FMT_MV] = { 183 [VPDMA_DATA_FMT_MV] = {
184 .type = VPDMA_DATA_FMT_TYPE_MISC,
155 .data_type = DATA_TYPE_MV, 185 .data_type = DATA_TYPE_MV,
156 .depth = 4, 186 .depth = 4,
157 }, 187 },
@@ -599,10 +629,11 @@ void vpdma_add_out_dtd(struct vpdma_desc_list *list, struct v4l2_rect *c_rect,
599 629
600 channel = next_chan = chan_info[chan].num; 630 channel = next_chan = chan_info[chan].num;
601 631
602 if (fmt->data_type == DATA_TYPE_C420) 632 if (fmt->type == VPDMA_DATA_FMT_TYPE_YUV &&
633 fmt->data_type == DATA_TYPE_C420)
603 depth = 8; 634 depth = 8;
604 635
605 stride = (depth * c_rect->width) >> 3; 636 stride = ALIGN((depth * c_rect->width) >> 3, VPDMA_STRIDE_ALIGN);
606 dma_addr += (c_rect->left * depth) >> 3; 637 dma_addr += (c_rect->left * depth) >> 3;
607 638
608 dtd = list->next; 639 dtd = list->next;
@@ -649,13 +680,14 @@ void vpdma_add_in_dtd(struct vpdma_desc_list *list, int frame_width,
649 680
650 channel = next_chan = chan_info[chan].num; 681 channel = next_chan = chan_info[chan].num;
651 682
652 if (fmt->data_type == DATA_TYPE_C420) { 683 if (fmt->type == VPDMA_DATA_FMT_TYPE_YUV &&
684 fmt->data_type == DATA_TYPE_C420) {
653 height >>= 1; 685 height >>= 1;
654 frame_height >>= 1; 686 frame_height >>= 1;
655 depth = 8; 687 depth = 8;
656 } 688 }
657 689
658 stride = (depth * c_rect->width) >> 3; 690 stride = ALIGN((depth * c_rect->width) >> 3, VPDMA_STRIDE_ALIGN);
659 dma_addr += (c_rect->left * depth) >> 3; 691 dma_addr += (c_rect->left * depth) >> 3;
660 692
661 dtd = list->next; 693 dtd = list->next;
diff --git a/drivers/media/platform/ti-vpe/vpdma.h b/drivers/media/platform/ti-vpe/vpdma.h
index eaa2a71a5db9..cf40f11b3c8f 100644
--- a/drivers/media/platform/ti-vpe/vpdma.h
+++ b/drivers/media/platform/ti-vpe/vpdma.h
@@ -39,13 +39,23 @@ struct vpdma_data {
39 bool ready; 39 bool ready;
40}; 40};
41 41
42enum vpdma_data_format_type {
43 VPDMA_DATA_FMT_TYPE_YUV,
44 VPDMA_DATA_FMT_TYPE_RGB,
45 VPDMA_DATA_FMT_TYPE_MISC,
46};
47
42struct vpdma_data_format { 48struct vpdma_data_format {
49 enum vpdma_data_format_type type;
43 int data_type; 50 int data_type;
44 u8 depth; 51 u8 depth;
45}; 52};
46 53
47#define VPDMA_DESC_ALIGN 16 /* 16-byte descriptor alignment */ 54#define VPDMA_DESC_ALIGN 16 /* 16-byte descriptor alignment */
48 55#define VPDMA_STRIDE_ALIGN 16 /*
56 * line stride of source and dest
57 * buffers should be 16 byte aligned
58 */
49#define VPDMA_DTD_DESC_SIZE 32 /* 8 words */ 59#define VPDMA_DTD_DESC_SIZE 32 /* 8 words */
50#define VPDMA_CFD_CTD_DESC_SIZE 16 /* 4 words */ 60#define VPDMA_CFD_CTD_DESC_SIZE 16 /* 4 words */
51 61
diff --git a/drivers/media/platform/ti-vpe/vpdma_priv.h b/drivers/media/platform/ti-vpe/vpdma_priv.h
index f0e9a8038c1b..c1a6ce1884f3 100644
--- a/drivers/media/platform/ti-vpe/vpdma_priv.h
+++ b/drivers/media/platform/ti-vpe/vpdma_priv.h
@@ -78,7 +78,7 @@
78#define DATA_TYPE_C420 0x6 78#define DATA_TYPE_C420 0x6
79#define DATA_TYPE_YC422 0x7 79#define DATA_TYPE_YC422 0x7
80#define DATA_TYPE_YC444 0x8 80#define DATA_TYPE_YC444 0x8
81#define DATA_TYPE_CY422 0x23 81#define DATA_TYPE_CY422 0x27
82 82
83#define DATA_TYPE_RGB16_565 0x0 83#define DATA_TYPE_RGB16_565 0x0
84#define DATA_TYPE_ARGB_1555 0x1 84#define DATA_TYPE_ARGB_1555 0x1
diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c
index 4e58069e24ff..1296c5386231 100644
--- a/drivers/media/platform/ti-vpe/vpe.c
+++ b/drivers/media/platform/ti-vpe/vpe.c
@@ -30,6 +30,7 @@
30#include <linux/sched.h> 30#include <linux/sched.h>
31#include <linux/slab.h> 31#include <linux/slab.h>
32#include <linux/videodev2.h> 32#include <linux/videodev2.h>
33#include <linux/log2.h>
33 34
34#include <media/v4l2-common.h> 35#include <media/v4l2-common.h>
35#include <media/v4l2-ctrls.h> 36#include <media/v4l2-ctrls.h>
@@ -42,6 +43,8 @@
42 43
43#include "vpdma.h" 44#include "vpdma.h"
44#include "vpe_regs.h" 45#include "vpe_regs.h"
46#include "sc.h"
47#include "csc.h"
45 48
46#define VPE_MODULE_NAME "vpe" 49#define VPE_MODULE_NAME "vpe"
47 50
@@ -54,10 +57,6 @@
54/* required alignments */ 57/* required alignments */
55#define S_ALIGN 0 /* multiple of 1 */ 58#define S_ALIGN 0 /* multiple of 1 */
56#define H_ALIGN 1 /* multiple of 2 */ 59#define H_ALIGN 1 /* multiple of 2 */
57#define W_ALIGN 1 /* multiple of 2 */
58
59/* multiple of 128 bits, line stride, 16 bytes */
60#define L_ALIGN 4
61 60
62/* flags that indicate a format can be used for capture/output */ 61/* flags that indicate a format can be used for capture/output */
63#define VPE_FMT_TYPE_CAPTURE (1 << 0) 62#define VPE_FMT_TYPE_CAPTURE (1 << 0)
@@ -268,6 +267,38 @@ static struct vpe_fmt vpe_formats[] = {
268 .vpdma_fmt = { &vpdma_yuv_fmts[VPDMA_DATA_FMT_CY422], 267 .vpdma_fmt = { &vpdma_yuv_fmts[VPDMA_DATA_FMT_CY422],
269 }, 268 },
270 }, 269 },
270 {
271 .name = "RGB888 packed",
272 .fourcc = V4L2_PIX_FMT_RGB24,
273 .types = VPE_FMT_TYPE_CAPTURE,
274 .coplanar = 0,
275 .vpdma_fmt = { &vpdma_rgb_fmts[VPDMA_DATA_FMT_RGB24],
276 },
277 },
278 {
279 .name = "ARGB32",
280 .fourcc = V4L2_PIX_FMT_RGB32,
281 .types = VPE_FMT_TYPE_CAPTURE,
282 .coplanar = 0,
283 .vpdma_fmt = { &vpdma_rgb_fmts[VPDMA_DATA_FMT_ARGB32],
284 },
285 },
286 {
287 .name = "BGR888 packed",
288 .fourcc = V4L2_PIX_FMT_BGR24,
289 .types = VPE_FMT_TYPE_CAPTURE,
290 .coplanar = 0,
291 .vpdma_fmt = { &vpdma_rgb_fmts[VPDMA_DATA_FMT_BGR24],
292 },
293 },
294 {
295 .name = "ABGR32",
296 .fourcc = V4L2_PIX_FMT_BGR32,
297 .types = VPE_FMT_TYPE_CAPTURE,
298 .coplanar = 0,
299 .vpdma_fmt = { &vpdma_rgb_fmts[VPDMA_DATA_FMT_ABGR32],
300 },
301 },
271}; 302};
272 303
273/* 304/*
@@ -327,9 +358,12 @@ struct vpe_dev {
327 358
328 int irq; 359 int irq;
329 void __iomem *base; 360 void __iomem *base;
361 struct resource *res;
330 362
331 struct vb2_alloc_ctx *alloc_ctx; 363 struct vb2_alloc_ctx *alloc_ctx;
332 struct vpdma_data *vpdma; /* vpdma data handle */ 364 struct vpdma_data *vpdma; /* vpdma data handle */
365 struct sc_data *sc; /* scaler data handle */
366 struct csc_data *csc; /* csc data handle */
333}; 367};
334 368
335/* 369/*
@@ -356,6 +390,8 @@ struct vpe_ctx {
356 void *mv_buf[2]; /* virtual addrs of motion vector bufs */ 390 void *mv_buf[2]; /* virtual addrs of motion vector bufs */
357 size_t mv_buf_size; /* current motion vector buffer size */ 391 size_t mv_buf_size; /* current motion vector buffer size */
358 struct vpdma_buf mmr_adb; /* shadow reg addr/data block */ 392 struct vpdma_buf mmr_adb; /* shadow reg addr/data block */
393 struct vpdma_buf sc_coeff_h; /* h coeff buffer */
394 struct vpdma_buf sc_coeff_v; /* v coeff buffer */
359 struct vpdma_desc_list desc_list; /* DMA descriptor list */ 395 struct vpdma_desc_list desc_list; /* DMA descriptor list */
360 396
361 bool deinterlacing; /* using de-interlacer */ 397 bool deinterlacing; /* using de-interlacer */
@@ -438,14 +474,23 @@ struct vpe_mmr_adb {
438 u32 us3_regs[8]; 474 u32 us3_regs[8];
439 struct vpdma_adb_hdr dei_hdr; 475 struct vpdma_adb_hdr dei_hdr;
440 u32 dei_regs[8]; 476 u32 dei_regs[8];
441 struct vpdma_adb_hdr sc_hdr; 477 struct vpdma_adb_hdr sc_hdr0;
442 u32 sc_regs[1]; 478 u32 sc_regs0[7];
443 u32 sc_pad[3]; 479 u32 sc_pad0[1];
480 struct vpdma_adb_hdr sc_hdr8;
481 u32 sc_regs8[6];
482 u32 sc_pad8[2];
483 struct vpdma_adb_hdr sc_hdr17;
484 u32 sc_regs17[9];
485 u32 sc_pad17[3];
444 struct vpdma_adb_hdr csc_hdr; 486 struct vpdma_adb_hdr csc_hdr;
445 u32 csc_regs[6]; 487 u32 csc_regs[6];
446 u32 csc_pad[2]; 488 u32 csc_pad[2];
447}; 489};
448 490
491#define GET_OFFSET_TOP(ctx, obj, reg) \
492 ((obj)->res->start - ctx->dev->res->start + reg)
493
449#define VPE_SET_MMR_ADB_HDR(ctx, hdr, regs, offset_a) \ 494#define VPE_SET_MMR_ADB_HDR(ctx, hdr, regs, offset_a) \
450 VPDMA_SET_MMR_ADB_HDR(ctx->mmr_adb, vpe_mmr_adb, hdr, regs, offset_a) 495 VPDMA_SET_MMR_ADB_HDR(ctx->mmr_adb, vpe_mmr_adb, hdr, regs, offset_a)
451/* 496/*
@@ -458,8 +503,14 @@ static void init_adb_hdrs(struct vpe_ctx *ctx)
458 VPE_SET_MMR_ADB_HDR(ctx, us2_hdr, us2_regs, VPE_US2_R0); 503 VPE_SET_MMR_ADB_HDR(ctx, us2_hdr, us2_regs, VPE_US2_R0);
459 VPE_SET_MMR_ADB_HDR(ctx, us3_hdr, us3_regs, VPE_US3_R0); 504 VPE_SET_MMR_ADB_HDR(ctx, us3_hdr, us3_regs, VPE_US3_R0);
460 VPE_SET_MMR_ADB_HDR(ctx, dei_hdr, dei_regs, VPE_DEI_FRAME_SIZE); 505 VPE_SET_MMR_ADB_HDR(ctx, dei_hdr, dei_regs, VPE_DEI_FRAME_SIZE);
461 VPE_SET_MMR_ADB_HDR(ctx, sc_hdr, sc_regs, VPE_SC_MP_SC0); 506 VPE_SET_MMR_ADB_HDR(ctx, sc_hdr0, sc_regs0,
462 VPE_SET_MMR_ADB_HDR(ctx, csc_hdr, csc_regs, VPE_CSC_CSC00); 507 GET_OFFSET_TOP(ctx, ctx->dev->sc, CFG_SC0));
508 VPE_SET_MMR_ADB_HDR(ctx, sc_hdr8, sc_regs8,
509 GET_OFFSET_TOP(ctx, ctx->dev->sc, CFG_SC8));
510 VPE_SET_MMR_ADB_HDR(ctx, sc_hdr17, sc_regs17,
511 GET_OFFSET_TOP(ctx, ctx->dev->sc, CFG_SC17));
512 VPE_SET_MMR_ADB_HDR(ctx, csc_hdr, csc_regs,
513 GET_OFFSET_TOP(ctx, ctx->dev->csc, CSC_CSC00));
463}; 514};
464 515
465/* 516/*
@@ -670,17 +721,20 @@ static void set_src_registers(struct vpe_ctx *ctx)
670static void set_dst_registers(struct vpe_ctx *ctx) 721static void set_dst_registers(struct vpe_ctx *ctx)
671{ 722{
672 struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr; 723 struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr;
724 enum v4l2_colorspace clrspc = ctx->q_data[Q_DATA_DST].colorspace;
673 struct vpe_fmt *fmt = ctx->q_data[Q_DATA_DST].fmt; 725 struct vpe_fmt *fmt = ctx->q_data[Q_DATA_DST].fmt;
674 u32 val = 0; 726 u32 val = 0;
675 727
676 /* select RGB path when color space conversion is supported in future */ 728 if (clrspc == V4L2_COLORSPACE_SRGB)
677 if (fmt->fourcc == V4L2_PIX_FMT_RGB24) 729 val |= VPE_RGB_OUT_SELECT;
678 val |= VPE_RGB_OUT_SELECT | VPE_CSC_SRC_DEI_SCALER;
679 else if (fmt->fourcc == V4L2_PIX_FMT_NV16) 730 else if (fmt->fourcc == V4L2_PIX_FMT_NV16)
680 val |= VPE_COLOR_SEPARATE_422; 731 val |= VPE_COLOR_SEPARATE_422;
681 732
682 /* The source of CHR_DS is always the scaler, whether it's used or not */ 733 /*
683 val |= VPE_DS_SRC_DEI_SCALER; 734 * the source of CHR_DS and CSC is always the scaler, irrespective of
735 * whether it's used or not
736 */
737 val |= VPE_DS_SRC_DEI_SCALER | VPE_CSC_SRC_DEI_SCALER;
684 738
685 if (fmt->fourcc != V4L2_PIX_FMT_NV12) 739 if (fmt->fourcc != V4L2_PIX_FMT_NV12)
686 val |= VPE_DS_BYPASS; 740 val |= VPE_DS_BYPASS;
@@ -742,28 +796,6 @@ static void set_dei_shadow_registers(struct vpe_ctx *ctx)
742 ctx->load_mmrs = true; 796 ctx->load_mmrs = true;
743} 797}
744 798
745static void set_csc_coeff_bypass(struct vpe_ctx *ctx)
746{
747 struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr;
748 u32 *shadow_csc_reg5 = &mmr_adb->csc_regs[5];
749
750 *shadow_csc_reg5 |= VPE_CSC_BYPASS;
751
752 ctx->load_mmrs = true;
753}
754
755static void set_sc_regs_bypass(struct vpe_ctx *ctx)
756{
757 struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr;
758 u32 *sc_reg0 = &mmr_adb->sc_regs[0];
759 u32 val = 0;
760
761 val |= VPE_SC_BYPASS;
762 *sc_reg0 = val;
763
764 ctx->load_mmrs = true;
765}
766
767/* 799/*
768 * Set the shadow registers whose values are modified when either the 800 * Set the shadow registers whose values are modified when either the
769 * source or destination format is changed. 801 * source or destination format is changed.
@@ -772,6 +804,11 @@ static int set_srcdst_params(struct vpe_ctx *ctx)
772{ 804{
773 struct vpe_q_data *s_q_data = &ctx->q_data[Q_DATA_SRC]; 805 struct vpe_q_data *s_q_data = &ctx->q_data[Q_DATA_SRC];
774 struct vpe_q_data *d_q_data = &ctx->q_data[Q_DATA_DST]; 806 struct vpe_q_data *d_q_data = &ctx->q_data[Q_DATA_DST];
807 struct vpe_mmr_adb *mmr_adb = ctx->mmr_adb.addr;
808 unsigned int src_w = s_q_data->c_rect.width;
809 unsigned int src_h = s_q_data->c_rect.height;
810 unsigned int dst_w = d_q_data->c_rect.width;
811 unsigned int dst_h = d_q_data->c_rect.height;
775 size_t mv_buf_size; 812 size_t mv_buf_size;
776 int ret; 813 int ret;
777 814
@@ -780,12 +817,23 @@ static int set_srcdst_params(struct vpe_ctx *ctx)
780 817
781 if ((s_q_data->flags & Q_DATA_INTERLACED) && 818 if ((s_q_data->flags & Q_DATA_INTERLACED) &&
782 !(d_q_data->flags & Q_DATA_INTERLACED)) { 819 !(d_q_data->flags & Q_DATA_INTERLACED)) {
820 int bytes_per_line;
783 const struct vpdma_data_format *mv = 821 const struct vpdma_data_format *mv =
784 &vpdma_misc_fmts[VPDMA_DATA_FMT_MV]; 822 &vpdma_misc_fmts[VPDMA_DATA_FMT_MV];
785 823
824 /*
825 * we make sure that the source image has a 16 byte aligned
826 * stride, we need to do the same for the motion vector buffer
827 * by aligning it's stride to the next 16 byte boundry. this
828 * extra space will not be used by the de-interlacer, but will
829 * ensure that vpdma operates correctly
830 */
831 bytes_per_line = ALIGN((s_q_data->width * mv->depth) >> 3,
832 VPDMA_STRIDE_ALIGN);
833 mv_buf_size = bytes_per_line * s_q_data->height;
834
786 ctx->deinterlacing = 1; 835 ctx->deinterlacing = 1;
787 mv_buf_size = 836 src_h <<= 1;
788 (s_q_data->width * s_q_data->height * mv->depth) >> 3;
789 } else { 837 } else {
790 ctx->deinterlacing = 0; 838 ctx->deinterlacing = 0;
791 mv_buf_size = 0; 839 mv_buf_size = 0;
@@ -799,8 +847,16 @@ static int set_srcdst_params(struct vpe_ctx *ctx)
799 847
800 set_cfg_and_line_modes(ctx); 848 set_cfg_and_line_modes(ctx);
801 set_dei_regs(ctx); 849 set_dei_regs(ctx);
802 set_csc_coeff_bypass(ctx); 850
803 set_sc_regs_bypass(ctx); 851 csc_set_coeff(ctx->dev->csc, &mmr_adb->csc_regs[0],
852 s_q_data->colorspace, d_q_data->colorspace);
853
854 sc_set_hs_coeffs(ctx->dev->sc, ctx->sc_coeff_h.addr, src_w, dst_w);
855 sc_set_vs_coeffs(ctx->dev->sc, ctx->sc_coeff_v.addr, src_h, dst_h);
856
857 sc_config_scaler(ctx->dev->sc, &mmr_adb->sc_regs0[0],
858 &mmr_adb->sc_regs8[0], &mmr_adb->sc_regs17[0],
859 src_w, src_h, dst_w, dst_h);
804 860
805 return 0; 861 return 0;
806} 862}
@@ -916,35 +972,10 @@ static void vpe_dump_regs(struct vpe_dev *dev)
916 DUMPREG(DEI_FMD_STATUS_R0); 972 DUMPREG(DEI_FMD_STATUS_R0);
917 DUMPREG(DEI_FMD_STATUS_R1); 973 DUMPREG(DEI_FMD_STATUS_R1);
918 DUMPREG(DEI_FMD_STATUS_R2); 974 DUMPREG(DEI_FMD_STATUS_R2);
919 DUMPREG(SC_MP_SC0);
920 DUMPREG(SC_MP_SC1);
921 DUMPREG(SC_MP_SC2);
922 DUMPREG(SC_MP_SC3);
923 DUMPREG(SC_MP_SC4);
924 DUMPREG(SC_MP_SC5);
925 DUMPREG(SC_MP_SC6);
926 DUMPREG(SC_MP_SC8);
927 DUMPREG(SC_MP_SC9);
928 DUMPREG(SC_MP_SC10);
929 DUMPREG(SC_MP_SC11);
930 DUMPREG(SC_MP_SC12);
931 DUMPREG(SC_MP_SC13);
932 DUMPREG(SC_MP_SC17);
933 DUMPREG(SC_MP_SC18);
934 DUMPREG(SC_MP_SC19);
935 DUMPREG(SC_MP_SC20);
936 DUMPREG(SC_MP_SC21);
937 DUMPREG(SC_MP_SC22);
938 DUMPREG(SC_MP_SC23);
939 DUMPREG(SC_MP_SC24);
940 DUMPREG(SC_MP_SC25);
941 DUMPREG(CSC_CSC00);
942 DUMPREG(CSC_CSC01);
943 DUMPREG(CSC_CSC02);
944 DUMPREG(CSC_CSC03);
945 DUMPREG(CSC_CSC04);
946 DUMPREG(CSC_CSC05);
947#undef DUMPREG 975#undef DUMPREG
976
977 sc_dump_regs(dev->sc);
978 csc_dump_regs(dev->csc);
948} 979}
949 980
950static void add_out_dtd(struct vpe_ctx *ctx, int port) 981static void add_out_dtd(struct vpe_ctx *ctx, int port)
@@ -1053,6 +1084,7 @@ static void disable_irqs(struct vpe_ctx *ctx)
1053static void device_run(void *priv) 1084static void device_run(void *priv)
1054{ 1085{
1055 struct vpe_ctx *ctx = priv; 1086 struct vpe_ctx *ctx = priv;
1087 struct sc_data *sc = ctx->dev->sc;
1056 struct vpe_q_data *d_q_data = &ctx->q_data[Q_DATA_DST]; 1088 struct vpe_q_data *d_q_data = &ctx->q_data[Q_DATA_DST];
1057 1089
1058 if (ctx->deinterlacing && ctx->src_vbs[2] == NULL) { 1090 if (ctx->deinterlacing && ctx->src_vbs[2] == NULL) {
@@ -1075,13 +1107,37 @@ static void device_run(void *priv)
1075 ctx->load_mmrs = false; 1107 ctx->load_mmrs = false;
1076 } 1108 }
1077 1109
1110 if (sc->loaded_coeff_h != ctx->sc_coeff_h.dma_addr ||
1111 sc->load_coeff_h) {
1112 vpdma_map_desc_buf(ctx->dev->vpdma, &ctx->sc_coeff_h);
1113 vpdma_add_cfd_block(&ctx->desc_list, CFD_SC_CLIENT,
1114 &ctx->sc_coeff_h, 0);
1115
1116 sc->loaded_coeff_h = ctx->sc_coeff_h.dma_addr;
1117 sc->load_coeff_h = false;
1118 }
1119
1120 if (sc->loaded_coeff_v != ctx->sc_coeff_v.dma_addr ||
1121 sc->load_coeff_v) {
1122 vpdma_map_desc_buf(ctx->dev->vpdma, &ctx->sc_coeff_v);
1123 vpdma_add_cfd_block(&ctx->desc_list, CFD_SC_CLIENT,
1124 &ctx->sc_coeff_v, SC_COEF_SRAM_SIZE >> 4);
1125
1126 sc->loaded_coeff_v = ctx->sc_coeff_v.dma_addr;
1127 sc->load_coeff_v = false;
1128 }
1129
1078 /* output data descriptors */ 1130 /* output data descriptors */
1079 if (ctx->deinterlacing) 1131 if (ctx->deinterlacing)
1080 add_out_dtd(ctx, VPE_PORT_MV_OUT); 1132 add_out_dtd(ctx, VPE_PORT_MV_OUT);
1081 1133
1082 add_out_dtd(ctx, VPE_PORT_LUMA_OUT); 1134 if (d_q_data->colorspace == V4L2_COLORSPACE_SRGB) {
1083 if (d_q_data->fmt->coplanar) 1135 add_out_dtd(ctx, VPE_PORT_RGB_OUT);
1084 add_out_dtd(ctx, VPE_PORT_CHROMA_OUT); 1136 } else {
1137 add_out_dtd(ctx, VPE_PORT_LUMA_OUT);
1138 if (d_q_data->fmt->coplanar)
1139 add_out_dtd(ctx, VPE_PORT_CHROMA_OUT);
1140 }
1085 1141
1086 /* input data descriptors */ 1142 /* input data descriptors */
1087 if (ctx->deinterlacing) { 1143 if (ctx->deinterlacing) {
@@ -1117,9 +1173,16 @@ static void device_run(void *priv)
1117 } 1173 }
1118 1174
1119 /* sync on channel control descriptors for output ports */ 1175 /* sync on channel control descriptors for output ports */
1120 vpdma_add_sync_on_channel_ctd(&ctx->desc_list, VPE_CHAN_LUMA_OUT); 1176 if (d_q_data->colorspace == V4L2_COLORSPACE_SRGB) {
1121 if (d_q_data->fmt->coplanar) 1177 vpdma_add_sync_on_channel_ctd(&ctx->desc_list,
1122 vpdma_add_sync_on_channel_ctd(&ctx->desc_list, VPE_CHAN_CHROMA_OUT); 1178 VPE_CHAN_RGB_OUT);
1179 } else {
1180 vpdma_add_sync_on_channel_ctd(&ctx->desc_list,
1181 VPE_CHAN_LUMA_OUT);
1182 if (d_q_data->fmt->coplanar)
1183 vpdma_add_sync_on_channel_ctd(&ctx->desc_list,
1184 VPE_CHAN_CHROMA_OUT);
1185 }
1123 1186
1124 if (ctx->deinterlacing) 1187 if (ctx->deinterlacing)
1125 vpdma_add_sync_on_channel_ctd(&ctx->desc_list, VPE_CHAN_MV_OUT); 1188 vpdma_add_sync_on_channel_ctd(&ctx->desc_list, VPE_CHAN_MV_OUT);
@@ -1198,6 +1261,8 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
1198 1261
1199 vpdma_unmap_desc_buf(dev->vpdma, &ctx->desc_list.buf); 1262 vpdma_unmap_desc_buf(dev->vpdma, &ctx->desc_list.buf);
1200 vpdma_unmap_desc_buf(dev->vpdma, &ctx->mmr_adb); 1263 vpdma_unmap_desc_buf(dev->vpdma, &ctx->mmr_adb);
1264 vpdma_unmap_desc_buf(dev->vpdma, &ctx->sc_coeff_h);
1265 vpdma_unmap_desc_buf(dev->vpdma, &ctx->sc_coeff_v);
1201 1266
1202 vpdma_reset_desc_list(&ctx->desc_list); 1267 vpdma_reset_desc_list(&ctx->desc_list);
1203 1268
@@ -1352,7 +1417,8 @@ static int __vpe_try_fmt(struct vpe_ctx *ctx, struct v4l2_format *f,
1352{ 1417{
1353 struct v4l2_pix_format_mplane *pix = &f->fmt.pix_mp; 1418 struct v4l2_pix_format_mplane *pix = &f->fmt.pix_mp;
1354 struct v4l2_plane_pix_format *plane_fmt; 1419 struct v4l2_plane_pix_format *plane_fmt;
1355 int i; 1420 unsigned int w_align;
1421 int i, depth, depth_bytes;
1356 1422
1357 if (!fmt || !(fmt->types & type)) { 1423 if (!fmt || !(fmt->types & type)) {
1358 vpe_err(ctx->dev, "Fourcc format (0x%08x) invalid.\n", 1424 vpe_err(ctx->dev, "Fourcc format (0x%08x) invalid.\n",
@@ -1363,35 +1429,57 @@ static int __vpe_try_fmt(struct vpe_ctx *ctx, struct v4l2_format *f,
1363 if (pix->field != V4L2_FIELD_NONE && pix->field != V4L2_FIELD_ALTERNATE) 1429 if (pix->field != V4L2_FIELD_NONE && pix->field != V4L2_FIELD_ALTERNATE)
1364 pix->field = V4L2_FIELD_NONE; 1430 pix->field = V4L2_FIELD_NONE;
1365 1431
1366 v4l_bound_align_image(&pix->width, MIN_W, MAX_W, W_ALIGN, 1432 depth = fmt->vpdma_fmt[VPE_LUMA]->depth;
1433
1434 /*
1435 * the line stride should 16 byte aligned for VPDMA to work, based on
1436 * the bytes per pixel, figure out how much the width should be aligned
1437 * to make sure line stride is 16 byte aligned
1438 */
1439 depth_bytes = depth >> 3;
1440
1441 if (depth_bytes == 3)
1442 /*
1443 * if bpp is 3(as in some RGB formats), the pixel width doesn't
1444 * really help in ensuring line stride is 16 byte aligned
1445 */
1446 w_align = 4;
1447 else
1448 /*
1449 * for the remainder bpp(4, 2 and 1), the pixel width alignment
1450 * can ensure a line stride alignment of 16 bytes. For example,
1451 * if bpp is 2, then the line stride can be 16 byte aligned if
1452 * the width is 8 byte aligned
1453 */
1454 w_align = order_base_2(VPDMA_DESC_ALIGN / depth_bytes);
1455
1456 v4l_bound_align_image(&pix->width, MIN_W, MAX_W, w_align,
1367 &pix->height, MIN_H, MAX_H, H_ALIGN, 1457 &pix->height, MIN_H, MAX_H, H_ALIGN,
1368 S_ALIGN); 1458 S_ALIGN);
1369 1459
1370 pix->num_planes = fmt->coplanar ? 2 : 1; 1460 pix->num_planes = fmt->coplanar ? 2 : 1;
1371 pix->pixelformat = fmt->fourcc; 1461 pix->pixelformat = fmt->fourcc;
1372 1462
1373 if (type == VPE_FMT_TYPE_CAPTURE) { 1463 if (!pix->colorspace) {
1374 struct vpe_q_data *s_q_data; 1464 if (fmt->fourcc == V4L2_PIX_FMT_RGB24 ||
1375 1465 fmt->fourcc == V4L2_PIX_FMT_BGR24 ||
1376 /* get colorspace from the source queue */ 1466 fmt->fourcc == V4L2_PIX_FMT_RGB32 ||
1377 s_q_data = get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); 1467 fmt->fourcc == V4L2_PIX_FMT_BGR32) {
1378 1468 pix->colorspace = V4L2_COLORSPACE_SRGB;
1379 pix->colorspace = s_q_data->colorspace; 1469 } else {
1380 } else { 1470 if (pix->height > 1280) /* HD */
1381 if (!pix->colorspace) 1471 pix->colorspace = V4L2_COLORSPACE_REC709;
1382 pix->colorspace = V4L2_COLORSPACE_SMPTE240M; 1472 else /* SD */
1473 pix->colorspace = V4L2_COLORSPACE_SMPTE170M;
1474 }
1383 } 1475 }
1384 1476
1385 for (i = 0; i < pix->num_planes; i++) { 1477 for (i = 0; i < pix->num_planes; i++) {
1386 int depth;
1387
1388 plane_fmt = &pix->plane_fmt[i]; 1478 plane_fmt = &pix->plane_fmt[i];
1389 depth = fmt->vpdma_fmt[i]->depth; 1479 depth = fmt->vpdma_fmt[i]->depth;
1390 1480
1391 if (i == VPE_LUMA) 1481 if (i == VPE_LUMA)
1392 plane_fmt->bytesperline = 1482 plane_fmt->bytesperline = (pix->width * depth) >> 3;
1393 round_up((pix->width * depth) >> 3,
1394 1 << L_ALIGN);
1395 else 1483 else
1396 plane_fmt->bytesperline = pix->width; 1484 plane_fmt->bytesperline = pix->width;
1397 1485
@@ -1749,6 +1837,14 @@ static int vpe_open(struct file *file)
1749 if (ret != 0) 1837 if (ret != 0)
1750 goto free_desc_list; 1838 goto free_desc_list;
1751 1839
1840 ret = vpdma_alloc_desc_buf(&ctx->sc_coeff_h, SC_COEF_SRAM_SIZE);
1841 if (ret != 0)
1842 goto free_mmr_adb;
1843
1844 ret = vpdma_alloc_desc_buf(&ctx->sc_coeff_v, SC_COEF_SRAM_SIZE);
1845 if (ret != 0)
1846 goto free_sc_h;
1847
1752 init_adb_hdrs(ctx); 1848 init_adb_hdrs(ctx);
1753 1849
1754 v4l2_fh_init(&ctx->fh, video_devdata(file)); 1850 v4l2_fh_init(&ctx->fh, video_devdata(file));
@@ -1770,7 +1866,7 @@ static int vpe_open(struct file *file)
1770 s_q_data->height = 1080; 1866 s_q_data->height = 1080;
1771 s_q_data->sizeimage[VPE_LUMA] = (s_q_data->width * s_q_data->height * 1867 s_q_data->sizeimage[VPE_LUMA] = (s_q_data->width * s_q_data->height *
1772 s_q_data->fmt->vpdma_fmt[VPE_LUMA]->depth) >> 3; 1868 s_q_data->fmt->vpdma_fmt[VPE_LUMA]->depth) >> 3;
1773 s_q_data->colorspace = V4L2_COLORSPACE_SMPTE240M; 1869 s_q_data->colorspace = V4L2_COLORSPACE_SMPTE170M;
1774 s_q_data->field = V4L2_FIELD_NONE; 1870 s_q_data->field = V4L2_FIELD_NONE;
1775 s_q_data->c_rect.left = 0; 1871 s_q_data->c_rect.left = 0;
1776 s_q_data->c_rect.top = 0; 1872 s_q_data->c_rect.top = 0;
@@ -1817,6 +1913,10 @@ static int vpe_open(struct file *file)
1817exit_fh: 1913exit_fh:
1818 v4l2_ctrl_handler_free(hdl); 1914 v4l2_ctrl_handler_free(hdl);
1819 v4l2_fh_exit(&ctx->fh); 1915 v4l2_fh_exit(&ctx->fh);
1916 vpdma_free_desc_buf(&ctx->sc_coeff_v);
1917free_sc_h:
1918 vpdma_free_desc_buf(&ctx->sc_coeff_h);
1919free_mmr_adb:
1820 vpdma_free_desc_buf(&ctx->mmr_adb); 1920 vpdma_free_desc_buf(&ctx->mmr_adb);
1821free_desc_list: 1921free_desc_list:
1822 vpdma_free_desc_list(&ctx->desc_list); 1922 vpdma_free_desc_list(&ctx->desc_list);
@@ -1938,12 +2038,11 @@ static int vpe_probe(struct platform_device *pdev)
1938{ 2038{
1939 struct vpe_dev *dev; 2039 struct vpe_dev *dev;
1940 struct video_device *vfd; 2040 struct video_device *vfd;
1941 struct resource *res;
1942 int ret, irq, func; 2041 int ret, irq, func;
1943 2042
1944 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); 2043 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
1945 if (IS_ERR(dev)) 2044 if (!dev)
1946 return PTR_ERR(dev); 2045 return -ENOMEM;
1947 2046
1948 spin_lock_init(&dev->lock); 2047 spin_lock_init(&dev->lock);
1949 2048
@@ -1954,16 +2053,17 @@ static int vpe_probe(struct platform_device *pdev)
1954 atomic_set(&dev->num_instances, 0); 2053 atomic_set(&dev->num_instances, 0);
1955 mutex_init(&dev->dev_mutex); 2054 mutex_init(&dev->dev_mutex);
1956 2055
1957 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "vpe_top"); 2056 dev->res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
2057 "vpe_top");
1958 /* 2058 /*
1959 * HACK: we get resource info from device tree in the form of a list of 2059 * HACK: we get resource info from device tree in the form of a list of
1960 * VPE sub blocks, the driver currently uses only the base of vpe_top 2060 * VPE sub blocks, the driver currently uses only the base of vpe_top
1961 * for register access, the driver should be changed later to access 2061 * for register access, the driver should be changed later to access
1962 * registers based on the sub block base addresses 2062 * registers based on the sub block base addresses
1963 */ 2063 */
1964 dev->base = devm_ioremap(&pdev->dev, res->start, SZ_32K); 2064 dev->base = devm_ioremap(&pdev->dev, dev->res->start, SZ_32K);
1965 if (IS_ERR(dev->base)) { 2065 if (!dev->base) {
1966 ret = PTR_ERR(dev->base); 2066 ret = -ENOMEM;
1967 goto v4l2_dev_unreg; 2067 goto v4l2_dev_unreg;
1968 } 2068 }
1969 2069
@@ -2006,9 +2106,23 @@ static int vpe_probe(struct platform_device *pdev)
2006 2106
2007 vpe_top_vpdma_reset(dev); 2107 vpe_top_vpdma_reset(dev);
2008 2108
2109 dev->sc = sc_create(pdev);
2110 if (IS_ERR(dev->sc)) {
2111 ret = PTR_ERR(dev->sc);
2112 goto runtime_put;
2113 }
2114
2115 dev->csc = csc_create(pdev);
2116 if (IS_ERR(dev->csc)) {
2117 ret = PTR_ERR(dev->csc);
2118 goto runtime_put;
2119 }
2120
2009 dev->vpdma = vpdma_create(pdev); 2121 dev->vpdma = vpdma_create(pdev);
2010 if (IS_ERR(dev->vpdma)) 2122 if (IS_ERR(dev->vpdma)) {
2123 ret = PTR_ERR(dev->vpdma);
2011 goto runtime_put; 2124 goto runtime_put;
2125 }
2012 2126
2013 vfd = &dev->vfd; 2127 vfd = &dev->vfd;
2014 *vfd = vpe_videodev; 2128 *vfd = vpe_videodev;
@@ -2081,18 +2195,7 @@ static struct platform_driver vpe_pdrv = {
2081 }, 2195 },
2082}; 2196};
2083 2197
2084static void __exit vpe_exit(void) 2198module_platform_driver(vpe_pdrv);
2085{
2086 platform_driver_unregister(&vpe_pdrv);
2087}
2088
2089static int __init vpe_init(void)
2090{
2091 return platform_driver_register(&vpe_pdrv);
2092}
2093
2094module_init(vpe_init);
2095module_exit(vpe_exit);
2096 2199
2097MODULE_DESCRIPTION("TI VPE driver"); 2200MODULE_DESCRIPTION("TI VPE driver");
2098MODULE_AUTHOR("Dale Farnsworth, <dale@farnsworth.org>"); 2201MODULE_AUTHOR("Dale Farnsworth, <dale@farnsworth.org>");
diff --git a/drivers/media/platform/ti-vpe/vpe_regs.h b/drivers/media/platform/ti-vpe/vpe_regs.h
index ed214e828398..74283d79eae1 100644
--- a/drivers/media/platform/ti-vpe/vpe_regs.h
+++ b/drivers/media/platform/ti-vpe/vpe_regs.h
@@ -306,191 +306,4 @@
306#define VPE_FMD_FRAME_DIFF_MASK 0x000fffff 306#define VPE_FMD_FRAME_DIFF_MASK 0x000fffff
307#define VPE_FMD_FRAME_DIFF_SHIFT 0 307#define VPE_FMD_FRAME_DIFF_SHIFT 0
308 308
309/* VPE scaler regs */
310#define VPE_SC_MP_SC0 0x0700
311#define VPE_INTERLACE_O (1 << 0)
312#define VPE_LINEAR (1 << 1)
313#define VPE_SC_BYPASS (1 << 2)
314#define VPE_INVT_FID (1 << 3)
315#define VPE_USE_RAV (1 << 4)
316#define VPE_ENABLE_EV (1 << 5)
317#define VPE_AUTO_HS (1 << 6)
318#define VPE_DCM_2X (1 << 7)
319#define VPE_DCM_4X (1 << 8)
320#define VPE_HP_BYPASS (1 << 9)
321#define VPE_INTERLACE_I (1 << 10)
322#define VPE_ENABLE_SIN2_VER_INTP (1 << 11)
323#define VPE_Y_PK_EN (1 << 14)
324#define VPE_TRIM (1 << 15)
325#define VPE_SELFGEN_FID (1 << 16)
326
327#define VPE_SC_MP_SC1 0x0704
328#define VPE_ROW_ACC_INC_MASK 0x07ffffff
329#define VPE_ROW_ACC_INC_SHIFT 0
330
331#define VPE_SC_MP_SC2 0x0708
332#define VPE_ROW_ACC_OFFSET_MASK 0x0fffffff
333#define VPE_ROW_ACC_OFFSET_SHIFT 0
334
335#define VPE_SC_MP_SC3 0x070c
336#define VPE_ROW_ACC_OFFSET_B_MASK 0x0fffffff
337#define VPE_ROW_ACC_OFFSET_B_SHIFT 0
338
339#define VPE_SC_MP_SC4 0x0710
340#define VPE_TAR_H_MASK 0x07ff
341#define VPE_TAR_H_SHIFT 0
342#define VPE_TAR_W_MASK 0x07ff
343#define VPE_TAR_W_SHIFT 12
344#define VPE_LIN_ACC_INC_U_MASK 0x07
345#define VPE_LIN_ACC_INC_U_SHIFT 24
346#define VPE_NLIN_ACC_INIT_U_MASK 0x07
347#define VPE_NLIN_ACC_INIT_U_SHIFT 28
348
349#define VPE_SC_MP_SC5 0x0714
350#define VPE_SRC_H_MASK 0x07ff
351#define VPE_SRC_H_SHIFT 0
352#define VPE_SRC_W_MASK 0x07ff
353#define VPE_SRC_W_SHIFT 12
354#define VPE_NLIN_ACC_INC_U_MASK 0x07
355#define VPE_NLIN_ACC_INC_U_SHIFT 24
356
357#define VPE_SC_MP_SC6 0x0718
358#define VPE_ROW_ACC_INIT_RAV_MASK 0x03ff
359#define VPE_ROW_ACC_INIT_RAV_SHIFT 0
360#define VPE_ROW_ACC_INIT_RAV_B_MASK 0x03ff
361#define VPE_ROW_ACC_INIT_RAV_B_SHIFT 10
362
363#define VPE_SC_MP_SC8 0x0720
364#define VPE_NLIN_LEFT_MASK 0x07ff
365#define VPE_NLIN_LEFT_SHIFT 0
366#define VPE_NLIN_RIGHT_MASK 0x07ff
367#define VPE_NLIN_RIGHT_SHIFT 12
368
369#define VPE_SC_MP_SC9 0x0724
370#define VPE_LIN_ACC_INC VPE_SC_MP_SC9
371
372#define VPE_SC_MP_SC10 0x0728
373#define VPE_NLIN_ACC_INIT VPE_SC_MP_SC10
374
375#define VPE_SC_MP_SC11 0x072c
376#define VPE_NLIN_ACC_INC VPE_SC_MP_SC11
377
378#define VPE_SC_MP_SC12 0x0730
379#define VPE_COL_ACC_OFFSET_MASK 0x01ffffff
380#define VPE_COL_ACC_OFFSET_SHIFT 0
381
382#define VPE_SC_MP_SC13 0x0734
383#define VPE_SC_FACTOR_RAV_MASK 0x03ff
384#define VPE_SC_FACTOR_RAV_SHIFT 0
385#define VPE_CHROMA_INTP_THR_MASK 0x03ff
386#define VPE_CHROMA_INTP_THR_SHIFT 12
387#define VPE_DELTA_CHROMA_THR_MASK 0x0f
388#define VPE_DELTA_CHROMA_THR_SHIFT 24
389
390#define VPE_SC_MP_SC17 0x0744
391#define VPE_EV_THR_MASK 0x03ff
392#define VPE_EV_THR_SHIFT 12
393#define VPE_DELTA_LUMA_THR_MASK 0x0f
394#define VPE_DELTA_LUMA_THR_SHIFT 24
395#define VPE_DELTA_EV_THR_MASK 0x0f
396#define VPE_DELTA_EV_THR_SHIFT 28
397
398#define VPE_SC_MP_SC18 0x0748
399#define VPE_HS_FACTOR_MASK 0x03ff
400#define VPE_HS_FACTOR_SHIFT 0
401#define VPE_CONF_DEFAULT_MASK 0x01ff
402#define VPE_CONF_DEFAULT_SHIFT 16
403
404#define VPE_SC_MP_SC19 0x074c
405#define VPE_HPF_COEFF0_MASK 0xff
406#define VPE_HPF_COEFF0_SHIFT 0
407#define VPE_HPF_COEFF1_MASK 0xff
408#define VPE_HPF_COEFF1_SHIFT 8
409#define VPE_HPF_COEFF2_MASK 0xff
410#define VPE_HPF_COEFF2_SHIFT 16
411#define VPE_HPF_COEFF3_MASK 0xff
412#define VPE_HPF_COEFF3_SHIFT 23
413
414#define VPE_SC_MP_SC20 0x0750
415#define VPE_HPF_COEFF4_MASK 0xff
416#define VPE_HPF_COEFF4_SHIFT 0
417#define VPE_HPF_COEFF5_MASK 0xff
418#define VPE_HPF_COEFF5_SHIFT 8
419#define VPE_HPF_NORM_SHIFT_MASK 0x07
420#define VPE_HPF_NORM_SHIFT_SHIFT 16
421#define VPE_NL_LIMIT_MASK 0x1ff
422#define VPE_NL_LIMIT_SHIFT 20
423
424#define VPE_SC_MP_SC21 0x0754
425#define VPE_NL_LO_THR_MASK 0x01ff
426#define VPE_NL_LO_THR_SHIFT 0
427#define VPE_NL_LO_SLOPE_MASK 0xff
428#define VPE_NL_LO_SLOPE_SHIFT 16
429
430#define VPE_SC_MP_SC22 0x0758
431#define VPE_NL_HI_THR_MASK 0x01ff
432#define VPE_NL_HI_THR_SHIFT 0
433#define VPE_NL_HI_SLOPE_SH_MASK 0x07
434#define VPE_NL_HI_SLOPE_SH_SHIFT 16
435
436#define VPE_SC_MP_SC23 0x075c
437#define VPE_GRADIENT_THR_MASK 0x07ff
438#define VPE_GRADIENT_THR_SHIFT 0
439#define VPE_GRADIENT_THR_RANGE_MASK 0x0f
440#define VPE_GRADIENT_THR_RANGE_SHIFT 12
441#define VPE_MIN_GY_THR_MASK 0xff
442#define VPE_MIN_GY_THR_SHIFT 16
443#define VPE_MIN_GY_THR_RANGE_MASK 0x0f
444#define VPE_MIN_GY_THR_RANGE_SHIFT 28
445
446#define VPE_SC_MP_SC24 0x0760
447#define VPE_ORG_H_MASK 0x07ff
448#define VPE_ORG_H_SHIFT 0
449#define VPE_ORG_W_MASK 0x07ff
450#define VPE_ORG_W_SHIFT 16
451
452#define VPE_SC_MP_SC25 0x0764
453#define VPE_OFF_H_MASK 0x07ff
454#define VPE_OFF_H_SHIFT 0
455#define VPE_OFF_W_MASK 0x07ff
456#define VPE_OFF_W_SHIFT 16
457
458/* VPE color space converter regs */
459#define VPE_CSC_CSC00 0x5700
460#define VPE_CSC_A0_MASK 0x1fff
461#define VPE_CSC_A0_SHIFT 0
462#define VPE_CSC_B0_MASK 0x1fff
463#define VPE_CSC_B0_SHIFT 16
464
465#define VPE_CSC_CSC01 0x5704
466#define VPE_CSC_C0_MASK 0x1fff
467#define VPE_CSC_C0_SHIFT 0
468#define VPE_CSC_A1_MASK 0x1fff
469#define VPE_CSC_A1_SHIFT 16
470
471#define VPE_CSC_CSC02 0x5708
472#define VPE_CSC_B1_MASK 0x1fff
473#define VPE_CSC_B1_SHIFT 0
474#define VPE_CSC_C1_MASK 0x1fff
475#define VPE_CSC_C1_SHIFT 16
476
477#define VPE_CSC_CSC03 0x570c
478#define VPE_CSC_A2_MASK 0x1fff
479#define VPE_CSC_A2_SHIFT 0
480#define VPE_CSC_B2_MASK 0x1fff
481#define VPE_CSC_B2_SHIFT 16
482
483#define VPE_CSC_CSC04 0x5710
484#define VPE_CSC_C2_MASK 0x1fff
485#define VPE_CSC_C2_SHIFT 0
486#define VPE_CSC_D0_MASK 0x0fff
487#define VPE_CSC_D0_SHIFT 16
488
489#define VPE_CSC_CSC05 0x5714
490#define VPE_CSC_D1_MASK 0x0fff
491#define VPE_CSC_D1_SHIFT 0
492#define VPE_CSC_D2_MASK 0x0fff
493#define VPE_CSC_D2_SHIFT 16
494#define VPE_CSC_BYPASS (1 << 28)
495
496#endif 309#endif