diff options
author | Senthilvadivu Guruswamy <svadivu@ti.com> | 2011-01-24 01:21:56 -0500 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2011-03-11 08:46:19 -0500 |
commit | cf07f5316215972e987c63b0a75a922c89813781 (patch) | |
tree | 08abe66ffc6427af41ee43df0847598ce7eee8df | |
parent | 8ba775ca0d375ab42404ffd7a1a38326a7b21321 (diff) |
OMAP2,3: DSS2: Build omap_device for each DSS HWIP
Looks up the hwmod database for each of the given DSS HW IP and builds
omap_device which inturn does the platform device register for each of DSS HW IP
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r-- | arch/arm/mach-omap2/display.c | 52 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/display.h | 5 |
2 files changed, 57 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index b18db84b0349..ee8303037d3d 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
24 | 24 | ||
25 | #include <plat/display.h> | 25 | #include <plat/display.h> |
26 | #include <plat/omap_hwmod.h> | ||
27 | #include <plat/omap_device.h> | ||
26 | 28 | ||
27 | static struct platform_device omap_display_device = { | 29 | static struct platform_device omap_display_device = { |
28 | .name = "omapdss", | 30 | .name = "omapdss", |
@@ -32,9 +34,59 @@ static struct platform_device omap_display_device = { | |||
32 | }, | 34 | }, |
33 | }; | 35 | }; |
34 | 36 | ||
37 | static struct omap_device_pm_latency omap_dss_latency[] = { | ||
38 | [0] = { | ||
39 | .deactivate_func = omap_device_idle_hwmods, | ||
40 | .activate_func = omap_device_enable_hwmods, | ||
41 | .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, | ||
42 | }, | ||
43 | }; | ||
44 | |||
35 | int __init omap_display_init(struct omap_dss_board_info *board_data) | 45 | int __init omap_display_init(struct omap_dss_board_info *board_data) |
36 | { | 46 | { |
37 | int r = 0; | 47 | int r = 0; |
48 | struct omap_hwmod *oh; | ||
49 | struct omap_device *od; | ||
50 | int i; | ||
51 | struct omap_display_platform_data pdata; | ||
52 | |||
53 | /* | ||
54 | * omap: valid DSS hwmod names | ||
55 | * omap2,3: dss_core, dss_dispc, dss_rfbi, dss_venc | ||
56 | * omap3: dss_dsi1 | ||
57 | */ | ||
58 | char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc", | ||
59 | "dss_dsi1" }; | ||
60 | char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi", | ||
61 | "omapdss_venc", "omapdss_dsi1" }; | ||
62 | int oh_count; | ||
63 | |||
64 | memset(&pdata, 0, sizeof(pdata)); | ||
65 | |||
66 | if (cpu_is_omap24xx()) | ||
67 | oh_count = ARRAY_SIZE(oh_name) - 1; | ||
68 | /* last hwmod dev in oh_name is not available for omap2 */ | ||
69 | else | ||
70 | oh_count = ARRAY_SIZE(oh_name); | ||
71 | |||
72 | pdata.board_data = board_data; | ||
73 | pdata.board_data->get_last_off_on_transaction_id = NULL; | ||
74 | |||
75 | for (i = 0; i < oh_count; i++) { | ||
76 | oh = omap_hwmod_lookup(oh_name[i]); | ||
77 | if (!oh) { | ||
78 | pr_err("Could not look up %s\n", oh_name[i]); | ||
79 | return -ENODEV; | ||
80 | } | ||
81 | od = omap_device_build(dev_name[i], -1, oh, &pdata, | ||
82 | sizeof(struct omap_display_platform_data), | ||
83 | omap_dss_latency, | ||
84 | ARRAY_SIZE(omap_dss_latency), 0); | ||
85 | |||
86 | if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n", | ||
87 | oh_name[i])) | ||
88 | return -ENODEV; | ||
89 | } | ||
38 | omap_display_device.dev.platform_data = board_data; | 90 | omap_display_device.dev.platform_data = board_data; |
39 | 91 | ||
40 | r = platform_device_register(&omap_display_device); | 92 | r = platform_device_register(&omap_display_device); |
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h index 0f140ecedb01..2fb057e1cb98 100644 --- a/arch/arm/plat-omap/include/plat/display.h +++ b/arch/arm/plat-omap/include/plat/display.h | |||
@@ -237,6 +237,11 @@ static inline int omap_display_init(struct omap_dss_board_info *board_data) | |||
237 | } | 237 | } |
238 | #endif | 238 | #endif |
239 | 239 | ||
240 | struct omap_display_platform_data { | ||
241 | struct omap_dss_board_info *board_data; | ||
242 | /* TODO: Additional members to be added when PM is considered */ | ||
243 | }; | ||
244 | |||
240 | struct omap_video_timings { | 245 | struct omap_video_timings { |
241 | /* Unit: pixels */ | 246 | /* Unit: pixels */ |
242 | u16 x_res; | 247 | u16 x_res; |