/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2023 SKIDATA GmbH * Author: Luca Ceresoli <luca.ceresoli@bootlin.com> */ #ifndef __TEGRA_VIP_H__ #define __TEGRA_VIP_H__ #include <media/media-entity.h> #include <media/v4l2-async.h> #include <media/v4l2-subdev.h> enum { TEGRA_VIP_PAD_SINK, TEGRA_VIP_PAD_SOURCE, TEGRA_VIP_PADS_NUM, }; struct tegra_vip; /** * struct tegra_vip_channel - Tegra VIP (parallel video capture) channel * * @subdev: V4L2 subdevice associated with this channel * @pads: media pads for the subdevice entity * @of_node: vip device tree node */ struct tegra_vip_channel { struct v4l2_subdev subdev; struct media_pad pads[TEGRA_VIP_PADS_NUM]; struct device_node *of_node; }; /** * struct tegra_vip_ops - Tegra VIP operations * * @vip_start_streaming: programs vip hardware to enable streaming. */ struct tegra_vip_ops { int (*vip_start_streaming)(struct tegra_vip_channel *vip_chan); }; /** * struct tegra_vip_soc - NVIDIA Tegra VIP SoC structure * * @ops: vip hardware operations */ struct tegra_vip_soc { const struct tegra_vip_ops *ops; }; /** * struct tegra_vip - NVIDIA Tegra VIP device structure * * @dev: device struct * @client: host1x_client struct * @soc: pointer to SoC data structure * @chan: the VIP channel */ struct tegra_vip { struct device *dev; struct host1x_client client; const struct tegra_vip_soc *soc; struct tegra_vip_channel chan; }; #endif