diff options
author | Antonino A. Daplas <adaplas@gmail.com> | 2005-11-09 00:39:15 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:56:35 -0500 |
commit | a812c94b94e3db76d1af68208fb3edef69070401 (patch) | |
tree | 8dd2ecd1e1981e3423d8c3aaf796aeb3f38f91f1 /drivers/video/fbsysfs.c | |
parent | ed8c0e99f27451a9b980adf0de318d60e6de811f (diff) |
[PATCH] fbcon: Console Rotation - Add ability to control rotation via sysfs
Add ability to set rotation via sysfs. The attributes are located in
/sys/class/graphics/fb[n] and accepts 0 - unrotated; 1 - clockwise; 2 - upside
down; 3 - counterclockwise.
The attributes are:
con_rotate (r/w) - set rotation of the active console
con_rotate_all (w) - set rotation of all consoles
rotate (r/w) - set rotation of the framebuffer, if supported.
Currently, none of the drivers support this.
This is probably temporary, since con_rotate and con_rotate_all are
console-specific and has no business being under the fb device. However,
until the console layer acquires it's own sysfs class, these attributes will
temporarily reside here.
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/fbsysfs.c')
-rw-r--r-- | drivers/video/fbsysfs.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index 007c8e9b2b39..08dac9580d15 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c | |||
@@ -213,6 +213,70 @@ static ssize_t show_bpp(struct class_device *class_device, char *buf) | |||
213 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->var.bits_per_pixel); | 213 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->var.bits_per_pixel); |
214 | } | 214 | } |
215 | 215 | ||
216 | static ssize_t store_rotate(struct class_device *class_device, const char *buf, | ||
217 | size_t count) | ||
218 | { | ||
219 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
220 | struct fb_var_screeninfo var; | ||
221 | char **last = NULL; | ||
222 | int err; | ||
223 | |||
224 | var = fb_info->var; | ||
225 | var.rotate = simple_strtoul(buf, last, 0); | ||
226 | |||
227 | if ((err = activate(fb_info, &var))) | ||
228 | return err; | ||
229 | |||
230 | return count; | ||
231 | } | ||
232 | |||
233 | |||
234 | static ssize_t show_rotate(struct class_device *class_device, char *buf) | ||
235 | { | ||
236 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
237 | |||
238 | return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->var.rotate); | ||
239 | } | ||
240 | |||
241 | static ssize_t store_con_rotate(struct class_device *class_device, | ||
242 | const char *buf, size_t count) | ||
243 | { | ||
244 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
245 | int rotate; | ||
246 | char **last = NULL; | ||
247 | |||
248 | acquire_console_sem(); | ||
249 | rotate = simple_strtoul(buf, last, 0); | ||
250 | fb_con_duit(fb_info, FB_EVENT_SET_CON_ROTATE, &rotate); | ||
251 | release_console_sem(); | ||
252 | return count; | ||
253 | } | ||
254 | |||
255 | static ssize_t store_con_rotate_all(struct class_device *class_device, | ||
256 | const char *buf, size_t count) | ||
257 | { | ||
258 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
259 | int rotate; | ||
260 | char **last = NULL; | ||
261 | |||
262 | acquire_console_sem(); | ||
263 | rotate = simple_strtoul(buf, last, 0); | ||
264 | fb_con_duit(fb_info, FB_EVENT_SET_CON_ROTATE_ALL, &rotate); | ||
265 | release_console_sem(); | ||
266 | return count; | ||
267 | } | ||
268 | |||
269 | static ssize_t show_con_rotate(struct class_device *class_device, char *buf) | ||
270 | { | ||
271 | struct fb_info *fb_info = class_get_devdata(class_device); | ||
272 | int rotate; | ||
273 | |||
274 | acquire_console_sem(); | ||
275 | rotate = fb_con_duit(fb_info, FB_EVENT_GET_CON_ROTATE, NULL); | ||
276 | release_console_sem(); | ||
277 | return snprintf(buf, PAGE_SIZE, "%d\n", rotate); | ||
278 | } | ||
279 | |||
216 | static ssize_t store_virtual(struct class_device *class_device, | 280 | static ssize_t store_virtual(struct class_device *class_device, |
217 | const char * buf, size_t count) | 281 | const char * buf, size_t count) |
218 | { | 282 | { |
@@ -440,6 +504,9 @@ static struct class_device_attribute class_device_attrs[] = { | |||
440 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), | 504 | __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), |
441 | __ATTR(name, S_IRUGO, show_name, NULL), | 505 | __ATTR(name, S_IRUGO, show_name, NULL), |
442 | __ATTR(stride, S_IRUGO, show_stride, NULL), | 506 | __ATTR(stride, S_IRUGO, show_stride, NULL), |
507 | __ATTR(rotate, S_IRUGO|S_IWUSR, show_rotate, store_rotate), | ||
508 | __ATTR(con_rotate, S_IRUGO|S_IWUSR, show_con_rotate, store_con_rotate), | ||
509 | __ATTR(con_rotate_all, S_IWUSR, NULL, store_con_rotate_all), | ||
443 | }; | 510 | }; |
444 | 511 | ||
445 | int fb_init_class_device(struct fb_info *fb_info) | 512 | int fb_init_class_device(struct fb_info *fb_info) |