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