summaryrefslogtreecommitdiff
path: root/drivers/gpu/imx
diff options
context:
space:
mode:
authorDzung Hoang <dzung.hoang@nxp.com>2018-11-07 12:57:04 +0200
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:35:07 +0800
commit459a5fac54dd22bcef80cbabbd8e3db8527fbe0f (patch)
tree956b8a08b2d4786e6ba356e8d2e3c48732da4c64 /drivers/gpu/imx
parent0d6e3897d770755bbcc3950554e429aee0bb9f5f (diff)
MLK-20263: drm/imx/dcss: fix channel-0 line shift
If an RGB buffer is fed to channel-0, the output will have one line shifted down, with the last line appearing on top. Using the 7-tap filter will fix the issue. The 5-tap filter code will be removed completely. Signed-off-by: Dzung Hoang <dzung.hoang@nxp.com> Signed-off-by: Laurentiu Palcu <laurentiu.palcu@nxp.com>
Diffstat (limited to 'drivers/gpu/imx')
-rw-r--r--drivers/gpu/imx/dcss/dcss-scaler.c60
1 files changed, 5 insertions, 55 deletions
diff --git a/drivers/gpu/imx/dcss/dcss-scaler.c b/drivers/gpu/imx/dcss/dcss-scaler.c
index 84e6859fb95b..abddd129169c 100644
--- a/drivers/gpu/imx/dcss/dcss-scaler.c
+++ b/drivers/gpu/imx/dcss/dcss-scaler.c
@@ -701,45 +701,6 @@ static void dcss_scaler_program_7_coef_set(struct dcss_soc *dcss, int ch_num,
}
}
-static void dcss_scaler_program_5_coef_set(struct dcss_soc *dcss, int ch_num,
- int base_addr,
- int coef[][PSC_NUM_TAPS])
-{
- int i, phase;
-
- for (i = 0; i < PSC_STORED_PHASES; i++) {
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[i][1] & 0xfff) << 16 |
- (coef[i][2] & 0xfff) << 4 |
- (coef[i][3] & 0xf00) >> 8),
- base_addr + i * sizeof(u32));
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[i][3] & 0x0ff) << 20 |
- (coef[i][4] & 0xfff) << 8 |
- (coef[i][5] & 0xff0) >> 4),
- base_addr + 0x40 + i * sizeof(u32));
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[i][5] & 0x00f) << 24),
- base_addr + 0x80 + i * sizeof(u32));
- }
- /* reverse both phase and tap orderings */
- for (phase = (PSC_NUM_PHASES >> 1) - 1; i < PSC_NUM_PHASES; i++, phase--) {
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[phase][5] & 0xfff) << 16 |
- (coef[phase][4] & 0xfff) << 4 |
- (coef[phase][3] & 0xf00) >> 8),
- base_addr + i * sizeof(u32));
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[phase][3] & 0x0ff) << 20 |
- (coef[phase][2] & 0xfff) << 8 |
- (coef[phase][1] & 0xff0) >> 4),
- base_addr + 0x40 + i * sizeof(u32));
- dcss_scaler_write(dcss->scaler_priv, ch_num,
- ((coef[phase][1] & 0x00f) << 24),
- base_addr + 0x80 + i * sizeof(u32));
- }
-}
-
static void dcss_scaler_yuv_coef_set(struct dcss_soc *dcss, int ch_num,
enum buffer_format src_format,
enum buffer_format dst_format,
@@ -749,9 +710,6 @@ static void dcss_scaler_yuv_coef_set(struct dcss_soc *dcss, int ch_num,
{
struct dcss_scaler_ch *ch = &dcss->scaler_priv->ch[ch_num];
int coef[PSC_STORED_PHASES][PSC_NUM_TAPS];
- bool program_5_taps = use_5_taps ||
- (dst_format == BUF_FMT_YUV422 &&
- src_format == BUF_FMT_ARGB8888_YUV444);
/* horizontal luma */
dcss_scaler_filter_design(src_xres, dst_xres, 0,
@@ -763,12 +721,8 @@ static void dcss_scaler_yuv_coef_set(struct dcss_soc *dcss, int ch_num,
dcss_scaler_filter_design(src_yres, dst_yres, use_5_taps,
src_yres == dst_yres, coef);
- if (program_5_taps)
- dcss_scaler_program_5_coef_set(dcss, ch_num,
- DCSS_SCALER_COEF_VLUM, coef);
- else
- dcss_scaler_program_7_coef_set(dcss, ch_num,
- DCSS_SCALER_COEF_VLUM, coef);
+ dcss_scaler_program_7_coef_set(dcss, ch_num,
+ DCSS_SCALER_COEF_VLUM, coef);
/* adjust chroma resolution */
if (src_format != BUF_FMT_ARGB8888_YUV444)
@@ -793,12 +747,8 @@ static void dcss_scaler_yuv_coef_set(struct dcss_soc *dcss, int ch_num,
(src_yres == dst_yres) && (ch->c_vstart == 0),
coef);
- if (program_5_taps)
- dcss_scaler_program_5_coef_set(dcss, ch_num,
- DCSS_SCALER_COEF_VCHR, coef);
- else
- dcss_scaler_program_7_coef_set(dcss, ch_num,
- DCSS_SCALER_COEF_VCHR, coef);
+ dcss_scaler_program_7_coef_set(dcss, ch_num,
+ DCSS_SCALER_COEF_VCHR, coef);
}
static void dcss_scaler_rgb_coef_set(struct dcss_soc *dcss, int ch_num,
@@ -816,7 +766,7 @@ static void dcss_scaler_rgb_coef_set(struct dcss_soc *dcss, int ch_num,
/* vertical RGB */
dcss_scaler_filter_design(src_yres, dst_yres, 1,
src_yres == dst_yres, coef);
- dcss_scaler_program_5_coef_set(dcss, ch_num,
+ dcss_scaler_program_7_coef_set(dcss, ch_num,
DCSS_SCALER_COEF_VLUM, coef);
}