dm: video: sandbox: Convert sandbox to use driver model for video
Now that driver model support is available, convert sandbox over to use it. We can remove a few of the special hooks that sandbox currently has. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
1e69ad014c
commit
3ade5bc4dc
@ -117,6 +117,7 @@
|
||||
};
|
||||
|
||||
lcd {
|
||||
u-boot,dm-pre-reloc;
|
||||
compatible = "sandbox,lcd-sdl";
|
||||
xres = <1366>;
|
||||
yres = <768>;
|
||||
|
@ -47,23 +47,6 @@ int dram_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BOARD_EARLY_INIT_F
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
#ifdef CONFIG_VIDEO_SANDBOX_SDL
|
||||
int ret;
|
||||
|
||||
ret = sandbox_lcd_sdl_early_init();
|
||||
if (ret) {
|
||||
puts("Could not init sandbox LCD emulation\n");
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_LATE_INIT
|
||||
int board_late_init(void)
|
||||
{
|
||||
|
11
common/lcd.c
11
common/lcd.c
@ -31,10 +31,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SANDBOX
|
||||
#include <asm/sdl.h>
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_LCD_ALIGNMENT
|
||||
#define CONFIG_LCD_ALIGNMENT PAGE_SIZE
|
||||
#endif
|
||||
@ -72,13 +68,6 @@ void lcd_sync(void)
|
||||
if (lcd_flush_dcache)
|
||||
flush_dcache_range((u32)lcd_base,
|
||||
(u32)(lcd_base + lcd_get_size(&line_length)));
|
||||
#elif defined(CONFIG_SANDBOX) && defined(CONFIG_VIDEO_SANDBOX_SDL)
|
||||
static ulong last_sync;
|
||||
|
||||
if (get_timer(last_sync) > 10) {
|
||||
sandbox_sdl_sync(lcd_base);
|
||||
last_sync = get_timer(0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -76,6 +76,7 @@ CONFIG_USB_EMUL=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_KEYBOARD=y
|
||||
CONFIG_SYS_USB_EVENT_POLL=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_SANDBOX_SDL=y
|
||||
CONFIG_CMD_DHRYSTONE=y
|
||||
CONFIG_TPM=y
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <lcd.h>
|
||||
#include <os.h>
|
||||
#include <serial.h>
|
||||
#include <video.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/state.h>
|
||||
|
||||
@ -114,9 +115,7 @@ static int sandbox_serial_pending(struct udevice *dev, bool input)
|
||||
return 0;
|
||||
|
||||
os_usleep(100);
|
||||
#ifdef CONFIG_LCD
|
||||
lcd_sync();
|
||||
#endif
|
||||
video_sync_all();
|
||||
if (next_index == serial_buf_read)
|
||||
return 1; /* buffer full */
|
||||
|
||||
|
@ -5,75 +5,76 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <fdtdec.h>
|
||||
#include <lcd.h>
|
||||
#include <malloc.h>
|
||||
#include <video.h>
|
||||
#include <asm/sdl.h>
|
||||
#include <asm/u-boot-sandbox.h>
|
||||
#include <dm/test.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
enum {
|
||||
/* Maximum LCD size we support */
|
||||
/* Default LCD size we support */
|
||||
LCD_MAX_WIDTH = 1366,
|
||||
LCD_MAX_HEIGHT = 768,
|
||||
LCD_MAX_LOG2_BPP = 4, /* 2^4 = 16 bpp */
|
||||
};
|
||||
|
||||
vidinfo_t panel_info;
|
||||
|
||||
void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
|
||||
{
|
||||
}
|
||||
/* This platform data is needed in tests, so declare it here */
|
||||
struct sandbox_sdl_plat {
|
||||
int xres;
|
||||
int yres;
|
||||
int bpix;
|
||||
int rot;
|
||||
};
|
||||
|
||||
void lcd_ctrl_init(void *lcdbase)
|
||||
static int sandbox_sdl_probe(struct udevice *dev)
|
||||
{
|
||||
/*
|
||||
* Allocate memory to keep BMP color conversion map. This is required
|
||||
* for 8 bit BMPs only (hence 256 colors). If malloc fails - keep
|
||||
* going, it is not even clear if displyaing the bitmap will be
|
||||
* required on the way up.
|
||||
*/
|
||||
panel_info.cmap = malloc(256 * NBITS(panel_info.vl_bpix) / 8);
|
||||
}
|
||||
struct sandbox_sdl_plat *plat = dev_get_platdata(dev);
|
||||
struct video_priv *uc_priv = dev_get_uclass_priv(dev);
|
||||
int ret;
|
||||
|
||||
void lcd_enable(void)
|
||||
{
|
||||
if (sandbox_sdl_init_display(panel_info.vl_col, panel_info.vl_row,
|
||||
panel_info.vl_bpix))
|
||||
ret = sandbox_sdl_init_display(plat->xres, plat->yres, plat->bpix);
|
||||
if (ret) {
|
||||
puts("LCD init failed\n");
|
||||
return ret;
|
||||
}
|
||||
uc_priv->xsize = plat->xres;
|
||||
uc_priv->ysize = plat->yres;
|
||||
uc_priv->bpix = plat->bpix;
|
||||
uc_priv->rot = plat->rot;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sandbox_lcd_sdl_early_init(void)
|
||||
static int sandbox_sdl_bind(struct udevice *dev)
|
||||
{
|
||||
struct video_uc_platdata *uc_plat = dev_get_uclass_platdata(dev);
|
||||
struct sandbox_sdl_plat *plat = dev_get_platdata(dev);
|
||||
const void *blob = gd->fdt_blob;
|
||||
int xres = LCD_MAX_WIDTH, yres = LCD_MAX_HEIGHT;
|
||||
int node;
|
||||
int node = dev->of_offset;
|
||||
int ret = 0;
|
||||
|
||||
/*
|
||||
* The code in common/lcd.c does not cope with not being able to
|
||||
* set up a frame buffer. It will just happily keep writing to
|
||||
* invalid memory. So here we make sure that at least some buffer
|
||||
* is available even if it actually won't be displayed.
|
||||
*/
|
||||
node = fdtdec_next_compatible(blob, 0, COMPAT_SANDBOX_LCD_SDL);
|
||||
if (node >= 0) {
|
||||
xres = fdtdec_get_int(blob, node, "xres", LCD_MAX_WIDTH);
|
||||
yres = fdtdec_get_int(blob, node, "yres", LCD_MAX_HEIGHT);
|
||||
if (xres < 0 || xres > LCD_MAX_WIDTH) {
|
||||
xres = LCD_MAX_WIDTH;
|
||||
ret = -EINVAL;
|
||||
}
|
||||
if (yres < 0 || yres > LCD_MAX_HEIGHT) {
|
||||
yres = LCD_MAX_HEIGHT;
|
||||
ret = -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
panel_info.vl_col = xres;
|
||||
panel_info.vl_row = yres;
|
||||
panel_info.vl_bpix = LCD_COLOR16;
|
||||
plat->xres = fdtdec_get_int(blob, node, "xres", LCD_MAX_WIDTH);
|
||||
plat->yres = fdtdec_get_int(blob, node, "yres", LCD_MAX_HEIGHT);
|
||||
plat->bpix = VIDEO_BPP16;
|
||||
uc_plat->size = plat->xres * plat->yres * (1 << plat->bpix) / 8;
|
||||
debug("%s: Frame buffer size %x\n", __func__, uc_plat->size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct udevice_id sandbox_sdl_ids[] = {
|
||||
{ .compatible = "sandbox,lcd-sdl" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sdl_sandbox) = {
|
||||
.name = "sdl_sandbox",
|
||||
.id = UCLASS_VIDEO,
|
||||
.of_match = sandbox_sdl_ids,
|
||||
.bind = sandbox_sdl_bind,
|
||||
.probe = sandbox_sdl_probe,
|
||||
.platdata_auto_alloc_size = sizeof(struct sandbox_sdl_plat),
|
||||
};
|
||||
|
@ -158,9 +158,7 @@
|
||||
|
||||
/* LCD and keyboard require SDL support */
|
||||
#ifdef CONFIG_SANDBOX_SDL
|
||||
#define CONFIG_LCD
|
||||
#define CONFIG_CMD_BMP
|
||||
#define CONFIG_BOARD_EARLY_INIT_F
|
||||
#define CONFIG_CONSOLE_MUX
|
||||
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
|
||||
#define LCD_BPP LCD_COLOR16
|
||||
@ -169,12 +167,12 @@
|
||||
#define CONFIG_KEYBOARD
|
||||
|
||||
#define SANDBOX_SERIAL_SETTINGS "stdin=serial,cros-ec-keyb,usbkbd\0" \
|
||||
"stdout=serial,lcd\0" \
|
||||
"stderr=serial,lcd\0"
|
||||
"stdout=serial,lcd.vidconsole\0" \
|
||||
"stderr=serial,lcd.vidconsole\0"
|
||||
#else
|
||||
#define SANDBOX_SERIAL_SETTINGS "stdin=serial\0" \
|
||||
"stdout=serial,lcd\0" \
|
||||
"stderr=serial,lcd\0"
|
||||
"stdout=serial,lcd.vidconsole\0" \
|
||||
"stderr=serial,lcd.vidconsole\0"
|
||||
#endif
|
||||
|
||||
#define SANDBOX_ETH_SETTINGS "ethaddr=00:00:11:22:33:44\0" \
|
||||
|
@ -151,7 +151,6 @@ enum fdt_compat_id {
|
||||
COMPAT_GENERIC_SPI_FLASH, /* Generic SPI Flash chip */
|
||||
COMPAT_MAXIM_98095_CODEC, /* MAX98095 Codec */
|
||||
COMPAT_SAMSUNG_EXYNOS5_I2C, /* Exynos5 High Speed I2C Controller */
|
||||
COMPAT_SANDBOX_LCD_SDL, /* Sandbox LCD emulation with SDL */
|
||||
COMPAT_SAMSUNG_EXYNOS_SYSMMU, /* Exynos sysmmu */
|
||||
COMPAT_INTEL_MICROCODE, /* Intel microcode update */
|
||||
COMPAT_MEMORY_SPD, /* Memory SPD information */
|
||||
|
@ -56,7 +56,6 @@ static const char * const compat_names[COMPAT_COUNT] = {
|
||||
COMPAT(GENERIC_SPI_FLASH, "spi-flash"),
|
||||
COMPAT(MAXIM_98095_CODEC, "maxim,max98095-codec"),
|
||||
COMPAT(SAMSUNG_EXYNOS5_I2C, "samsung,exynos5-hsi2c"),
|
||||
COMPAT(SANDBOX_LCD_SDL, "sandbox,lcd-sdl"),
|
||||
COMPAT(SAMSUNG_EXYNOS_SYSMMU, "samsung,sysmmu-v3.3"),
|
||||
COMPAT(INTEL_MICROCODE, "intel,microcode"),
|
||||
COMPAT(MEMORY_SPD, "memory-spd"),
|
||||
|
Loading…
Reference in New Issue
Block a user