aboutsummaryrefslogtreecommitdiffstats
path: root/include/video
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2011-08-27 09:43:54 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2011-08-27 10:06:11 -0400
commit7b1bb388bc879ffcc6c69b567816d5c354afe42b (patch)
tree5a217fdfb0b5e5a327bdcd624506337c1ae1fe32 /include/video
parent7d754596756240fa918b94cd0c3011c77a638987 (diff)
parent02f8c6aee8df3cdc935e9bdd4f2d020306035dbe (diff)
Merge 'Linux v3.0' into Litmus
Some notes: * Litmus^RT scheduling class is the topmost scheduling class (above stop_sched_class). * scheduler_ipi() function (e.g., in smp_reschedule_interrupt()) may increase IPI latencies. * Added path into schedule() to quickly re-evaluate scheduling decision without becoming preemptive again. This used to be a standard path before the removal of BKL. Conflicts: Makefile arch/arm/kernel/calls.S arch/arm/kernel/smp.c arch/x86/include/asm/unistd_32.h arch/x86/kernel/smp.c arch/x86/kernel/syscall_table_32.S include/linux/hrtimer.h kernel/printk.c kernel/sched.c kernel/sched_fair.c
Diffstat (limited to 'include/video')
-rw-r--r--include/video/atmel_lcdc.h1
-rw-r--r--include/video/da8xx-fb.h1
-rw-r--r--include/video/kyro.h2
-rw-r--r--include/video/neomagic.h2
-rw-r--r--include/video/newport.h4
-rw-r--r--include/video/omap-panel-generic-dpi.h37
-rw-r--r--include/video/omap-panel-nokia-dsi.h33
-rw-r--r--include/video/omapdss.h641
-rw-r--r--include/video/s1d13xxxfb.h6
-rw-r--r--include/video/sh_mipi_dsi.h6
-rw-r--r--include/video/sh_mobile_hdmi.h19
-rw-r--r--include/video/sh_mobile_lcdc.h18
-rw-r--r--include/video/sh_mobile_meram.h68
-rw-r--r--include/video/sisfb.h2
-rw-r--r--include/video/sstfb.h6
-rw-r--r--include/video/udlfb.h95
-rw-r--r--include/video/vga.h2
17 files changed, 926 insertions, 17 deletions
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h
index 0c864db1a466..28447f1594fa 100644
--- a/include/video/atmel_lcdc.h
+++ b/include/video/atmel_lcdc.h
@@ -52,6 +52,7 @@ struct atmel_lcdfb_info {
52 u8 bl_power; 52 u8 bl_power;
53#endif 53#endif
54 bool lcdcon_is_backlight; 54 bool lcdcon_is_backlight;
55 bool lcdcon_pol_negative;
55 u8 saved_lcdcon; 56 u8 saved_lcdcon;
56 57
57 u8 default_bpp; 58 u8 default_bpp;
diff --git a/include/video/da8xx-fb.h b/include/video/da8xx-fb.h
index 6316cdabf73f..89d43b3d4cb9 100644
--- a/include/video/da8xx-fb.h
+++ b/include/video/da8xx-fb.h
@@ -99,7 +99,6 @@ struct lcd_sync_arg {
99#define FBIPUT_COLOR _IOW('F', 6, int) 99#define FBIPUT_COLOR _IOW('F', 6, int)
100#define FBIPUT_HSYNC _IOW('F', 9, int) 100#define FBIPUT_HSYNC _IOW('F', 9, int)
101#define FBIPUT_VSYNC _IOW('F', 10, int) 101#define FBIPUT_VSYNC _IOW('F', 10, int)
102#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t)
103 102
104#endif /* ifndef DA8XX_FB_H */ 103#endif /* ifndef DA8XX_FB_H */
105 104
diff --git a/include/video/kyro.h b/include/video/kyro.h
index dba7de2ee4a8..c563968e926c 100644
--- a/include/video/kyro.h
+++ b/include/video/kyro.h
@@ -32,7 +32,7 @@ struct kyrofb_info {
32 u32 PIXCLK; /* Pixel Clock */ 32 u32 PIXCLK; /* Pixel Clock */
33 u32 HCLK; /* Hor Clock */ 33 u32 HCLK; /* Hor Clock */
34 34
35 /* Usefull to hold depth here for Linux */ 35 /* Useful to hold depth here for Linux */
36 u8 PIXDEPTH; 36 u8 PIXDEPTH;
37 37
38#ifdef CONFIG_MTRR 38#ifdef CONFIG_MTRR
diff --git a/include/video/neomagic.h b/include/video/neomagic.h
index 08b663782956..bc5013e8059d 100644
--- a/include/video/neomagic.h
+++ b/include/video/neomagic.h
@@ -129,7 +129,7 @@ struct neofb_par {
129 unsigned char CRTC[25]; /* Crtc Controller */ 129 unsigned char CRTC[25]; /* Crtc Controller */
130 unsigned char Sequencer[5]; /* Video Sequencer */ 130 unsigned char Sequencer[5]; /* Video Sequencer */
131 unsigned char Graphics[9]; /* Video Graphics */ 131 unsigned char Graphics[9]; /* Video Graphics */
132 unsigned char Attribute[21]; /* Video Atribute */ 132 unsigned char Attribute[21]; /* Video Attribute */
133 133
134 unsigned char GeneralLockReg; 134 unsigned char GeneralLockReg;
135 unsigned char ExtCRTDispAddr; 135 unsigned char ExtCRTDispAddr;
diff --git a/include/video/newport.h b/include/video/newport.h
index 001b935e71c4..de980a3b60c9 100644
--- a/include/video/newport.h
+++ b/include/video/newport.h
@@ -3,9 +3,9 @@
3 * newport.h: Defines and register layout for NEWPORT graphics 3 * newport.h: Defines and register layout for NEWPORT graphics
4 * hardware. 4 * hardware.
5 * 5 *
6 * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) 6 * Copyright (C) 1996 David S. Miller (davem@davemloft.net)
7 * 7 *
8 * Ulf Carlsson - Compability with the IRIX structures added 8 * Ulf Carlsson - Compatibility with the IRIX structures added
9 */ 9 */
10 10
11#ifndef _SGI_NEWPORT_H 11#ifndef _SGI_NEWPORT_H
diff --git a/include/video/omap-panel-generic-dpi.h b/include/video/omap-panel-generic-dpi.h
new file mode 100644
index 000000000000..127e3f20328e
--- /dev/null
+++ b/include/video/omap-panel-generic-dpi.h
@@ -0,0 +1,37 @@
1/*
2 * Header for generic DPI panel driver
3 *
4 * Copyright (C) 2010 Canonical Ltd.
5 * Author: Bryan Wu <bryan.wu@canonical.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published by
9 * the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef __OMAP_PANEL_GENERIC_DPI_H
21#define __OMAP_PANEL_GENERIC_DPI_H
22
23struct omap_dss_device;
24
25/**
26 * struct panel_generic_dpi_data - panel driver configuration data
27 * @name: panel name
28 * @platform_enable: platform specific panel enable function
29 * @platform_disable: platform specific panel disable function
30 */
31struct panel_generic_dpi_data {
32 const char *name;
33 int (*platform_enable)(struct omap_dss_device *dssdev);
34 void (*platform_disable)(struct omap_dss_device *dssdev);
35};
36
37#endif /* __OMAP_PANEL_GENERIC_DPI_H */
diff --git a/include/video/omap-panel-nokia-dsi.h b/include/video/omap-panel-nokia-dsi.h
new file mode 100644
index 000000000000..921ae9327228
--- /dev/null
+++ b/include/video/omap-panel-nokia-dsi.h
@@ -0,0 +1,33 @@
1#ifndef __OMAP_NOKIA_DSI_PANEL_H
2#define __OMAP_NOKIA_DSI_PANEL_H
3
4struct omap_dss_device;
5
6/**
7 * struct nokia_dsi_panel_data - Nokia DSI panel driver configuration
8 * @name: panel name
9 * @use_ext_te: use external TE
10 * @ext_te_gpio: external TE GPIO
11 * @esd_interval: interval of ESD checks, 0 = disabled (ms)
12 * @ulps_timeout: time to wait before entering ULPS, 0 = disabled (ms)
13 * @max_backlight_level: maximum backlight level
14 * @set_backlight: pointer to backlight set function
15 * @get_backlight: pointer to backlight get function
16 */
17struct nokia_dsi_panel_data {
18 const char *name;
19
20 int reset_gpio;
21
22 bool use_ext_te;
23 int ext_te_gpio;
24
25 unsigned esd_interval;
26 unsigned ulps_timeout;
27
28 int max_backlight_level;
29 int (*set_backlight)(struct omap_dss_device *dssdev, int level);
30 int (*get_backlight)(struct omap_dss_device *dssdev);
31};
32
33#endif /* __OMAP_NOKIA_DSI_PANEL_H */
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
new file mode 100644
index 000000000000..892b97f8e157
--- /dev/null
+++ b/include/video/omapdss.h
@@ -0,0 +1,641 @@
1/*
2 * Copyright (C) 2008 Nokia Corporation
3 * Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __OMAP_OMAPDSS_H
19#define __OMAP_OMAPDSS_H
20
21#include <linux/list.h>
22#include <linux/kobject.h>
23#include <linux/device.h>
24#include <linux/platform_device.h>
25#include <asm/atomic.h>
26
27#define DISPC_IRQ_FRAMEDONE (1 << 0)
28#define DISPC_IRQ_VSYNC (1 << 1)
29#define DISPC_IRQ_EVSYNC_EVEN (1 << 2)
30#define DISPC_IRQ_EVSYNC_ODD (1 << 3)
31#define DISPC_IRQ_ACBIAS_COUNT_STAT (1 << 4)
32#define DISPC_IRQ_PROG_LINE_NUM (1 << 5)
33#define DISPC_IRQ_GFX_FIFO_UNDERFLOW (1 << 6)
34#define DISPC_IRQ_GFX_END_WIN (1 << 7)
35#define DISPC_IRQ_PAL_GAMMA_MASK (1 << 8)
36#define DISPC_IRQ_OCP_ERR (1 << 9)
37#define DISPC_IRQ_VID1_FIFO_UNDERFLOW (1 << 10)
38#define DISPC_IRQ_VID1_END_WIN (1 << 11)
39#define DISPC_IRQ_VID2_FIFO_UNDERFLOW (1 << 12)
40#define DISPC_IRQ_VID2_END_WIN (1 << 13)
41#define DISPC_IRQ_SYNC_LOST (1 << 14)
42#define DISPC_IRQ_SYNC_LOST_DIGIT (1 << 15)
43#define DISPC_IRQ_WAKEUP (1 << 16)
44#define DISPC_IRQ_SYNC_LOST2 (1 << 17)
45#define DISPC_IRQ_VSYNC2 (1 << 18)
46#define DISPC_IRQ_ACBIAS_COUNT_STAT2 (1 << 21)
47#define DISPC_IRQ_FRAMEDONE2 (1 << 22)
48
49struct omap_dss_device;
50struct omap_overlay_manager;
51
52enum omap_display_type {
53 OMAP_DISPLAY_TYPE_NONE = 0,
54 OMAP_DISPLAY_TYPE_DPI = 1 << 0,
55 OMAP_DISPLAY_TYPE_DBI = 1 << 1,
56 OMAP_DISPLAY_TYPE_SDI = 1 << 2,
57 OMAP_DISPLAY_TYPE_DSI = 1 << 3,
58 OMAP_DISPLAY_TYPE_VENC = 1 << 4,
59 OMAP_DISPLAY_TYPE_HDMI = 1 << 5,
60};
61
62enum omap_plane {
63 OMAP_DSS_GFX = 0,
64 OMAP_DSS_VIDEO1 = 1,
65 OMAP_DSS_VIDEO2 = 2
66};
67
68enum omap_channel {
69 OMAP_DSS_CHANNEL_LCD = 0,
70 OMAP_DSS_CHANNEL_DIGIT = 1,
71 OMAP_DSS_CHANNEL_LCD2 = 2,
72};
73
74enum omap_color_mode {
75 OMAP_DSS_COLOR_CLUT1 = 1 << 0, /* BITMAP 1 */
76 OMAP_DSS_COLOR_CLUT2 = 1 << 1, /* BITMAP 2 */
77 OMAP_DSS_COLOR_CLUT4 = 1 << 2, /* BITMAP 4 */
78 OMAP_DSS_COLOR_CLUT8 = 1 << 3, /* BITMAP 8 */
79 OMAP_DSS_COLOR_RGB12U = 1 << 4, /* RGB12, 16-bit container */
80 OMAP_DSS_COLOR_ARGB16 = 1 << 5, /* ARGB16 */
81 OMAP_DSS_COLOR_RGB16 = 1 << 6, /* RGB16 */
82 OMAP_DSS_COLOR_RGB24U = 1 << 7, /* RGB24, 32-bit container */
83 OMAP_DSS_COLOR_RGB24P = 1 << 8, /* RGB24, 24-bit container */
84 OMAP_DSS_COLOR_YUV2 = 1 << 9, /* YUV2 4:2:2 co-sited */
85 OMAP_DSS_COLOR_UYVY = 1 << 10, /* UYVY 4:2:2 co-sited */
86 OMAP_DSS_COLOR_ARGB32 = 1 << 11, /* ARGB32 */
87 OMAP_DSS_COLOR_RGBA32 = 1 << 12, /* RGBA32 */
88 OMAP_DSS_COLOR_RGBX32 = 1 << 13, /* RGBx32 */
89 OMAP_DSS_COLOR_NV12 = 1 << 14, /* NV12 format: YUV 4:2:0 */
90 OMAP_DSS_COLOR_RGBA16 = 1 << 15, /* RGBA16 - 4444 */
91 OMAP_DSS_COLOR_RGBX16 = 1 << 16, /* RGBx16 - 4444 */
92 OMAP_DSS_COLOR_ARGB16_1555 = 1 << 17, /* ARGB16 - 1555 */
93 OMAP_DSS_COLOR_XRGB16_1555 = 1 << 18, /* xRGB16 - 1555 */
94};
95
96enum omap_lcd_display_type {
97 OMAP_DSS_LCD_DISPLAY_STN,
98 OMAP_DSS_LCD_DISPLAY_TFT,
99};
100
101enum omap_dss_load_mode {
102 OMAP_DSS_LOAD_CLUT_AND_FRAME = 0,
103 OMAP_DSS_LOAD_CLUT_ONLY = 1,
104 OMAP_DSS_LOAD_FRAME_ONLY = 2,
105 OMAP_DSS_LOAD_CLUT_ONCE_FRAME = 3,
106};
107
108enum omap_dss_trans_key_type {
109 OMAP_DSS_COLOR_KEY_GFX_DST = 0,
110 OMAP_DSS_COLOR_KEY_VID_SRC = 1,
111};
112
113enum omap_rfbi_te_mode {
114 OMAP_DSS_RFBI_TE_MODE_1 = 1,
115 OMAP_DSS_RFBI_TE_MODE_2 = 2,
116};
117
118enum omap_panel_config {
119 OMAP_DSS_LCD_IVS = 1<<0,
120 OMAP_DSS_LCD_IHS = 1<<1,
121 OMAP_DSS_LCD_IPC = 1<<2,
122 OMAP_DSS_LCD_IEO = 1<<3,
123 OMAP_DSS_LCD_RF = 1<<4,
124 OMAP_DSS_LCD_ONOFF = 1<<5,
125
126 OMAP_DSS_LCD_TFT = 1<<20,
127};
128
129enum omap_dss_venc_type {
130 OMAP_DSS_VENC_TYPE_COMPOSITE,
131 OMAP_DSS_VENC_TYPE_SVIDEO,
132};
133
134enum omap_display_caps {
135 OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE = 1 << 0,
136 OMAP_DSS_DISPLAY_CAP_TEAR_ELIM = 1 << 1,
137};
138
139enum omap_dss_update_mode {
140 OMAP_DSS_UPDATE_DISABLED = 0,
141 OMAP_DSS_UPDATE_AUTO,
142 OMAP_DSS_UPDATE_MANUAL,
143};
144
145enum omap_dss_display_state {
146 OMAP_DSS_DISPLAY_DISABLED = 0,
147 OMAP_DSS_DISPLAY_ACTIVE,
148 OMAP_DSS_DISPLAY_SUSPENDED,
149};
150
151/* XXX perhaps this should be removed */
152enum omap_dss_overlay_managers {
153 OMAP_DSS_OVL_MGR_LCD,
154 OMAP_DSS_OVL_MGR_TV,
155 OMAP_DSS_OVL_MGR_LCD2,
156};
157
158enum omap_dss_rotation_type {
159 OMAP_DSS_ROT_DMA = 0,
160 OMAP_DSS_ROT_VRFB = 1,
161};
162
163/* clockwise rotation angle */
164enum omap_dss_rotation_angle {
165 OMAP_DSS_ROT_0 = 0,
166 OMAP_DSS_ROT_90 = 1,
167 OMAP_DSS_ROT_180 = 2,
168 OMAP_DSS_ROT_270 = 3,
169};
170
171enum omap_overlay_caps {
172 OMAP_DSS_OVL_CAP_SCALE = 1 << 0,
173 OMAP_DSS_OVL_CAP_DISPC = 1 << 1,
174};
175
176enum omap_overlay_manager_caps {
177 OMAP_DSS_OVL_MGR_CAP_DISPC = 1 << 0,
178};
179
180enum omap_dss_clk_source {
181 OMAP_DSS_CLK_SRC_FCK = 0, /* OMAP2/3: DSS1_ALWON_FCLK
182 * OMAP4: DSS_FCLK */
183 OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC, /* OMAP3: DSI1_PLL_FCLK
184 * OMAP4: PLL1_CLK1 */
185 OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI, /* OMAP3: DSI2_PLL_FCLK
186 * OMAP4: PLL1_CLK2 */
187 OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC, /* OMAP4: PLL2_CLK1 */
188 OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI, /* OMAP4: PLL2_CLK2 */
189};
190
191/* RFBI */
192
193struct rfbi_timings {
194 int cs_on_time;
195 int cs_off_time;
196 int we_on_time;
197 int we_off_time;
198 int re_on_time;
199 int re_off_time;
200 int we_cycle_time;
201 int re_cycle_time;
202 int cs_pulse_width;
203 int access_time;
204
205 int clk_div;
206
207 u32 tim[5]; /* set by rfbi_convert_timings() */
208
209 int converted;
210};
211
212void omap_rfbi_write_command(const void *buf, u32 len);
213void omap_rfbi_read_data(void *buf, u32 len);
214void omap_rfbi_write_data(const void *buf, u32 len);
215void omap_rfbi_write_pixels(const void __iomem *buf, int scr_width,
216 u16 x, u16 y,
217 u16 w, u16 h);
218int omap_rfbi_enable_te(bool enable, unsigned line);
219int omap_rfbi_setup_te(enum omap_rfbi_te_mode mode,
220 unsigned hs_pulse_time, unsigned vs_pulse_time,
221 int hs_pol_inv, int vs_pol_inv, int extif_div);
222void rfbi_bus_lock(void);
223void rfbi_bus_unlock(void);
224
225/* DSI */
226void dsi_bus_lock(struct omap_dss_device *dssdev);
227void dsi_bus_unlock(struct omap_dss_device *dssdev);
228int dsi_vc_dcs_write(struct omap_dss_device *dssdev, int channel, u8 *data,
229 int len);
230int dsi_vc_dcs_write_0(struct omap_dss_device *dssdev, int channel,
231 u8 dcs_cmd);
232int dsi_vc_dcs_write_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
233 u8 param);
234int dsi_vc_dcs_write_nosync(struct omap_dss_device *dssdev, int channel,
235 u8 *data, int len);
236int dsi_vc_dcs_read(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
237 u8 *buf, int buflen);
238int dsi_vc_dcs_read_1(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
239 u8 *data);
240int dsi_vc_dcs_read_2(struct omap_dss_device *dssdev, int channel, u8 dcs_cmd,
241 u8 *data1, u8 *data2);
242int dsi_vc_set_max_rx_packet_size(struct omap_dss_device *dssdev, int channel,
243 u16 len);
244int dsi_vc_send_null(struct omap_dss_device *dssdev, int channel);
245int dsi_vc_send_bta_sync(struct omap_dss_device *dssdev, int channel);
246
247/* Board specific data */
248struct omap_dss_board_info {
249 int (*get_last_off_on_transaction_id)(struct device *dev);
250 int num_devices;
251 struct omap_dss_device **devices;
252 struct omap_dss_device *default_device;
253 void (*dsi_mux_pads)(bool enable);
254};
255
256#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)
257/* Init with the board info */
258extern int omap_display_init(struct omap_dss_board_info *board_data);
259#else
260static inline int omap_display_init(struct omap_dss_board_info *board_data)
261{
262 return 0;
263}
264#endif
265
266struct omap_display_platform_data {
267 struct omap_dss_board_info *board_data;
268 /* TODO: Additional members to be added when PM is considered */
269
270 bool (*opt_clock_available)(const char *clk_role);
271};
272
273struct omap_video_timings {
274 /* Unit: pixels */
275 u16 x_res;
276 /* Unit: pixels */
277 u16 y_res;
278 /* Unit: KHz */
279 u32 pixel_clock;
280 /* Unit: pixel clocks */
281 u16 hsw; /* Horizontal synchronization pulse width */
282 /* Unit: pixel clocks */
283 u16 hfp; /* Horizontal front porch */
284 /* Unit: pixel clocks */
285 u16 hbp; /* Horizontal back porch */
286 /* Unit: line clocks */
287 u16 vsw; /* Vertical synchronization pulse width */
288 /* Unit: line clocks */
289 u16 vfp; /* Vertical front porch */
290 /* Unit: line clocks */
291 u16 vbp; /* Vertical back porch */
292};
293
294#ifdef CONFIG_OMAP2_DSS_VENC
295/* Hardcoded timings for tv modes. Venc only uses these to
296 * identify the mode, and does not actually use the configs
297 * itself. However, the configs should be something that
298 * a normal monitor can also show */
299extern const struct omap_video_timings omap_dss_pal_timings;
300extern const struct omap_video_timings omap_dss_ntsc_timings;
301#endif
302
303struct omap_overlay_info {
304 bool enabled;
305
306 u32 paddr;
307 void __iomem *vaddr;
308 u32 p_uv_addr; /* for NV12 format */
309 u16 screen_width;
310 u16 width;
311 u16 height;
312 enum omap_color_mode color_mode;
313 u8 rotation;
314 enum omap_dss_rotation_type rotation_type;
315 bool mirror;
316
317 u16 pos_x;
318 u16 pos_y;
319 u16 out_width; /* if 0, out_width == width */
320 u16 out_height; /* if 0, out_height == height */
321 u8 global_alpha;
322 u8 pre_mult_alpha;
323};
324
325struct omap_overlay {
326 struct kobject kobj;
327 struct list_head list;
328
329 /* static fields */
330 const char *name;
331 int id;
332 enum omap_color_mode supported_modes;
333 enum omap_overlay_caps caps;
334
335 /* dynamic fields */
336 struct omap_overlay_manager *manager;
337 struct omap_overlay_info info;
338
339 /* if true, info has been changed, but not applied() yet */
340 bool info_dirty;
341
342 int (*set_manager)(struct omap_overlay *ovl,
343 struct omap_overlay_manager *mgr);
344 int (*unset_manager)(struct omap_overlay *ovl);
345
346 int (*set_overlay_info)(struct omap_overlay *ovl,
347 struct omap_overlay_info *info);
348 void (*get_overlay_info)(struct omap_overlay *ovl,
349 struct omap_overlay_info *info);
350
351 int (*wait_for_go)(struct omap_overlay *ovl);
352};
353
354struct omap_overlay_manager_info {
355 u32 default_color;
356
357 enum omap_dss_trans_key_type trans_key_type;
358 u32 trans_key;
359 bool trans_enabled;
360
361 bool alpha_enabled;
362};
363
364struct omap_overlay_manager {
365 struct kobject kobj;
366 struct list_head list;
367
368 /* static fields */
369 const char *name;
370 int id;
371 enum omap_overlay_manager_caps caps;
372 int num_overlays;
373 struct omap_overlay **overlays;
374 enum omap_display_type supported_displays;
375
376 /* dynamic fields */
377 struct omap_dss_device *device;
378 struct omap_overlay_manager_info info;
379
380 bool device_changed;
381 /* if true, info has been changed but not applied() yet */
382 bool info_dirty;
383
384 int (*set_device)(struct omap_overlay_manager *mgr,
385 struct omap_dss_device *dssdev);
386 int (*unset_device)(struct omap_overlay_manager *mgr);
387
388 int (*set_manager_info)(struct omap_overlay_manager *mgr,
389 struct omap_overlay_manager_info *info);
390 void (*get_manager_info)(struct omap_overlay_manager *mgr,
391 struct omap_overlay_manager_info *info);
392
393 int (*apply)(struct omap_overlay_manager *mgr);
394 int (*wait_for_go)(struct omap_overlay_manager *mgr);
395 int (*wait_for_vsync)(struct omap_overlay_manager *mgr);
396
397 int (*enable)(struct omap_overlay_manager *mgr);
398 int (*disable)(struct omap_overlay_manager *mgr);
399};
400
401struct omap_dss_device {
402 struct device dev;
403
404 enum omap_display_type type;
405
406 enum omap_channel channel;
407
408 union {
409 struct {
410 u8 data_lines;
411 } dpi;
412
413 struct {
414 u8 channel;
415 u8 data_lines;
416 } rfbi;
417
418 struct {
419 u8 datapairs;
420 } sdi;
421
422 struct {
423 u8 clk_lane;
424 u8 clk_pol;
425 u8 data1_lane;
426 u8 data1_pol;
427 u8 data2_lane;
428 u8 data2_pol;
429 u8 data3_lane;
430 u8 data3_pol;
431 u8 data4_lane;
432 u8 data4_pol;
433
434 int module;
435
436 bool ext_te;
437 u8 ext_te_gpio;
438 } dsi;
439
440 struct {
441 enum omap_dss_venc_type type;
442 bool invert_polarity;
443 } venc;
444 } phy;
445
446 struct {
447 struct {
448 struct {
449 u16 lck_div;
450 u16 pck_div;
451 enum omap_dss_clk_source lcd_clk_src;
452 } channel;
453
454 enum omap_dss_clk_source dispc_fclk_src;
455 } dispc;
456
457 struct {
458 u16 regn;
459 u16 regm;
460 u16 regm_dispc;
461 u16 regm_dsi;
462
463 u16 lp_clk_div;
464 enum omap_dss_clk_source dsi_fclk_src;
465 } dsi;
466
467 struct {
468 u16 regn;
469 u16 regm2;
470 } hdmi;
471 } clocks;
472
473 struct {
474 struct omap_video_timings timings;
475
476 int acbi; /* ac-bias pin transitions per interrupt */
477 /* Unit: line clocks */
478 int acb; /* ac-bias pin frequency */
479
480 enum omap_panel_config config;
481 } panel;
482
483 struct {
484 u8 pixel_size;
485 struct rfbi_timings rfbi_timings;
486 } ctrl;
487
488 int reset_gpio;
489
490 int max_backlight_level;
491
492 const char *name;
493
494 /* used to match device to driver */
495 const char *driver_name;
496
497 void *data;
498
499 struct omap_dss_driver *driver;
500
501 /* helper variable for driver suspend/resume */
502 bool activate_after_resume;
503
504 enum omap_display_caps caps;
505
506 struct omap_overlay_manager *manager;
507
508 enum omap_dss_display_state state;
509
510 /* platform specific */
511 int (*platform_enable)(struct omap_dss_device *dssdev);
512 void (*platform_disable)(struct omap_dss_device *dssdev);
513 int (*set_backlight)(struct omap_dss_device *dssdev, int level);
514 int (*get_backlight)(struct omap_dss_device *dssdev);
515};
516
517struct omap_dss_driver {
518 struct device_driver driver;
519
520 int (*probe)(struct omap_dss_device *);
521 void (*remove)(struct omap_dss_device *);
522
523 int (*enable)(struct omap_dss_device *display);
524 void (*disable)(struct omap_dss_device *display);
525 int (*suspend)(struct omap_dss_device *display);
526 int (*resume)(struct omap_dss_device *display);
527 int (*run_test)(struct omap_dss_device *display, int test);
528
529 int (*set_update_mode)(struct omap_dss_device *dssdev,
530 enum omap_dss_update_mode);
531 enum omap_dss_update_mode (*get_update_mode)(
532 struct omap_dss_device *dssdev);
533
534 int (*update)(struct omap_dss_device *dssdev,
535 u16 x, u16 y, u16 w, u16 h);
536 int (*sync)(struct omap_dss_device *dssdev);
537
538 int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
539 int (*get_te)(struct omap_dss_device *dssdev);
540
541 u8 (*get_rotate)(struct omap_dss_device *dssdev);
542 int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate);
543
544 bool (*get_mirror)(struct omap_dss_device *dssdev);
545 int (*set_mirror)(struct omap_dss_device *dssdev, bool enable);
546
547 int (*memory_read)(struct omap_dss_device *dssdev,
548 void *buf, size_t size,
549 u16 x, u16 y, u16 w, u16 h);
550
551 void (*get_resolution)(struct omap_dss_device *dssdev,
552 u16 *xres, u16 *yres);
553 void (*get_dimensions)(struct omap_dss_device *dssdev,
554 u32 *width, u32 *height);
555 int (*get_recommended_bpp)(struct omap_dss_device *dssdev);
556
557 int (*check_timings)(struct omap_dss_device *dssdev,
558 struct omap_video_timings *timings);
559 void (*set_timings)(struct omap_dss_device *dssdev,
560 struct omap_video_timings *timings);
561 void (*get_timings)(struct omap_dss_device *dssdev,
562 struct omap_video_timings *timings);
563
564 int (*set_wss)(struct omap_dss_device *dssdev, u32 wss);
565 u32 (*get_wss)(struct omap_dss_device *dssdev);
566};
567
568int omap_dss_register_driver(struct omap_dss_driver *);
569void omap_dss_unregister_driver(struct omap_dss_driver *);
570
571void omap_dss_get_device(struct omap_dss_device *dssdev);
572void omap_dss_put_device(struct omap_dss_device *dssdev);
573#define for_each_dss_dev(d) while ((d = omap_dss_get_next_device(d)) != NULL)
574struct omap_dss_device *omap_dss_get_next_device(struct omap_dss_device *from);
575struct omap_dss_device *omap_dss_find_device(void *data,
576 int (*match)(struct omap_dss_device *dssdev, void *data));
577
578int omap_dss_start_device(struct omap_dss_device *dssdev);
579void omap_dss_stop_device(struct omap_dss_device *dssdev);
580
581int omap_dss_get_num_overlay_managers(void);
582struct omap_overlay_manager *omap_dss_get_overlay_manager(int num);
583
584int omap_dss_get_num_overlays(void);
585struct omap_overlay *omap_dss_get_overlay(int num);
586
587void omapdss_default_get_resolution(struct omap_dss_device *dssdev,
588 u16 *xres, u16 *yres);
589int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev);
590
591typedef void (*omap_dispc_isr_t) (void *arg, u32 mask);
592int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask);
593int omap_dispc_unregister_isr(omap_dispc_isr_t isr, void *arg, u32 mask);
594
595int omap_dispc_wait_for_irq_timeout(u32 irqmask, unsigned long timeout);
596int omap_dispc_wait_for_irq_interruptible_timeout(u32 irqmask,
597 unsigned long timeout);
598
599#define to_dss_driver(x) container_of((x), struct omap_dss_driver, driver)
600#define to_dss_device(x) container_of((x), struct omap_dss_device, dev)
601
602void omapdss_dsi_vc_enable_hs(struct omap_dss_device *dssdev, int channel,
603 bool enable);
604int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable);
605
606int omap_dsi_prepare_update(struct omap_dss_device *dssdev,
607 u16 *x, u16 *y, u16 *w, u16 *h,
608 bool enlarge_update_area);
609int omap_dsi_update(struct omap_dss_device *dssdev,
610 int channel,
611 u16 x, u16 y, u16 w, u16 h,
612 void (*callback)(int, void *), void *data);
613int omap_dsi_request_vc(struct omap_dss_device *dssdev, int *channel);
614int omap_dsi_set_vc_id(struct omap_dss_device *dssdev, int channel, int vc_id);
615void omap_dsi_release_vc(struct omap_dss_device *dssdev, int channel);
616
617int omapdss_dsi_display_enable(struct omap_dss_device *dssdev);
618void omapdss_dsi_display_disable(struct omap_dss_device *dssdev,
619 bool disconnect_lanes, bool enter_ulps);
620
621int omapdss_dpi_display_enable(struct omap_dss_device *dssdev);
622void omapdss_dpi_display_disable(struct omap_dss_device *dssdev);
623void dpi_set_timings(struct omap_dss_device *dssdev,
624 struct omap_video_timings *timings);
625int dpi_check_timings(struct omap_dss_device *dssdev,
626 struct omap_video_timings *timings);
627
628int omapdss_sdi_display_enable(struct omap_dss_device *dssdev);
629void omapdss_sdi_display_disable(struct omap_dss_device *dssdev);
630
631int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev);
632void omapdss_rfbi_display_disable(struct omap_dss_device *dssdev);
633int omap_rfbi_prepare_update(struct omap_dss_device *dssdev,
634 u16 *x, u16 *y, u16 *w, u16 *h);
635int omap_rfbi_update(struct omap_dss_device *dssdev,
636 u16 x, u16 y, u16 w, u16 h,
637 void (*callback)(void *), void *data);
638int omap_rfbi_configure(struct omap_dss_device *dssdev, int pixel_size,
639 int data_lines);
640
641#endif
diff --git a/include/video/s1d13xxxfb.h b/include/video/s1d13xxxfb.h
index f0736cff2ca3..55f534491a3d 100644
--- a/include/video/s1d13xxxfb.h
+++ b/include/video/s1d13xxxfb.h
@@ -136,12 +136,6 @@
136#define S1DREG_DELAYOFF 0xFFFE 136#define S1DREG_DELAYOFF 0xFFFE
137#define S1DREG_DELAYON 0xFFFF 137#define S1DREG_DELAYON 0xFFFF
138 138
139#define BBLT_FIFO_EMPTY 0x00
140#define BBLT_FIFO_NOT_EMPTY 0x40
141#define BBLT_FIFO_NOT_FULL 0x30
142#define BBLT_FIFO_HALF_FULL 0x20
143#define BBLT_FIFO_FULL 0x10
144
145#define BBLT_SOLID_FILL 0x0c 139#define BBLT_SOLID_FILL 0x0c
146 140
147 141
diff --git a/include/video/sh_mipi_dsi.h b/include/video/sh_mipi_dsi.h
index 18bca08f9f59..6cb95c977de9 100644
--- a/include/video/sh_mipi_dsi.h
+++ b/include/video/sh_mipi_dsi.h
@@ -27,9 +27,15 @@ enum sh_mipi_dsi_data_fmt {
27 27
28struct sh_mobile_lcdc_chan_cfg; 28struct sh_mobile_lcdc_chan_cfg;
29 29
30#define SH_MIPI_DSI_HSABM (1 << 0)
31#define SH_MIPI_DSI_HSPBM (1 << 1)
32
30struct sh_mipi_dsi_info { 33struct sh_mipi_dsi_info {
31 enum sh_mipi_dsi_data_fmt data_format; 34 enum sh_mipi_dsi_data_fmt data_format;
32 struct sh_mobile_lcdc_chan_cfg *lcd_chan; 35 struct sh_mobile_lcdc_chan_cfg *lcd_chan;
36 unsigned long flags;
37 u32 clksrc;
38 unsigned int vsynw_offset;
33}; 39};
34 40
35#endif 41#endif
diff --git a/include/video/sh_mobile_hdmi.h b/include/video/sh_mobile_hdmi.h
index 577cf18cce89..b56932927d0a 100644
--- a/include/video/sh_mobile_hdmi.h
+++ b/include/video/sh_mobile_hdmi.h
@@ -13,10 +13,29 @@
13 13
14struct sh_mobile_lcdc_chan_cfg; 14struct sh_mobile_lcdc_chan_cfg;
15struct device; 15struct device;
16struct clk;
17
18/*
19 * flags format
20 *
21 * 0x0000000A
22 *
23 * A: Audio source select
24 */
25
26/* Audio source select */
27#define HDMI_SND_SRC_MASK (0xF << 0)
28#define HDMI_SND_SRC_I2S (0 << 0) /* default */
29#define HDMI_SND_SRC_SPDIF (1 << 0)
30#define HDMI_SND_SRC_DSD (2 << 0)
31#define HDMI_SND_SRC_HBR (3 << 0)
16 32
17struct sh_mobile_hdmi_info { 33struct sh_mobile_hdmi_info {
18 struct sh_mobile_lcdc_chan_cfg *lcd_chan; 34 struct sh_mobile_lcdc_chan_cfg *lcd_chan;
19 struct device *lcd_dev; 35 struct device *lcd_dev;
36 unsigned int flags;
37 long (*clk_optimize_parent)(unsigned long target, unsigned long *best_freq,
38 unsigned long *parent_freq);
20}; 39};
21 40
22#endif 41#endif
diff --git a/include/video/sh_mobile_lcdc.h b/include/video/sh_mobile_lcdc.h
index 55d700e8566e..d964e68fc61d 100644
--- a/include/video/sh_mobile_lcdc.h
+++ b/include/video/sh_mobile_lcdc.h
@@ -2,6 +2,7 @@
2#define __ASM_SH_MOBILE_LCDC_H__ 2#define __ASM_SH_MOBILE_LCDC_H__
3 3
4#include <linux/fb.h> 4#include <linux/fb.h>
5#include <video/sh_mobile_meram.h>
5 6
6enum { 7enum {
7 RGB8, /* 24bpp, 8:8:8 */ 8 RGB8, /* 24bpp, 8:8:8 */
@@ -49,7 +50,9 @@ struct sh_mobile_lcdc_sys_bus_ops {
49 unsigned long (*read_data)(void *handle); 50 unsigned long (*read_data)(void *handle);
50}; 51};
51 52
53struct module;
52struct sh_mobile_lcdc_board_cfg { 54struct sh_mobile_lcdc_board_cfg {
55 struct module *owner;
53 void *board_data; 56 void *board_data;
54 int (*setup_sys)(void *board_data, void *sys_ops_handle, 57 int (*setup_sys)(void *board_data, void *sys_ops_handle,
55 struct sh_mobile_lcdc_sys_bus_ops *sys_ops); 58 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
@@ -57,6 +60,8 @@ struct sh_mobile_lcdc_board_cfg {
57 struct sh_mobile_lcdc_sys_bus_ops *sys_ops); 60 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
58 void (*display_on)(void *board_data, struct fb_info *info); 61 void (*display_on)(void *board_data, struct fb_info *info);
59 void (*display_off)(void *board_data); 62 void (*display_off)(void *board_data);
63 int (*set_brightness)(void *board_data, int brightness);
64 int (*get_brightness)(void *board_data);
60}; 65};
61 66
62struct sh_mobile_lcdc_lcd_size_cfg { /* width and height of panel in mm */ 67struct sh_mobile_lcdc_lcd_size_cfg { /* width and height of panel in mm */
@@ -64,21 +69,32 @@ struct sh_mobile_lcdc_lcd_size_cfg { /* width and height of panel in mm */
64 unsigned long height; 69 unsigned long height;
65}; 70};
66 71
72/* backlight info */
73struct sh_mobile_lcdc_bl_info {
74 const char *name;
75 int max_brightness;
76};
77
67struct sh_mobile_lcdc_chan_cfg { 78struct sh_mobile_lcdc_chan_cfg {
68 int chan; 79 int chan;
69 int bpp; 80 int bpp;
70 int interface_type; /* selects RGBn or SYSn I/F, see above */ 81 int interface_type; /* selects RGBn or SYSn I/F, see above */
71 int clock_divider; 82 int clock_divider;
72 unsigned long flags; /* LCDC_FLAGS_... */ 83 unsigned long flags; /* LCDC_FLAGS_... */
73 struct fb_videomode lcd_cfg; 84 const struct fb_videomode *lcd_cfg;
85 int num_cfg;
74 struct sh_mobile_lcdc_lcd_size_cfg lcd_size_cfg; 86 struct sh_mobile_lcdc_lcd_size_cfg lcd_size_cfg;
75 struct sh_mobile_lcdc_board_cfg board_cfg; 87 struct sh_mobile_lcdc_board_cfg board_cfg;
88 struct sh_mobile_lcdc_bl_info bl_info;
76 struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg; /* only for SYSn I/F */ 89 struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg; /* only for SYSn I/F */
90 int nonstd;
91 struct sh_mobile_meram_cfg *meram_cfg;
77}; 92};
78 93
79struct sh_mobile_lcdc_info { 94struct sh_mobile_lcdc_info {
80 int clock_source; 95 int clock_source;
81 struct sh_mobile_lcdc_chan_cfg ch[2]; 96 struct sh_mobile_lcdc_chan_cfg ch[2];
97 struct sh_mobile_meram_info *meram_dev;
82}; 98};
83 99
84#endif /* __ASM_SH_MOBILE_LCDC_H__ */ 100#endif /* __ASM_SH_MOBILE_LCDC_H__ */
diff --git a/include/video/sh_mobile_meram.h b/include/video/sh_mobile_meram.h
new file mode 100644
index 000000000000..af602d602b28
--- /dev/null
+++ b/include/video/sh_mobile_meram.h
@@ -0,0 +1,68 @@
1#ifndef __VIDEO_SH_MOBILE_MERAM_H__
2#define __VIDEO_SH_MOBILE_MERAM_H__
3
4/* For sh_mobile_meram_info.addr_mode */
5enum {
6 SH_MOBILE_MERAM_MODE0 = 0,
7 SH_MOBILE_MERAM_MODE1
8};
9
10enum {
11 SH_MOBILE_MERAM_PF_NV = 0,
12 SH_MOBILE_MERAM_PF_RGB,
13 SH_MOBILE_MERAM_PF_NV24
14};
15
16
17struct sh_mobile_meram_priv;
18struct sh_mobile_meram_ops;
19
20struct sh_mobile_meram_info {
21 int addr_mode;
22 struct sh_mobile_meram_ops *ops;
23 struct sh_mobile_meram_priv *priv;
24 struct platform_device *pdev;
25};
26
27/* icb config */
28struct sh_mobile_meram_icb {
29 int marker_icb; /* ICB # for Marker ICB */
30 int cache_icb; /* ICB # for Cache ICB */
31 int meram_offset; /* MERAM Buffer Offset to use */
32 int meram_size; /* MERAM Buffer Size to use */
33
34 int cache_unit; /* bytes to cache per ICB */
35};
36
37struct sh_mobile_meram_cfg {
38 struct sh_mobile_meram_icb icb[2];
39 int pixelformat;
40 int current_reg;
41};
42
43struct module;
44struct sh_mobile_meram_ops {
45 struct module *module;
46 /* register usage of meram */
47 int (*meram_register)(struct sh_mobile_meram_info *meram_dev,
48 struct sh_mobile_meram_cfg *cfg,
49 int xres, int yres, int pixelformat,
50 unsigned long base_addr_y,
51 unsigned long base_addr_c,
52 unsigned long *icb_addr_y,
53 unsigned long *icb_addr_c, int *pitch);
54
55 /* unregister usage of meram */
56 int (*meram_unregister)(struct sh_mobile_meram_info *meram_dev,
57 struct sh_mobile_meram_cfg *cfg);
58
59 /* update meram settings */
60 int (*meram_update)(struct sh_mobile_meram_info *meram_dev,
61 struct sh_mobile_meram_cfg *cfg,
62 unsigned long base_addr_y,
63 unsigned long base_addr_c,
64 unsigned long *icb_addr_y,
65 unsigned long *icb_addr_c);
66};
67
68#endif /* __VIDEO_SH_MOBILE_MERAM_H__ */
diff --git a/include/video/sisfb.h b/include/video/sisfb.h
index fdd74f1a6791..6dc5df9e43f3 100644
--- a/include/video/sisfb.h
+++ b/include/video/sisfb.h
@@ -151,7 +151,7 @@ struct sisfb_cmd {
151 __u32 sisfb_result[4]; 151 __u32 sisfb_result[4];
152}; 152};
153 153
154/* Addtional IOCTLs for communication sisfb <> X driver */ 154/* Additional IOCTLs for communication sisfb <> X driver */
155/* If changing this, vgatypes.h must also be changed (for X driver) */ 155/* If changing this, vgatypes.h must also be changed (for X driver) */
156 156
157/* ioctl for identifying and giving some info (esp. memory heap start) */ 157/* ioctl for identifying and giving some info (esp. memory heap start) */
diff --git a/include/video/sstfb.h b/include/video/sstfb.h
index b52f07381243..c449eace12cd 100644
--- a/include/video/sstfb.h
+++ b/include/video/sstfb.h
@@ -156,7 +156,7 @@
156#define DAC_READ FBIINIT2 /* in remap mode */ 156#define DAC_READ FBIINIT2 /* in remap mode */
157#define FBIINIT3 0x021c /* fbi controls */ 157#define FBIINIT3 0x021c /* fbi controls */
158# define DISABLE_TEXTURE BIT(6) 158# define DISABLE_TEXTURE BIT(6)
159# define Y_SWAP_ORIGIN_SHIFT 22 /* Y swap substraction value */ 159# define Y_SWAP_ORIGIN_SHIFT 22 /* Y swap subtraction value */
160#define HSYNC 0x0220 160#define HSYNC 0x0220
161#define VSYNC 0x0224 161#define VSYNC 0x0224
162#define DAC_DATA 0x022c 162#define DAC_DATA 0x022c
@@ -212,9 +212,9 @@
212# define DACREG_CR0_24BPP 0x50 /* mode 5 */ 212# define DACREG_CR0_24BPP 0x50 /* mode 5 */
213#define DACREG_CR1_I 0x05 213#define DACREG_CR1_I 0x05
214#define DACREG_CC_I 0x06 214#define DACREG_CC_I 0x06
215# define DACREG_CC_CLKA BIT(7) /* clk A controled by regs */ 215# define DACREG_CC_CLKA BIT(7) /* clk A controlled by regs */
216# define DACREG_CC_CLKA_C (2<<4) /* clk A uses reg C */ 216# define DACREG_CC_CLKA_C (2<<4) /* clk A uses reg C */
217# define DACREG_CC_CLKB BIT(3) /* clk B controled by regs */ 217# define DACREG_CC_CLKB BIT(3) /* clk B controlled by regs */
218# define DACREG_CC_CLKB_D 3 /* clkB uses reg D */ 218# define DACREG_CC_CLKB_D 3 /* clkB uses reg D */
219#define DACREG_AC0_I 0x48 /* clock A reg C */ 219#define DACREG_AC0_I 0x48 /* clock A reg C */
220#define DACREG_AC1_I 0x49 220#define DACREG_AC1_I 0x49
diff --git a/include/video/udlfb.h b/include/video/udlfb.h
new file mode 100644
index 000000000000..69d485a4a026
--- /dev/null
+++ b/include/video/udlfb.h
@@ -0,0 +1,95 @@
1#ifndef UDLFB_H
2#define UDLFB_H
3
4/*
5 * TODO: Propose standard fb.h ioctl for reporting damage,
6 * using _IOWR() and one of the existing area structs from fb.h
7 * Consider these ioctls deprecated, but they're still used by the
8 * DisplayLink X server as yet - need both to be modified in tandem
9 * when new ioctl(s) are ready.
10 */
11#define DLFB_IOCTL_RETURN_EDID 0xAD
12#define DLFB_IOCTL_REPORT_DAMAGE 0xAA
13struct dloarea {
14 int x, y;
15 int w, h;
16 int x2, y2;
17};
18
19struct urb_node {
20 struct list_head entry;
21 struct dlfb_data *dev;
22 struct delayed_work release_urb_work;
23 struct urb *urb;
24};
25
26struct urb_list {
27 struct list_head list;
28 spinlock_t lock;
29 struct semaphore limit_sem;
30 int available;
31 int count;
32 size_t size;
33};
34
35struct dlfb_data {
36 struct usb_device *udev;
37 struct device *gdev; /* &udev->dev */
38 struct fb_info *info;
39 struct urb_list urbs;
40 struct kref kref;
41 char *backing_buffer;
42 int fb_count;
43 bool virtualized; /* true when physical usb device not present */
44 struct delayed_work free_framebuffer_work;
45 atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */
46 atomic_t lost_pixels; /* 1 = a render op failed. Need screen refresh */
47 char *edid; /* null until we read edid from hw or get from sysfs */
48 size_t edid_size;
49 int sku_pixel_limit;
50 int base16;
51 int base8;
52 u32 pseudo_palette[256];
53 /* blit-only rendering path metrics, exposed through sysfs */
54 atomic_t bytes_rendered; /* raw pixel-bytes driver asked to render */
55 atomic_t bytes_identical; /* saved effort with backbuffer comparison */
56 atomic_t bytes_sent; /* to usb, after compression including overhead */
57 atomic_t cpu_kcycles_used; /* transpired during pixel processing */
58};
59
60#define NR_USB_REQUEST_I2C_SUB_IO 0x02
61#define NR_USB_REQUEST_CHANNEL 0x12
62
63/* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */
64#define BULK_SIZE 512
65#define MAX_TRANSFER (PAGE_SIZE*16 - BULK_SIZE)
66#define WRITES_IN_FLIGHT (4)
67
68#define MAX_VENDOR_DESCRIPTOR_SIZE 256
69
70#define GET_URB_TIMEOUT HZ
71#define FREE_URB_TIMEOUT (HZ*2)
72
73#define BPP 2
74#define MAX_CMD_PIXELS 255
75
76#define RLX_HEADER_BYTES 7
77#define MIN_RLX_PIX_BYTES 4
78#define MIN_RLX_CMD_BYTES (RLX_HEADER_BYTES + MIN_RLX_PIX_BYTES)
79
80#define RLE_HEADER_BYTES 6
81#define MIN_RLE_PIX_BYTES 3
82#define MIN_RLE_CMD_BYTES (RLE_HEADER_BYTES + MIN_RLE_PIX_BYTES)
83
84#define RAW_HEADER_BYTES 6
85#define MIN_RAW_PIX_BYTES 2
86#define MIN_RAW_CMD_BYTES (RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES)
87
88#define DL_DEFIO_WRITE_DELAY 5 /* fb_deferred_io.delay in jiffies */
89#define DL_DEFIO_WRITE_DISABLE (HZ*60) /* "disable" with long delay */
90
91/* remove these once align.h patch is taken into kernel */
92#define DL_ALIGN_UP(x, a) ALIGN(x, a)
93#define DL_ALIGN_DOWN(x, a) ALIGN(x-(a-1), a)
94
95#endif
diff --git a/include/video/vga.h b/include/video/vga.h
index b49a5120ca2d..2b8691f7d256 100644
--- a/include/video/vga.h
+++ b/include/video/vga.h
@@ -5,7 +5,7 @@
5 * 5 *
6 * Copyright history from vga16fb.c: 6 * Copyright history from vga16fb.c:
7 * Copyright 1999 Ben Pfaff and Petr Vandrovec 7 * Copyright 1999 Ben Pfaff and Petr Vandrovec
8 * Based on VGA info at http://www.goodnet.com/~tinara/FreeVGA/home.htm 8 * Based on VGA info at http://www.osdever.net/FreeVGA/home.htm
9 * Based on VESA framebuffer (c) 1998 Gerd Knorr 9 * Based on VESA framebuffer (c) 1998 Gerd Knorr
10 * 10 *
11 * This file is subject to the terms and conditions of the GNU General 11 * This file is subject to the terms and conditions of the GNU General