Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xone for openSUSE:Factory checked in at 2026-02-16 13:09:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xone (Old) and /work/SRC/openSUSE:Factory/.xone.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xone" Mon Feb 16 13:09:14 2026 rev:3 rq:1333055 version:0.5.5 Changes: -------- --- /work/SRC/openSUSE:Factory/xone/xone.changes 2026-02-01 22:04:46.366951150 +0100 +++ /work/SRC/openSUSE:Factory/.xone.new.1977/xone.changes 2026-02-16 13:14:44.699560717 +0100 @@ -1,0 +2,6 @@ +Sun Feb 8 07:47:39 UTC 2026 - Aesara Binder <[email protected]> + +- Update to release 0.5.5 + * Add sysfs interface to power off wireless controllers + +------------------------------------------------------------------- Old: ---- v0.5.4.tar.gz New: ---- v0.5.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xone.spec ++++++ --- /var/tmp/diff_new_pack.S3KpcJ/_old 2026-02-16 13:14:45.495593761 +0100 +++ /var/tmp/diff_new_pack.S3KpcJ/_new 2026-02-16 13:14:45.499593927 +0100 @@ -17,7 +17,7 @@ Name: xone -Version: 0.5.4 +Version: 0.5.5 Release: 0 Summary: Driver for Xbox One and Xbox Series X|S controllers License: GPL-2.0-or-later @@ -28,8 +28,9 @@ BuildRequires: %kernel_module_package_buildreqs BuildRequires: systemd-rpm-macros BuildRequires: xz -Requires: xone-dongle-firmware >= 0+git20251208.d8be599 -Requires: xone-kmp +Requires: xone-dongle-firmware +Conflicts: xone-dongle-firmware >= 0.1 +Requires: xone-kmp = %{version} %kernel_module_package -n %name -p %_sourcedir/preamble ++++++ v0.5.4.tar.gz -> v0.5.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xone-0.5.4/transport/dongle.c new/xone-0.5.5/transport/dongle.c --- old/xone-0.5.4/transport/dongle.c 2026-01-26 00:47:09.000000000 +0100 +++ new/xone-0.5.5/transport/dongle.c 2026-02-05 13:22:01.000000000 +0100 @@ -107,6 +107,9 @@ u16 product; }; +static int xone_dongle_power_off_client(struct xone_dongle *dongle, int index); +static int xone_dongle_power_off_clients(struct xone_dongle *dongle); + static void xone_dongle_prep_packet(struct xone_dongle_client *client, struct sk_buff *skb, enum xone_dongle_queue queue) @@ -285,9 +288,8 @@ __func__, err); } -static ssize_t xone_dongle_pairing_show(struct device *dev, - struct device_attribute *attr, - char *buf) +static ssize_t 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); @@ -295,9 +297,8 @@ return sysfs_emit(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) +static ssize_t 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); @@ -315,13 +316,57 @@ return count; } -static struct device_attribute xone_dongle_attr_pairing = - __ATTR(pairing, 0644, - xone_dongle_pairing_show, - xone_dongle_pairing_store); +static ssize_t active_clients_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 sysfs_emit(buf, "%u\n", atomic_read(&dongle->client_count)); +} + +static ssize_t poweroff_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return sysfs_emit(buf, "%s\n%s\n%s\n", + "To power off clients please write:", + "0-15 -> client with given index", + "-1 -> all clients"); +} + +static ssize_t poweroff_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); + int err, val; + + if (count > 3) + return -E2BIG; + + if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY) + return -ENODEV; + + err = kstrtoint(buf, 10, &val); + if (err) + return err; + + if (val == -1) + err = xone_dongle_power_off_clients(dongle); + else + err = xone_dongle_power_off_client(dongle, val); + + return err ? err : count; +} + +DEVICE_ATTR_RW(pairing); +DEVICE_ATTR_RO(active_clients); +DEVICE_ATTR_RW(poweroff); static struct attribute *xone_dongle_attrs[] = { - &xone_dongle_attr_pairing.attr, + &dev_attr_pairing.attr, + &dev_attr_active_clients.attr, + &dev_attr_poweroff.attr, NULL, }; ATTRIBUTE_GROUPS(xone_dongle); @@ -991,32 +1036,35 @@ return 0; } -static int xone_dongle_power_off_clients(struct xone_dongle *dongle) +static int xone_dongle_power_off_client(struct xone_dongle *dongle, int index) { - struct xone_dongle_client *client; - int i; + unsigned long flags = 0; int err = 0; - unsigned long flags; - if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY) - return 0; + if (index < 0 || index >= XONE_DONGLE_MAX_CLIENTS) + return -EINVAL; spin_lock_irqsave(&dongle->clients_lock, flags); - for (i = 0; i < XONE_DONGLE_MAX_CLIENTS; i++) { - client = dongle->clients[i]; - if (!client) - continue; - - err = gip_power_off_adapter(client->adapter); - if (err) - break; - } + if (dongle->clients[index]) + err = gip_power_off_adapter(dongle->clients[index]->adapter); spin_unlock_irqrestore(&dongle->clients_lock, flags); + return err; +} - if (err) - return err; +static int xone_dongle_power_off_clients(struct xone_dongle *dongle) +{ + int err; + + if (dongle->fw_state != XONE_DONGLE_FW_STATE_READY) + return 0; + + for (int i = 0; i < XONE_DONGLE_MAX_CLIENTS; i++){ + err = xone_dongle_power_off_client(dongle, i); + if (err) + return err; + } /* can time out if new client connects */ if (!wait_event_timeout(dongle->disconnect_wait, @@ -1181,8 +1229,6 @@ msleep(1000); return xone_mt76_resume_radio(&dongle->mt); - msleep(500); - return xone_mt76_resume_radio(&dongle->mt); } #if LINUX_VERSION_CODE < KERNEL_VERSION(6, 11, 0)
