[PATCH v4 4/6] bcm2835: Dynamically calculate bytes per pixel parameter
Matthias Brugger
mbrugger at suse.com
Wed Jan 10 16:12:03 CET 2024
On 10/01/2024 13:29, Ivan T. Ivanov wrote:
> brcm,bcm2708-fb device provided by firmware on RPi5 uses
> 16 bits per pixel, so lets calculate framebuffer bytes
> per pixel dynamically based on queried information.
>
> Tested to work for RPi2b v1.2, RPi3b v1.3, RPi4b v1.1,
> RPi2 Zero W, RPi5b v1.0.
>
> Signed-off-by: Ivan T. Ivanov <iivanov at suse.de>
Reviewed-by: Matthias Brugger <mbrugger at suse.com>
> ---
> drivers/video/bcm2835.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
> index 14942526f1..63efa762db 100644
> --- a/drivers/video/bcm2835.c
> +++ b/drivers/video/bcm2835.c
> @@ -16,7 +16,7 @@ static int bcm2835_video_probe(struct udevice *dev)
> struct video_uc_plat *plat = dev_get_uclass_plat(dev);
> struct video_priv *uc_priv = dev_get_uclass_priv(dev);
> int ret;
> - int w, h, pitch;
> + int w, h, pitch, bpp;
> ulong fb_base, fb_size, fb_start, fb_end;
>
> debug("bcm2835: Query resolution...\n");
> @@ -41,9 +41,23 @@ static int bcm2835_video_probe(struct udevice *dev)
> DCACHE_WRITEBACK);
> video_set_flush_dcache(dev, true);
>
> + bpp = pitch / w;
> + switch (bpp) {
> + case 2:
> + uc_priv->bpix = VIDEO_BPP16;
> + break;
> + case 4:
> + uc_priv->bpix = VIDEO_BPP32;
> + break;
> + default:
> + printf("bcm2835: unexpected bpp %d, pitch %d, width %d\n",
> + bpp, pitch, w);
> + uc_priv->bpix = VIDEO_BPP32;
> + break;
> + }
> +
> uc_priv->xsize = w;
> uc_priv->ysize = h;
> - uc_priv->bpix = VIDEO_BPP32;
> plat->base = fb_base;
> plat->size = fb_size;
>
More information about the U-Boot
mailing list