Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa380ea0 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab
Browse files

[media] v4l: vsp1: Use pipeline display list to decide how to write to modules



This allows getting rid of the vsp1_device::use_dl field.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 94d48e56
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -85,8 +85,6 @@ struct vsp1_device {
	struct media_entity_operations media_ops;

	struct vsp1_drm *drm;

	bool use_dl;
};

int vsp1_device_get(struct vsp1_device *vsp1);
@@ -104,14 +102,4 @@ static inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data)
	iowrite32(data, vsp1->mmio + reg);
}

#include "vsp1_dl.h"

static inline void vsp1_mod_write(struct vsp1_entity *e, u32 reg, u32 data)
{
	if (e->vsp1->use_dl)
		vsp1_dl_add(e, reg, data);
	else
		vsp1_write(e->vsp1, reg, data);
}

#endif /* __VSP1_H__ */
+1 −4
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@

#include "vsp1.h"
#include "vsp1_dl.h"
#include "vsp1_pipe.h"

/*
 * Global resources
@@ -129,10 +128,8 @@ void vsp1_dl_begin(struct vsp1_dl *dl)
	list->reg_count = 0;
}

void vsp1_dl_add(struct vsp1_entity *e, u32 reg, u32 data)
void vsp1_dl_add(struct vsp1_dl *dl, u32 reg, u32 data)
{
	struct vsp1_pipeline *pipe = to_vsp1_pipeline(&e->subdev.entity);
	struct vsp1_dl *dl = pipe->dl;
	struct vsp1_dl_list *list = dl->lists.write;

	list->body[list->reg_count].addr = reg;
+2 −10
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
#ifndef __VSP1_DL_H__
#define __VSP1_DL_H__

#include "vsp1_entity.h"
#include <linux/types.h>

struct vsp1_device;
struct vsp1_dl;
@@ -25,18 +25,10 @@ void vsp1_dl_setup(struct vsp1_device *vsp1);

void vsp1_dl_reset(struct vsp1_dl *dl);
void vsp1_dl_begin(struct vsp1_dl *dl);
void vsp1_dl_add(struct vsp1_entity *e, u32 reg, u32 data);
void vsp1_dl_add(struct vsp1_dl *dl, u32 reg, u32 data);
void vsp1_dl_commit(struct vsp1_dl *dl);

void vsp1_dl_irq_display_start(struct vsp1_dl *dl);
void vsp1_dl_irq_frame_end(struct vsp1_dl *dl);

static inline void vsp1_dl_mod_write(struct vsp1_entity *e, u32 reg, u32 data)
{
	if (e->vsp1->use_dl)
		vsp1_dl_add(e, reg, data);
	else
		vsp1_write(e->vsp1, reg, data);
}

#endif /* __VSP1_DL_H__ */
+3 −6
Original line number Diff line number Diff line
@@ -387,13 +387,10 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
	/* Register subdev nodes if the userspace API is enabled or initialize
	 * the DRM pipeline otherwise.
	 */
	if (vsp1->info->uapi) {
		vsp1->use_dl = false;
	if (vsp1->info->uapi)
		ret = v4l2_device_register_subdev_nodes(&vsp1->v4l2_dev);
	} else {
		vsp1->use_dl = true;
	else
		ret = vsp1_drm_init(vsp1);
	}
	if (ret < 0)
		goto done;

@@ -465,7 +462,7 @@ static int vsp1_device_init(struct vsp1_device *vsp1)
	vsp1_write(vsp1, VI6_DPR_HGT_SMPPT, (7 << VI6_DPR_SMPPT_TGW_SHIFT) |
		   (VI6_DPR_NODE_UNUSED << VI6_DPR_SMPPT_PT_SHIFT));

	if (vsp1->use_dl)
	if (!vsp1->info->uapi)
		vsp1_dl_setup(vsp1);

	return 0;
+12 −0
Original line number Diff line number Diff line
@@ -19,7 +19,19 @@
#include <media/v4l2-subdev.h>

#include "vsp1.h"
#include "vsp1_dl.h"
#include "vsp1_entity.h"
#include "vsp1_pipe.h"

void vsp1_mod_write(struct vsp1_entity *e, u32 reg, u32 data)
{
	struct vsp1_pipeline *pipe = to_vsp1_pipeline(&e->subdev.entity);

	if (pipe->dl)
		vsp1_dl_add(pipe->dl, reg, data);
	else
		vsp1_write(e->vsp1, reg, data);
}

bool vsp1_entity_is_streaming(struct vsp1_entity *entity)
{
Loading