mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 15:37:49 +00:00
xf86-video-intel: add patch for uevent support (from fedora)
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
17b2c8a636
commit
e00d2c6cd3
@ -5,6 +5,7 @@
|
||||
$SCRIPTS/build toolchain
|
||||
$SCRIPTS/build util-macros
|
||||
$SCRIPTS/build fontsproto
|
||||
$SCRIPTS/build udev
|
||||
$SCRIPTS/build xorg-server
|
||||
|
||||
xorg_drv_configure_prepend
|
||||
@ -14,6 +15,9 @@ xorg_drv_configure_prepend
|
||||
CXXFLAGS=`echo $CXXFLAGS | sed -e "s|-Os|-O3|"`
|
||||
|
||||
cd $PKG_BUILD
|
||||
|
||||
$AUTORECONF
|
||||
|
||||
./configure --host=$TARGET_NAME \
|
||||
--build=$HOST_NAME \
|
||||
--prefix=/usr \
|
||||
|
@ -2,5 +2,7 @@
|
||||
|
||||
. config/options
|
||||
|
||||
$SCRIPTS/install udev
|
||||
|
||||
mkdir -p $INSTALL/$XORG_PATH_MODULES/drivers
|
||||
cp -P $PKG_BUILD/src/.libs/intel_drv.so $INSTALL/$XORG_PATH_MODULES/drivers
|
||||
|
146
packages/x11/driver/xf86-video-intel/patches/uevent.diff
Normal file
146
packages/x11/driver/xf86-video-intel/patches/uevent.diff
Normal file
@ -0,0 +1,146 @@
|
||||
diff -up xf86-video-intel-2.10.0/src/i830_driver.c.dave xf86-video-intel-2.10.0/src/i830_driver.c
|
||||
--- xf86-video-intel-2.10.0/src/i830_driver.c.dave 2010-01-13 18:48:49.000000000 +1000
|
||||
+++ xf86-video-intel-2.10.0/src/i830_driver.c 2010-01-13 18:51:09.000000000 +1000
|
||||
@@ -83,6 +83,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "i915_drm.h"
|
||||
#include <xf86drmMode.h>
|
||||
|
||||
+#include "libudev.h"
|
||||
+
|
||||
#define BIT(x) (1 << (x))
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#define NB_OF(x) (sizeof (x) / sizeof (*x))
|
||||
@@ -1167,6 +1169,80 @@ int i830_crtc_to_pipe(xf86CrtcPtr crtc)
|
||||
return drmmode_get_pipe_from_crtc_id(intel->bufmgr, crtc);
|
||||
}
|
||||
|
||||
+static void
|
||||
+I830HandleUEvents(int fd, void *closure)
|
||||
+{
|
||||
+ ScrnInfoPtr scrn = closure;
|
||||
+ intel_screen_private *intel = intel_get_screen_private(scrn);
|
||||
+ struct udev_device *dev;
|
||||
+
|
||||
+ dev = udev_monitor_receive_device(intel->uevent_monitor);
|
||||
+ if (!dev)
|
||||
+ return;
|
||||
+
|
||||
+ /*
|
||||
+ * technically we should inspect the event to see that it's a hotplug.
|
||||
+ * but we know it's a hotplug, we don't get events for anything else.
|
||||
+ * XXX but we should definitely trim by drm node
|
||||
+ */
|
||||
+
|
||||
+ RRGetInfo(screenInfo.screens[scrn->scrnIndex], TRUE);
|
||||
+
|
||||
+ udev_device_unref(dev);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+I830UeventInit(ScrnInfoPtr scrn)
|
||||
+{
|
||||
+ intel_screen_private *intel = intel_get_screen_private(scrn);
|
||||
+ struct udev *u;
|
||||
+ struct udev_monitor *mon;
|
||||
+
|
||||
+ u = udev_new();
|
||||
+ if (!u)
|
||||
+ return;
|
||||
+
|
||||
+ mon = udev_monitor_new_from_netlink(u, "udev");
|
||||
+
|
||||
+ if (!mon) {
|
||||
+ udev_unref(u);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (udev_monitor_filter_add_match_subsystem_devtype(mon,
|
||||
+ "drm",
|
||||
+ "drm_minor") < 0 ||
|
||||
+ udev_monitor_enable_receiving(mon) < 0)
|
||||
+ {
|
||||
+ udev_monitor_unref(mon);
|
||||
+ udev_unref(u);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ intel->uevent_handler =
|
||||
+ xf86AddGeneralHandler(udev_monitor_get_fd(mon),
|
||||
+ I830HandleUEvents,
|
||||
+ scrn);
|
||||
+
|
||||
+ intel->uevent_monitor = mon;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+I830UeventFini(ScrnInfoPtr scrn)
|
||||
+{
|
||||
+ intel_screen_private *intel = intel_get_screen_private(scrn);
|
||||
+
|
||||
+ if (intel->uevent_handler)
|
||||
+ {
|
||||
+ struct udev *u = udev_monitor_get_udev(intel->uevent_monitor);
|
||||
+
|
||||
+ xf86RemoveGeneralHandler(intel->uevent_handler);
|
||||
+
|
||||
+ udev_monitor_unref(intel->uevent_monitor);
|
||||
+ udev_unref(u);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static Bool
|
||||
I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
|
||||
{
|
||||
@@ -1425,6 +1501,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr
|
||||
|
||||
intel->suspended = FALSE;
|
||||
|
||||
+ I830UeventInit(scrn);
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1529,7 +1607,8 @@ static Bool I830CloseScreen(int scrnInde
|
||||
{
|
||||
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
|
||||
intel_screen_private *intel = intel_get_screen_private(scrn);
|
||||
-
|
||||
+
|
||||
+ I830UeventFini(scrn);
|
||||
if (scrn->vtSema == TRUE) {
|
||||
I830LeaveVT(scrnIndex, 0);
|
||||
}
|
||||
diff -up xf86-video-intel-2.10.0/src/i830.h.dave xf86-video-intel-2.10.0/src/i830.h
|
||||
--- xf86-video-intel-2.10.0/src/i830.h.dave 2010-01-13 18:48:50.000000000 +1000
|
||||
+++ xf86-video-intel-2.10.0/src/i830.h 2010-01-13 18:50:01.000000000 +1000
|
||||
@@ -47,6 +47,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
#ifndef _I830_H_
|
||||
#define _I830_H_
|
||||
|
||||
+#include "libudev.h"
|
||||
+
|
||||
#include "xf86_OSproc.h"
|
||||
#include "compiler.h"
|
||||
#include "xf86PciInfo.h"
|
||||
@@ -385,6 +387,9 @@ typedef struct intel_screen_private {
|
||||
*/
|
||||
Bool fallback_debug;
|
||||
unsigned debug_flush;
|
||||
+
|
||||
+ struct udev_monitor *uevent_monitor;
|
||||
+ InputHandlerProc uevent_handler;
|
||||
} intel_screen_private;
|
||||
|
||||
enum {
|
||||
diff -up xf86-video-intel-2.10.0/src/Makefile.am.dave xf86-video-intel-2.10.0/src/Makefile.am
|
||||
--- xf86-video-intel-2.10.0/src/Makefile.am.dave 2010-01-05 08:09:52.000000000 +1000
|
||||
+++ xf86-video-intel-2.10.0/src/Makefile.am 2010-01-13 18:49:14.000000000 +1000
|
||||
@@ -32,7 +32,7 @@ AM_CFLAGS = @CWARNFLAGS@ @XORG_CFLAGS@ @
|
||||
intel_drv_la_LTLIBRARIES = intel_drv.la
|
||||
intel_drv_la_LDFLAGS = -module -avoid-version
|
||||
intel_drv_ladir = @moduledir@/drivers
|
||||
-intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la
|
||||
+intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la -ludev
|
||||
intel_drv_la_LIBADD += @PCIACCESS_LIBS@
|
||||
|
||||
INTEL_DRI_SRCS = \
|
Loading…
x
Reference in New Issue
Block a user