Skip to content

Commit

Permalink
fbcon: Add fbcon_rotate_hint to struct fb_info
Browse files Browse the repository at this point in the history
On some hardware the LCD panel is not mounted upright in the casing,
but upside-down or rotated 90 degrees. In this case we want the console
to automatically be rotated to compensate.

The fbdev-driver may know about the need to rotate. Add a new
fbcon_rotate_hint field to struct fb_info, which gets initialized to -1.
If the fbdev-driver knows that some sort of rotation is necessary then
it can set this field to a FB_ROTATE_* value to tell the fbcon console
driver to rotate the console.

Acked-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171125193553.23986-2-hdegoede@redhat.com
  • Loading branch information
Hans de Goede authored and Hans de Goede committed Dec 4, 2017
1 parent 7b47c66 commit c9e6a36
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 6 deletions.
18 changes: 12 additions & 6 deletions drivers/video/fbdev/core/fbcon.c
Original file line number Diff line number Diff line change
Expand Up @@ -964,10 +964,13 @@ static const char *fbcon_startup(void)
ops->cur_blink_jiffies = HZ / 5;
ops->info = info;
info->fbcon_par = ops;
if (initial_rotation != -1)
p->con_rotate = initial_rotation;
else

p->con_rotate = initial_rotation;
if (p->con_rotate == -1)
p->con_rotate = info->fbcon_rotate_hint;
if (p->con_rotate == -1)
p->con_rotate = fbcon_platform_get_rotate(info);

set_blitting_type(vc, info);

if (info->fix.type != FB_TYPE_TEXT) {
Expand Down Expand Up @@ -1104,10 +1107,13 @@ static void fbcon_init(struct vc_data *vc, int init)

ops = info->fbcon_par;
ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
if (initial_rotation != -1)
p->con_rotate = initial_rotation;
else

p->con_rotate = initial_rotation;
if (p->con_rotate == -1)
p->con_rotate = info->fbcon_rotate_hint;
if (p->con_rotate == -1)
p->con_rotate = fbcon_platform_get_rotate(info);

set_blitting_type(vc, info);

cols = vc->vc_cols;
Expand Down
1 change: 1 addition & 0 deletions drivers/video/fbdev/core/fbsysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ struct fb_info *framebuffer_alloc(size_t size, struct device *dev)
info->par = p + fb_info_size;

info->device = dev;
info->fbcon_rotate_hint = -1;

#ifdef CONFIG_FB_BACKLIGHT
mutex_init(&info->bl_curve_mutex);
Expand Down
5 changes: 5 additions & 0 deletions include/linux/fb.h
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,11 @@ struct fb_info {
atomic_t count;
int node;
int flags;
/*
* -1 by default, set to a FB_ROTATE_* value by the driver, if it knows
* a lcd is not mounted upright and fbcon should rotate to compensate.
*/
int fbcon_rotate_hint;
struct mutex lock; /* Lock for open/release/ioctl funcs */
struct mutex mm_lock; /* Lock for fb_mmap and smem_* fields */
struct fb_var_screeninfo var; /* Current var */
Expand Down

0 comments on commit c9e6a36

Please sign in to comment.