GNU Linux-libre 6.8.7-gnu
[releases.git] / drivers / staging / media / tegra-video / vip.h
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
14 enum {
15         TEGRA_VIP_PAD_SINK,
16         TEGRA_VIP_PAD_SOURCE,
17         TEGRA_VIP_PADS_NUM,
18 };
19
20 struct 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  */
29 struct 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  */
40 struct 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  */
49 struct 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  */
61 struct 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