diff options
Diffstat (limited to 'drivers/video/sdl.c')
-rw-r--r-- | drivers/video/sdl.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/drivers/video/sdl.c b/drivers/video/sdl.c index 8f5b409efb..06e13b7735 100644 --- a/drivers/video/sdl.c +++ b/drivers/video/sdl.c @@ -1,7 +1,6 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * GPL v2 */ #include <common.h> @@ -13,23 +12,25 @@ #include <errno.h> #include <gui/graphic_utils.h> +#define to_mask(color) GENMASK(color.length - 1, color.offset) + static void sdlfb_enable(struct fb_info *info) { - int ret; - - ret = sdl_open(info->xres, info->yres, info->bits_per_pixel, - info->screen_base); - if (ret) - return; - sdl_get_bitfield_rgba(&info->red, &info->green, &info->blue, &info->transp); - - sdl_start_timer(); + struct sdl_fb_info sdl_info = { + .screen_base = info->screen_base, + .xres = info->xres, .yres = info->yres, .bpp = info->bits_per_pixel, + .rmask = to_mask(info->red), + .gmask = to_mask(info->green), + .bmask = to_mask(info->blue), + .amask = to_mask(info->transp), + }; + + sdl_video_open(&sdl_info); } static void sdlfb_disable(struct fb_info *info) { - sdl_stop_timer(); - sdl_close(); + sdl_video_close(); } static struct fb_ops sdlfb_ops = { @@ -37,7 +38,7 @@ static struct fb_ops sdlfb_ops = { .fb_disable = sdlfb_disable, }; -static int sdlfb_probe(struct device_d *dev) +static int sdlfb_probe(struct device *dev) { struct fb_info *fb; int ret = -EIO; @@ -48,10 +49,19 @@ static int sdlfb_probe(struct device_d *dev) fb = xzalloc(sizeof(*fb)); fb->modes.modes = fb->mode = dev->platform_data; fb->modes.num_modes = 1; - fb->bits_per_pixel = 4 << 3; fb->xres = fb->mode->xres; fb->yres = fb->mode->yres; + fb->bits_per_pixel = 32; + fb->transp.length = 8; + fb->red.length = 8; + fb->green.length = 8; + fb->blue.length = 8; + fb->transp.offset = 24; + fb->red.offset = 16; + fb->green.offset = 8; + fb->blue.offset = 0; + fb->priv = fb; fb->fbops = &sdlfb_ops; @@ -59,15 +69,6 @@ static int sdlfb_probe(struct device_d *dev) fb->screen_base = xzalloc(fb->xres * fb->yres * fb->bits_per_pixel >> 3); - dev_dbg(dev, "red: length = %d, offset = %d\n", - fb->red.length, fb->red.offset); - dev_dbg(dev, "green: length = %d, offset = %d\n", - fb->green.length, fb->green.offset); - dev_dbg(dev, "blue: length = %d, offset = %d\n", - fb->blue.length, fb->blue.offset); - dev_dbg(dev, "transp: length = %d, offset = %d\n", - fb->transp.length, fb->transp.offset); - /* add runtime hardware info */ dev->priv = fb; @@ -77,20 +78,18 @@ static int sdlfb_probe(struct device_d *dev) kfree(fb->screen_base); kfree(fb); - sdl_close(); return ret; } -static void sdlfb_remove(struct device_d *dev) +static void sdlfb_remove(struct device *dev) { struct fb_info *fb = dev->priv; kfree(fb->screen_base); kfree(fb); - sdl_close(); } -static struct driver_d sdlfb_driver = { +static struct driver sdlfb_driver = { .name = "sdlfb", .probe = sdlfb_probe, .remove = sdlfb_remove, |