| /* 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 |