18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * vsp1.h -- R-Car VSP1 Driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2013-2014 Renesas Electronics Corporation 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci#ifndef __VSP1_H__ 108c2ecf20Sopenharmony_ci#define __VSP1_H__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/io.h> 138c2ecf20Sopenharmony_ci#include <linux/list.h> 148c2ecf20Sopenharmony_ci#include <linux/mutex.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <media/media-device.h> 178c2ecf20Sopenharmony_ci#include <media/v4l2-device.h> 188c2ecf20Sopenharmony_ci#include <media/v4l2-subdev.h> 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#include "vsp1_regs.h" 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct clk; 238c2ecf20Sopenharmony_cistruct device; 248c2ecf20Sopenharmony_cistruct rcar_fcp_device; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistruct vsp1_drm; 278c2ecf20Sopenharmony_cistruct vsp1_entity; 288c2ecf20Sopenharmony_cistruct vsp1_platform_data; 298c2ecf20Sopenharmony_cistruct vsp1_brx; 308c2ecf20Sopenharmony_cistruct vsp1_clu; 318c2ecf20Sopenharmony_cistruct vsp1_hgo; 328c2ecf20Sopenharmony_cistruct vsp1_hgt; 338c2ecf20Sopenharmony_cistruct vsp1_hsit; 348c2ecf20Sopenharmony_cistruct vsp1_lif; 358c2ecf20Sopenharmony_cistruct vsp1_lut; 368c2ecf20Sopenharmony_cistruct vsp1_rwpf; 378c2ecf20Sopenharmony_cistruct vsp1_sru; 388c2ecf20Sopenharmony_cistruct vsp1_uds; 398c2ecf20Sopenharmony_cistruct vsp1_uif; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#define VSP1_MAX_LIF 2 428c2ecf20Sopenharmony_ci#define VSP1_MAX_RPF 5 438c2ecf20Sopenharmony_ci#define VSP1_MAX_UDS 3 448c2ecf20Sopenharmony_ci#define VSP1_MAX_UIF 2 458c2ecf20Sopenharmony_ci#define VSP1_MAX_WPF 4 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#define VSP1_HAS_LUT (1 << 1) 488c2ecf20Sopenharmony_ci#define VSP1_HAS_SRU (1 << 2) 498c2ecf20Sopenharmony_ci#define VSP1_HAS_BRU (1 << 3) 508c2ecf20Sopenharmony_ci#define VSP1_HAS_CLU (1 << 4) 518c2ecf20Sopenharmony_ci#define VSP1_HAS_WPF_VFLIP (1 << 5) 528c2ecf20Sopenharmony_ci#define VSP1_HAS_WPF_HFLIP (1 << 6) 538c2ecf20Sopenharmony_ci#define VSP1_HAS_HGO (1 << 7) 548c2ecf20Sopenharmony_ci#define VSP1_HAS_HGT (1 << 8) 558c2ecf20Sopenharmony_ci#define VSP1_HAS_BRS (1 << 9) 568c2ecf20Sopenharmony_ci#define VSP1_HAS_EXT_DL (1 << 10) 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistruct vsp1_device_info { 598c2ecf20Sopenharmony_ci u32 version; 608c2ecf20Sopenharmony_ci const char *model; 618c2ecf20Sopenharmony_ci unsigned int gen; 628c2ecf20Sopenharmony_ci unsigned int features; 638c2ecf20Sopenharmony_ci unsigned int lif_count; 648c2ecf20Sopenharmony_ci unsigned int rpf_count; 658c2ecf20Sopenharmony_ci unsigned int uds_count; 668c2ecf20Sopenharmony_ci unsigned int uif_count; 678c2ecf20Sopenharmony_ci unsigned int wpf_count; 688c2ecf20Sopenharmony_ci unsigned int num_bru_inputs; 698c2ecf20Sopenharmony_ci bool uapi; 708c2ecf20Sopenharmony_ci}; 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci#define vsp1_feature(vsp1, f) ((vsp1)->info->features & (f)) 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_cistruct vsp1_device { 758c2ecf20Sopenharmony_ci struct device *dev; 768c2ecf20Sopenharmony_ci const struct vsp1_device_info *info; 778c2ecf20Sopenharmony_ci u32 version; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci void __iomem *mmio; 808c2ecf20Sopenharmony_ci struct rcar_fcp_device *fcp; 818c2ecf20Sopenharmony_ci struct device *bus_master; 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci struct vsp1_brx *brs; 848c2ecf20Sopenharmony_ci struct vsp1_brx *bru; 858c2ecf20Sopenharmony_ci struct vsp1_clu *clu; 868c2ecf20Sopenharmony_ci struct vsp1_hgo *hgo; 878c2ecf20Sopenharmony_ci struct vsp1_hgt *hgt; 888c2ecf20Sopenharmony_ci struct vsp1_hsit *hsi; 898c2ecf20Sopenharmony_ci struct vsp1_hsit *hst; 908c2ecf20Sopenharmony_ci struct vsp1_lif *lif[VSP1_MAX_LIF]; 918c2ecf20Sopenharmony_ci struct vsp1_lut *lut; 928c2ecf20Sopenharmony_ci struct vsp1_rwpf *rpf[VSP1_MAX_RPF]; 938c2ecf20Sopenharmony_ci struct vsp1_sru *sru; 948c2ecf20Sopenharmony_ci struct vsp1_uds *uds[VSP1_MAX_UDS]; 958c2ecf20Sopenharmony_ci struct vsp1_uif *uif[VSP1_MAX_UIF]; 968c2ecf20Sopenharmony_ci struct vsp1_rwpf *wpf[VSP1_MAX_WPF]; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci struct list_head entities; 998c2ecf20Sopenharmony_ci struct list_head videos; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci struct v4l2_device v4l2_dev; 1028c2ecf20Sopenharmony_ci struct media_device media_dev; 1038c2ecf20Sopenharmony_ci struct media_entity_operations media_ops; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci struct vsp1_drm *drm; 1068c2ecf20Sopenharmony_ci}; 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ciint vsp1_device_get(struct vsp1_device *vsp1); 1098c2ecf20Sopenharmony_civoid vsp1_device_put(struct vsp1_device *vsp1); 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ciint vsp1_reset_wpf(struct vsp1_device *vsp1, unsigned int index); 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_cistatic inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg) 1148c2ecf20Sopenharmony_ci{ 1158c2ecf20Sopenharmony_ci return ioread32(vsp1->mmio + reg); 1168c2ecf20Sopenharmony_ci} 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_cistatic inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data) 1198c2ecf20Sopenharmony_ci{ 1208c2ecf20Sopenharmony_ci iowrite32(data, vsp1->mmio + reg); 1218c2ecf20Sopenharmony_ci} 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci#endif /* __VSP1_H__ */ 124