]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/fb-drv/server/src/lcddrv.cc
update
[l4.git] / l4 / pkg / fb-drv / server / src / lcddrv.cc
1 /*
2  * (c) 2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>
3  *     economic rights: Technische Universität Dresden (Germany)
4  *
5  * This file is part of TUD:OS and distributed under the terms of the
6  * GNU General Public License 2.
7  * Please see the COPYING-GPL-2 file for details.
8  */
9
10 #include <l4/drivers/lcd.h>
11 #include <l4/sys/cache.h>
12 #include <cstdio>
13
14 #include "fb.h"
15 #include "splash.h"
16
17 bool
18 Lcd_drv_fb::setup_drv(Prog_args *pa)
19 {
20   struct arm_lcd_ops *lcd;
21
22   if (!(lcd = arm_lcd_probe(pa->config_str)))
23     {
24       printf("Could not find LCD.\n");
25       return false;
26     }
27
28   printf("Using LCD driver: %s\n", lcd->get_info());
29
30   _vidmem_start = (l4_addr_t)lcd->get_fb();
31
32   if (!_vidmem_start)
33     {
34       printf("Driver init failed\n");
35       return false;
36     }
37
38   _vidmem_size  = lcd->get_video_mem_size();
39   _vidmem_end   = _vidmem_start + _vidmem_size;
40
41   if (lcd->get_fbinfo((l4re_video_view_info_t *)&_view_info))
42     {
43       printf("Failed to get driver framebuffer info\n");
44       return false;
45     }
46
47   _screen_info.width = _view_info.width;
48   _screen_info.height = _view_info.height;
49   _screen_info.flags = L4Re::Video::Goos::F_auto_refresh;
50   _screen_info.pixel_info = _view_info.pixel_info;
51   _view_info.buffer_offset = 0;
52
53   init_infos();
54
55   lcd->enable();
56
57   splash_display(&_screen_info, _vidmem_start);
58
59   // slow
60   //l4_cache_dma_coherent(_vidmem_start, _vidmem_start + _vidmem_size);
61   l4_cache_dma_coherent_full();
62   return true;
63 }