]>
Commit | Line | Data |
---|---|---|
7d95f2a3 SG |
1 | /* |
2 | * Copyright (c) 2013 Google, Inc | |
3 | * | |
4 | * SPDX-License-Identifier: GPL-2.0+ | |
5 | */ | |
6 | ||
7 | #include <common.h> | |
3ade5bc4 | 8 | #include <dm.h> |
7d95f2a3 | 9 | #include <fdtdec.h> |
3ade5bc4 | 10 | #include <video.h> |
7d95f2a3 SG |
11 | #include <asm/sdl.h> |
12 | #include <asm/u-boot-sandbox.h> | |
3ade5bc4 | 13 | #include <dm/test.h> |
7d95f2a3 SG |
14 | |
15 | DECLARE_GLOBAL_DATA_PTR; | |
16 | ||
17 | enum { | |
3ade5bc4 | 18 | /* Default LCD size we support */ |
7d95f2a3 SG |
19 | LCD_MAX_WIDTH = 1366, |
20 | LCD_MAX_HEIGHT = 768, | |
7d95f2a3 SG |
21 | }; |
22 | ||
3ade5bc4 | 23 | static int sandbox_sdl_probe(struct udevice *dev) |
7d95f2a3 | 24 | { |
3ade5bc4 SG |
25 | struct sandbox_sdl_plat *plat = dev_get_platdata(dev); |
26 | struct video_priv *uc_priv = dev_get_uclass_priv(dev); | |
27 | int ret; | |
7d95f2a3 | 28 | |
3ade5bc4 SG |
29 | ret = sandbox_sdl_init_display(plat->xres, plat->yres, plat->bpix); |
30 | if (ret) { | |
7d95f2a3 | 31 | puts("LCD init failed\n"); |
3ade5bc4 SG |
32 | return ret; |
33 | } | |
34 | uc_priv->xsize = plat->xres; | |
35 | uc_priv->ysize = plat->yres; | |
36 | uc_priv->bpix = plat->bpix; | |
37 | uc_priv->rot = plat->rot; | |
38 | ||
39 | return 0; | |
7d95f2a3 SG |
40 | } |
41 | ||
3ade5bc4 | 42 | static int sandbox_sdl_bind(struct udevice *dev) |
7d95f2a3 | 43 | { |
3ade5bc4 SG |
44 | struct video_uc_platdata *uc_plat = dev_get_uclass_platdata(dev); |
45 | struct sandbox_sdl_plat *plat = dev_get_platdata(dev); | |
7d95f2a3 | 46 | const void *blob = gd->fdt_blob; |
3ade5bc4 | 47 | int node = dev->of_offset; |
7d95f2a3 SG |
48 | int ret = 0; |
49 | ||
3ade5bc4 SG |
50 | plat->xres = fdtdec_get_int(blob, node, "xres", LCD_MAX_WIDTH); |
51 | plat->yres = fdtdec_get_int(blob, node, "yres", LCD_MAX_HEIGHT); | |
52 | plat->bpix = VIDEO_BPP16; | |
53 | uc_plat->size = plat->xres * plat->yres * (1 << plat->bpix) / 8; | |
54 | debug("%s: Frame buffer size %x\n", __func__, uc_plat->size); | |
7d95f2a3 SG |
55 | |
56 | return ret; | |
57 | } | |
3ade5bc4 SG |
58 | |
59 | static const struct udevice_id sandbox_sdl_ids[] = { | |
60 | { .compatible = "sandbox,lcd-sdl" }, | |
61 | { } | |
62 | }; | |
63 | ||
64 | U_BOOT_DRIVER(sdl_sandbox) = { | |
65 | .name = "sdl_sandbox", | |
66 | .id = UCLASS_VIDEO, | |
67 | .of_match = sandbox_sdl_ids, | |
68 | .bind = sandbox_sdl_bind, | |
69 | .probe = sandbox_sdl_probe, | |
70 | .platdata_auto_alloc_size = sizeof(struct sandbox_sdl_plat), | |
71 | }; |