]>
Commit | Line | Data |
---|---|---|
93ad66ce EB |
1 | /* |
2 | * SPDX-License-Identifier: GPL-2.0+ | |
3 | */ | |
4 | ||
5 | #include <common.h> | |
1221ce45 | 6 | #include <linux/errno.h> |
93ad66ce EB |
7 | #include <asm/imx-common/video.h> |
8 | ||
93ad66ce EB |
9 | int board_video_skip(void) |
10 | { | |
11 | int i; | |
12 | int ret; | |
13 | char const *panel = getenv("panel"); | |
11076f0c | 14 | |
93ad66ce EB |
15 | if (!panel) { |
16 | for (i = 0; i < display_count; i++) { | |
17 | struct display_info_t const *dev = displays+i; | |
18 | if (dev->detect && dev->detect(dev)) { | |
19 | panel = dev->mode.name; | |
20 | printf("auto-detected panel %s\n", panel); | |
21 | break; | |
22 | } | |
23 | } | |
24 | if (!panel) { | |
25 | panel = displays[0].mode.name; | |
26 | printf("No panel detected: default to %s\n", panel); | |
27 | i = 0; | |
28 | } | |
29 | } else { | |
30 | for (i = 0; i < display_count; i++) { | |
31 | if (!strcmp(panel, displays[i].mode.name)) | |
32 | break; | |
33 | } | |
34 | } | |
11076f0c | 35 | |
93ad66ce EB |
36 | if (i < display_count) { |
37 | ret = ipuv3_fb_init(&displays[i].mode, 0, | |
38 | displays[i].pixfmt); | |
39 | if (!ret) { | |
11076f0c ND |
40 | if (displays[i].enable) |
41 | displays[i].enable(displays + i); | |
42 | ||
93ad66ce EB |
43 | printf("Display: %s (%ux%u)\n", |
44 | displays[i].mode.name, | |
45 | displays[i].mode.xres, | |
46 | displays[i].mode.yres); | |
47 | } else | |
48 | printf("LCD %s cannot be configured: %d\n", | |
49 | displays[i].mode.name, ret); | |
50 | } else { | |
51 | printf("unsupported panel %s\n", panel); | |
52 | return -EINVAL; | |
53 | } | |
54 | ||
55 | return 0; | |
56 | } | |
e688a99c EB |
57 | |
58 | #ifdef CONFIG_IMX_HDMI | |
59 | #include <asm/arch/mxc_hdmi.h> | |
60 | #include <asm/io.h> | |
61 | int detect_hdmi(struct display_info_t const *dev) | |
62 | { | |
63 | struct hdmi_regs *hdmi = (struct hdmi_regs *)HDMI_ARB_BASE_ADDR; | |
64 | return readb(&hdmi->phy_stat0) & HDMI_DVI_STAT; | |
65 | } | |
66 | #endif |