]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/fb-drv/server/src/lcddrv.cc
Some minor fixes.
[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 class Lcd_drv_fb : public Phys_fb
18 {
19 public:
20   bool setup_drv(Prog_args *pa, L4Re::Util::Object_registry *);
21 };
22
23
24 Phys_fb *Phys_fb::probe()
25 {
26   return new Lcd_drv_fb();
27 }
28
29
30 bool
31 Lcd_drv_fb::setup_drv(Prog_args *pa, L4Re::Util::Object_registry *)
32 {
33   struct arm_lcd_ops *lcd;
34
35   if (!(lcd = arm_lcd_probe(pa->config_str)))
36     {
37       printf("Could not find LCD.\n");
38       return false;
39     }
40
41   printf("Using LCD driver: %s\n", lcd->get_info());
42
43   _vidmem_start = (l4_addr_t)lcd->get_fb();
44
45   if (!_vidmem_start)
46     {
47       printf("Driver init failed\n");
48       return false;
49     }
50
51   _vidmem_size  = lcd->get_video_mem_size();
52   _vidmem_end   = _vidmem_start + _vidmem_size;
53
54   if (lcd->get_fbinfo((l4re_video_view_info_t *)&_view_info))
55     {
56       printf("Failed to get driver framebuffer info\n");
57       return false;
58     }
59
60   _screen_info.width = _view_info.width;
61   _screen_info.height = _view_info.height;
62   _screen_info.flags = L4Re::Video::Goos::F_auto_refresh;
63   _screen_info.pixel_info = _view_info.pixel_info;
64   _view_info.buffer_offset = 0;
65
66   init_infos();
67
68   lcd->enable();
69
70   splash_display(&_view_info, _vidmem_start);
71
72   // slow
73   //l4_cache_dma_coherent(_vidmem_start, _vidmem_start + _vidmem_size);
74   l4_cache_dma_coherent_full();
75   return true;
76 }