xref: /linux/drivers/media/platform/renesas/vsp1/vsp1.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
11c4b5f49SLaurent Pinchart /* SPDX-License-Identifier: GPL-2.0+ */
226e0ca22SLaurent Pinchart /*
326e0ca22SLaurent Pinchart  * vsp1.h  --  R-Car VSP1 Driver
426e0ca22SLaurent Pinchart  *
58a1edc55SLaurent Pinchart  * Copyright (C) 2013-2014 Renesas Electronics Corporation
626e0ca22SLaurent Pinchart  *
726e0ca22SLaurent Pinchart  * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
826e0ca22SLaurent Pinchart  */
926e0ca22SLaurent Pinchart #ifndef __VSP1_H__
1026e0ca22SLaurent Pinchart #define __VSP1_H__
1126e0ca22SLaurent Pinchart 
1226e0ca22SLaurent Pinchart #include <linux/io.h>
1326e0ca22SLaurent Pinchart #include <linux/list.h>
1426e0ca22SLaurent Pinchart #include <linux/mutex.h>
1526e0ca22SLaurent Pinchart 
1626e0ca22SLaurent Pinchart #include <media/media-device.h>
1726e0ca22SLaurent Pinchart #include <media/v4l2-device.h>
1826e0ca22SLaurent Pinchart #include <media/v4l2-subdev.h>
1926e0ca22SLaurent Pinchart 
2026e0ca22SLaurent Pinchart #include "vsp1_regs.h"
2126e0ca22SLaurent Pinchart 
2226e0ca22SLaurent Pinchart struct clk;
2326e0ca22SLaurent Pinchart struct device;
2494fcdf82SLaurent Pinchart struct rcar_fcp_device;
2524c52aa3SBiju Das struct reset_control;
2626e0ca22SLaurent Pinchart 
27f3af9572SLaurent Pinchart struct vsp1_drm;
281517b039STakashi Saito struct vsp1_entity;
2926e0ca22SLaurent Pinchart struct vsp1_platform_data;
30cbb7fa49SLaurent Pinchart struct vsp1_brx;
311fd87bf2SLaurent Pinchart struct vsp1_clu;
32f2421521SLaurent Pinchart struct vsp1_hgo;
330ac702d5SNiklas Söderlund struct vsp1_hgt;
345cdf5741SLaurent Pinchart struct vsp1_hsit;
357305ee12SJacopo Mondi struct vsp1_iif;
3626e0ca22SLaurent Pinchart struct vsp1_lif;
37989af883SLaurent Pinchart struct vsp1_lut;
3826e0ca22SLaurent Pinchart struct vsp1_rwpf;
39a626e64eSLaurent Pinchart struct vsp1_sru;
4026e0ca22SLaurent Pinchart struct vsp1_uds;
4133025a5cSLaurent Pinchart struct vsp1_uif;
4226e0ca22SLaurent Pinchart 
433be0bf97SLaurent Pinchart #define VSP1_MAX_LIF		2
447005a817SLaurent Pinchart #define VSP1_MAX_RPF		5
457005a817SLaurent Pinchart #define VSP1_MAX_UDS		3
4633025a5cSLaurent Pinchart #define VSP1_MAX_UIF		2
477005a817SLaurent Pinchart #define VSP1_MAX_WPF		4
4826e0ca22SLaurent Pinchart 
49485da304SKieran Bingham #define VSP1_HAS_LUT		BIT(1)
50485da304SKieran Bingham #define VSP1_HAS_SRU		BIT(2)
51485da304SKieran Bingham #define VSP1_HAS_BRU		BIT(3)
52485da304SKieran Bingham #define VSP1_HAS_CLU		BIT(4)
53485da304SKieran Bingham #define VSP1_HAS_WPF_VFLIP	BIT(5)
54485da304SKieran Bingham #define VSP1_HAS_WPF_HFLIP	BIT(6)
55485da304SKieran Bingham #define VSP1_HAS_HGO		BIT(7)
56485da304SKieran Bingham #define VSP1_HAS_HGT		BIT(8)
57485da304SKieran Bingham #define VSP1_HAS_BRS		BIT(9)
58485da304SKieran Bingham #define VSP1_HAS_EXT_DL		BIT(10)
594d728fd4SBiju Das #define VSP1_HAS_NON_ZERO_LBA	BIT(11)
607305ee12SJacopo Mondi #define VSP1_HAS_IIF		BIT(12)
61*a4b25ae7SLaurent Pinchart #define VSP1_HAS_HSIT		BIT(13)
6232d17597SLaurent Pinchart 
635aa2eb3cSLaurent Pinchart struct vsp1_device_info {
645aa2eb3cSLaurent Pinchart 	u32 version;
6547b4bafdSLaurent Pinchart 	const char *model;
6630276a73SLaurent Pinchart 	unsigned int gen;
6732d17597SLaurent Pinchart 	unsigned int features;
683be0bf97SLaurent Pinchart 	unsigned int lif_count;
6932d17597SLaurent Pinchart 	unsigned int rpf_count;
7032d17597SLaurent Pinchart 	unsigned int uds_count;
7133025a5cSLaurent Pinchart 	unsigned int uif_count;
7232d17597SLaurent Pinchart 	unsigned int wpf_count;
73a96c5fa4SLaurent Pinchart 	unsigned int num_bru_inputs;
749c639027SBiju Das 	u8 soc;
75f2ed459dSLaurent Pinchart 	bool uapi;
7632d17597SLaurent Pinchart };
7732d17597SLaurent Pinchart 
78177fb098SKieran Bingham #define vsp1_feature(vsp1, f) ((vsp1)->info->features & (f))
79177fb098SKieran Bingham 
8026e0ca22SLaurent Pinchart struct vsp1_device {
8126e0ca22SLaurent Pinchart 	struct device *dev;
825aa2eb3cSLaurent Pinchart 	const struct vsp1_device_info *info;
8347b4bafdSLaurent Pinchart 	u32 version;
8426e0ca22SLaurent Pinchart 
8526e0ca22SLaurent Pinchart 	void __iomem *mmio;
8694fcdf82SLaurent Pinchart 	struct rcar_fcp_device *fcp;
872cc2137fSMagnus Damm 	struct device *bus_master;
8824c52aa3SBiju Das 	struct reset_control *rstc;
8926e0ca22SLaurent Pinchart 
90cbb7fa49SLaurent Pinchart 	struct vsp1_brx *brs;
91cbb7fa49SLaurent Pinchart 	struct vsp1_brx *bru;
921fd87bf2SLaurent Pinchart 	struct vsp1_clu *clu;
93f2421521SLaurent Pinchart 	struct vsp1_hgo *hgo;
940ac702d5SNiklas Söderlund 	struct vsp1_hgt *hgt;
955cdf5741SLaurent Pinchart 	struct vsp1_hsit *hsi;
965cdf5741SLaurent Pinchart 	struct vsp1_hsit *hst;
977305ee12SJacopo Mondi 	struct vsp1_iif *iif;
983be0bf97SLaurent Pinchart 	struct vsp1_lif *lif[VSP1_MAX_LIF];
99989af883SLaurent Pinchart 	struct vsp1_lut *lut;
1007005a817SLaurent Pinchart 	struct vsp1_rwpf *rpf[VSP1_MAX_RPF];
101a626e64eSLaurent Pinchart 	struct vsp1_sru *sru;
1027005a817SLaurent Pinchart 	struct vsp1_uds *uds[VSP1_MAX_UDS];
10333025a5cSLaurent Pinchart 	struct vsp1_uif *uif[VSP1_MAX_UIF];
1047005a817SLaurent Pinchart 	struct vsp1_rwpf *wpf[VSP1_MAX_WPF];
10526e0ca22SLaurent Pinchart 
10626e0ca22SLaurent Pinchart 	struct list_head entities;
1079d40637aSLaurent Pinchart 	struct list_head videos;
10826e0ca22SLaurent Pinchart 
10926e0ca22SLaurent Pinchart 	struct v4l2_device v4l2_dev;
11026e0ca22SLaurent Pinchart 	struct media_device media_dev;
111babca007SLaurent Pinchart 	struct media_entity_operations media_ops;
1121517b039STakashi Saito 
113f3af9572SLaurent Pinchart 	struct vsp1_drm *drm;
11426e0ca22SLaurent Pinchart 	struct vsp1_vspx *vspx;
11526e0ca22SLaurent Pinchart };
1164c16d6a0SLaurent Pinchart 
11726e0ca22SLaurent Pinchart int vsp1_device_get(struct vsp1_device *vsp1);
11826e0ca22SLaurent Pinchart void vsp1_device_put(struct vsp1_device *vsp1);
1191517b039STakashi Saito 
1201517b039STakashi Saito int vsp1_reset_wpf(struct vsp1_device *vsp1, unsigned int index);
12126e0ca22SLaurent Pinchart 
vsp1_read(struct vsp1_device * vsp1,u32 reg)12226e0ca22SLaurent Pinchart static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg)
12326e0ca22SLaurent Pinchart {
12426e0ca22SLaurent Pinchart 	return ioread32(vsp1->mmio + reg);
12526e0ca22SLaurent Pinchart }
12626e0ca22SLaurent Pinchart 
vsp1_write(struct vsp1_device * vsp1,u32 reg,u32 data)12726e0ca22SLaurent Pinchart static inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data)
12826e0ca22SLaurent Pinchart {
12926e0ca22SLaurent Pinchart 	iowrite32(data, vsp1->mmio + reg);
13026e0ca22SLaurent Pinchart }
13126e0ca22SLaurent Pinchart 
132 #endif /* __VSP1_H__ */
133