Commit cbb7fa49 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

media: v4l: vsp1: Rename BRU to BRx

Some VSP instances have two blending units named BRU (Blend/ROP Unit)
and BRS (Blend/ROP Sub unit). The BRS is a smaller version of the BRU
with only two inputs, but otherwise offers similar features and offers
the same register interface. The BRU and BRS can be used exchangeably in
VSP pipelines (provided no more than two inputs are needed).

Due to historical reasons, the VSP1 driver implements support for both
the BRU and BRS through objects named vsp1_bru. The code uses the name
BRU to refer to either the BRU or the BRS, except in a few places where
noted explicitly. This creates confusion.

In an effort to avoid confusion, rename the vsp1_bru object and the
corresponding API to vsp1_brx, and use BRx to refer to blend unit
instances regardless of their type. The names BRU and BRS are retained
where reference to a particular blend unit type is needed, as well as in
hardware registers to stay close to the datasheet.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent dc3eaba4
...@@ -3,7 +3,7 @@ vsp1-y := vsp1_drv.o vsp1_entity.o vsp1_pipe.o ...@@ -3,7 +3,7 @@ vsp1-y := vsp1_drv.o vsp1_entity.o vsp1_pipe.o
vsp1-y += vsp1_dl.o vsp1_drm.o vsp1_video.o vsp1-y += vsp1_dl.o vsp1_drm.o vsp1_video.o
vsp1-y += vsp1_rpf.o vsp1_rwpf.o vsp1_wpf.o vsp1-y += vsp1_rpf.o vsp1_rwpf.o vsp1_wpf.o
vsp1-y += vsp1_clu.o vsp1_hsit.o vsp1_lut.o vsp1-y += vsp1_clu.o vsp1_hsit.o vsp1_lut.o
vsp1-y += vsp1_bru.o vsp1_sru.o vsp1_uds.o vsp1-y += vsp1_brx.o vsp1_sru.o vsp1_uds.o
vsp1-y += vsp1_hgo.o vsp1_hgt.o vsp1_histo.o vsp1-y += vsp1_hgo.o vsp1_hgt.o vsp1_histo.o
vsp1-y += vsp1_lif.o vsp1-y += vsp1_lif.o
......
...@@ -30,7 +30,7 @@ struct rcar_fcp_device; ...@@ -30,7 +30,7 @@ struct rcar_fcp_device;
struct vsp1_drm; struct vsp1_drm;
struct vsp1_entity; struct vsp1_entity;
struct vsp1_platform_data; struct vsp1_platform_data;
struct vsp1_bru; struct vsp1_brx;
struct vsp1_clu; struct vsp1_clu;
struct vsp1_hgo; struct vsp1_hgo;
struct vsp1_hgt; struct vsp1_hgt;
...@@ -78,8 +78,8 @@ struct vsp1_device { ...@@ -78,8 +78,8 @@ struct vsp1_device {
struct rcar_fcp_device *fcp; struct rcar_fcp_device *fcp;
struct device *bus_master; struct device *bus_master;
struct vsp1_bru *brs; struct vsp1_brx *brs;
struct vsp1_bru *bru; struct vsp1_brx *bru;
struct vsp1_clu *clu; struct vsp1_clu *clu;
struct vsp1_hgo *hgo; struct vsp1_hgo *hgo;
struct vsp1_hgt *hgt; struct vsp1_hgt *hgt;
......
/* /*
* vsp1_bru.h -- R-Car VSP1 Blend ROP Unit * vsp1_brx.h -- R-Car VSP1 Blend ROP Unit (BRU and BRS)
* *
* Copyright (C) 2013 Renesas Corporation * Copyright (C) 2013 Renesas Corporation
* *
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
*/ */
#ifndef __VSP1_BRU_H__ #ifndef __VSP1_BRX_H__
#define __VSP1_BRU_H__ #define __VSP1_BRX_H__
#include <media/media-entity.h> #include <media/media-entity.h>
#include <media/v4l2-ctrls.h> #include <media/v4l2-ctrls.h>
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
struct vsp1_device; struct vsp1_device;
struct vsp1_rwpf; struct vsp1_rwpf;
#define BRU_PAD_SINK(n) (n) #define BRX_PAD_SINK(n) (n)
struct vsp1_bru { struct vsp1_brx {
struct vsp1_entity entity; struct vsp1_entity entity;
unsigned int base; unsigned int base;
...@@ -37,12 +37,12 @@ struct vsp1_bru { ...@@ -37,12 +37,12 @@ struct vsp1_bru {
u32 bgcolor; u32 bgcolor;
}; };
static inline struct vsp1_bru *to_bru(struct v4l2_subdev *subdev) static inline struct vsp1_brx *to_brx(struct v4l2_subdev *subdev)
{ {
return container_of(subdev, struct vsp1_bru, entity.subdev); return container_of(subdev, struct vsp1_brx, entity.subdev);
} }
struct vsp1_bru *vsp1_bru_create(struct vsp1_device *vsp1, struct vsp1_brx *vsp1_brx_create(struct vsp1_device *vsp1,
enum vsp1_entity_type type); enum vsp1_entity_type type);
#endif /* __VSP1_BRU_H__ */ #endif /* __VSP1_BRX_H__ */
This diff is collapsed.
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
* @pipe: the VSP1 pipeline used for display * @pipe: the VSP1 pipeline used for display
* @width: output display width * @width: output display width
* @height: output display height * @height: output display height
* @force_bru_release: when set, release the BRU during the next reconfiguration * @force_brx_release: when set, release the BRx during the next reconfiguration
* @wait_queue: wait queue to wait for BRU release completion * @wait_queue: wait queue to wait for BRx release completion
* @du_complete: frame completion callback for the DU driver (optional) * @du_complete: frame completion callback for the DU driver (optional)
* @du_private: data to be passed to the du_complete callback * @du_private: data to be passed to the du_complete callback
*/ */
...@@ -35,7 +35,7 @@ struct vsp1_drm_pipeline { ...@@ -35,7 +35,7 @@ struct vsp1_drm_pipeline {
unsigned int width; unsigned int width;
unsigned int height; unsigned int height;
bool force_bru_release; bool force_brx_release;
wait_queue_head_t wait_queue; wait_queue_head_t wait_queue;
/* Frame synchronisation */ /* Frame synchronisation */
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include <media/v4l2-subdev.h> #include <media/v4l2-subdev.h>
#include "vsp1.h" #include "vsp1.h"
#include "vsp1_bru.h" #include "vsp1_brx.h"
#include "vsp1_clu.h" #include "vsp1_clu.h"
#include "vsp1_dl.h" #include "vsp1_dl.h"
#include "vsp1_drm.h" #include "vsp1_drm.h"
...@@ -269,7 +269,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -269,7 +269,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
/* Instantiate all the entities. */ /* Instantiate all the entities. */
if (vsp1->info->features & VSP1_HAS_BRS) { if (vsp1->info->features & VSP1_HAS_BRS) {
vsp1->brs = vsp1_bru_create(vsp1, VSP1_ENTITY_BRS); vsp1->brs = vsp1_brx_create(vsp1, VSP1_ENTITY_BRS);
if (IS_ERR(vsp1->brs)) { if (IS_ERR(vsp1->brs)) {
ret = PTR_ERR(vsp1->brs); ret = PTR_ERR(vsp1->brs);
goto done; goto done;
...@@ -279,7 +279,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -279,7 +279,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
} }
if (vsp1->info->features & VSP1_HAS_BRU) { if (vsp1->info->features & VSP1_HAS_BRU) {
vsp1->bru = vsp1_bru_create(vsp1, VSP1_ENTITY_BRU); vsp1->bru = vsp1_brx_create(vsp1, VSP1_ENTITY_BRU);
if (IS_ERR(vsp1->bru)) { if (IS_ERR(vsp1->bru)) {
ret = PTR_ERR(vsp1->bru); ret = PTR_ERR(vsp1->bru);
goto done; goto done;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <media/v4l2-subdev.h> #include <media/v4l2-subdev.h>
#include "vsp1.h" #include "vsp1.h"
#include "vsp1_bru.h" #include "vsp1_brx.h"
#include "vsp1_dl.h" #include "vsp1_dl.h"
#include "vsp1_entity.h" #include "vsp1_entity.h"
#include "vsp1_hgo.h" #include "vsp1_hgo.h"
...@@ -188,11 +188,11 @@ void vsp1_pipeline_reset(struct vsp1_pipeline *pipe) ...@@ -188,11 +188,11 @@ void vsp1_pipeline_reset(struct vsp1_pipeline *pipe)
struct vsp1_entity *entity; struct vsp1_entity *entity;
unsigned int i; unsigned int i;
if (pipe->bru) { if (pipe->brx) {
struct vsp1_bru *bru = to_bru(&pipe->bru->subdev); struct vsp1_brx *brx = to_brx(&pipe->brx->subdev);
for (i = 0; i < ARRAY_SIZE(bru->inputs); ++i) for (i = 0; i < ARRAY_SIZE(brx->inputs); ++i)
bru->inputs[i].rpf = NULL; brx->inputs[i].rpf = NULL;
} }
for (i = 0; i < ARRAY_SIZE(pipe->inputs); ++i) for (i = 0; i < ARRAY_SIZE(pipe->inputs); ++i)
...@@ -207,7 +207,7 @@ void vsp1_pipeline_reset(struct vsp1_pipeline *pipe) ...@@ -207,7 +207,7 @@ void vsp1_pipeline_reset(struct vsp1_pipeline *pipe)
pipe->state = VSP1_PIPELINE_STOPPED; pipe->state = VSP1_PIPELINE_STOPPED;
pipe->buffers_ready = 0; pipe->buffers_ready = 0;
pipe->num_inputs = 0; pipe->num_inputs = 0;
pipe->bru = NULL; pipe->brx = NULL;
pipe->hgo = NULL; pipe->hgo = NULL;
pipe->hgt = NULL; pipe->hgt = NULL;
pipe->lif = NULL; pipe->lif = NULL;
......
...@@ -99,7 +99,7 @@ struct vsp1_partition { ...@@ -99,7 +99,7 @@ struct vsp1_partition {
* @num_inputs: number of RPFs * @num_inputs: number of RPFs
* @inputs: array of RPFs in the pipeline (indexed by RPF index) * @inputs: array of RPFs in the pipeline (indexed by RPF index)
* @output: WPF at the output of the pipeline * @output: WPF at the output of the pipeline
* @bru: BRU entity, if present * @brx: BRx entity, if present
* @hgo: HGO entity, if present * @hgo: HGO entity, if present
* @hgt: HGT entity, if present * @hgt: HGT entity, if present
* @lif: LIF entity, if present * @lif: LIF entity, if present
...@@ -129,7 +129,7 @@ struct vsp1_pipeline { ...@@ -129,7 +129,7 @@ struct vsp1_pipeline {
unsigned int num_inputs; unsigned int num_inputs;
struct vsp1_rwpf *inputs[VSP1_MAX_RPF]; struct vsp1_rwpf *inputs[VSP1_MAX_RPF];
struct vsp1_rwpf *output; struct vsp1_rwpf *output;
struct vsp1_entity *bru; struct vsp1_entity *brx;
struct vsp1_entity *hgo; struct vsp1_entity *hgo;
struct vsp1_entity *hgt; struct vsp1_entity *hgt;
struct vsp1_entity *lif; struct vsp1_entity *lif;
......
...@@ -167,12 +167,12 @@ static void rpf_configure(struct vsp1_entity *entity, ...@@ -167,12 +167,12 @@ static void rpf_configure(struct vsp1_entity *entity,
vsp1_rpf_write(rpf, dl, VI6_RPF_DSWAP, fmtinfo->swap); vsp1_rpf_write(rpf, dl, VI6_RPF_DSWAP, fmtinfo->swap);
/* Output location */ /* Output location */
if (pipe->bru) { if (pipe->brx) {
const struct v4l2_rect *compose; const struct v4l2_rect *compose;
compose = vsp1_entity_get_pad_selection(pipe->bru, compose = vsp1_entity_get_pad_selection(pipe->brx,
pipe->bru->config, pipe->brx->config,
rpf->bru_input, rpf->brx_input,
V4L2_SEL_TGT_COMPOSE); V4L2_SEL_TGT_COMPOSE);
left = compose->left; left = compose->left;
top = compose->top; top = compose->top;
...@@ -191,10 +191,10 @@ static void rpf_configure(struct vsp1_entity *entity, ...@@ -191,10 +191,10 @@ static void rpf_configure(struct vsp1_entity *entity,
* alpha channel by a fixed global alpha value, and multiply the pixel * alpha channel by a fixed global alpha value, and multiply the pixel
* components to convert the input to premultiplied alpha. * components to convert the input to premultiplied alpha.
* *
* As alpha premultiplication is available in the BRU for both Gen2 and * As alpha premultiplication is available in the BRx for both Gen2 and
* Gen3 we handle it there and use the Gen3 alpha multiplier for global * Gen3 we handle it there and use the Gen3 alpha multiplier for global
* alpha multiplication only. This however prevents conversion to * alpha multiplication only. This however prevents conversion to
* premultiplied alpha if no BRU is present in the pipeline. If that use * premultiplied alpha if no BRx is present in the pipeline. If that use
* case turns out to be useful we will revisit the implementation (for * case turns out to be useful we will revisit the implementation (for
* Gen3 only). * Gen3 only).
* *
......
...@@ -45,7 +45,7 @@ struct vsp1_rwpf { ...@@ -45,7 +45,7 @@ struct vsp1_rwpf {
struct v4l2_pix_format_mplane format; struct v4l2_pix_format_mplane format;
const struct vsp1_format_info *fmtinfo; const struct vsp1_format_info *fmtinfo;
unsigned int bru_input; unsigned int brx_input;
unsigned int alpha; unsigned int alpha;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <media/videobuf2-dma-contig.h> #include <media/videobuf2-dma-contig.h>
#include "vsp1.h" #include "vsp1.h"
#include "vsp1_bru.h" #include "vsp1_brx.h"
#include "vsp1_dl.h" #include "vsp1_dl.h"
#include "vsp1_entity.h" #include "vsp1_entity.h"
#include "vsp1_hgo.h" #include "vsp1_hgo.h"
...@@ -488,7 +488,7 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe, ...@@ -488,7 +488,7 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe,
struct media_entity_enum ent_enum; struct media_entity_enum ent_enum;
struct vsp1_entity *entity; struct vsp1_entity *entity;
struct media_pad *pad; struct media_pad *pad;
struct vsp1_bru *bru = NULL; struct vsp1_brx *brx = NULL;
int ret; int ret;
ret = media_entity_enum_init(&ent_enum, &input->entity.vsp1->media_dev); ret = media_entity_enum_init(&ent_enum, &input->entity.vsp1->media_dev);
...@@ -524,14 +524,14 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe, ...@@ -524,14 +524,14 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe,
if (entity->type == VSP1_ENTITY_BRU || if (entity->type == VSP1_ENTITY_BRU ||
entity->type == VSP1_ENTITY_BRS) { entity->type == VSP1_ENTITY_BRS) {
/* BRU and BRS can't be chained. */ /* BRU and BRS can't be chained. */
if (bru) { if (brx) {
ret = -EPIPE; ret = -EPIPE;
goto out; goto out;
} }
bru = to_bru(&entity->subdev); brx = to_brx(&entity->subdev);
bru->inputs[pad->index].rpf = input; brx->inputs[pad->index].rpf = input;
input->bru_input = pad->index; input->brx_input = pad->index;
} }
/* We've reached the WPF, we're done. */ /* We've reached the WPF, we're done. */
...@@ -553,7 +553,7 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe, ...@@ -553,7 +553,7 @@ static int vsp1_video_pipeline_build_branch(struct vsp1_pipeline *pipe,
} }
pipe->uds = entity; pipe->uds = entity;
pipe->uds_input = bru ? &bru->entity : &input->entity; pipe->uds_input = brx ? &brx->entity : &input->entity;
} }
/* Follow the source link, ignoring any HGO or HGT. */ /* Follow the source link, ignoring any HGO or HGT. */
...@@ -619,7 +619,7 @@ static int vsp1_video_pipeline_build(struct vsp1_pipeline *pipe, ...@@ -619,7 +619,7 @@ static int vsp1_video_pipeline_build(struct vsp1_pipeline *pipe,
case VSP1_ENTITY_BRU: case VSP1_ENTITY_BRU:
case VSP1_ENTITY_BRS: case VSP1_ENTITY_BRS:
pipe->bru = e; pipe->brx = e;
break; break;
case VSP1_ENTITY_HGO: case VSP1_ENTITY_HGO:
......
...@@ -436,7 +436,7 @@ static void wpf_configure(struct vsp1_entity *entity, ...@@ -436,7 +436,7 @@ static void wpf_configure(struct vsp1_entity *entity,
vsp1_dl_list_write(dl, VI6_WPF_WRBCK_CTRL, 0); vsp1_dl_list_write(dl, VI6_WPF_WRBCK_CTRL, 0);
/* /*
* Sources. If the pipeline has a single input and BRU is not used, * Sources. If the pipeline has a single input and BRx is not used,
* configure it as the master layer. Otherwise configure all * configure it as the master layer. Otherwise configure all
* inputs as sub-layers and select the virtual RPF as the master * inputs as sub-layers and select the virtual RPF as the master
* layer. * layer.
...@@ -447,13 +447,13 @@ static void wpf_configure(struct vsp1_entity *entity, ...@@ -447,13 +447,13 @@ static void wpf_configure(struct vsp1_entity *entity,
if (!input) if (!input)
continue; continue;
srcrpf |= (!pipe->bru && pipe->num_inputs == 1) srcrpf |= (!pipe->brx && pipe->num_inputs == 1)
? VI6_WPF_SRCRPF_RPF_ACT_MST(input->entity.index) ? VI6_WPF_SRCRPF_RPF_ACT_MST(input->entity.index)
: VI6_WPF_SRCRPF_RPF_ACT_SUB(input->entity.index); : VI6_WPF_SRCRPF_RPF_ACT_SUB(input->entity.index);
} }
if (pipe->bru) if (pipe->brx)
srcrpf |= pipe->bru->type == VSP1_ENTITY_BRU srcrpf |= pipe->brx->type == VSP1_ENTITY_BRU
? VI6_WPF_SRCRPF_VIRACT_MST ? VI6_WPF_SRCRPF_VIRACT_MST
: VI6_WPF_SRCRPF_VIRACT2_MST; : VI6_WPF_SRCRPF_VIRACT2_MST;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment