video.c 1.4 KB

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