lib/edid: Add suport for display rotation
Sometimes the display native orientation does not match the device default orientation. We add a parameter to be passed to libpayload, which can then do the rotation. BUG=b:132049716 TEST=Boot krane, see that FW screen is orientation properly. Change-Id: I5e1d94b973a3f615b73eebe0ca1202ba03731844 Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/34731 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
parent
0ecdf3e536
commit
87f265b210
|
@ -283,6 +283,18 @@ struct lb_forward {
|
||||||
* fields described above. It may, however, only implement a subset
|
* fields described above. It may, however, only implement a subset
|
||||||
* of the possible color formats.
|
* of the possible color formats.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Framebuffer orientation, matches drm_connector.h drm_panel_orientation in the
|
||||||
|
* Linux kernel.
|
||||||
|
*/
|
||||||
|
enum lb_fb_orientation {
|
||||||
|
LB_FB_ORIENTATION_NORMAL = 0,
|
||||||
|
LB_FB_ORIENTATION_BOTTOM_UP = 1,
|
||||||
|
LB_FB_ORIENTATION_LEFT_UP = 2,
|
||||||
|
LB_FB_ORIENTATION_RIGHT_UP = 3,
|
||||||
|
};
|
||||||
|
|
||||||
struct lb_framebuffer {
|
struct lb_framebuffer {
|
||||||
uint32_t tag;
|
uint32_t tag;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
@ -300,6 +312,7 @@ struct lb_framebuffer {
|
||||||
uint8_t blue_mask_size;
|
uint8_t blue_mask_size;
|
||||||
uint8_t reserved_mask_pos;
|
uint8_t reserved_mask_pos;
|
||||||
uint8_t reserved_mask_size;
|
uint8_t reserved_mask_size;
|
||||||
|
uint8_t orientation;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#define EDID_H
|
#define EDID_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "commonlib/coreboot_tables.h"
|
||||||
|
|
||||||
enum edid_modes {
|
enum edid_modes {
|
||||||
EDID_MODE_640x480_60Hz,
|
EDID_MODE_640x480_60Hz,
|
||||||
|
@ -107,6 +108,7 @@ int decode_edid(unsigned char *edid, int size, struct edid *out);
|
||||||
void edid_set_framebuffer_bits_per_pixel(struct edid *edid, int fb_bpp,
|
void edid_set_framebuffer_bits_per_pixel(struct edid *edid, int fb_bpp,
|
||||||
int row_byte_alignment);
|
int row_byte_alignment);
|
||||||
void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr);
|
void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr);
|
||||||
|
void set_vbe_framebuffer_orientation(enum lb_fb_orientation orientation);
|
||||||
int set_display_mode(struct edid *edid, enum edid_modes mode);
|
int set_display_mode(struct edid *edid, enum edid_modes mode);
|
||||||
|
|
||||||
#endif /* EDID_H */
|
#endif /* EDID_H */
|
||||||
|
|
|
@ -81,6 +81,11 @@ void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr)
|
||||||
fb_valid = 1;
|
fb_valid = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_vbe_framebuffer_orientation(enum lb_fb_orientation orientation)
|
||||||
|
{
|
||||||
|
edid_fb.orientation = orientation;
|
||||||
|
}
|
||||||
|
|
||||||
int fill_lb_framebuffer(struct lb_framebuffer *framebuffer)
|
int fill_lb_framebuffer(struct lb_framebuffer *framebuffer)
|
||||||
{
|
{
|
||||||
if (!fb_valid)
|
if (!fb_valid)
|
||||||
|
|
Loading…
Reference in New Issue