video: tegra: dsi: Config mipi cal block
[linux-2.6.git] / drivers / video / tegra / dc / mipi_cal.h
1 /*
2  * drivers/video/tegra/dc/mipi_cal.h
3  *
4  * Copyright (c) 2012, 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_DC_MIPI_CAL_H__
18 #define __DRIVERS_VIDEO_TEGRA_DC_MIPI_CAL_H__
19
20 #include "mipi_cal_regs.h"
21
22 struct tegra_mipi_cal {
23         struct tegra_dc *dc;
24         struct resource *res;
25         struct clk *clk;
26         void __iomem *base;
27         struct mutex lock;
28         bool power_on;
29 };
30
31 #ifdef CONFIG_TEGRA_MIPI_CAL
32 static inline void tegra_mipi_cal_clk_enable(struct tegra_mipi_cal  *mipi_cal)
33 {
34         if (!mipi_cal->power_on) {
35                 clk_enable(mipi_cal->clk);
36                 mipi_cal->power_on = true;
37         }
38 }
39
40 static inline void tegra_mipi_cal_clk_disable(struct tegra_mipi_cal  *mipi_cal)
41 {
42         if (mipi_cal->power_on) {
43                 clk_disable(mipi_cal->clk);
44                 mipi_cal->power_on = false;
45         }
46 }
47
48 /* reg is word offset */
49 static inline unsigned long tegra_mipi_cal_read(
50                                         struct tegra_mipi_cal *mipi_cal,
51                                         unsigned long reg)
52 {
53         return readl(mipi_cal->base + reg);
54 }
55
56 /* reg is word offset */
57 static inline void tegra_mipi_cal_write(struct tegra_mipi_cal *mipi_cal,
58                                                         unsigned long val,
59                                                         unsigned long reg)
60 {
61         writel(val,  mipi_cal->base + reg);
62 }
63
64 extern struct tegra_mipi_cal *tegra_mipi_cal_init_sw(struct tegra_dc *dc);
65 extern void tegra_mipi_cal_init_hw(struct tegra_mipi_cal *mipi_cal);
66 #else
67 static inline void tegra_mipi_cal_clk_enable(struct tegra_mipi_cal  *mipi_cal)
68 {
69         /* dummy */
70 }
71
72 static inline void tegra_mipi_cal_clk_disable(struct tegra_mipi_cal  *mipi_cal)
73 {
74         /* dummy */
75 }
76
77 static inline unsigned long tegra_mipi_cal_read(
78                                                 struct tegra_mipi_cal *mipi_cal,
79                                                 unsigned long reg)
80 {
81         /* dummy */
82         return 0;
83 }
84
85 static inline void tegra_mipi_cal_write(struct tegra_mipi_cal *mipi_cal,
86                                                 unsigned long val,
87                                                 unsigned long reg)
88 {
89         /* dummy */
90 }
91
92 struct tegra_mipi_cal *tegra_mipi_cal_init(struct tegra_dc *dc)
93 {
94         /* dummy */
95         return NULL;
96 }
97
98 void tegra_mipi_cal_init_hw(struct tegra_mipi_cal *mipi_cal)
99 {
100         /* dummy */
101 }
102 #endif
103 #endif