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 Pinchartstatic 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 Pinchartstatic 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