diff options
| -rw-r--r-- | drivers/media/platform/vsp1/vsp1_rpf.c | 21 | ||||
| -rw-r--r-- | drivers/media/platform/vsp1/vsp1_rwpf.c | 2 | ||||
| -rw-r--r-- | drivers/media/platform/vsp1/vsp1_rwpf.h | 3 | ||||
| -rw-r--r-- | drivers/media/platform/vsp1/vsp1_wpf.c | 10 |
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 | ||
| 258 | error: | 261 | error: |
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 | ||
| 244 | int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf) | 244 | int 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 | ||
| 244 | error: | 248 | error: |
