blob: 9c94b1152c208575474968d18aa90d3099276736 [file] [log] [blame]
Tomi Valkeinen559d6702009-11-03 11:23:50 +02001/*
2 * linux/drivers/video/omap2/dss/dss.h
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 * Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
6 *
7 * Some code and ideas taken from drivers/video/omap/ driver
8 * by Imre Deak.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License version 2 as published by
12 * the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * more details.
18 *
19 * You should have received a copy of the GNU General Public License along with
20 * this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23#ifndef __OMAP2_DSS_H
24#define __OMAP2_DSS_H
25
26#ifdef CONFIG_OMAP2_DSS_DEBUG_SUPPORT
27#define DEBUG
28#endif
29
30#ifdef DEBUG
31extern unsigned int dss_debug;
32#ifdef DSS_SUBSYS_NAME
33#define DSSDBG(format, ...) \
34 if (dss_debug) \
35 printk(KERN_DEBUG "omapdss " DSS_SUBSYS_NAME ": " format, \
36 ## __VA_ARGS__)
37#else
38#define DSSDBG(format, ...) \
39 if (dss_debug) \
40 printk(KERN_DEBUG "omapdss: " format, ## __VA_ARGS__)
41#endif
42
43#ifdef DSS_SUBSYS_NAME
44#define DSSDBGF(format, ...) \
45 if (dss_debug) \
46 printk(KERN_DEBUG "omapdss " DSS_SUBSYS_NAME \
47 ": %s(" format ")\n", \
48 __func__, \
49 ## __VA_ARGS__)
50#else
51#define DSSDBGF(format, ...) \
52 if (dss_debug) \
53 printk(KERN_DEBUG "omapdss: " \
54 ": %s(" format ")\n", \
55 __func__, \
56 ## __VA_ARGS__)
57#endif
58
59#else /* DEBUG */
60#define DSSDBG(format, ...)
61#define DSSDBGF(format, ...)
62#endif
63
64
65#ifdef DSS_SUBSYS_NAME
66#define DSSERR(format, ...) \
67 printk(KERN_ERR "omapdss " DSS_SUBSYS_NAME " error: " format, \
68 ## __VA_ARGS__)
69#else
70#define DSSERR(format, ...) \
71 printk(KERN_ERR "omapdss error: " format, ## __VA_ARGS__)
72#endif
73
74#ifdef DSS_SUBSYS_NAME
75#define DSSINFO(format, ...) \
76 printk(KERN_INFO "omapdss " DSS_SUBSYS_NAME ": " format, \
77 ## __VA_ARGS__)
78#else
79#define DSSINFO(format, ...) \
80 printk(KERN_INFO "omapdss: " format, ## __VA_ARGS__)
81#endif
82
83#ifdef DSS_SUBSYS_NAME
84#define DSSWARN(format, ...) \
85 printk(KERN_WARNING "omapdss " DSS_SUBSYS_NAME ": " format, \
86 ## __VA_ARGS__)
87#else
88#define DSSWARN(format, ...) \
89 printk(KERN_WARNING "omapdss: " format, ## __VA_ARGS__)
90#endif
91
92/* OMAP TRM gives bitfields as start:end, where start is the higher bit
93 number. For example 7:0 */
94#define FLD_MASK(start, end) (((1 << ((start) - (end) + 1)) - 1) << (end))
95#define FLD_VAL(val, start, end) (((val) << (end)) & FLD_MASK(start, end))
96#define FLD_GET(val, start, end) (((val) & FLD_MASK(start, end)) >> (end))
97#define FLD_MOD(orig, val, start, end) \
98 (((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end))
99
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200100enum omap_parallel_interface_mode {
101 OMAP_DSS_PARALLELMODE_BYPASS, /* MIPI DPI */
102 OMAP_DSS_PARALLELMODE_RFBI, /* MIPI DBI */
103 OMAP_DSS_PARALLELMODE_DSI,
104};
105
Mythri P K7ed024a2011-03-09 16:31:38 +0530106enum dss_hdmi_venc_clk_source_select {
107 DSS_VENC_TV_CLK = 0,
108 DSS_HDMI_M_PCLK = 1,
109};
110
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200111struct dss_clock_info {
112 /* rates that we get with dividers below */
113 unsigned long fck;
114
115 /* dividers */
116 u16 fck_div;
117};
118
119struct dispc_clock_info {
120 /* rates that we get with dividers below */
121 unsigned long lck;
122 unsigned long pck;
123
124 /* dividers */
125 u16 lck_div;
126 u16 pck_div;
127};
128
129struct dsi_clock_info {
130 /* rates that we get with dividers below */
131 unsigned long fint;
132 unsigned long clkin4ddr;
133 unsigned long clkin;
Taneja, Architea751592011-03-08 05:50:35 -0600134 unsigned long dsi_pll_hsdiv_dispc_clk; /* OMAP3: DSI1_PLL_CLK
135 * OMAP4: PLLx_CLK1 */
136 unsigned long dsi_pll_hsdiv_dsi_clk; /* OMAP3: DSI2_PLL_CLK
137 * OMAP4: PLLx_CLK2 */
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200138 unsigned long lp_clk;
139
140 /* dividers */
141 u16 regn;
142 u16 regm;
Taneja, Architea751592011-03-08 05:50:35 -0600143 u16 regm_dispc; /* OMAP3: REGM3
144 * OMAP4: REGM4 */
145 u16 regm_dsi; /* OMAP3: REGM4
146 * OMAP4: REGM5 */
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200147 u16 lp_clk_div;
148
149 u8 highfreq;
Archit Taneja1bb47832011-02-24 14:17:30 +0530150 bool use_sys_clk;
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200151};
152
Mythri P Kc3198a52011-03-12 12:04:27 +0530153/* HDMI PLL structure */
154struct hdmi_pll_info {
155 u16 regn;
156 u16 regm;
157 u32 regmf;
158 u16 regm2;
159 u16 regsd;
160 u16 dcofreq;
161};
162
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200163struct seq_file;
164struct platform_device;
165
166/* core */
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200167struct bus_type *dss_get_bus(void);
Tomi Valkeinen8a2cfea2010-02-04 17:03:41 +0200168struct regulator *dss_get_vdds_dsi(void);
169struct regulator *dss_get_vdds_sdi(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200170
171/* display */
172int dss_suspend_all_devices(void);
173int dss_resume_all_devices(void);
174void dss_disable_all_devices(void);
175
176void dss_init_device(struct platform_device *pdev,
177 struct omap_dss_device *dssdev);
178void dss_uninit_device(struct platform_device *pdev,
179 struct omap_dss_device *dssdev);
180bool dss_use_replication(struct omap_dss_device *dssdev,
181 enum omap_color_mode mode);
182void default_get_overlay_fifo_thresholds(enum omap_plane plane,
Tomi Valkeinen5ed8cf52011-06-21 09:35:36 +0300183 u32 fifo_size, u32 burst_size,
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200184 u32 *fifo_low, u32 *fifo_high);
185
186/* manager */
187int dss_init_overlay_managers(struct platform_device *pdev);
188void dss_uninit_overlay_managers(struct platform_device *pdev);
189int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
190void dss_setup_partial_planes(struct omap_dss_device *dssdev,
Tomi Valkeinen26a8c252010-06-09 15:31:34 +0300191 u16 *x, u16 *y, u16 *w, u16 *h,
192 bool enlarge_update_area);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200193void dss_start_update(struct omap_dss_device *dssdev);
194
195/* overlay */
196void dss_init_overlays(struct platform_device *pdev);
197void dss_uninit_overlays(struct platform_device *pdev);
198int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev);
199void dss_overlay_setup_dispc_manager(struct omap_overlay_manager *mgr);
200#ifdef L4_EXAMPLE
201void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
202#endif
203void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
204
205/* DSS */
Senthilvadivu Guruswamy96c401b2011-01-24 06:21:57 +0000206int dss_init_platform_driver(void);
207void dss_uninit_platform_driver(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200208
Tomi Valkeinen4fbafaf2011-05-27 10:52:19 +0300209int dss_runtime_get(void);
210void dss_runtime_put(void);
211
Tomi Valkeinen9ede3652011-08-01 14:32:23 +0300212struct clk *dss_get_ick(void);
213
Mythri P K7ed024a2011-03-09 16:31:38 +0530214void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select);
Archit Taneja89a35e52011-04-12 13:52:23 +0530215const char *dss_get_generic_clk_source_name(enum omap_dss_clk_source clk_src);
Senthilvadivu Guruswamy8b9cb3a2011-01-24 06:21:58 +0000216void dss_dump_clocks(struct seq_file *s);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200217
218void dss_dump_regs(struct seq_file *s);
Senthilvadivu Guruswamy8b9cb3a2011-01-24 06:21:58 +0000219#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
220void dss_debug_dump_clocks(struct seq_file *s);
221#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200222
223void dss_sdi_init(u8 datapairs);
224int dss_sdi_enable(void);
225void dss_sdi_disable(void);
226
Archit Taneja89a35e52011-04-12 13:52:23 +0530227void dss_select_dispc_clk_source(enum omap_dss_clk_source clk_src);
Archit Taneja5a8b5722011-05-12 17:26:29 +0530228void dss_select_dsi_clk_source(int dsi_module,
229 enum omap_dss_clk_source clk_src);
Taneja, Architea751592011-03-08 05:50:35 -0600230void dss_select_lcd_clk_source(enum omap_channel channel,
Archit Taneja89a35e52011-04-12 13:52:23 +0530231 enum omap_dss_clk_source clk_src);
232enum omap_dss_clk_source dss_get_dispc_clk_source(void);
Archit Taneja5a8b5722011-05-12 17:26:29 +0530233enum omap_dss_clk_source dss_get_dsi_clk_source(int dsi_module);
Archit Taneja89a35e52011-04-12 13:52:23 +0530234enum omap_dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel);
Tomi Valkeinen2f18c4d2010-01-08 18:00:36 +0200235
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200236void dss_set_venc_output(enum omap_dss_venc_type type);
237void dss_set_dac_pwrdn_bgz(bool enable);
238
239unsigned long dss_get_dpll4_rate(void);
240int dss_calc_clock_rates(struct dss_clock_info *cinfo);
241int dss_set_clock_div(struct dss_clock_info *cinfo);
242int dss_get_clock_div(struct dss_clock_info *cinfo);
243int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
244 struct dss_clock_info *dss_cinfo,
245 struct dispc_clock_info *dispc_cinfo);
246
247/* SDI */
Jani Nikula368a1482010-05-07 11:58:41 +0200248#ifdef CONFIG_OMAP2_DSS_SDI
Tomi Valkeinen42c9dee2011-03-02 12:29:27 +0200249int sdi_init(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200250void sdi_exit(void);
251int sdi_init_display(struct omap_dss_device *display);
Jani Nikula368a1482010-05-07 11:58:41 +0200252#else
Tomi Valkeinen42c9dee2011-03-02 12:29:27 +0200253static inline int sdi_init(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200254{
255 return 0;
256}
257static inline void sdi_exit(void)
258{
259}
260#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200261
262/* DSI */
Jani Nikula368a1482010-05-07 11:58:41 +0200263#ifdef CONFIG_OMAP2_DSS_DSI
Archit Taneja5a8b5722011-05-12 17:26:29 +0530264
265struct dentry;
266struct file_operations;
267
Senthilvadivu Guruswamyc8aac012011-01-24 06:22:02 +0000268int dsi_init_platform_driver(void);
269void dsi_uninit_platform_driver(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200270
Tomi Valkeinen4fbafaf2011-05-27 10:52:19 +0300271int dsi_runtime_get(struct platform_device *dsidev);
272void dsi_runtime_put(struct platform_device *dsidev);
273
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200274void dsi_dump_clocks(struct seq_file *s);
Archit Taneja5a8b5722011-05-12 17:26:29 +0530275void dsi_create_debugfs_files_irq(struct dentry *debugfs_dir,
276 const struct file_operations *debug_fops);
277void dsi_create_debugfs_files_reg(struct dentry *debugfs_dir,
278 const struct file_operations *debug_fops);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200279
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200280int dsi_init_display(struct omap_dss_device *display);
281void dsi_irq_handler(void);
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530282unsigned long dsi_get_pll_hsdiv_dispc_rate(struct platform_device *dsidev);
283int dsi_pll_set_clock_div(struct platform_device *dsidev,
284 struct dsi_clock_info *cinfo);
285int dsi_pll_calc_clock_div_pck(struct platform_device *dsidev, bool is_tft,
286 unsigned long req_pck, struct dsi_clock_info *cinfo,
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200287 struct dispc_clock_info *dispc_cinfo);
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530288int dsi_pll_init(struct platform_device *dsidev, bool enable_hsclk,
289 bool enable_hsdiv);
290void dsi_pll_uninit(struct platform_device *dsidev, bool disconnect_lanes);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200291void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
Tomi Valkeinen5ed8cf52011-06-21 09:35:36 +0300292 u32 fifo_size, u32 burst_size,
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200293 u32 *fifo_low, u32 *fifo_high);
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530294void dsi_wait_pll_hsdiv_dispc_active(struct platform_device *dsidev);
295void dsi_wait_pll_hsdiv_dsi_active(struct platform_device *dsidev);
296struct platform_device *dsi_get_dsidev_from_id(int module);
Jani Nikula368a1482010-05-07 11:58:41 +0200297#else
Senthilvadivu Guruswamyc8aac012011-01-24 06:22:02 +0000298static inline int dsi_init_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200299{
300 return 0;
301}
Senthilvadivu Guruswamyc8aac012011-01-24 06:22:02 +0000302static inline void dsi_uninit_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200303{
304}
Tomi Valkeinen4fbafaf2011-05-27 10:52:19 +0300305static inline int dsi_runtime_get(struct platform_device *dsidev)
306{
307 return 0;
308}
309static inline void dsi_runtime_put(struct platform_device *dsidev)
310{
311}
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530312static inline unsigned long dsi_get_pll_hsdiv_dispc_rate(struct platform_device *dsidev)
Taneja, Archit66534e82011-03-08 05:50:34 -0600313{
314 WARN("%s: DSI not compiled in, returning rate as 0\n", __func__);
315 return 0;
316}
Tomi Valkeinen943e4452011-04-30 15:38:15 +0300317static inline int dsi_pll_set_clock_div(struct platform_device *dsidev,
318 struct dsi_clock_info *cinfo)
319{
320 WARN("%s: DSI not compiled in\n", __func__);
321 return -ENODEV;
322}
323static inline int dsi_pll_calc_clock_div_pck(struct platform_device *dsidev,
324 bool is_tft, unsigned long req_pck,
325 struct dsi_clock_info *dsi_cinfo,
326 struct dispc_clock_info *dispc_cinfo)
327{
328 WARN("%s: DSI not compiled in\n", __func__);
329 return -ENODEV;
330}
331static inline int dsi_pll_init(struct platform_device *dsidev,
332 bool enable_hsclk, bool enable_hsdiv)
333{
334 WARN("%s: DSI not compiled in\n", __func__);
335 return -ENODEV;
336}
337static inline void dsi_pll_uninit(struct platform_device *dsidev,
338 bool disconnect_lanes)
339{
340}
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530341static inline void dsi_wait_pll_hsdiv_dispc_active(struct platform_device *dsidev)
Tomi Valkeinene406f902010-06-09 15:28:12 +0300342{
343}
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530344static inline void dsi_wait_pll_hsdiv_dsi_active(struct platform_device *dsidev)
Tomi Valkeinene406f902010-06-09 15:28:12 +0300345{
346}
Archit Tanejaa72b64b2011-05-12 17:26:26 +0530347static inline struct platform_device *dsi_get_dsidev_from_id(int module)
348{
349 WARN("%s: DSI not compiled in, returning platform device as NULL\n",
350 __func__);
351 return NULL;
352}
Jani Nikula368a1482010-05-07 11:58:41 +0200353#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200354
355/* DPI */
Jani Nikula368a1482010-05-07 11:58:41 +0200356#ifdef CONFIG_OMAP2_DSS_DPI
Tomi Valkeinen277b2882011-03-02 12:32:48 +0200357int dpi_init(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200358void dpi_exit(void);
359int dpi_init_display(struct omap_dss_device *dssdev);
Jani Nikula368a1482010-05-07 11:58:41 +0200360#else
Tomi Valkeinen277b2882011-03-02 12:32:48 +0200361static inline int dpi_init(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200362{
363 return 0;
364}
365static inline void dpi_exit(void)
366{
367}
368#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200369
370/* DISPC */
Senthilvadivu Guruswamy060b6d92011-01-24 06:22:00 +0000371int dispc_init_platform_driver(void);
372void dispc_uninit_platform_driver(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200373void dispc_dump_clocks(struct seq_file *s);
Tomi Valkeinendfc0fd82009-12-17 14:35:21 +0200374void dispc_dump_irqs(struct seq_file *s);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200375void dispc_dump_regs(struct seq_file *s);
376void dispc_irq_handler(void);
377void dispc_fake_vsync_irq(void);
378
Tomi Valkeinen4fbafaf2011-05-27 10:52:19 +0300379int dispc_runtime_get(void);
380void dispc_runtime_put(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200381
382void dispc_enable_sidle(void);
383void dispc_disable_sidle(void);
384
385void dispc_lcd_enable_signal_polarity(bool act_high);
386void dispc_lcd_enable_signal(bool enable);
387void dispc_pck_free_enable(bool enable);
Sumit Semwal64ba4f72010-12-02 11:27:10 +0000388void dispc_enable_fifohandcheck(enum omap_channel channel, bool enable);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200389
Sumit Semwal64ba4f72010-12-02 11:27:10 +0000390void dispc_set_lcd_size(enum omap_channel channel, u16 width, u16 height);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200391void dispc_set_digit_size(u16 width, u16 height);
392u32 dispc_get_plane_fifo_size(enum omap_plane plane);
Tomi Valkeinen5ed8cf52011-06-21 09:35:36 +0300393void dispc_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200394void dispc_enable_fifomerge(bool enable);
Tomi Valkeinen5ed8cf52011-06-21 09:35:36 +0300395u32 dispc_get_burst_size(enum omap_plane plane);
Tomi Valkeinen3c07cae2011-06-21 09:34:30 +0300396void dispc_enable_cpr(enum omap_channel channel, bool enable);
397void dispc_set_cpr_coef(enum omap_channel channel,
398 struct omap_dss_cpr_coefs *coefs);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200399
400void dispc_set_plane_ba0(enum omap_plane plane, u32 paddr);
401void dispc_set_plane_ba1(enum omap_plane plane, u32 paddr);
402void dispc_set_plane_pos(enum omap_plane plane, u16 x, u16 y);
403void dispc_set_plane_size(enum omap_plane plane, u16 width, u16 height);
404void dispc_set_channel_out(enum omap_plane plane,
405 enum omap_channel channel_out);
406
Mythri P Kd3862612011-03-11 18:02:49 +0530407void dispc_enable_gamma_table(bool enable);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200408int dispc_setup_plane(enum omap_plane plane,
409 u32 paddr, u16 screen_width,
410 u16 pos_x, u16 pos_y,
411 u16 width, u16 height,
412 u16 out_width, u16 out_height,
413 enum omap_color_mode color_mode,
414 bool ilace,
415 enum omap_dss_rotation_type rotation_type,
416 u8 rotation, bool mirror,
Sumit Semwal18faa1b2010-12-02 11:27:14 +0000417 u8 global_alpha, u8 pre_mult_alpha,
Amber Jain0d66cbb2011-05-19 19:47:54 +0530418 enum omap_channel channel,
419 u32 puv_addr);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200420
421bool dispc_go_busy(enum omap_channel channel);
422void dispc_go(enum omap_channel channel);
Tomi Valkeinena2faee82010-01-08 17:14:53 +0200423void dispc_enable_channel(enum omap_channel channel, bool enable);
424bool dispc_is_channel_enabled(enum omap_channel channel);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200425int dispc_enable_plane(enum omap_plane plane, bool enable);
426void dispc_enable_replication(enum omap_plane plane, bool enable);
427
Sumit Semwal64ba4f72010-12-02 11:27:10 +0000428void dispc_set_parallel_interface_mode(enum omap_channel channel,
429 enum omap_parallel_interface_mode mode);
430void dispc_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
431void dispc_set_lcd_display_type(enum omap_channel channel,
432 enum omap_lcd_display_type type);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200433void dispc_set_loadmode(enum omap_dss_load_mode mode);
434
435void dispc_set_default_color(enum omap_channel channel, u32 color);
436u32 dispc_get_default_color(enum omap_channel channel);
437void dispc_set_trans_key(enum omap_channel ch,
438 enum omap_dss_trans_key_type type,
439 u32 trans_key);
440void dispc_get_trans_key(enum omap_channel ch,
441 enum omap_dss_trans_key_type *type,
442 u32 *trans_key);
443void dispc_enable_trans_key(enum omap_channel ch, bool enable);
444void dispc_enable_alpha_blending(enum omap_channel ch, bool enable);
445bool dispc_trans_key_enabled(enum omap_channel ch);
446bool dispc_alpha_blending_enabled(enum omap_channel ch);
447
448bool dispc_lcd_timings_ok(struct omap_video_timings *timings);
Sumit Semwal64ba4f72010-12-02 11:27:10 +0000449void dispc_set_lcd_timings(enum omap_channel channel,
450 struct omap_video_timings *timings);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200451unsigned long dispc_fclk_rate(void);
Sumit Semwalff1b2cd2010-12-02 11:27:11 +0000452unsigned long dispc_lclk_rate(enum omap_channel channel);
453unsigned long dispc_pclk_rate(enum omap_channel channel);
454void dispc_set_pol_freq(enum omap_channel channel,
455 enum omap_panel_config config, u8 acbi, u8 acb);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200456void dispc_find_clk_divs(bool is_tft, unsigned long req_pck, unsigned long fck,
457 struct dispc_clock_info *cinfo);
458int dispc_calc_clock_rates(unsigned long dispc_fclk_rate,
459 struct dispc_clock_info *cinfo);
Sumit Semwalff1b2cd2010-12-02 11:27:11 +0000460int dispc_set_clock_div(enum omap_channel channel,
461 struct dispc_clock_info *cinfo);
462int dispc_get_clock_div(enum omap_channel channel,
463 struct dispc_clock_info *cinfo);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200464
465
466/* VENC */
Jani Nikula368a1482010-05-07 11:58:41 +0200467#ifdef CONFIG_OMAP2_DSS_VENC
Senthilvadivu Guruswamy30ea50c2011-01-24 06:22:01 +0000468int venc_init_platform_driver(void);
469void venc_uninit_platform_driver(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200470void venc_dump_regs(struct seq_file *s);
471int venc_init_display(struct omap_dss_device *display);
Jani Nikula368a1482010-05-07 11:58:41 +0200472#else
Senthilvadivu Guruswamy30ea50c2011-01-24 06:22:01 +0000473static inline int venc_init_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200474{
475 return 0;
476}
Senthilvadivu Guruswamy30ea50c2011-01-24 06:22:01 +0000477static inline void venc_uninit_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200478{
479}
480#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200481
Mythri P Kc3198a52011-03-12 12:04:27 +0530482/* HDMI */
483#ifdef CONFIG_OMAP4_DSS_HDMI
484int hdmi_init_platform_driver(void);
485void hdmi_uninit_platform_driver(void);
486int hdmi_init_display(struct omap_dss_device *dssdev);
487#else
488static inline int hdmi_init_display(struct omap_dss_device *dssdev)
489{
490 return 0;
491}
492static inline int hdmi_init_platform_driver(void)
493{
494 return 0;
495}
496static inline void hdmi_uninit_platform_driver(void)
497{
498}
499#endif
500int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev);
501void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev);
502void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev);
503int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
504 struct omap_video_timings *timings);
Mythri P K70be8322011-03-10 15:48:48 +0530505int hdmi_panel_init(void);
506void hdmi_panel_exit(void);
Mythri P Kc3198a52011-03-12 12:04:27 +0530507
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200508/* RFBI */
Jani Nikula368a1482010-05-07 11:58:41 +0200509#ifdef CONFIG_OMAP2_DSS_RFBI
Senthilvadivu Guruswamy3448d502011-01-24 06:21:59 +0000510int rfbi_init_platform_driver(void);
511void rfbi_uninit_platform_driver(void);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200512void rfbi_dump_regs(struct seq_file *s);
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200513int rfbi_init_display(struct omap_dss_device *display);
Jani Nikula368a1482010-05-07 11:58:41 +0200514#else
Senthilvadivu Guruswamy3448d502011-01-24 06:21:59 +0000515static inline int rfbi_init_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200516{
517 return 0;
518}
Senthilvadivu Guruswamy3448d502011-01-24 06:21:59 +0000519static inline void rfbi_uninit_platform_driver(void)
Jani Nikula368a1482010-05-07 11:58:41 +0200520{
521}
522#endif
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200523
Tomi Valkeinendfc0fd82009-12-17 14:35:21 +0200524
525#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
526static inline void dss_collect_irq_stats(u32 irqstatus, unsigned *irq_arr)
527{
528 int b;
529 for (b = 0; b < 32; ++b) {
530 if (irqstatus & (1 << b))
531 irq_arr[b]++;
532 }
533}
534#endif
535
Tomi Valkeinen559d6702009-11-03 11:23:50 +0200536#endif