]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/blob - drivers/media/platform/tegra/csi/csi.h
drivers: media: platform: tegra: VI mode
[sojka/nv-tegra/linux-3.10.git] / drivers / media / platform / tegra / csi / csi.h
1 /*
2  * NVIDIA Tegra CSI Device Header
3  *
4  * Copyright (c) 2015-2016, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * Author: Bryan Wu <pengw@nvidia.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #ifndef __CSI_H_
14 #define __CSI_H_
15
16 #include <media/media-entity.h>
17 #include <media/v4l2-async.h>
18 #include <media/v4l2-ctrls.h>
19
20 #include <media/camera_common.h>
21 #include "../camera/registers.h"
22
23 enum tegra_csi_port_num {
24         PORT_A = 0,
25         PORT_B = 1,
26         PORT_C = 2,
27         PORT_D = 3,
28         PORT_E = 4,
29         PORT_F = 5,
30 };
31
32 #define csi_port_is_valid(port) \
33         (port < PORT_A ? 0 : (port > PORT_F ? 0 : 1))
34
35 struct tegra_csi_port {
36         void __iomem *pixel_parser;
37         void __iomem *cil;
38         void __iomem *tpg;
39
40         /* One pair of sink/source pad has one format */
41         struct v4l2_mbus_framefmt format;
42         const struct tegra_video_format *core_format;
43         unsigned int lanes;
44
45         enum tegra_csi_port_num num;
46 };
47
48 struct tegra_csi_device {
49         struct v4l2_subdev subdev;
50         struct device *dev;
51         void __iomem *iomem[3];
52         struct clk *clk;
53         struct clk *tpg_clk;
54         struct clk *cil[3];
55
56         struct camera_common_data s_data;
57         struct tegra_csi_port *ports;
58         struct media_pad *pads;
59
60         int num_ports;
61         int pg_mode;
62 };
63
64 static inline struct tegra_csi_device *to_csi(struct v4l2_subdev *subdev)
65 {
66         return container_of(subdev, struct tegra_csi_device, subdev);
67 }
68
69 void set_csi_portinfo(struct tegra_csi_device *csi,
70         unsigned int port, unsigned int numlanes);
71 void tegra_csi_status(struct tegra_csi_device *csi,
72                         enum tegra_csi_port_num port_num);
73 void tegra_csi_start_streaming(struct tegra_csi_device *csi,
74                                 enum tegra_csi_port_num port_num);
75 void tegra_csi_stop_streaming(struct tegra_csi_device *csi,
76                                 enum tegra_csi_port_num port_num);
77 int tegra_csi_power(struct tegra_csi_device *csi, int port, int enable);
78 int tegra_csi_init(struct tegra_csi_device *csi,
79                 struct platform_device *pdev);
80 int tegra_csi_media_controller_init(struct tegra_csi_device *csi,
81                                 struct platform_device *pdev);
82 int tegra_csi_media_controller_remove(struct tegra_csi_device *csi);
83 #endif