Blame SOURCES/0008-detect-framebuffers.patch

e67e1d
From 755371fc1590e752380822ffdb320484e3b6851f Mon Sep 17 00:00:00 2001
e67e1d
From: Lyonel Vincent <lyonel@ezix.org>
e67e1d
Date: Thu, 2 Apr 2020 14:54:03 +0200
e67e1d
Subject: [PATCH 08/17] detect framebuffers
e67e1d
e67e1d
---
e67e1d
 src/core/graphics.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++
e67e1d
 src/core/graphics.h  |  8 ++++++++
e67e1d
 src/core/main.cc     |  4 ++++
e67e1d
 3 files changed, 56 insertions(+)
e67e1d
 create mode 100644 src/core/graphics.cc
e67e1d
 create mode 100644 src/core/graphics.h
e67e1d
e67e1d
diff --git a/src/core/graphics.cc b/src/core/graphics.cc
e67e1d
new file mode 100644
e67e1d
index 000000000000..a8d490cd1d61
e67e1d
--- /dev/null
e67e1d
+++ b/src/core/graphics.cc
e67e1d
@@ -0,0 +1,44 @@
e67e1d
+#include "version.h"
e67e1d
+#include "hw.h"
e67e1d
+#include "sysfs.h"
e67e1d
+#include "osutils.h"
e67e1d
+#include "graphics.h"
e67e1d
+#include "heuristics.h"
e67e1d
+
e67e1d
+#include <vector>
e67e1d
+#include <iostream>
e67e1d
+
e67e1d
+__ID("@(#) $Id$");
e67e1d
+
e67e1d
+using namespace std;
e67e1d
+
e67e1d
+bool scan_graphics(hwNode & n)
e67e1d
+{
e67e1d
+  vector < sysfs::entry > entries = sysfs::entries_by_class("graphics");
e67e1d
+
e67e1d
+  if (entries.empty())
e67e1d
+    return false;
e67e1d
+
e67e1d
+  for (vector < sysfs::entry >::iterator it = entries.begin();
e67e1d
+      it != entries.end(); ++it)
e67e1d
+  {
e67e1d
+    const sysfs::entry & e = *it;
e67e1d
+    string dev = e.string_attr("dev");
e67e1d
+    if(dev!="")
e67e1d
+    {
e67e1d
+      hwNode *device = n.findChildByBusInfo(e.leaf().businfo());
e67e1d
+      if(!device)
e67e1d
+        device = n.addChild(hwNode("graphics", hw::display));
e67e1d
+      device->claim();
e67e1d
+      device->setLogicalName(e.name());
e67e1d
+      device->addCapability("fb", "framebuffer");
e67e1d
+      if(device->getProduct() == "") device->setProduct(e.string_attr("name"));
e67e1d
+      string resolution = e.string_attr("virtual_size");
e67e1d
+      string depth = e.string_attr("bits_per_pixel");
e67e1d
+      if(resolution != "") device->setConfig("resolution", resolution);
e67e1d
+      if(depth != "") device->setConfig("depth", depth);
e67e1d
+    }
e67e1d
+  }
e67e1d
+
e67e1d
+  return true;
e67e1d
+}
e67e1d
diff --git a/src/core/graphics.h b/src/core/graphics.h
e67e1d
new file mode 100644
e67e1d
index 000000000000..c30f0bf8112b
e67e1d
--- /dev/null
e67e1d
+++ b/src/core/graphics.h
e67e1d
@@ -0,0 +1,8 @@
e67e1d
+#ifndef _GRAPHICS_H_
e67e1d
+#define _GRAPHICS_H_
e67e1d
+
e67e1d
+#include "hw.h"
e67e1d
+
e67e1d
+bool scan_graphics(hwNode &);
e67e1d
+
e67e1d
+#endif
e67e1d
diff --git a/src/core/main.cc b/src/core/main.cc
e67e1d
index e35258c56141..ac2fba0146f0 100644
e67e1d
--- a/src/core/main.cc
e67e1d
+++ b/src/core/main.cc
e67e1d
@@ -47,6 +47,7 @@
e67e1d
 #include "mmc.h"
e67e1d
 #include "input.h"
e67e1d
 #include "sound.h"
e67e1d
+#include "graphics.h"
e67e1d
 #include "smp.h"
e67e1d
 #include "abi.h"
e67e1d
 #include "s390.h"
e67e1d
@@ -145,6 +146,9 @@ bool scan_system(hwNode & system)
e67e1d
     status("sound");
e67e1d
     if (enabled("sound"))
e67e1d
       scan_sound(computer);
e67e1d
+    status("graphics");
e67e1d
+    if (enabled("graphics"))
e67e1d
+      scan_graphics(computer);
e67e1d
     status("input");
e67e1d
     if (enabled("input"))
e67e1d
       scan_input(computer);
e67e1d
-- 
e67e1d
2.17.1
e67e1d