UPSTREAM: libpayload: cbgfx: Show square images on portrait displays
CBGFX currently doesn't support portrait screens at all. This will have to be fixed eventually but might take a bit of effort. As a first step to make devices with a portrait panel somewhat usable, this patch will just force a square canvas on these panels and keep the bottom part of the screen black. Also switch set_pixel to calculate framebuffer position via bytes_per_line instead of x_resolution. This is supposed to be the canonical way to do that and may differ in cases where the display controller requires a certain alignment from framebuffer lines. BRANCH=none BUG=b:35774871 TEST=Boot Rowan in developer mode and see output on the panel; below the developer screen square is completely black Change-Id: I5e5423e5fe166b1fea54ab16f7e0dd31fcce00d7 Original-Change-Id: I47dd3bf95ab8a7d8b7e1913e0ddab346eedd46f1 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/479613 Commit-Ready: Daniel Kurtz <djkurtz@chromium.org> Tested-by: Daniel Kurtz <djkurtz@chromium.org>
This commit is contained in:
parent
78341d5cd3
commit
c1fe06a2b4
1 changed files with 7 additions and 4 deletions
|
|
@ -125,9 +125,9 @@ static inline uint32_t calculate_color(const struct rgb_color *rgb)
|
|||
static inline void set_pixel(struct vector *coord, uint32_t color)
|
||||
{
|
||||
const int bpp = fbinfo->bits_per_pixel;
|
||||
const int bpl = fbinfo->bytes_per_line;
|
||||
int i;
|
||||
uint8_t * const pixel = fbaddr + (coord->x +
|
||||
coord->y * fbinfo->x_resolution) * bpp / 8;
|
||||
uint8_t * const pixel = fbaddr + coord->y * bpl + coord->x * bpp / 8;
|
||||
for (i = 0; i < bpp / 8; i++)
|
||||
pixel[i] = (color >> (i * 8));
|
||||
}
|
||||
|
|
@ -156,8 +156,11 @@ static int cbgfx_init(void)
|
|||
|
||||
/* Calculate canvas size & offset, assuming the screen is landscape */
|
||||
if (screen.size.height > screen.size.width) {
|
||||
LOG("Portrait screen not supported\n");
|
||||
return CBGFX_ERROR_PORTRAIT_SCREEN;
|
||||
const int bpl = fbinfo->bytes_per_line;
|
||||
LOG("Portrait screen not supported, forcing square image!\n");
|
||||
memset(fbaddr + screen.size.width * bpl, 0,
|
||||
(screen.size.height - screen.size.width) * bpl);
|
||||
screen.size.height = screen.size.width;
|
||||
}
|
||||
canvas.size.height = screen.size.height;
|
||||
canvas.size.width = canvas.size.height;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue