2 * NVIDIA Tegra CSI Device Header
4 * Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
6 * Author: Bryan Wu <pengw@nvidia.com>
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.
16 #include <media/media-entity.h>
17 #include <media/v4l2-async.h>
18 #include <media/v4l2-ctrls.h>
20 #include <media/camera_common.h>
21 #include "../camera/registers.h"
23 enum tegra_csi_port_num {
32 #define csi_port_is_valid(port) \
33 (port < PORT_A ? 0 : (port > PORT_F ? 0 : 1))
35 struct tegra_csi_port {
36 void __iomem *pixel_parser;
40 /* One pair of sink/source pad has one format */
41 struct v4l2_mbus_framefmt format;
42 const struct tegra_video_format *core_format;
45 enum tegra_csi_port_num num;
48 struct tegra_csi_device {
49 struct v4l2_subdev subdev;
51 void __iomem *iomem[3];
56 struct camera_common_data s_data;
57 struct tegra_csi_port *ports;
58 struct media_pad *pads;
64 static inline struct tegra_csi_device *to_csi(struct v4l2_subdev *subdev)
66 return container_of(subdev, struct tegra_csi_device, subdev);
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);