162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * vsp1.h -- R-Car VSP1 Driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2013-2014 Renesas Electronics Corporation 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci#ifndef __VSP1_H__ 1062306a36Sopenharmony_ci#define __VSP1_H__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/io.h> 1362306a36Sopenharmony_ci#include <linux/list.h> 1462306a36Sopenharmony_ci#include <linux/mutex.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <media/media-device.h> 1762306a36Sopenharmony_ci#include <media/v4l2-device.h> 1862306a36Sopenharmony_ci#include <media/v4l2-subdev.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include "vsp1_regs.h" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct clk; 2362306a36Sopenharmony_cistruct device; 2462306a36Sopenharmony_cistruct rcar_fcp_device; 2562306a36Sopenharmony_cistruct reset_control; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct vsp1_drm; 2862306a36Sopenharmony_cistruct vsp1_entity; 2962306a36Sopenharmony_cistruct vsp1_platform_data; 3062306a36Sopenharmony_cistruct vsp1_brx; 3162306a36Sopenharmony_cistruct vsp1_clu; 3262306a36Sopenharmony_cistruct vsp1_hgo; 3362306a36Sopenharmony_cistruct vsp1_hgt; 3462306a36Sopenharmony_cistruct vsp1_hsit; 3562306a36Sopenharmony_cistruct vsp1_lif; 3662306a36Sopenharmony_cistruct vsp1_lut; 3762306a36Sopenharmony_cistruct vsp1_rwpf; 3862306a36Sopenharmony_cistruct vsp1_sru; 3962306a36Sopenharmony_cistruct vsp1_uds; 4062306a36Sopenharmony_cistruct vsp1_uif; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#define VSP1_MAX_LIF 2 4362306a36Sopenharmony_ci#define VSP1_MAX_RPF 5 4462306a36Sopenharmony_ci#define VSP1_MAX_UDS 3 4562306a36Sopenharmony_ci#define VSP1_MAX_UIF 2 4662306a36Sopenharmony_ci#define VSP1_MAX_WPF 4 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#define VSP1_HAS_LUT BIT(1) 4962306a36Sopenharmony_ci#define VSP1_HAS_SRU BIT(2) 5062306a36Sopenharmony_ci#define VSP1_HAS_BRU BIT(3) 5162306a36Sopenharmony_ci#define VSP1_HAS_CLU BIT(4) 5262306a36Sopenharmony_ci#define VSP1_HAS_WPF_VFLIP BIT(5) 5362306a36Sopenharmony_ci#define VSP1_HAS_WPF_HFLIP BIT(6) 5462306a36Sopenharmony_ci#define VSP1_HAS_HGO BIT(7) 5562306a36Sopenharmony_ci#define VSP1_HAS_HGT BIT(8) 5662306a36Sopenharmony_ci#define VSP1_HAS_BRS BIT(9) 5762306a36Sopenharmony_ci#define VSP1_HAS_EXT_DL BIT(10) 5862306a36Sopenharmony_ci#define VSP1_HAS_NON_ZERO_LBA BIT(11) 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistruct vsp1_device_info { 6162306a36Sopenharmony_ci u32 version; 6262306a36Sopenharmony_ci const char *model; 6362306a36Sopenharmony_ci unsigned int gen; 6462306a36Sopenharmony_ci unsigned int features; 6562306a36Sopenharmony_ci unsigned int lif_count; 6662306a36Sopenharmony_ci unsigned int rpf_count; 6762306a36Sopenharmony_ci unsigned int uds_count; 6862306a36Sopenharmony_ci unsigned int uif_count; 6962306a36Sopenharmony_ci unsigned int wpf_count; 7062306a36Sopenharmony_ci unsigned int num_bru_inputs; 7162306a36Sopenharmony_ci u8 soc; 7262306a36Sopenharmony_ci bool uapi; 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#define vsp1_feature(vsp1, f) ((vsp1)->info->features & (f)) 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct vsp1_device { 7862306a36Sopenharmony_ci struct device *dev; 7962306a36Sopenharmony_ci const struct vsp1_device_info *info; 8062306a36Sopenharmony_ci u32 version; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci void __iomem *mmio; 8362306a36Sopenharmony_ci struct rcar_fcp_device *fcp; 8462306a36Sopenharmony_ci struct device *bus_master; 8562306a36Sopenharmony_ci struct reset_control *rstc; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci struct vsp1_brx *brs; 8862306a36Sopenharmony_ci struct vsp1_brx *bru; 8962306a36Sopenharmony_ci struct vsp1_clu *clu; 9062306a36Sopenharmony_ci struct vsp1_hgo *hgo; 9162306a36Sopenharmony_ci struct vsp1_hgt *hgt; 9262306a36Sopenharmony_ci struct vsp1_hsit *hsi; 9362306a36Sopenharmony_ci struct vsp1_hsit *hst; 9462306a36Sopenharmony_ci struct vsp1_lif *lif[VSP1_MAX_LIF]; 9562306a36Sopenharmony_ci struct vsp1_lut *lut; 9662306a36Sopenharmony_ci struct vsp1_rwpf *rpf[VSP1_MAX_RPF]; 9762306a36Sopenharmony_ci struct vsp1_sru *sru; 9862306a36Sopenharmony_ci struct vsp1_uds *uds[VSP1_MAX_UDS]; 9962306a36Sopenharmony_ci struct vsp1_uif *uif[VSP1_MAX_UIF]; 10062306a36Sopenharmony_ci struct vsp1_rwpf *wpf[VSP1_MAX_WPF]; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci struct list_head entities; 10362306a36Sopenharmony_ci struct list_head videos; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci struct v4l2_device v4l2_dev; 10662306a36Sopenharmony_ci struct media_device media_dev; 10762306a36Sopenharmony_ci struct media_entity_operations media_ops; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci struct vsp1_drm *drm; 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ciint vsp1_device_get(struct vsp1_device *vsp1); 11362306a36Sopenharmony_civoid vsp1_device_put(struct vsp1_device *vsp1); 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ciint vsp1_reset_wpf(struct vsp1_device *vsp1, unsigned int index); 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistatic inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg) 11862306a36Sopenharmony_ci{ 11962306a36Sopenharmony_ci return ioread32(vsp1->mmio + reg); 12062306a36Sopenharmony_ci} 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistatic inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data) 12362306a36Sopenharmony_ci{ 12462306a36Sopenharmony_ci iowrite32(data, vsp1->mmio + reg); 12562306a36Sopenharmony_ci} 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci#endif /* __VSP1_H__ */ 128