arm: tegra: Make tegra include directory
[linux-3.10.git] / drivers / video / tegra / camera / camera_priv_defs.h
1 /*
2  * drivers/video/tegra/camera/camera_priv_defs.h
3  *
4  * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef __DRIVERS_VIDEO_TEGRA_CAMERA_CAMERA_PRIV_DEFS_H
18 #define __DRIVERS_VIDEO_TEGRA_CAMERA_CAMERA_PRIV_DEFS_H
19
20 #include <linux/miscdevice.h>
21 #include <linux/platform_device.h>
22 #include <linux/ioctl.h>
23 #include <linux/fs.h>
24 #include <linux/device.h>
25 #include <linux/regulator/consumer.h>
26 #include <linux/clk.h>
27 #include <linux/io.h>
28 #include <linux/uaccess.h>
29 #include <linux/delay.h>
30 #include <linux/export.h>
31 #include <linux/slab.h>
32 #include <linux/clk/tegra.h>
33 #include <linux/tegra-powergate.h>
34
35 #if defined(CONFIG_TEGRA_ISOMGR)
36 #include <mach/isomgr.h>
37 #endif
38
39 #include <tegra/mc.h>
40
41 #include <video/tegra_camera.h>
42
43
44 /*
45  * CAMERA_*_CLK is only for internal driver use.
46  * TEGRA_CAMERA_*_CLK is enum used between driver and user space.
47  * TEGRA_CAMERA_*_CLK is defined in tegra_camera.h
48  */
49 enum {
50         CAMERA_VI_CLK,
51         CAMERA_EMC_CLK,
52         CAMERA_ISP_CLK,
53         CAMERA_CSI_CLK,
54 #if defined(CONFIG_ARCH_TEGRA_11x_SOC) || defined(CONFIG_ARCH_TEGRA_14x_SOC)
55         CAMERA_CILAB_CLK,
56         CAMERA_CILE_CLK,
57         CAMERA_PLL_D2_CLK,
58 #endif
59
60 #ifdef CONFIG_ARCH_TEGRA_11x_SOC
61         CAMERA_CILCD_CLK,
62 #endif
63         CAMERA_SCLK,
64         CAMERA_CLK_MAX,
65 };
66
67 struct clock {
68         struct clk *clk;
69         bool on;
70 };
71
72 struct vi_stats {
73         atomic_t overflow;
74 };
75
76 struct tegra_camera {
77         struct device *dev;
78         struct miscdevice misc_dev;
79         struct clock clock[CAMERA_CLK_MAX];
80         struct regulator *reg;
81         struct tegra_camera_clk_info info;
82         struct mutex tegra_camera_lock;
83         atomic_t in_use;
84         int power_on;
85         int irq;
86         struct dentry *debugdir;
87         struct vi_stats vi_out0;
88         struct vi_stats vi_out1;
89         struct work_struct stats_work;
90 #if defined(CONFIG_TEGRA_ISOMGR)
91         tegra_isomgr_handle isomgr_handle;
92 #endif
93 };
94
95 /*
96  * index: clock enum value
97  * name:  clock name
98  * init:  default clock state when camera is opened.
99  * freq:  initial clock frequency to set when camera is opened. If it is 0,
100  *        then no need to set clock freq.
101  */
102 struct clock_data {
103         int index;
104         char *name;
105         bool init;
106         unsigned long freq;
107 };
108
109 struct tegra_camera *tegra_camera_register(struct platform_device *ndev);
110 int tegra_camera_unregister(struct tegra_camera *camera);
111 #ifdef CONFIG_PM
112 int tegra_camera_suspend(struct tegra_camera *camera);
113 int tegra_camera_resume(struct tegra_camera *camera);
114 #endif
115
116 #endif