]>
Commit | Line | Data |
---|---|---|
51c13278 LP |
1 | /* |
2 | * shmob_drm.h -- SH Mobile DRM driver | |
3 | * | |
4 | * Copyright (C) 2012 Renesas Corporation | |
5 | * | |
6 | * Laurent Pinchart (laurent.pinchart@ideasonboard.com) | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | */ | |
13 | ||
14 | #ifndef __SHMOB_DRM_H__ | |
15 | #define __SHMOB_DRM_H__ | |
16 | ||
17 | #include <linux/kernel.h> | |
18 | ||
19 | #include <drm/drm_mode.h> | |
20 | ||
21 | struct sh_mobile_meram_cfg; | |
22 | struct sh_mobile_meram_info; | |
23 | ||
24 | enum shmob_drm_clk_source { | |
25 | SHMOB_DRM_CLK_BUS, | |
26 | SHMOB_DRM_CLK_PERIPHERAL, | |
27 | SHMOB_DRM_CLK_EXTERNAL, | |
28 | }; | |
29 | ||
30 | enum shmob_drm_interface { | |
31 | SHMOB_DRM_IFACE_RGB8, /* 24bpp, 8:8:8 */ | |
32 | SHMOB_DRM_IFACE_RGB9, /* 18bpp, 9:9 */ | |
33 | SHMOB_DRM_IFACE_RGB12A, /* 24bpp, 12:12 */ | |
34 | SHMOB_DRM_IFACE_RGB12B, /* 12bpp */ | |
35 | SHMOB_DRM_IFACE_RGB16, /* 16bpp */ | |
36 | SHMOB_DRM_IFACE_RGB18, /* 18bpp */ | |
37 | SHMOB_DRM_IFACE_RGB24, /* 24bpp */ | |
38 | SHMOB_DRM_IFACE_YUV422, /* 16bpp */ | |
39 | SHMOB_DRM_IFACE_SYS8A, /* 24bpp, 8:8:8 */ | |
40 | SHMOB_DRM_IFACE_SYS8B, /* 18bpp, 8:8:2 */ | |
41 | SHMOB_DRM_IFACE_SYS8C, /* 18bpp, 2:8:8 */ | |
42 | SHMOB_DRM_IFACE_SYS8D, /* 16bpp, 8:8 */ | |
43 | SHMOB_DRM_IFACE_SYS9, /* 18bpp, 9:9 */ | |
44 | SHMOB_DRM_IFACE_SYS12, /* 24bpp, 12:12 */ | |
45 | SHMOB_DRM_IFACE_SYS16A, /* 16bpp */ | |
46 | SHMOB_DRM_IFACE_SYS16B, /* 18bpp, 16:2 */ | |
47 | SHMOB_DRM_IFACE_SYS16C, /* 18bpp, 2:16 */ | |
48 | SHMOB_DRM_IFACE_SYS18, /* 18bpp */ | |
49 | SHMOB_DRM_IFACE_SYS24, /* 24bpp */ | |
50 | }; | |
51 | ||
52 | struct shmob_drm_backlight_data { | |
53 | const char *name; | |
54 | int max_brightness; | |
55 | int (*get_brightness)(void); | |
56 | int (*set_brightness)(int brightness); | |
57 | }; | |
58 | ||
59 | struct shmob_drm_panel_data { | |
60 | unsigned int width_mm; /* Panel width in mm */ | |
61 | unsigned int height_mm; /* Panel height in mm */ | |
62 | struct drm_mode_modeinfo mode; | |
63 | }; | |
64 | ||
65 | struct shmob_drm_sys_interface_data { | |
66 | unsigned int read_latch:6; | |
67 | unsigned int read_setup:8; | |
68 | unsigned int read_cycle:8; | |
69 | unsigned int read_strobe:8; | |
70 | unsigned int write_setup:8; | |
71 | unsigned int write_cycle:8; | |
72 | unsigned int write_strobe:8; | |
73 | unsigned int cs_setup:3; | |
74 | unsigned int vsync_active_high:1; | |
75 | unsigned int vsync_dir_input:1; | |
76 | }; | |
77 | ||
78 | #define SHMOB_DRM_IFACE_FL_DWPOL (1 << 0) /* Rising edge dot clock data latch */ | |
79 | #define SHMOB_DRM_IFACE_FL_DIPOL (1 << 1) /* Active low display enable */ | |
80 | #define SHMOB_DRM_IFACE_FL_DAPOL (1 << 2) /* Active low display data */ | |
81 | #define SHMOB_DRM_IFACE_FL_HSCNT (1 << 3) /* Disable HSYNC during VBLANK */ | |
82 | #define SHMOB_DRM_IFACE_FL_DWCNT (1 << 4) /* Disable dotclock during blanking */ | |
83 | ||
84 | struct shmob_drm_interface_data { | |
85 | enum shmob_drm_interface interface; | |
86 | struct shmob_drm_sys_interface_data sys; | |
87 | unsigned int clk_div; | |
88 | unsigned int flags; | |
89 | }; | |
90 | ||
91 | struct shmob_drm_platform_data { | |
92 | enum shmob_drm_clk_source clk_source; | |
93 | struct shmob_drm_interface_data iface; | |
94 | struct shmob_drm_panel_data panel; | |
95 | struct shmob_drm_backlight_data backlight; | |
96 | const struct sh_mobile_meram_cfg *meram; | |
97 | }; | |
98 | ||
99 | #endif /* __SHMOB_DRM_H__ */ |