1#ifndef __ASM_SH_MOBILE_LCDC_H__
2#define __ASM_SH_MOBILE_LCDC_H__
3
4#include <linux/fb.h>
5
6enum { RGB8,
7 RGB9,
8 RGB12A,
9 RGB12B,
10 RGB16,
11 RGB18,
12 RGB24,
13 SYS8A,
14 SYS8B,
15 SYS8C,
16 SYS8D,
17 SYS9,
18 SYS12,
19 SYS16A,
20 SYS16B,
21 SYS16C,
22 SYS18,
23 SYS24 };
24
25enum { LCDC_CHAN_DISABLED = 0,
26 LCDC_CHAN_MAINLCD,
27 LCDC_CHAN_SUBLCD };
28
29enum { LCDC_CLK_BUS, LCDC_CLK_PERIPHERAL, LCDC_CLK_EXTERNAL };
30
31#define LCDC_FLAGS_DWPOL (1 << 0)
32#define LCDC_FLAGS_DIPOL (1 << 1)
33#define LCDC_FLAGS_DAPOL (1 << 2)
34#define LCDC_FLAGS_HSCNT (1 << 3)
35#define LCDC_FLAGS_DWCNT (1 << 4)
36
37struct sh_mobile_lcdc_sys_bus_cfg {
38 unsigned long ldmt2r;
39 unsigned long ldmt3r;
40 unsigned long deferred_io_msec;
41};
42
43struct sh_mobile_lcdc_sys_bus_ops {
44 void (*write_index)(void *handle, unsigned long data);
45 void (*write_data)(void *handle, unsigned long data);
46 unsigned long (*read_data)(void *handle);
47};
48
49struct sh_mobile_lcdc_board_cfg {
50 void *board_data;
51 int (*setup_sys)(void *board_data, void *sys_ops_handle,
52 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
53 void (*display_on)(void *board_data);
54 void (*display_off)(void *board_data);
55};
56
57struct sh_mobile_lcdc_lcd_size_cfg {
58 unsigned long width;
59 unsigned long height;
60};
61
62struct sh_mobile_lcdc_chan_cfg {
63 int chan;
64 int bpp;
65 int interface_type;
66 int clock_divider;
67 unsigned long flags;
68 struct fb_videomode lcd_cfg;
69 struct sh_mobile_lcdc_lcd_size_cfg lcd_size_cfg;
70 struct sh_mobile_lcdc_board_cfg board_cfg;
71 struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg;
72};
73
74struct sh_mobile_lcdc_info {
75 int clock_source;
76 struct sh_mobile_lcdc_chan_cfg ch[2];
77};
78
79#endif
80