diff options
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) |