aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/vsp1/vsp1_rpf.c21
-rw-r--r--drivers/media/platform/vsp1/vsp1_rwpf.c2
-rw-r--r--drivers/media/platform/vsp1/vsp1_rwpf.h3
-rw-r--r--drivers/media/platform/vsp1/vsp1_wpf.c10
4 files changed, 22 insertions, 14 deletions
diff --git a/drivers/media/platform/vsp1/vsp1_rpf.c b/drivers/media/platform/vsp1/vsp1_rpf.c
index b8e801edf84c..4258c7208877 100644
--- a/drivers/media/platform/vsp1/vsp1_rpf.c
+++ b/drivers/media/platform/vsp1/vsp1_rpf.c
@@ -73,8 +73,15 @@ static void rpf_configure(struct vsp1_entity *entity,
73 u32 pstride; 73 u32 pstride;
74 u32 infmt; 74 u32 infmt;
75 75
76 if (!full) 76 if (!full) {
77 vsp1_rpf_write(rpf, dl, VI6_RPF_VRTCOL_SET,
78 rpf->alpha << VI6_RPF_VRTCOL_SET_LAYA_SHIFT);
79 vsp1_rpf_write(rpf, dl, VI6_RPF_MULT_ALPHA, rpf->mult_alpha |
80 (rpf->alpha << VI6_RPF_MULT_ALPHA_RATIO_SHIFT));
81
82 vsp1_pipeline_propagate_alpha(pipe, dl, rpf->alpha);
77 return; 83 return;
84 }
78 85
79 /* Source size, stride and crop offsets. 86 /* Source size, stride and crop offsets.
80 * 87 *
@@ -171,9 +178,6 @@ static void rpf_configure(struct vsp1_entity *entity,
171 (fmtinfo->alpha ? VI6_RPF_ALPH_SEL_ASEL_PACKED 178 (fmtinfo->alpha ? VI6_RPF_ALPH_SEL_ASEL_PACKED
172 : VI6_RPF_ALPH_SEL_ASEL_FIXED)); 179 : VI6_RPF_ALPH_SEL_ASEL_FIXED));
173 180
174 vsp1_rpf_write(rpf, dl, VI6_RPF_VRTCOL_SET,
175 rpf->alpha << VI6_RPF_VRTCOL_SET_LAYA_SHIFT);
176
177 if (entity->vsp1->info->gen == 3) { 181 if (entity->vsp1->info->gen == 3) {
178 u32 mult; 182 u32 mult;
179 183
@@ -191,8 +195,7 @@ static void rpf_configure(struct vsp1_entity *entity,
191 mult = VI6_RPF_MULT_ALPHA_A_MMD_RATIO 195 mult = VI6_RPF_MULT_ALPHA_A_MMD_RATIO
192 | (premultiplied ? 196 | (premultiplied ?
193 VI6_RPF_MULT_ALPHA_P_MMD_RATIO : 197 VI6_RPF_MULT_ALPHA_P_MMD_RATIO :
194 VI6_RPF_MULT_ALPHA_P_MMD_NONE) 198 VI6_RPF_MULT_ALPHA_P_MMD_NONE);
195 | (rpf->alpha << VI6_RPF_MULT_ALPHA_RATIO_SHIFT);
196 } else { 199 } else {
197 /* When the input doesn't contain an alpha channel the 200 /* When the input doesn't contain an alpha channel the
198 * global alpha value is applied in the unpacking unit, 201 * global alpha value is applied in the unpacking unit,
@@ -203,11 +206,9 @@ static void rpf_configure(struct vsp1_entity *entity,
203 | VI6_RPF_MULT_ALPHA_P_MMD_NONE; 206 | VI6_RPF_MULT_ALPHA_P_MMD_NONE;
204 } 207 }
205 208
206 vsp1_rpf_write(rpf, dl, VI6_RPF_MULT_ALPHA, mult); 209 rpf->mult_alpha = mult;
207 } 210 }
208 211
209 vsp1_pipeline_propagate_alpha(pipe, dl, rpf->alpha);
210
211 vsp1_rpf_write(rpf, dl, VI6_RPF_MSK_CTRL, 0); 212 vsp1_rpf_write(rpf, dl, VI6_RPF_MSK_CTRL, 0);
212 vsp1_rpf_write(rpf, dl, VI6_RPF_CKEY_CTRL, 0); 213 vsp1_rpf_write(rpf, dl, VI6_RPF_CKEY_CTRL, 0);
213 214
@@ -253,6 +254,8 @@ struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index)
253 goto error; 254 goto error;
254 } 255 }
255 256
257 v4l2_ctrl_handler_setup(&rpf->ctrls);
258
256 return rpf; 259 return rpf;
257 260
258error: 261error:
diff --git a/drivers/media/platform/vsp1/vsp1_rwpf.c b/drivers/media/platform/vsp1/vsp1_rwpf.c
index 3b6e032e7806..cd3562d1d9cf 100644
--- a/drivers/media/platform/vsp1/vsp1_rwpf.c
+++ b/drivers/media/platform/vsp1/vsp1_rwpf.c
@@ -243,8 +243,6 @@ static const struct v4l2_ctrl_ops vsp1_rwpf_ctrl_ops = {
243 243
244int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf) 244int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf)
245{ 245{
246 rwpf->alpha = 255;
247
248 v4l2_ctrl_handler_init(&rwpf->ctrls, 1); 246 v4l2_ctrl_handler_init(&rwpf->ctrls, 1);
249 v4l2_ctrl_new_std(&rwpf->ctrls, &vsp1_rwpf_ctrl_ops, 247 v4l2_ctrl_new_std(&rwpf->ctrls, &vsp1_rwpf_ctrl_ops,
250 V4L2_CID_ALPHA_COMPONENT, 0, 255, 1, 255); 248 V4L2_CID_ALPHA_COMPONENT, 0, 255, 1, 255);
diff --git a/drivers/media/platform/vsp1/vsp1_rwpf.h b/drivers/media/platform/vsp1/vsp1_rwpf.h
index 9ff7c78f239e..801cacc12e07 100644
--- a/drivers/media/platform/vsp1/vsp1_rwpf.h
+++ b/drivers/media/platform/vsp1/vsp1_rwpf.h
@@ -49,6 +49,9 @@ struct vsp1_rwpf {
49 49
50 unsigned int alpha; 50 unsigned int alpha;
51 51
52 u32 mult_alpha;
53 u32 outfmt;
54
52 unsigned int offsets[2]; 55 unsigned int offsets[2];
53 struct vsp1_rwpf_memory mem; 56 struct vsp1_rwpf_memory mem;
54 57
diff --git a/drivers/media/platform/vsp1/vsp1_wpf.c b/drivers/media/platform/vsp1/vsp1_wpf.c
index 474feac67155..9385bc703dcd 100644
--- a/drivers/media/platform/vsp1/vsp1_wpf.c
+++ b/drivers/media/platform/vsp1/vsp1_wpf.c
@@ -104,8 +104,11 @@ static void wpf_configure(struct vsp1_entity *entity,
104 u32 outfmt = 0; 104 u32 outfmt = 0;
105 u32 srcrpf = 0; 105 u32 srcrpf = 0;
106 106
107 if (!full) 107 if (!full) {
108 vsp1_wpf_write(wpf, dl, VI6_WPF_OUTFMT, wpf->outfmt |
109 (wpf->alpha << VI6_WPF_OUTFMT_PDV_SHIFT));
108 return; 110 return;
111 }
109 112
110 /* Cropping */ 113 /* Cropping */
111 crop = vsp1_rwpf_get_crop(wpf, wpf->entity.config); 114 crop = vsp1_rwpf_get_crop(wpf, wpf->entity.config);
@@ -151,8 +154,7 @@ static void wpf_configure(struct vsp1_entity *entity,
151 if (sink_format->code != source_format->code) 154 if (sink_format->code != source_format->code)
152 outfmt |= VI6_WPF_OUTFMT_CSC; 155 outfmt |= VI6_WPF_OUTFMT_CSC;
153 156
154 outfmt |= wpf->alpha << VI6_WPF_OUTFMT_PDV_SHIFT; 157 wpf->outfmt = outfmt;
155 vsp1_wpf_write(wpf, dl, VI6_WPF_OUTFMT, outfmt);
156 158
157 vsp1_dl_list_write(dl, VI6_DPR_WPF_FPORCH(wpf->entity.index), 159 vsp1_dl_list_write(dl, VI6_DPR_WPF_FPORCH(wpf->entity.index),
158 VI6_DPR_WPF_FPORCH_FP_WPFN); 160 VI6_DPR_WPF_FPORCH_FP_WPFN);
@@ -239,6 +241,8 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index)
239 goto error; 241 goto error;
240 } 242 }
241 243
244 v4l2_ctrl_handler_setup(&wpf->ctrls);
245
242 return wpf; 246 return wpf;
243 247
244error: 248error: