Initialize Tizen 2.3
[adaptation/xorg/driver/xserver-xorg-video-emulfb.git] / src / fbdevhw / fbdev_hw.c
1 /**************************************************************************
2
3 xserver-xorg-video-emulfb
4
5 Copyright 2010 - 2011 Samsung Electronics co., Ltd. All Rights Reserved.
6
7 Contact: SooChan Lim <sc1.lim@samsung.com>
8
9 Permission is hereby granted, free of charge, to any person obtaining a
10 copy of this software and associated documentation files (the
11 "Software"), to deal in the Software without restriction, including
12 without limitation the rights to use, copy, modify, merge, publish,
13 distribute, sub license, and/or sell copies of the Software, and to
14 permit persons to whom the Software is furnished to do so, subject to
15 the following conditions:
16
17 The above copyright notice and this permission notice (including the
18 next paragraph) shall be included in all copies or substantial portions
19 of the Software.
20
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
29 **************************************************************************/
30
31 #include "fbdev.h"
32 #include "fbdev_hw.h"
33
34 void
35 FBDevGetVarScreenInfo(int fd, struct fb_var_screeninfo *fbVarInfo)
36 {
37         if (0 != ioctl(fd,FBIOGET_VSCREENINFO, (void*)fbVarInfo))
38                 fprintf(stderr, "Error : fail to get FBIOGET_VSCREENINFO\n");
39 }
40
41 void
42 FBDevSetVarScreenInfo(int fd, struct fb_var_screeninfo *fbVarInfo)
43 {
44         if (0 != ioctl(fd,FBIOPUT_VSCREENINFO,(void*)fbVarInfo))
45                 fprintf(stderr, "Error : fail to get FBIOPUT_VSCREENINFO\n");
46 }
47
48 void
49 FBDevGetFixScreenInfo(int fd, struct fb_fix_screeninfo *fbFixInfo)
50 {
51         if (0 != ioctl(fd,FBIOGET_FSCREENINFO,(void*)fbFixInfo))
52                 fprintf(stderr, "Error : fail to get FBIOGET_FSCREENINFO\n");
53 }
54
55 Bool
56 FBDevScreenAlphaInit(int fd)
57 {
58         struct fb_var_screeninfo var;
59         int ret;
60
61         ret = ioctl(fd, FBIOGET_VSCREENINFO, &var);
62         if (ret < 0)
63         {
64                 return FALSE;
65         }
66
67         if (var.bits_per_pixel != 32)
68         {
69                 return FALSE;
70         }
71         var.transp.length = 8;
72         var.activate = FB_ACTIVATE_FORCE;
73         ret = ioctl(fd, FBIOPUT_VSCREENINFO, &var);
74         if (ret < 0)
75         {
76                 return FALSE;
77         }
78
79         return TRUE;
80 }
81
82 Bool
83 FBDevScreenAlphaDeinit(int fd)
84 {
85         struct fb_var_screeninfo var;
86         int ret;
87
88         ret = ioctl(fd, FBIOGET_VSCREENINFO, &var);
89         if (ret < 0)
90         {
91                 return FALSE;
92         }
93
94         var.transp.length = 0;
95         ret = ioctl(fd, FBIOPUT_VSCREENINFO, &var);
96         if (ret < 0)
97         {
98                 return FALSE;
99         }
100
101         return TRUE;
102 }
103
104 #include <sys/utsname.h>
105
106 /* activate fb */
107 Bool
108 FBDevActivateFB(int fd)
109 {
110         struct fb_var_screeninfo var;
111         int ret;
112
113         ret = ioctl(fd, FBIOGET_VSCREENINFO, &var);
114         if (ret < 0)
115         {
116                 ErrorF("failed to get fb_var\n");
117                 return FALSE;
118         }
119
120         var.activate = FB_ACTIVATE_FORCE;
121
122         ret = ioctl (fd, FBIOPUT_VSCREENINFO, &var);
123         if (ret < 0)
124         {
125                 ErrorF("failed to set fb_var.activate\n");
126                 return FALSE;
127         }
128
129         ret = ioctl (fd, FBIOBLANK, FB_BLANK_UNBLANK);
130         if (ret < 0)
131         {
132                 ErrorF("failed to set FBIOBLANK : FB_BLANK_UNBLANK\n");
133                 return FALSE;
134         }
135
136         return TRUE;
137 }
138
139 /* deactivate fb3 */
140 Bool
141 FBDevDeActivateFB(int fd)
142 {
143         int ret;
144
145         ret = ioctl (fd, FBIOBLANK, FB_BLANK_POWERDOWN);
146         if (ret < 0)
147         {
148                 ErrorF("failed to set FBIOBLANK : FB_BLANK_POWERDOWN\n");
149                 return FALSE;
150         }
151
152         return TRUE;
153 }
154
155 Bool
156 FBDevSetBaseFrameBuffer(int fd)
157 {
158         struct fb_var_screeninfo var;
159         int ret;
160
161         ret = ioctl(fd, FBIOGET_VSCREENINFO, &var);
162         if (ret < 0)
163         {
164                 return FALSE;
165         }
166
167         var.yoffset = 0;
168         ret = ioctl (fd, FBIOPAN_DISPLAY,&var);
169         if (ret < 0)
170         {
171                 return FALSE;
172         }
173         return TRUE;
174 }
175
176
177 void
178 FBDevHWPanDisplay(int fd, int x, int y)
179 {
180         struct fb_var_screeninfo var;
181         int ret;
182
183         ret = ioctl(fd, FBIOGET_VSCREENINFO, &var);
184         if(ret < 0)
185         {
186                 return;
187         }
188
189         var.xoffset = x;
190         var.yoffset = y;
191         ret = ioctl(fd, FBIOPAN_DISPLAY, &var);
192         if(ret < 0)
193         {
194                 return;
195         }
196 }