diff options
author | Damian <dhobsong@igel.co.jp> | 2011-05-24 03:01:22 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-05-24 22:47:52 -0400 |
commit | 1c7fcbed1adee44708dafb65ac40b186c203d7e8 (patch) | |
tree | 3b1790993423cd77abef31fc34d6dc57814c7b5b /arch/arm/mach-shmobile | |
parent | eae9b85b5f65027df64130d8a3eeb2de9d094eda (diff) |
sh_mobile_meram: MERAM platform data for LCDC
Based on the patch by Takanari Hayama <taki@igel.co.jp>
Add the necessary platform data to add MERAM functionality to LCDC
Includes platform data for both the AP4EVB and mackerel
Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile')
-rw-r--r-- | arch/arm/mach-shmobile/board-ap4evb.c | 56 | ||||
-rw-r--r-- | arch/arm/mach-shmobile/board-mackerel.c | 58 |
2 files changed, 114 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index 1e35fa976d64..c9aad5eefccc 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -249,6 +249,29 @@ static int slot_cn7_get_cd(struct platform_device *pdev) | |||
249 | { | 249 | { |
250 | return !gpio_get_value(GPIO_PORT41); | 250 | return !gpio_get_value(GPIO_PORT41); |
251 | } | 251 | } |
252 | /* MERAM */ | ||
253 | static struct sh_mobile_meram_info meram_info = { | ||
254 | .addr_mode = SH_MOBILE_MERAM_MODE1, | ||
255 | }; | ||
256 | |||
257 | static struct resource meram_resources[] = { | ||
258 | [0] = { | ||
259 | .name = "MERAM", | ||
260 | .start = 0xe8000000, | ||
261 | .end = 0xe81fffff, | ||
262 | .flags = IORESOURCE_MEM, | ||
263 | }, | ||
264 | }; | ||
265 | |||
266 | static struct platform_device meram_device = { | ||
267 | .name = "sh_mobile_meram", | ||
268 | .id = 0, | ||
269 | .num_resources = ARRAY_SIZE(meram_resources), | ||
270 | .resource = meram_resources, | ||
271 | .dev = { | ||
272 | .platform_data = &meram_info, | ||
273 | }, | ||
274 | }; | ||
252 | 275 | ||
253 | /* SH_MMCIF */ | 276 | /* SH_MMCIF */ |
254 | static struct resource sh_mmcif_resources[] = { | 277 | static struct resource sh_mmcif_resources[] = { |
@@ -431,13 +454,29 @@ const static struct fb_videomode ap4evb_lcdc_modes[] = { | |||
431 | #endif | 454 | #endif |
432 | }, | 455 | }, |
433 | }; | 456 | }; |
457 | static struct sh_mobile_meram_cfg lcd_meram_cfg = { | ||
458 | .icb[0] = { | ||
459 | .marker_icb = 28, | ||
460 | .cache_icb = 24, | ||
461 | .meram_offset = 0x0, | ||
462 | .meram_size = 0x40, | ||
463 | }, | ||
464 | .icb[1] = { | ||
465 | .marker_icb = 29, | ||
466 | .cache_icb = 25, | ||
467 | .meram_offset = 0x40, | ||
468 | .meram_size = 0x40, | ||
469 | }, | ||
470 | }; | ||
434 | 471 | ||
435 | static struct sh_mobile_lcdc_info lcdc_info = { | 472 | static struct sh_mobile_lcdc_info lcdc_info = { |
473 | .meram_dev = &meram_info, | ||
436 | .ch[0] = { | 474 | .ch[0] = { |
437 | .chan = LCDC_CHAN_MAINLCD, | 475 | .chan = LCDC_CHAN_MAINLCD, |
438 | .bpp = 16, | 476 | .bpp = 16, |
439 | .lcd_cfg = ap4evb_lcdc_modes, | 477 | .lcd_cfg = ap4evb_lcdc_modes, |
440 | .num_cfg = ARRAY_SIZE(ap4evb_lcdc_modes), | 478 | .num_cfg = ARRAY_SIZE(ap4evb_lcdc_modes), |
479 | .meram_cfg = &lcd_meram_cfg, | ||
441 | } | 480 | } |
442 | }; | 481 | }; |
443 | 482 | ||
@@ -708,15 +747,31 @@ static struct platform_device fsi_device = { | |||
708 | static struct platform_device fsi_ak4643_device = { | 747 | static struct platform_device fsi_ak4643_device = { |
709 | .name = "sh_fsi2_a_ak4643", | 748 | .name = "sh_fsi2_a_ak4643", |
710 | }; | 749 | }; |
750 | static struct sh_mobile_meram_cfg hdmi_meram_cfg = { | ||
751 | .icb[0] = { | ||
752 | .marker_icb = 30, | ||
753 | .cache_icb = 26, | ||
754 | .meram_offset = 0x80, | ||
755 | .meram_size = 0x100, | ||
756 | }, | ||
757 | .icb[1] = { | ||
758 | .marker_icb = 31, | ||
759 | .cache_icb = 27, | ||
760 | .meram_offset = 0x180, | ||
761 | .meram_size = 0x100, | ||
762 | }, | ||
763 | }; | ||
711 | 764 | ||
712 | static struct sh_mobile_lcdc_info sh_mobile_lcdc1_info = { | 765 | static struct sh_mobile_lcdc_info sh_mobile_lcdc1_info = { |
713 | .clock_source = LCDC_CLK_EXTERNAL, | 766 | .clock_source = LCDC_CLK_EXTERNAL, |
767 | .meram_dev = &meram_info, | ||
714 | .ch[0] = { | 768 | .ch[0] = { |
715 | .chan = LCDC_CHAN_MAINLCD, | 769 | .chan = LCDC_CHAN_MAINLCD, |
716 | .bpp = 16, | 770 | .bpp = 16, |
717 | .interface_type = RGB24, | 771 | .interface_type = RGB24, |
718 | .clock_divider = 1, | 772 | .clock_divider = 1, |
719 | .flags = LCDC_FLAGS_DWPOL, | 773 | .flags = LCDC_FLAGS_DWPOL, |
774 | .meram_cfg = &hdmi_meram_cfg, | ||
720 | } | 775 | } |
721 | }; | 776 | }; |
722 | 777 | ||
@@ -945,6 +1000,7 @@ static struct platform_device *ap4evb_devices[] __initdata = { | |||
945 | &csi2_device, | 1000 | &csi2_device, |
946 | &ceu_device, | 1001 | &ceu_device, |
947 | &ap4evb_camera, | 1002 | &ap4evb_camera, |
1003 | &meram_device, | ||
948 | }; | 1004 | }; |
949 | 1005 | ||
950 | static void __init hdmi_init_pm_clock(void) | 1006 | static void __init hdmi_init_pm_clock(void) |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 7da2ca24229d..a165a9e70eea 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -279,6 +279,30 @@ static struct platform_device smc911x_device = { | |||
279 | }, | 279 | }, |
280 | }; | 280 | }; |
281 | 281 | ||
282 | /* MERAM */ | ||
283 | static struct sh_mobile_meram_info mackerel_meram_info = { | ||
284 | .addr_mode = SH_MOBILE_MERAM_MODE1, | ||
285 | }; | ||
286 | |||
287 | static struct resource meram_resources[] = { | ||
288 | [0] = { | ||
289 | .name = "MERAM", | ||
290 | .start = 0xe8000000, | ||
291 | .end = 0xe81fffff, | ||
292 | .flags = IORESOURCE_MEM, | ||
293 | }, | ||
294 | }; | ||
295 | |||
296 | static struct platform_device meram_device = { | ||
297 | .name = "sh_mobile_meram", | ||
298 | .id = 0, | ||
299 | .num_resources = ARRAY_SIZE(meram_resources), | ||
300 | .resource = meram_resources, | ||
301 | .dev = { | ||
302 | .platform_data = &mackerel_meram_info, | ||
303 | }, | ||
304 | }; | ||
305 | |||
282 | /* LCDC */ | 306 | /* LCDC */ |
283 | static struct fb_videomode mackerel_lcdc_modes[] = { | 307 | static struct fb_videomode mackerel_lcdc_modes[] = { |
284 | { | 308 | { |
@@ -307,7 +331,23 @@ static int mackerel_get_brightness(void *board_data) | |||
307 | return gpio_get_value(GPIO_PORT31); | 331 | return gpio_get_value(GPIO_PORT31); |
308 | } | 332 | } |
309 | 333 | ||
334 | static struct sh_mobile_meram_cfg lcd_meram_cfg = { | ||
335 | .icb[0] = { | ||
336 | .marker_icb = 28, | ||
337 | .cache_icb = 24, | ||
338 | .meram_offset = 0x0, | ||
339 | .meram_size = 0x40, | ||
340 | }, | ||
341 | .icb[1] = { | ||
342 | .marker_icb = 29, | ||
343 | .cache_icb = 25, | ||
344 | .meram_offset = 0x40, | ||
345 | .meram_size = 0x40, | ||
346 | }, | ||
347 | }; | ||
348 | |||
310 | static struct sh_mobile_lcdc_info lcdc_info = { | 349 | static struct sh_mobile_lcdc_info lcdc_info = { |
350 | .meram_dev = &mackerel_meram_info, | ||
311 | .clock_source = LCDC_CLK_BUS, | 351 | .clock_source = LCDC_CLK_BUS, |
312 | .ch[0] = { | 352 | .ch[0] = { |
313 | .chan = LCDC_CHAN_MAINLCD, | 353 | .chan = LCDC_CHAN_MAINLCD, |
@@ -327,6 +367,7 @@ static struct sh_mobile_lcdc_info lcdc_info = { | |||
327 | .name = "sh_mobile_lcdc_bl", | 367 | .name = "sh_mobile_lcdc_bl", |
328 | .max_brightness = 1, | 368 | .max_brightness = 1, |
329 | }, | 369 | }, |
370 | .meram_cfg = &lcd_meram_cfg, | ||
330 | } | 371 | } |
331 | }; | 372 | }; |
332 | 373 | ||
@@ -353,8 +394,23 @@ static struct platform_device lcdc_device = { | |||
353 | }, | 394 | }, |
354 | }; | 395 | }; |
355 | 396 | ||
397 | static struct sh_mobile_meram_cfg hdmi_meram_cfg = { | ||
398 | .icb[0] = { | ||
399 | .marker_icb = 30, | ||
400 | .cache_icb = 26, | ||
401 | .meram_offset = 0x80, | ||
402 | .meram_size = 0x100, | ||
403 | }, | ||
404 | .icb[1] = { | ||
405 | .marker_icb = 31, | ||
406 | .cache_icb = 27, | ||
407 | .meram_offset = 0x180, | ||
408 | .meram_size = 0x100, | ||
409 | }, | ||
410 | }; | ||
356 | /* HDMI */ | 411 | /* HDMI */ |
357 | static struct sh_mobile_lcdc_info hdmi_lcdc_info = { | 412 | static struct sh_mobile_lcdc_info hdmi_lcdc_info = { |
413 | .meram_dev = &mackerel_meram_info, | ||
358 | .clock_source = LCDC_CLK_EXTERNAL, | 414 | .clock_source = LCDC_CLK_EXTERNAL, |
359 | .ch[0] = { | 415 | .ch[0] = { |
360 | .chan = LCDC_CHAN_MAINLCD, | 416 | .chan = LCDC_CHAN_MAINLCD, |
@@ -362,6 +418,7 @@ static struct sh_mobile_lcdc_info hdmi_lcdc_info = { | |||
362 | .interface_type = RGB24, | 418 | .interface_type = RGB24, |
363 | .clock_divider = 1, | 419 | .clock_divider = 1, |
364 | .flags = LCDC_FLAGS_DWPOL, | 420 | .flags = LCDC_FLAGS_DWPOL, |
421 | .meram_cfg = &hdmi_meram_cfg, | ||
365 | } | 422 | } |
366 | }; | 423 | }; |
367 | 424 | ||
@@ -949,6 +1006,7 @@ static struct platform_device *mackerel_devices[] __initdata = { | |||
949 | &mackerel_camera, | 1006 | &mackerel_camera, |
950 | &hdmi_lcdc_device, | 1007 | &hdmi_lcdc_device, |
951 | &hdmi_device, | 1008 | &hdmi_device, |
1009 | &meram_device, | ||
952 | }; | 1010 | }; |
953 | 1011 | ||
954 | /* Keypad Initialization */ | 1012 | /* Keypad Initialization */ |