Since development in the medusalix repo appears to have stalled, this package is pinned to the last commit (0.3.r57) with patch to build for current kernel.
aur/xone-dongle-firmware
is now optional.
Git Clone URL: | https://aur.archlinux.org/xone-dkms.git (read-only, click to copy) |
---|---|
Package Base: | xone-dkms |
Description: | Modern Linux driver for Xbox One and Xbox Series X|S controllers |
Upstream URL: | https://github.com/medusalix/xone |
Licenses: | GPL-2.0-or-later |
Submitter: | None |
Maintainer: | xiota |
Last Packager: | xiota |
Votes: | 40 |
Popularity: | 0.24 |
First Submitted: | 2021-07-02 19:25 (UTC) |
Last Updated: | 2025-02-11 21:50 (UTC) |
Since development in the medusalix repo appears to have stalled, this package is pinned to the last commit (0.3.r57) with patch to build for current kernel.
aur/xone-dongle-firmware
is now optional.
If you're on the latest kernel of Arch Linux, it is currently recommended by the Discord Server to use xone-dlundqvist-dkms-git instead of xone-dkms or xone-dkms-git
53.patch
From 28df566c38e0ee500fd5f74643fc35f21a4ff696 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Torleif=20Sk=C3=A5r?=
<16509259+tskaar@users.noreply.github.com>
Date: Tue, 30 Jul 2024 22:35:25 +0200
Subject: [PATCH 1/2] 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;
From d88ea1e8b430d4b96134e43ca1892ac48334578e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Torleif=20Sk=C3=A5r?=
<16509259+tskaar@users.noreply.github.com>
Date: Mon, 30 Sep 2024 21:07:13 +0200
Subject: [PATCH 2/2] fix: build on kernel v6.12
Upstream "Drop of obsoloted vmalloc PCM buffer helper API";
https://lore.kernel.org/all/20240807152725.18948-3-tiwai@suse.de/
Code taken from the driver;
https://lore.kernel.org/all/20240807152725.18948-2-tiwai@suse.de/
---
driver/headset.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/driver/headset.c b/driver/headset.c
index ebee92d..c736351 100644
--- a/driver/headset.c
+++ b/driver/headset.c
@@ -5,6 +5,7 @@
#include <linux/module.h>
#include <linux/hrtimer.h>
+#include <linux/vmalloc.h>
#include <sound/core.h>
#include <sound/initval.h>
#include <sound/pcm.h>
@@ -90,13 +91,34 @@ static int gip_headset_pcm_close(struct snd_pcm_substream *sub)
static int gip_headset_pcm_hw_params(struct snd_pcm_substream *sub,
struct snd_pcm_hw_params *params)
{
- return snd_pcm_lib_alloc_vmalloc_buffer(sub,
- params_buffer_bytes(params));
+ struct snd_pcm_runtime *runtime = sub->runtime;
+ size_t size = params_buffer_bytes(params);
+
+ if (runtime->dma_area) {
+ if (runtime->dma_bytes >= size)
+ return 0; /* Already large enough */
+ vfree(runtime->dma_area);
+ }
+ runtime->dma_area = vzalloc(size);
+ if (!runtime->dma_area)
+ return -ENOMEM;
+ runtime->dma_bytes = size;
+ return 1;
}
static int gip_headset_pcm_hw_free(struct snd_pcm_substream *sub)
{
- return snd_pcm_lib_free_vmalloc_buffer(sub);
+ struct snd_pcm_runtime *runtime = sub->runtime;
+
+ vfree(runtime->dma_area);
+ runtime->dma_area = NULL;
+ return 0;
+}
+
+static struct page *gip_headset_pcm_get_page(struct snd_pcm_substream *sub,
+ unsigned long offset)
+{
+ return vmalloc_to_page(sub->runtime->dma_area + offset);
}
static int gip_headset_pcm_prepare(struct snd_pcm_substream *sub)
@@ -157,7 +179,7 @@ static const struct snd_pcm_ops gip_headset_pcm_ops = {
.prepare = gip_headset_pcm_prepare,
.trigger = gip_headset_pcm_trigger,
.pointer = gip_headset_pcm_pointer,
- .page = snd_pcm_lib_get_vmalloc_page,
+ .page = gip_headset_pcm_get_page,
};
static bool gip_headset_advance_pointer(struct gip_headset_stream *stream,
PKGFILE
# Maintainer: Michał Kopeć <michal@nozomi.space>
# Contributor: Michał Kopeć <michal@nozomi.space>
_pkgname=xone
pkgname=xone-dkms
pkgver=0.3.r57.29ec357
pkgrel=1
pkgdesc='Modern Linux driver for Xbox One and Xbox Series X|S controllers'
arch=('x86_64' 'aarch64')
url='https://github.com/medusalix/xone'
license=('GPL2')
depends=(
'dkms'
'xone-dongle-firmware'
)
makedepends=('git')
conflicts=(
'xone-dkms'
'xow'
)
provides=('xone-dkms')
source=(
https://github.com/medusalix/xone/archive/29ec3577e52a50f876440c81267f609575c5161e.zip
'53.patch'
)
sha256sums=(
'f022dfc7409f37376de945a42b130ed6c4062be4d039bfe58f3d355b0b290d9a'
'c1de0234948654a39b427dc6397225a788c56eb36cd203496a85a4dd57214602'
)
package() {
cd "${srcdir}/${_pkgname}-29ec3577e52a50f876440c81267f609575c5161e"
local src
for src in "${source[@]}"; do
src="${src%%::*}"
src="${src##*/}"
src="${src%.zst}"
[[ $src = *.patch ]] || continue
echo "* Applying patch $src..."
patch -Np1 < "../$src"
done
find . -type f \( -name 'dkms.conf' -o -name '*.c' \) -exec sed -i "s/#VERSION#/$pkgver/" {} +
echo "* Copying module into /usr/src..."
install -dm755 "${pkgdir}/usr/src/${_pkgname}-${pkgver}"
cp -r ${srcdir}/${_pkgname}-29ec3577e52a50f876440c81267f609575c5161e/* "${pkgdir}/usr/src/${_pkgname}-${pkgver}"
echo "* Blacklisting xpad module..."
install -D -m 644 install/modprobe.conf "${pkgdir}/usr/lib/modprobe.d/xone-blacklist.conf"
}
Hello @mkopec ,
I tried to send you an email to your profile email, but seems this domain does not exists. So I'm going to publish here my email:
Hello Michał,
Sorry to bother you. Can you add the patch that supports kernel 6.11.x (https://github.com/medusalix/xone/pull/48)? This patch is already tested by somes. There is a 6.12.x already (https://github.com/medusalix/xone/pull/53, I have not tested yet). Thank you.
The xone author is MISS from 1 May. :-(
Regards.
PATCH for Linux 6.11 (tested by me): https://patch-diff.githubusercontent.com/raw/medusalix/xone/pull/48.patch
It seems like this needs a patch for kernel 6.11.
Same as @xarishark, the dongle can't be activated after install (+reboot). Thanks to him, xone-dkms-git works just fine.
As of kernel 6.9.1 the dongle does not activate after package install (connected the dongle after installing the package and restarting in case it matters). xone-dkms-git works tho so I use that for now. would like to come back to your recipe when the problem is fixed.
A fix needs to be applied in order to compile using kernel 6.8. Upstream commit https://github.com/medusalix/xone/commit/1b4344ab8d9d7891f843dc993b0c5447f46c9889
@maxlefou Thanks for reporting, I've decided to just cherrypick the commit that fixes compilation on kernels v6.3+. Also updated the PKGBUILD:
Pinned Comments
xiota commented on 2025-02-11 09:05 (UTC) (edited on 2025-02-11 21:55 (UTC) by xiota)
Since development in the medusalix repo appears to have stalled, this package is pinned to the last commit (0.3.r57) with patch to build for current kernel.
aur/xone-dongle-firmware
is now optional.