diff options
author | Damian <dhobsong@igel.co.jp> | 2011-05-18 07:10:07 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-05-23 03:06:24 -0400 |
commit | 7caa4342ca5b37d2d178b464c16badd4228b3b7b (patch) | |
tree | 0111e05278facfc0eb92c46b80c577d1e1e694e4 /include/video | |
parent | 71a8638480eb8fb6cfabe2ee9ca3fbc6e3453a14 (diff) |
sh_mobile_meram: MERAM framework for LCDC
Based on the patch by Takanari Hayama <taki@igel.co.jp>
Adds support framework necessary to use Media RAM (MERAM)
caching functionality with the LCDC. The MERAM is accessed
through up to 4 Interconnect Buffers (ICBs).
ICB numbers and MERAM address ranges to use are specified in
by filling in the .meram_cfg member of the LCDC platform data
Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'include/video')
-rw-r--r-- | include/video/sh_mobile_lcdc.h | 3 | ||||
-rw-r--r-- | include/video/sh_mobile_meram.h | 67 |
2 files changed, 70 insertions, 0 deletions
diff --git a/include/video/sh_mobile_lcdc.h b/include/video/sh_mobile_lcdc.h index 2c8d369190b3..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 | ||
6 | enum { | 7 | enum { |
7 | RGB8, /* 24bpp, 8:8:8 */ | 8 | RGB8, /* 24bpp, 8:8:8 */ |
@@ -87,11 +88,13 @@ struct sh_mobile_lcdc_chan_cfg { | |||
87 | struct sh_mobile_lcdc_bl_info bl_info; | 88 | struct sh_mobile_lcdc_bl_info bl_info; |
88 | 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 */ |
89 | int nonstd; | 90 | int nonstd; |
91 | struct sh_mobile_meram_cfg *meram_cfg; | ||
90 | }; | 92 | }; |
91 | 93 | ||
92 | struct sh_mobile_lcdc_info { | 94 | struct sh_mobile_lcdc_info { |
93 | int clock_source; | 95 | int clock_source; |
94 | 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; | ||
95 | }; | 98 | }; |
96 | 99 | ||
97 | #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..15fbb3da266f --- /dev/null +++ b/include/video/sh_mobile_meram.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifndef __VIDEO_SH_MOBILE_MERAM_H__ | ||
2 | #define __VIDEO_SH_MOBILE_MERAM_H__ | ||
3 | |||
4 | /* For sh_mobile_meram_info.addr_mode */ | ||
5 | enum { | ||
6 | SH_MOBILE_MERAM_MODE0 = 0, | ||
7 | SH_MOBILE_MERAM_MODE1 | ||
8 | }; | ||
9 | |||
10 | enum { | ||
11 | SH_MOBILE_MERAM_PF_NV = 0, | ||
12 | SH_MOBILE_MERAM_PF_RGB | ||
13 | }; | ||
14 | |||
15 | |||
16 | struct sh_mobile_meram_priv; | ||
17 | struct sh_mobile_meram_ops; | ||
18 | |||
19 | struct sh_mobile_meram_info { | ||
20 | int addr_mode; | ||
21 | struct sh_mobile_meram_ops *ops; | ||
22 | struct sh_mobile_meram_priv *priv; | ||
23 | struct platform_device *pdev; | ||
24 | }; | ||
25 | |||
26 | /* icb config */ | ||
27 | struct sh_mobile_meram_icb { | ||
28 | int marker_icb; /* ICB # for Marker ICB */ | ||
29 | int cache_icb; /* ICB # for Cache ICB */ | ||
30 | int meram_offset; /* MERAM Buffer Offset to use */ | ||
31 | int meram_size; /* MERAM Buffer Size to use */ | ||
32 | |||
33 | int cache_unit; /* bytes to cache per ICB */ | ||
34 | }; | ||
35 | |||
36 | struct sh_mobile_meram_cfg { | ||
37 | struct sh_mobile_meram_icb icb[2]; | ||
38 | int pixelformat; | ||
39 | int current_reg; | ||
40 | }; | ||
41 | |||
42 | struct module; | ||
43 | struct sh_mobile_meram_ops { | ||
44 | struct module *module; | ||
45 | /* register usage of meram */ | ||
46 | int (*meram_register)(struct sh_mobile_meram_info *meram_dev, | ||
47 | struct sh_mobile_meram_cfg *cfg, | ||
48 | int xres, int yres, int pixelformat, | ||
49 | unsigned long base_addr_y, | ||
50 | unsigned long base_addr_c, | ||
51 | unsigned long *icb_addr_y, | ||
52 | unsigned long *icb_addr_c, int *pitch); | ||
53 | |||
54 | /* unregister usage of meram */ | ||
55 | int (*meram_unregister)(struct sh_mobile_meram_info *meram_dev, | ||
56 | struct sh_mobile_meram_cfg *cfg); | ||
57 | |||
58 | /* update meram settings */ | ||
59 | int (*meram_update)(struct sh_mobile_meram_info *meram_dev, | ||
60 | struct sh_mobile_meram_cfg *cfg, | ||
61 | unsigned long base_addr_y, | ||
62 | unsigned long base_addr_c, | ||
63 | unsigned long *icb_addr_y, | ||
64 | unsigned long *icb_addr_c); | ||
65 | }; | ||
66 | |||
67 | #endif /* __VIDEO_SH_MOBILE_MERAM_H__ */ | ||