5cd9547ffa6c720a263f4459ccc0b97a7479014c
[linux-3.10.git] / drivers / video / tegra / host / vi / vi.h
1 /*
2  * drivers/video/tegra/host/vi/vi.h
3  *
4  * Tegra Graphics Host VI
5  *
6  * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms and conditions of the GNU General Public License,
10  * version 2, as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef __NVHOST_VI_H__
22 #define __NVHOST_VI_H__
23
24 #include <linux/platform/tegra/isomgr.h>
25
26 #include "camera_priv_defs.h"
27 #include "chip_support.h"
28
29 #define VI_CFG_INTERRUPT_MASK_0                         0x8c
30 #define VI_CFG_INTERRUPT_STATUS_0                       0x98
31
32 #define CSI_CSI_PIXEL_PARSER_A_INTERRUPT_MASK_0         0x850
33 #define CSI_CSI_PIXEL_PARSER_A_STATUS_0                 0x854
34 #define PPA_FIFO_OVRF                                   (1 << 5)
35
36 #define CSI_CSI_PIXEL_PARSER_B_INTERRUPT_MASK_0         0x884
37 #define CSI_CSI_PIXEL_PARSER_B_STATUS_0                 0x888
38 #define PPB_FIFO_OVRF                                   (1 << 5)
39
40 #define VI_CSI_0_ERROR_STATUS                           0x184
41 #define VI_CSI_1_ERROR_STATUS                           0x284
42 #define VI_CSI_0_WD_CTRL                                0x18c
43 #define VI_CSI_1_WD_CTRL                                0x28c
44 #define VI_CSI_0_ERROR_INT_MASK_0                       0x188
45 #define VI_CSI_1_ERROR_INT_MASK_0                       0x288
46
47 #ifdef TEGRA_21X_OR_HIGHER_CONFIG
48 #define VI_CSI_2_ERROR_STATUS                           0x384
49 #define VI_CSI_3_ERROR_STATUS                           0x484
50 #define VI_CSI_2_WD_CTRL                                0x38c
51 #define VI_CSI_3_WD_CTRL                                0x48c
52 #define VI_CSI_2_ERROR_INT_MASK_0                       0x388
53 #define VI_CSI_3_ERROR_INT_MASK_0                       0x488
54
55 #define CSI1_CSI_PIXEL_PARSER_A_INTERRUPT_MASK_0        0x1050
56 #define CSI1_CSI_PIXEL_PARSER_A_STATUS_0                0x1054
57 #define CSI1_CSI_PIXEL_PARSER_B_INTERRUPT_MASK_0        0x1084
58 #define CSI1_CSI_PIXEL_PARSER_B_STATUS_0                0x1088
59 #define CSI2_CSI_PIXEL_PARSER_A_INTERRUPT_MASK_0        0x1850
60 #define CSI2_CSI_PIXEL_PARSER_A_STATUS_0                0x1854
61 #define CSI2_CSI_PIXEL_PARSER_B_INTERRUPT_MASK_0        0x1884
62 #define CSI2_CSI_PIXEL_PARSER_B_STATUS_0                0x1888
63
64 #define NUM_VI_WATCHDOG                                                 4
65 #else
66 #define NUM_VI_WATCHDOG                                                 2
67 #endif
68
69 typedef void (*callback)(void *);
70
71 struct tegra_vi_stats {
72         atomic_t overflow;
73 };
74
75 struct vi {
76         struct tegra_camera *camera;
77         struct platform_device *ndev;
78         struct regulator *reg;
79         int vi_irq;
80         uint vi_bw;
81         uint max_bw;
82         struct dentry *debugdir;
83         struct tegra_vi_stats vi_out;
84         struct workqueue_struct *vi_workqueue;
85         struct work_struct stats_work;
86         struct work_struct mfi_cb_work;
87 #if defined(CONFIG_TEGRA_ISOMGR)
88         tegra_isomgr_handle isomgr_handle;
89 #endif
90         bool master_deinitialized;
91 };
92
93 extern const struct file_operations tegra_vi_ctrl_ops;
94 int nvhost_vi_prepare_poweroff(struct platform_device *);
95 int nvhost_vi_finalize_poweron(struct platform_device *);
96
97 void nvhost_vi_reset_all(struct platform_device *);
98
99 #ifdef CONFIG_TEGRA_GRHOST_VI
100 int tegra_vi_register_mfi_cb(callback cb, void *cb_arg);
101 int tegra_vi_unregister_mfi_cb(void);
102 #else
103 static inline int tegra_vi_register_mfi_cb(callback cb, void *cb_arg)
104 {
105         return -ENOSYS;
106 }
107 static inline int tegra_vi_unregister_mfi_cb(void)
108 {
109         return -ENOSYS;
110 }
111 #endif
112 #endif