1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2023 SKIDATA GmbH
4 * Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
5 */
6
7#ifndef __TEGRA_VIP_H__
8#define __TEGRA_VIP_H__
9
10#include <media/media-entity.h>
11#include <media/v4l2-async.h>
12#include <media/v4l2-subdev.h>
13
14enum {
15	TEGRA_VIP_PAD_SINK,
16	TEGRA_VIP_PAD_SOURCE,
17	TEGRA_VIP_PADS_NUM,
18};
19
20struct tegra_vip;
21
22/**
23 * struct tegra_vip_channel - Tegra VIP (parallel video capture) channel
24 *
25 * @subdev: V4L2 subdevice associated with this channel
26 * @pads: media pads for the subdevice entity
27 * @of_node: vip device tree node
28 */
29struct tegra_vip_channel {
30	struct v4l2_subdev subdev;
31	struct media_pad pads[TEGRA_VIP_PADS_NUM];
32	struct device_node *of_node;
33};
34
35/**
36 * struct tegra_vip_ops - Tegra VIP operations
37 *
38 * @vip_start_streaming: programs vip hardware to enable streaming.
39 */
40struct tegra_vip_ops {
41	int (*vip_start_streaming)(struct tegra_vip_channel *vip_chan);
42};
43
44/**
45 * struct tegra_vip_soc - NVIDIA Tegra VIP SoC structure
46 *
47 * @ops: vip hardware operations
48 */
49struct tegra_vip_soc {
50	const struct tegra_vip_ops *ops;
51};
52
53/**
54 * struct tegra_vip - NVIDIA Tegra VIP device structure
55 *
56 * @dev: device struct
57 * @client: host1x_client struct
58 * @soc: pointer to SoC data structure
59 * @chan: the VIP channel
60 */
61struct tegra_vip {
62	struct device *dev;
63	struct host1x_client client;
64	const struct tegra_vip_soc *soc;
65	struct tegra_vip_channel chan;
66};
67
68#endif
69