commit:     15bbd0549085136df827fcc0693e8a0a91568f1a
Author:     Sebastian Engel <sighunter <AT> gmx <DOT> de>
AuthorDate: Thu Nov  7 13:22:06 2024 +0000
Commit:     Sebastian Engel <sighunter <AT> gmx <DOT> de>
CommitDate: Thu Nov  7 13:22:06 2024 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=15bbd054

games-util/xone: new package, add 0.3_p20240425

Signed-off-by: Sebastian Engel <sighunter <AT> gmx.de>

 games-util/xone/Manifest                           |   2 +
 games-util/xone/files/Makefile                     |   7 +
 .../files/xone-0.3_p20240425-kernel_6.11.patch     |  26 ++++
 .../files/xone-0.3_p20240425-sysfs_pairing.patch   | 163 +++++++++++++++++++++
 games-util/xone/metadata.xml                       |  16 ++
 games-util/xone/xone-0.3_p20240425.ebuild          |  72 +++++++++
 6 files changed, 286 insertions(+)

diff --git a/games-util/xone/Manifest b/games-util/xone/Manifest
new file mode 100644
index 000000000..115ef06b6
--- /dev/null
+++ b/games-util/xone/Manifest
@@ -0,0 +1,2 @@
+DIST xone-0.3_p20240425.tar.gz 62680 BLAKE2B 
c4a7a0fa3eb2f53e9213413bca809824f24f8b273093dc65b57b3d3729f1c2805f1477f686d143975cb8f17248a7abed35ae303236cdd7ba4912fec66261efea
 SHA512 
b195b413b41a026a1e802d332b0365b433847176f876cd765368fa7c17b0d4d3c18608697351ecd47381110d4bc62af87de53dcd385ffc8758910bae9761152d
+DIST 
xone-driver-201707-1cd6a87c-623f-4407-a52d-c31be49e925c_e19f60808bdcbfbd3c3df6be3e71ffc52e43261e.cab
 199891 BLAKE2B 
f531a9f4b8220ee4501431b308ee6e29a8dea26467020df25b7fa22228543cc560e1170d13b1cb3490c64c48bf610e3fb7ddfb743e4a2028f5980e02d0c36790
 SHA512 
0906debd6c1f4706348ec1b1cbf233ea2c45bbc0b8882593740964036808722f5bb701f43da803320609e02072cd16dada572d337fd4c05cc1cf6dde6fd38908

diff --git a/games-util/xone/files/Makefile b/games-util/xone/files/Makefile
new file mode 100644
index 000000000..2cb464424
--- /dev/null
+++ b/games-util/xone/files/Makefile
@@ -0,0 +1,7 @@
+KERNEL_DIR ?= /usr/src/linux
+PWD := $(shell pwd)
+
+all: module
+
+module:
+       @$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules

diff --git a/games-util/xone/files/xone-0.3_p20240425-kernel_6.11.patch 
b/games-util/xone/files/xone-0.3_p20240425-kernel_6.11.patch
new file mode 100644
index 000000000..bf881ab39
--- /dev/null
+++ b/games-util/xone/files/xone-0.3_p20240425-kernel_6.11.patch
@@ -0,0 +1,26 @@
+From 28df566c38e0ee500fd5f74643fc35f21a4ff696 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Torleif=20Sk=C3=A5r?=
+ <[email protected]>
+Date: Tue, 30 Jul 2024 22:35:25 +0200
+Subject: [PATCH] fix: build on kernel v6.11
+
+---
+ bus/bus.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/bus/bus.c b/bus/bus.c
+index 4a6c64f..8dc9bbb 100644
+--- a/bus/bus.c
++++ b/bus/bus.c
+@@ -56,7 +56,11 @@ static struct device_type gip_client_type = {
+       .release = gip_client_release,
+ };
+ 
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 11, 0)
+ static int gip_bus_match(struct device *dev, struct device_driver *driver)
++#else
++static int gip_bus_match(struct device *dev, const struct device_driver 
*driver)
++#endif
+ {
+       struct gip_client *client;
+       struct gip_driver *drv;

diff --git a/games-util/xone/files/xone-0.3_p20240425-sysfs_pairing.patch 
b/games-util/xone/files/xone-0.3_p20240425-sysfs_pairing.patch
new file mode 100644
index 000000000..12603412f
--- /dev/null
+++ b/games-util/xone/files/xone-0.3_p20240425-sysfs_pairing.patch
@@ -0,0 +1,163 @@
+From 3463d0e2335998c1b94bb1605dc7a6668d4ba262 Mon Sep 17 00:00:00 2001
+From: Daniel Lundqvist <[email protected]>
+Date: Thu, 20 Apr 2023 17:12:54 +0200
+Subject: [PATCH 1/2] Revert "Remove dongle pairing sysfs attribute"
+
+This reverts commit 304da811e94081156376a8e10ff5eee5876c6e41.
+---
+ README.md          | 18 ++++++++++++++++-
+ transport/dongle.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 67 insertions(+), 1 deletion(-)
+
+diff --git a/README.md b/README.md
+index 8e7c9f1..05181f1 100644
+--- a/README.md
++++ b/README.md
+@@ -111,7 +111,9 @@ Xbox devices have to be paired to the wireless dongle. 
They will not automatical
+ 
+ Instructions for pairing your devices can be found 
[here](https://support.xbox.com/en-US/help/hardware-network/controller/connect-xbox-wireless-controller-to-pc)
 (see the section on *Xbox Wireless*).
+ 
+-## LED control
++## Kernel interface
++
++### LED control
+ 
+ The guide button LED can be controlled via `sysfs`:
+ 
+@@ -129,6 +131,20 @@ ACTION=="add", SUBSYSTEM=="leds", KERNEL=="gip*", 
ATTR{mode}="2", ATTR{brightnes
+ Replace the wildcard (`gip*`) if you want to control the LED of a specific 
device.
+ The modes and the maximum brightness can vary from device to device.
+ 
++### Pairing mode
++
++The pairing mode of the dongle can be queried via `sysfs`:
++
++```
++cat /sys/bus/usb/drivers/xone-dongle/*/pairing
++```
++
++You can enable (`1`) or disable (`0`) the pairing using the following command:
++
++```
++echo 1 | sudo tee /sys/bus/usb/drivers/xone-dongle/*/pairing
++```
++
+ ## Troubleshooting
+ 
+ Uninstall the release version and install a debug build of `xone` (see 
installation guide).
+diff --git a/transport/dongle.c b/transport/dongle.c
+index aa58ac2..5eb6f9c 100644
+--- a/transport/dongle.c
++++ b/transport/dongle.c
+@@ -8,6 +8,7 @@
+ #include <linux/bitfield.h>
+ #include <linux/version.h>
+ #include <linux/usb.h>
++#include <linux/sysfs.h>
+ #include <linux/ieee80211.h>
+ #include <net/cfg80211.h>
+ 
+@@ -262,6 +263,47 @@ static void xone_dongle_pairing_timeout(struct 
work_struct *work)
+                       __func__, err);
+ }
+ 
++static ssize_t xone_dongle_pairing_show(struct device *dev,
++                                      struct device_attribute *attr,
++                                      char *buf)
++{
++      struct usb_interface *intf = to_usb_interface(dev);
++      struct xone_dongle *dongle = usb_get_intfdata(intf);
++
++      return sprintf(buf, "%d\n", dongle->pairing);
++}
++
++static ssize_t xone_dongle_pairing_store(struct device *dev,
++                                       struct device_attribute *attr,
++                                       const char *buf, size_t count)
++{
++      struct usb_interface *intf = to_usb_interface(dev);
++      struct xone_dongle *dongle = usb_get_intfdata(intf);
++      bool enable;
++      int err;
++
++      err = kstrtobool(buf, &enable);
++      if (err)
++              return err;
++
++      err = xone_dongle_toggle_pairing(dongle, enable);
++      if (err)
++              return err;
++
++      return count;
++}
++
++static struct device_attribute xone_dongle_attr_pairing =
++      __ATTR(pairing, 0644,
++             xone_dongle_pairing_show,
++             xone_dongle_pairing_store);
++
++static struct attribute *xone_dongle_attrs[] = {
++      &xone_dongle_attr_pairing.attr,
++      NULL,
++};
++ATTRIBUTE_GROUPS(xone_dongle);
++
+ static struct xone_dongle_client *
+ xone_dongle_create_client(struct xone_dongle *dongle, u8 *addr)
+ {
+@@ -942,6 +984,12 @@ static int xone_dongle_probe(struct usb_interface *intf,
+ 
+       usb_set_intfdata(intf, dongle);
+ 
++      err = device_add_groups(&intf->dev, xone_dongle_groups);
++      if (err) {
++              xone_dongle_destroy(dongle);
++              return err;
++      }
++
+       /* enable USB remote wakeup and autosuspend */
+       intf->needs_remote_wakeup = true;
+       device_wakeup_enable(&dongle->mt.udev->dev);
+@@ -957,6 +1005,8 @@ static void xone_dongle_disconnect(struct usb_interface 
*intf)
+       struct xone_dongle *dongle = usb_get_intfdata(intf);
+       int err;
+ 
++      device_remove_groups(&intf->dev, xone_dongle_groups);
++
+       /* can fail during USB device removal */
+       err = xone_dongle_power_off_clients(dongle);
+       if (err)
+
+From 810bdccb08cbebd610de76a4da210e02920c535b Mon Sep 17 00:00:00 2001
+From: Daniel Lundqvist <[email protected]>
+Date: Fri, 19 May 2023 16:13:30 +0200
+Subject: [PATCH 2/2] usb: Resume adapter before trying to enable pairing via
+ sysfs
+
+If device is suspended, enabling pairing will fail. Make sure device
+is resumed before trying.
+---
+ transport/dongle.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/transport/dongle.c b/transport/dongle.c
+index 5eb6f9c..243bf02 100644
+--- a/transport/dongle.c
++++ b/transport/dongle.c
+@@ -286,10 +286,16 @@ static ssize_t xone_dongle_pairing_store(struct device 
*dev,
+       if (err)
+               return err;
+ 
++      err = pm_runtime_resume_and_get(dev);
++      if (err)
++              return err;
++
+       err = xone_dongle_toggle_pairing(dongle, enable);
+       if (err)
+               return err;
+ 
++      pm_runtime_put(dev);
++
+       return count;
+ }
+ 

diff --git a/games-util/xone/metadata.xml b/games-util/xone/metadata.xml
new file mode 100644
index 000000000..d2d250099
--- /dev/null
+++ b/games-util/xone/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+  <maintainer type="person">
+    <email>[email protected]</email>
+    <name>Sebastian Engel</name>
+  </maintainer>
+  <upstream>
+    <remote-id type="github">medusalix/xone</remote-id>
+  </upstream>
+  <longdescription>
+    xone is a Linux kernel driver for Xbox One and Xbox Series X|S
+    accessories. It serves as a modern replacement for xpad, aiming to be
+    compatible with Microsoft's Game Input Protocol (GIP).
+  </longdescription>
+</pkgmetadata>

diff --git a/games-util/xone/xone-0.3_p20240425.ebuild 
b/games-util/xone/xone-0.3_p20240425.ebuild
new file mode 100644
index 000000000..69ef59ac7
--- /dev/null
+++ b/games-util/xone/xone-0.3_p20240425.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-mod-r1
+
+COMMIT="29ec3577e52a50f876440c81267f609575c5161e"
+XONE_DRIVER_VERSION="201707-1cd6a87c-623f-4407-a52d-c31be49e925c_e19f60808bdcbfbd3c3df6be3e71ffc52e43261e"
+
+DESCRIPTION="Linux kernel driver for Xbox One and Xbox Series X|S accessories"
+HOMEPAGE="https://github.com/medusalix/xone";
+SRC_URI="
+       mirror+https://github.com/medusalix/xone/archive/${COMMIT}.tar.gz -> 
${P}.tar.gz
+       
http://download.windowsupdate.com/c/msdownload/update/driver/drvs/${XONE_DRIVER_VERSION:0:4}/${XONE_DRIVER_VERSION:4:2}/${XONE_DRIVER_VERSION:7}.cab
+               -> ${PN}-driver-${XONE_DRIVER_VERSION}.cab
+"
+S="${WORKDIR}/${PN}-${COMMIT}"
+
+LICENSE="GPL-2 MS-TOU"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RESTRICT="bindist mirror test"
+
+BDEPEND="app-arch/cabextract"
+
+CONFIG_CHECK="SND CFG80211 INPUT_FF_MEMLESS USB POWER_SUPPLY LEDS_CLASS HID"
+MODULES_KERNEL_MIN=5.11
+PATCHES=(
+       "${FILESDIR}/${PN}-0.3_p20240425-kernel_6.11.patch"
+       "${FILESDIR}/${PN}-0.3_p20240425-sysfs_pairing.patch"
+)
+
+src_unpack() {
+       unpack ${P}.tar.gz
+
+       cabextract -F FW_ACC_00U.bin -d "${S}" 
"${DISTDIR}/${PN}-driver-${XONE_DRIVER_VERSION}.cab" > /dev/null \
+               || die "Failed to unpack driver"
+}
+
+src_prepare() {
+       cp "${FILESDIR}/Makefile" "${S}" || die
+       default
+}
+
+src_compile() {
+       local modlist=(
+               xone-wired=kernel/drivers/input/joystick
+               xone-dongle=kernel/drivers/input/joystick
+               xone-gip=kernel/drivers/input/joystick
+               xone-gip-gamepad=kernel/drivers/input/joystick
+               xone-gip-headset=kernel/drivers/input/joystick
+               xone-gip-chatpad=kernel/drivers/input/joystick
+               xone-gip-madcatz-strat=kernel/drivers/input/joystick
+
+       )
+
+       linux-mod-r1_src_compile
+}
+
+src_install() {
+       linux-mod-r1_src_install
+
+       einfo "Installing module blacklist"
+       insinto /etc/modprobe.d/
+       newins "${S}"/install/modprobe.conf xone-blacklist.conf
+
+       einfo "Installing Microsoft binary firmware"
+       insinto /lib/firmware/
+       newins "${S}"/FW_ACC_00U.bin xow_dongle.bin
+}

Reply via email to